Sorry I didn't get to this earlier. I just fell off my radar.
On Sun, Aug 31, 2008 at 7:42 AM, Jean Delvare khali@linux-fr.org wrote:
The error path in cs4270_probe/cs4270_remove is pretty broken:
- If cs4270_probe fails, codec is leaked.
- If snd_soc_register_card fails, cs4270_i2c_driver stays registered.
So far, so good.
- If I2C support is enabled but no I2C device is found, i2c_del_driver
is never called (neither in cs4270_probe nor in cs4270_remove.)
Hmm... The only time that can happen is if the device tree is wrong or the hardware is broken. This means that cs4270_i2c_probe() will return an error. What does i2c_add_driver() return in that case? If it still returns 0, then control_data will be NULL, but with your patch, i2c_del_driver() will still be called.
Also, I think there's a bug in cs4270_i2c_probe(), where it will call i2c_detach_driver() if it fails. It shouldn't do that. This is also gated on codec->control_data, so it's a related bug.
Lastly, you may need to rebase the patch, since the code's changed.