[alsa-devel] [PATCH] ASoC: wm8804: fix error handling code
kzalloc() returns NULL on error, not ERR_PTR(). Also wm8804_modinit() didn't called i2c_del_driver() if spi_register_driver() failed.
Signed-off-by: Vasiliy Kulikov segooon@gmail.com --- Compile tested.
sound/soc/codecs/wm8804.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/wm8804.c b/sound/soc/codecs/wm8804.c index 642b07c..ff4dffd 100644 --- a/sound/soc/codecs/wm8804.c +++ b/sound/soc/codecs/wm8804.c @@ -720,8 +720,8 @@ static int __devinit wm8804_spi_probe(struct spi_device *spi) int ret;
wm8804 = kzalloc(sizeof *wm8804, GFP_KERNEL); - if (IS_ERR(wm8804)) - return PTR_ERR(wm8804); + if (!wm8804) + return -ENOMEM;
wm8804->control_type = SND_SOC_SPI; spi_set_drvdata(spi, wm8804); @@ -758,8 +758,8 @@ static __devinit int wm8804_i2c_probe(struct i2c_client *i2c, int ret;
wm8804 = kzalloc(sizeof *wm8804, GFP_KERNEL); - if (IS_ERR(wm8804)) - return PTR_ERR(wm8804); + if (!wm8804) + return -ENOMEM;
wm8804->control_type = SND_SOC_I2C; i2c_set_clientdata(i2c, wm8804); @@ -804,6 +804,7 @@ static int __init wm8804_modinit(void) if (ret) { printk(KERN_ERR "Failed to register wm8804 I2C driver: %d\n", ret); + goto err; } #endif #if defined(CONFIG_SPI_MASTER) @@ -811,7 +812,13 @@ static int __init wm8804_modinit(void) if (ret != 0) { printk(KERN_ERR "Failed to register wm8804 SPI driver: %d\n", ret); + goto err_i2c; } +err_i2c: +#endif +#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) + i2c_del_driver(&wm8804_i2c_driver); +err: #endif return ret; }
On Sun, Oct 10, 2010 at 09:29:04PM +0400, Vasiliy Kulikov wrote:
kzalloc() returns NULL on error, not ERR_PTR(). Also wm8804_modinit() didn't called i2c_del_driver() if spi_register_driver() failed.
Signed-off-by: Vasiliy Kulikov segooon@gmail.com
Please try to follow Documentation/SubmittingPatches - in particular, you should always split unrelated changes into separate patches. In this case your I2C and kzalloc() changes have nothing to do with each other and so should be in separate patches, and the kzalloc() changes were already applied from a patch by someone else. For the registration changes...
@@ -804,6 +804,7 @@ static int __init wm8804_modinit(void) if (ret) { printk(KERN_ERR "Failed to register wm8804 I2C driver: %d\n", ret);
}goto err;
#endif #if defined(CONFIG_SPI_MASTER)
...it's not clear to me that this change is an improvement - it'll make the driver more fragile in the face of errors, I don't see a benefit in refusing to register the variant for one bus if the other fails?
participants (2)
-
Mark Brown
-
Vasiliy Kulikov