drivers/video/backlight/ltv350qv.c: fix a memory leak

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Axel Lin 2011-03-04 17:36:27 -08:00 committed by Linus Torvalds
parent 10ffa96407
commit 9dab51daef

View File

@ -239,11 +239,15 @@ static int __devinit ltv350qv_probe(struct spi_device *spi)
lcd->spi = spi; lcd->spi = spi;
lcd->power = FB_BLANK_POWERDOWN; lcd->power = FB_BLANK_POWERDOWN;
lcd->buffer = kzalloc(8, GFP_KERNEL); lcd->buffer = kzalloc(8, GFP_KERNEL);
if (!lcd->buffer) {
ret = -ENOMEM;
goto out_free_lcd;
}
ld = lcd_device_register("ltv350qv", &spi->dev, lcd, &ltv_ops); ld = lcd_device_register("ltv350qv", &spi->dev, lcd, &ltv_ops);
if (IS_ERR(ld)) { if (IS_ERR(ld)) {
ret = PTR_ERR(ld); ret = PTR_ERR(ld);
goto out_free_lcd; goto out_free_buffer;
} }
lcd->ld = ld; lcd->ld = ld;
@ -257,6 +261,8 @@ static int __devinit ltv350qv_probe(struct spi_device *spi)
out_unregister: out_unregister:
lcd_device_unregister(ld); lcd_device_unregister(ld);
out_free_buffer:
kfree(lcd->buffer);
out_free_lcd: out_free_lcd:
kfree(lcd); kfree(lcd);
return ret; return ret;
@ -268,6 +274,7 @@ static int __devexit ltv350qv_remove(struct spi_device *spi)
ltv350qv_power(lcd, FB_BLANK_POWERDOWN); ltv350qv_power(lcd, FB_BLANK_POWERDOWN);
lcd_device_unregister(lcd->ld); lcd_device_unregister(lcd->ld);
kfree(lcd->buffer);
kfree(lcd); kfree(lcd);
return 0; return 0;