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,  	cpm->adap = cpm_ops;  	i2c_set_adapdata(&cpm->adap, cpm);  	cpm->adap.dev.parent = &ofdev->dev; +	cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node);  	result = cpm_i2c_setup(cpm);  	if (result) { @@ -676,11 +677,6 @@ static int __devinit cpm_i2c_probe(struct of_device *ofdev,  	dev_dbg(&ofdev->dev, "hw routines for %s registered.\n",  		cpm->adap.name); -	/* -	 * register OF I2C devices -	 */ -	of_register_i2c_devices(&cpm->adap, ofdev->dev.of_node); -  	return 0;  out_shut:  	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,  	/* Register it with i2c layer */  	adap = &dev->adap;  	adap->dev.parent = &ofdev->dev; +	adap->dev.of_node = of_node_get(np);  	strlcpy(adap->name, "IBM IIC", sizeof(adap->name));  	i2c_set_adapdata(adap, dev);  	adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; @@ -760,9 +761,6 @@ static int __devinit iic_probe(struct of_device *ofdev,  	dev_info(&ofdev->dev, "using %s mode\n",  		 dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); -	/* Now register all the child nodes */ -	of_register_i2c_devices(adap, np); -  	return 0;  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,  	i2c->adap = mpc_ops;  	i2c_set_adapdata(&i2c->adap, i2c);  	i2c->adap.dev.parent = &op->dev; +	i2c->adap.dev.of_node = of_node_get(op->dev.of_node);  	result = i2c_add_adapter(&i2c->adap);  	if (result < 0) {  		dev_err(i2c->dev, "failed to add adapter\n");  		goto fail_add;  	} -	of_register_i2c_devices(&i2c->adap, op->dev.of_node);  	return result; 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 @@  #include <linux/init.h>  #include <linux/idr.h>  #include <linux/mutex.h> +#include <linux/of_i2c.h> +#include <linux/of_device.h>  #include <linux/completion.h>  #include <linux/hardirq.h>  #include <linux/irqflags.h> @@ -70,6 +72,10 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)  	if (!client)  		return 0; +	/* Attempt an OF style match */ +	if (of_driver_match_device(dev, drv)) +		return 1; +  	driver = to_i2c_driver(drv);  	/* match on an id table if there is one */  	if (driver->id_table) @@ -790,6 +796,9 @@ static int i2c_register_adapter(struct i2c_adapter *adap)  	if (adap->nr < __i2c_first_dynamic_bus_num)  		i2c_scan_static_board_info(adap); +	/* Register devices from the device tree */ +	of_i2c_register_devices(adap); +  	/* Notify drivers */  	mutex_lock(&core_lock);  	dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap,  | 
