Changes to Freescale I2C driver makes it stop working for us moving from 2.6.22 to 2.6.23.9

michael.firth at bt.com michael.firth at bt.com
Sat Dec 22 01:33:02 EST 2007


We've recently updated the kernel on one of our Freescale MPC834x
systems from 2.6.22 to 2.6.23.9.

Everything seemed to be working fine, until we tried the I2C buses. This
had been working find on 2.6.22, but on 2.6.23.9 it fails on trying to
open the I2C devices.

Looking in to the code, the 'fsl_i2c_probe' function has changed
slightly between the releases. Changing this back to the way it was in
2.6.22 make things work again.

Old code:
	i2c->adap = mpc_ops;
	i2c_set_adapdata(&i2c->adap, i2c);
	i2c->adap.dev.parent = &pdev->dev;
	if ((result = i2c_add_adapter(&i2c->adap)) < 0) {
		printk(KERN_ERR "i2c-mpc - failed to add adapter\n");
		goto fail_add;
	}

New code:
	i2c->adap = mpc_ops;
	i2c->adap.nr = pdev->id;
	i2c_set_adapdata(&i2c->adap, i2c);
	i2c->adap.dev.parent = &pdev->dev;
	if ((result = i2c_add_numbered_adapter(&i2c->adap)) < 0) {
		printk(KERN_ERR "i2c-mpc - failed to add adapter\n");
		goto fail_add;
	}

Presumably the new code puts additional requirements on the
'platform_device' registration - can anyone let me know what I'll need
to add to get this working with the new driver code?

Thanks in advance

Michael


More information about the Linuxppc-embedded mailing list