|
@@ -626,6 +626,15 @@ static int i2c_device_probe(struct device *dev)
|
|
|
if (!client)
|
|
|
return 0;
|
|
|
|
|
|
+ if (!client->irq && dev->of_node) {
|
|
|
+ int irq = of_irq_get(dev->of_node, 0);
|
|
|
+
|
|
|
+ if (irq < 0)
|
|
|
+ return irq;
|
|
|
+
|
|
|
+ client->irq = irq;
|
|
|
+ }
|
|
|
+
|
|
|
driver = to_i2c_driver(dev->driver);
|
|
|
if (!driver->probe || !driver->id_table)
|
|
|
return -ENODEV;
|
|
@@ -1407,7 +1416,6 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- info.irq = irq_of_parse_and_map(node, 0);
|
|
|
info.of_node = of_node_get(node);
|
|
|
info.archdata = &dev_ad;
|
|
|
|
|
@@ -1421,7 +1429,6 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)
|
|
|
dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
|
|
|
node->full_name);
|
|
|
of_node_put(node);
|
|
|
- irq_dispose_mapping(info.irq);
|
|
|
continue;
|
|
|
}
|
|
|
}
|