Commit 995a418a authored by Wang Jun's avatar Wang Jun Committed by Andy Shevchenko
Browse files

auxdisplay: lcd2s: add error handling for i2c transfers



The lcd2s_print() and lcd2s_gotoxy() functions currently ignore the
return value of lcd2s_i2c_master_send(), which can fail. This can lead
to silent data loss or incorrect cursor positioning.

Add proper error checking: if the number of bytes sent does not match
the expected length, return -EIO; otherwise propagate any error code
from the I2C transfer.

Signed-off-by: default avatarWang Jun <1742789905@qq.com>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
parent 398c0c8b
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -99,8 +99,13 @@ static int lcd2s_print(struct charlcd *lcd, int c)
{
	struct lcd2s_data *lcd2s = lcd->drvdata;
	u8 buf[2] = { LCD2S_CMD_WRITE, c };
	int ret;

	lcd2s_i2c_master_send(lcd2s->i2c, buf, sizeof(buf));
	ret = lcd2s_i2c_master_send(lcd2s->i2c, buf, sizeof(buf));
	if (ret < 0)
		return ret;
	if (ret != sizeof(buf))
		return -EIO;
	return 0;
}

@@ -108,9 +113,13 @@ static int lcd2s_gotoxy(struct charlcd *lcd, unsigned int x, unsigned int y)
{
	struct lcd2s_data *lcd2s = lcd->drvdata;
	u8 buf[3] = { LCD2S_CMD_CUR_POS, y + 1, x + 1 };
	int ret;

	lcd2s_i2c_master_send(lcd2s->i2c, buf, sizeof(buf));

	ret = lcd2s_i2c_master_send(lcd2s->i2c, buf, sizeof(buf));
	if (ret < 0)
		return ret;
	if (ret != sizeof(buf))
		return -EIO;
	return 0;
}