diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c index 6a7b7a697fb7..6243b66b1b6f 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);