From: Wenyuan Li <2063309626@qq.com> Date: Wed, 1 Apr 2026 05:09:31 +0000 (+0800) Subject: mfd: tps65910: Add error handling for dummy I2C transfer in probe X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f5f40b828179361862cac6c9d3c0e975e573dc3e;p=thirdparty%2Fkernel%2Flinux.git mfd: tps65910: Add error handling for dummy I2C transfer in probe In tps65910_i2c_probe(), a dummy I2C transfer is performed to work around silicon erratum SWCZ010. However, the return value of i2c_master_send() is not checked. If this dummy transfer fails, the driver continues execution without detecting the error. This may lead to subsequent I2C operations also failing, but the driver would incorrectly report success. Add proper return value checking for the dummy I2C transfer. If the transfer fails, log the error and return an appropriate error code to the caller. Signed-off-by: Wenyuan Li <2063309626@qq.com> Link: https://patch.msgid.link/tencent_01102156392EC89EDF2CA22A7C8B4ABB2509@qq.com Signed-off-by: Lee Jones --- diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c index 6a7b7a697fb78..6243b66b1b6f2 100644 --- a/drivers/mfd/tps65910.c +++ b/drivers/mfd/tps65910.c @@ -21,6 +21,9 @@ #include #include +/* Dummy I2C transfer length for SWCZ010 workaround */ +#define TPS65910_DUMMY_XFER_LEN 1 + static const struct resource rtc_resources[] = { { .start = TPS65910_IRQ_RTC_ALARM, @@ -472,7 +475,18 @@ static int tps65910_i2c_probe(struct i2c_client *i2c) * first I2C transfer. So issue a dummy transfer before the first * real transfer. */ - i2c_master_send(i2c, "", 1); + ret = i2c_master_send(i2c, "", TPS65910_DUMMY_XFER_LEN); + if (ret != TPS65910_DUMMY_XFER_LEN) { + int err; + + if (ret < 0) + err = ret; + else + err = -EIO; + + return dev_err_probe(&i2c->dev, err, "dummy transfer failed\n"); + } + tps65910->regmap = devm_regmap_init_i2c(i2c, &tps65910_regmap_config); if (IS_ERR(tps65910->regmap)) { ret = PTR_ERR(tps65910->regmap);