[alsa-devel] [PATCH] ASoC: Fix cs4270 error path
Timur Tabi
timur at freescale.com
Mon Sep 22 22:35:17 CEST 2008
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 at 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.
--
Timur Tabi
Linux kernel developer at Freescale
More information about the Alsa-devel
mailing list