aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r--drivers/i2c/i2c-core.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index f43b4e11647a..a0768d6dffc2 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -626,6 +626,15 @@ static int i2c_device_probe(struct device *dev)
626 if (!client) 626 if (!client)
627 return 0; 627 return 0;
628 628
629 if (!client->irq && dev->of_node) {
630 int irq = of_irq_get(dev->of_node, 0);
631
632 if (irq < 0)
633 return irq;
634
635 client->irq = irq;
636 }
637
629 driver = to_i2c_driver(dev->driver); 638 driver = to_i2c_driver(dev->driver);
630 if (!driver->probe || !driver->id_table) 639 if (!driver->probe || !driver->id_table)
631 return -ENODEV; 640 return -ENODEV;
@@ -1407,7 +1416,6 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)
1407 continue; 1416 continue;
1408 } 1417 }
1409 1418
1410 info.irq = irq_of_parse_and_map(node, 0);
1411 info.of_node = of_node_get(node); 1419 info.of_node = of_node_get(node);
1412 info.archdata = &dev_ad; 1420 info.archdata = &dev_ad;
1413 1421
@@ -1421,7 +1429,6 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)
1421 dev_err(&adap->dev, "of_i2c: Failure registering %s\n", 1429 dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
1422 node->full_name); 1430 node->full_name);
1423 of_node_put(node); 1431 of_node_put(node);
1424 irq_dispose_mapping(info.irq);
1425 continue; 1432 continue;
1426 } 1433 }
1427 } 1434 }