diff options
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/busses/i2c-cpm.c | 6 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-ibm_iic.c | 4 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-mpc.c | 2 | ||||
-rw-r--r-- | drivers/i2c/i2c-core.c | 9 |
4 files changed, 12 insertions, 9 deletions
diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c index b02b4533651d..e591de1bc704 100644 --- a/drivers/i2c/busses/i2c-cpm.c +++ b/drivers/i2c/busses/i2c-cpm.c | |||
@@ -652,6 +652,7 @@ static int __devinit cpm_i2c_probe(struct of_device *ofdev, | |||
652 | cpm->adap = cpm_ops; | 652 | cpm->adap = cpm_ops; |
653 | i2c_set_adapdata(&cpm->adap, cpm); | 653 | i2c_set_adapdata(&cpm->adap, cpm); |
654 | cpm->adap.dev.parent = &ofdev->dev; | 654 | cpm->adap.dev.parent = &ofdev->dev; |
655 | cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node); | ||
655 | 656 | ||
656 | result = cpm_i2c_setup(cpm); | 657 | result = cpm_i2c_setup(cpm); |
657 | if (result) { | 658 | if (result) { |
@@ -676,11 +677,6 @@ static int __devinit cpm_i2c_probe(struct of_device *ofdev, | |||
676 | dev_dbg(&ofdev->dev, "hw routines for %s registered.\n", | 677 | dev_dbg(&ofdev->dev, "hw routines for %s registered.\n", |
677 | cpm->adap.name); | 678 | cpm->adap.name); |
678 | 679 | ||
679 | /* | ||
680 | * register OF I2C devices | ||
681 | */ | ||
682 | of_register_i2c_devices(&cpm->adap, ofdev->dev.of_node); | ||
683 | |||
684 | return 0; | 680 | return 0; |
685 | out_shut: | 681 | out_shut: |
686 | cpm_i2c_shutdown(cpm); | 682 | cpm_i2c_shutdown(cpm); |
diff --git a/drivers/i2c/busses/i2c-ibm_iic.c b/drivers/i2c/busses/i2c-ibm_iic.c index bf344135647a..1168d61418c9 100644 --- a/drivers/i2c/busses/i2c-ibm_iic.c +++ b/drivers/i2c/busses/i2c-ibm_iic.c | |||
@@ -745,6 +745,7 @@ static int __devinit iic_probe(struct of_device *ofdev, | |||
745 | /* Register it with i2c layer */ | 745 | /* Register it with i2c layer */ |
746 | adap = &dev->adap; | 746 | adap = &dev->adap; |
747 | adap->dev.parent = &ofdev->dev; | 747 | adap->dev.parent = &ofdev->dev; |
748 | adap->dev.of_node = of_node_get(np); | ||
748 | strlcpy(adap->name, "IBM IIC", sizeof(adap->name)); | 749 | strlcpy(adap->name, "IBM IIC", sizeof(adap->name)); |
749 | i2c_set_adapdata(adap, dev); | 750 | i2c_set_adapdata(adap, dev); |
750 | adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; | 751 | adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; |
@@ -760,9 +761,6 @@ static int __devinit iic_probe(struct of_device *ofdev, | |||
760 | dev_info(&ofdev->dev, "using %s mode\n", | 761 | dev_info(&ofdev->dev, "using %s mode\n", |
761 | dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); | 762 | dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); |
762 | 763 | ||
763 | /* Now register all the child nodes */ | ||
764 | of_register_i2c_devices(adap, np); | ||
765 | |||
766 | return 0; | 764 | return 0; |
767 | 765 | ||
768 | error_cleanup: | 766 | error_cleanup: |
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c index 54247d475fc3..6545d1c99b61 100644 --- a/drivers/i2c/busses/i2c-mpc.c +++ b/drivers/i2c/busses/i2c-mpc.c | |||
@@ -625,13 +625,13 @@ static int __devinit fsl_i2c_probe(struct of_device *op, | |||
625 | i2c->adap = mpc_ops; | 625 | i2c->adap = mpc_ops; |
626 | i2c_set_adapdata(&i2c->adap, i2c); | 626 | i2c_set_adapdata(&i2c->adap, i2c); |
627 | i2c->adap.dev.parent = &op->dev; | 627 | i2c->adap.dev.parent = &op->dev; |
628 | i2c->adap.dev.of_node = of_node_get(op->dev.of_node); | ||
628 | 629 | ||
629 | result = i2c_add_adapter(&i2c->adap); | 630 | result = i2c_add_adapter(&i2c->adap); |
630 | if (result < 0) { | 631 | if (result < 0) { |
631 | dev_err(i2c->dev, "failed to add adapter\n"); | 632 | dev_err(i2c->dev, "failed to add adapter\n"); |
632 | goto fail_add; | 633 | goto fail_add; |
633 | } | 634 | } |
634 | of_register_i2c_devices(&i2c->adap, op->dev.of_node); | ||
635 | 635 | ||
636 | return result; | 636 | return result; |
637 | 637 | ||
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 0815e10da7c6..df937df845eb 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
@@ -30,6 +30,8 @@ | |||
30 | #include <linux/init.h> | 30 | #include <linux/init.h> |
31 | #include <linux/idr.h> | 31 | #include <linux/idr.h> |
32 | #include <linux/mutex.h> | 32 | #include <linux/mutex.h> |
33 | #include <linux/of_i2c.h> | ||
34 | #include <linux/of_device.h> | ||
33 | #include <linux/completion.h> | 35 | #include <linux/completion.h> |
34 | #include <linux/hardirq.h> | 36 | #include <linux/hardirq.h> |
35 | #include <linux/irqflags.h> | 37 | #include <linux/irqflags.h> |
@@ -70,6 +72,10 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv) | |||
70 | if (!client) | 72 | if (!client) |
71 | return 0; | 73 | return 0; |
72 | 74 | ||
75 | /* Attempt an OF style match */ | ||
76 | if (of_driver_match_device(dev, drv)) | ||
77 | return 1; | ||
78 | |||
73 | driver = to_i2c_driver(drv); | 79 | driver = to_i2c_driver(drv); |
74 | /* match on an id table if there is one */ | 80 | /* match on an id table if there is one */ |
75 | if (driver->id_table) | 81 | if (driver->id_table) |
@@ -790,6 +796,9 @@ static int i2c_register_adapter(struct i2c_adapter *adap) | |||
790 | if (adap->nr < __i2c_first_dynamic_bus_num) | 796 | if (adap->nr < __i2c_first_dynamic_bus_num) |
791 | i2c_scan_static_board_info(adap); | 797 | i2c_scan_static_board_info(adap); |
792 | 798 | ||
799 | /* Register devices from the device tree */ | ||
800 | of_i2c_register_devices(adap); | ||
801 | |||
793 | /* Notify drivers */ | 802 | /* Notify drivers */ |
794 | mutex_lock(&core_lock); | 803 | mutex_lock(&core_lock); |
795 | dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap, | 804 | dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap, |