]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
i2c: mediatek: fix WRRD for SoCs without auto_restart option
authorRoman Vivchar <rva333@protonmail.com>
Thu, 9 Jul 2026 13:31:29 +0000 (16:31 +0300)
committerAndi Shyti <andi.shyti@kernel.org>
Tue, 14 Jul 2026 22:21:51 +0000 (00:21 +0200)
MediaTek mt65xx family SoCs have no auto restart, however, they still
support the WRRD mode in the hardware. Because auto_restart is set to 0,
the WRRD mode will be never enabled, leading to read errors.

Fix this by removing auto_restart check from the WRRD enable path.

Fixes: b49218365280 ("i2c: mediatek: fix potential incorrect use of I2C_MASTER_WRRD")
Signed-off-by: Roman Vivchar <rva333@protonmail.com>
Cc: <stable@vger.kernel.org> # v6.18+
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/20260709-6572-6595-i2c-v2-1-b2fb8510d1d3@protonmail.com
drivers/i2c/busses/i2c-mt65xx.c

index 126040ca05f1470f0e003d25f4c6d65a3a52790f..307925fb78e361d469357ceb21e6fce449f4f88b 100644 (file)
@@ -1258,7 +1258,7 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap,
        i2c->auto_restart = i2c->dev_comp->auto_restart;
 
        /* checking if we can skip restart and optimize using WRRD mode */
-       if (i2c->auto_restart && num == 2) {
+       if (num == 2) {
                if (!(msgs[0].flags & I2C_M_RD) && (msgs[1].flags & I2C_M_RD) &&
                    msgs[0].addr == msgs[1].addr) {
                        i2c->auto_restart = 0;