diff options
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r-- | drivers/i2c/i2c-core.c | 11 |
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 | } |