A few `lcd2s` fixes for `auxdisplay` from Andy Shevchenko.
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEPjU5OPd5QIZ9jqqOGXyLc2htIW0FAmIgrbgACgkQGXyLc2ht IW2v7Q//YHd66M2nFmvfchfIS46x1kXeJo4hlTqJSnAZ2kWzafMMBcFaFb2rtlC6 Uqe5vEJiqCmOGv45p0s5GycIXbDlcrlAIhMu+FOrbYQmyuCT7ysSAOQdfn9j8Pwl Px5pc/UmeZrcz+WFkvyPvkLUjDgoH5dLt0rK7ZBO2MxTJUoFfZVZ/WhEuhT7JyKA aP79AYPbwXbvyC4LXuT1umxeuNOQr2npajeovkZ15geWjZ/z0YLQ2XCWvOrkVG0N XCYFezLaCebKzu2IwwYYv0KLmJNfdaHcbE5MDLbYxU5N6Uwaq+JnD+GshiPHqgGM 60TyrJiNx8Qaib9WBoAUXsGtGH8Bohwuyra89nA8jz6dWN3ko9uE6iJAmSY38Iz7 li4553fwSeRt9GDbNckqYO5jEmpUtIaX/eDgvxU6uOE05HhwzXAw3A2w+oV46tWO R7cr2sl8u7lCtyyuZQ/ETmqC1y2QlmS6W5pht9jCwcon7I+c2UAyG6yd1Mx+fIhh RixY39sV4oNxJmNibHfueKxXuQaiLxGqRS0KLmKEkmXhyPKfczWaPsic0UaW70QB W+WVhUHlQT4qjxWZkMDPaojOdynptP5qs/s94/2/YSLrC0MGkb1qFI0pMMhcCm4e yQnaSdtlNQ/Z2zdFWUFeGDB5bW+Bo1HnHoJkrt+GQdA8+ITf4qo= =yVdT -----END PGP SIGNATURE----- Merge tag 'auxdisplay-for-linus-v5.17-rc7' of git://github.com/ojeda/linux Pull auxdisplay fixes from Miguel Ojeda: "A few lcd2s fixes from Andy Shevchenko" * tag 'auxdisplay-for-linus-v5.17-rc7' of git://github.com/ojeda/linux: auxdisplay: lcd2s: Use proper API to free the instance of charlcd object auxdisplay: lcd2s: Fix memory leak in ->remove() auxdisplay: lcd2s: Fix lcd2s_redefine_char() feature
This commit is contained in:
commit
4d5ae2340d
|
@ -238,7 +238,7 @@ static int lcd2s_redefine_char(struct charlcd *lcd, char *esc)
|
|||
if (buf[1] > 7)
|
||||
return 1;
|
||||
|
||||
i = 0;
|
||||
i = 2;
|
||||
shift = 0;
|
||||
value = 0;
|
||||
while (*esc && i < LCD2S_CHARACTER_SIZE + 2) {
|
||||
|
@ -298,6 +298,10 @@ static int lcd2s_i2c_probe(struct i2c_client *i2c,
|
|||
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA))
|
||||
return -EIO;
|
||||
|
||||
lcd2s = devm_kzalloc(&i2c->dev, sizeof(*lcd2s), GFP_KERNEL);
|
||||
if (!lcd2s)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Test, if the display is responding */
|
||||
err = lcd2s_i2c_smbus_write_byte(i2c, LCD2S_CMD_DISPLAY_OFF);
|
||||
if (err < 0)
|
||||
|
@ -307,12 +311,6 @@ static int lcd2s_i2c_probe(struct i2c_client *i2c,
|
|||
if (!lcd)
|
||||
return -ENOMEM;
|
||||
|
||||
lcd2s = kzalloc(sizeof(struct lcd2s_data), GFP_KERNEL);
|
||||
if (!lcd2s) {
|
||||
err = -ENOMEM;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
lcd->drvdata = lcd2s;
|
||||
lcd2s->i2c = i2c;
|
||||
lcd2s->charlcd = lcd;
|
||||
|
@ -321,26 +319,24 @@ static int lcd2s_i2c_probe(struct i2c_client *i2c,
|
|||
err = device_property_read_u32(&i2c->dev, "display-height-chars",
|
||||
&lcd->height);
|
||||
if (err)
|
||||
goto fail2;
|
||||
goto fail1;
|
||||
|
||||
err = device_property_read_u32(&i2c->dev, "display-width-chars",
|
||||
&lcd->width);
|
||||
if (err)
|
||||
goto fail2;
|
||||
goto fail1;
|
||||
|
||||
lcd->ops = &lcd2s_ops;
|
||||
|
||||
err = charlcd_register(lcd2s->charlcd);
|
||||
if (err)
|
||||
goto fail2;
|
||||
goto fail1;
|
||||
|
||||
i2c_set_clientdata(i2c, lcd2s);
|
||||
return 0;
|
||||
|
||||
fail2:
|
||||
kfree(lcd2s);
|
||||
fail1:
|
||||
kfree(lcd);
|
||||
charlcd_free(lcd2s->charlcd);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -349,7 +345,7 @@ static int lcd2s_i2c_remove(struct i2c_client *i2c)
|
|||
struct lcd2s_data *lcd2s = i2c_get_clientdata(i2c);
|
||||
|
||||
charlcd_unregister(lcd2s->charlcd);
|
||||
kfree(lcd2s->charlcd);
|
||||
charlcd_free(lcd2s->charlcd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue