[PATCH V2] auxdisplay: lcd2s: add error handling for i2c transfers

Wang Jun posted 1 patch 3 weeks, 5 days ago
There is a newer version of this series
drivers/auxdisplay/lcd2s.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
[PATCH V2] auxdisplay: lcd2s: add error handling for i2c transfers
Posted by Wang Jun 3 weeks, 5 days ago
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: Wang Jun <1742789905@qq.com>
---
 drivers/auxdisplay/lcd2s.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/auxdisplay/lcd2s.c b/drivers/auxdisplay/lcd2s.c
index defb0573e43c..9ae5f48cbd6c 100644
--- a/drivers/auxdisplay/lcd2s.c
+++ b/drivers/auxdisplay/lcd2s.c
@@ -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 };
-
-	lcd2s_i2c_master_send(lcd2s->i2c, buf, sizeof(buf));
-
+	int ret;
+
+	ret = lcd2s_i2c_master_send(lcd2s->i2c, buf, sizeof(buf));
+	if (ret < 0)
+		return ret;
+	if (ret != sizeof(buf))
+		return -EIO;
 	return 0;
 }
 
-- 
2.43.0
Re: [PATCH V2] auxdisplay: lcd2s: add error handling for i2c transfers
Posted by Andy Shevchenko 3 weeks, 5 days ago
On Thu, Mar 12, 2026 at 09:25:02PM +0800, Wang Jun wrote:
> 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.

Why?
Where is the changelog if it's a v2?

-- 
With Best Regards,
Andy Shevchenko
[PATCH v3] auxdisplay: lcd2s: add error handling for i2c transfers
Posted by Wang Jun 3 weeks, 4 days ago
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: Wang Jun <1742789905@qq.com>
---
v3:
  - Added changelog for v2 (pointed out by Andy)
  - No code changes from v2

v2:
  - Simplified error handling (removed redundant else) per Andy's suggestion

 drivers/auxdisplay/lcd2s.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/auxdisplay/lcd2s.c b/drivers/auxdisplay/lcd2s.c
index defb0573e43c..c7a962728752 100644
--- a/drivers/auxdisplay/lcd2s.c
+++ b/drivers/auxdisplay/lcd2s.c
@@ -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;
 }
 
-- 
2.43.0
Re: [PATCH v3] auxdisplay: lcd2s: add error handling for i2c transfers
Posted by Andy Shevchenko 3 weeks, 4 days ago
On Thu, Mar 12, 2026 at 10:51:36PM +0800, Wang Jun wrote:
> 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.

Pushed to my review and testing queue, thanks!

-- 
With Best Regards,
Andy Shevchenko