On Thu Mar 12 16:35:27 2026 -0500, Bradford Love wrote:
> On many embedded platforms i2c responses through USB are not returned
> as quickly, plus constantly banging on the i2c master receive essentially
> deadlocks the driver. Inserting a 3ms delay between i2c receive calls
> and extending the timeout fixes all tested platforms.
> 
> Signed-off-by: Bradford Love <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/dvb-frontends/si2168.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/dvb-frontends/si2168.c 
b/drivers/media/dvb-frontends/si2168.c
index c4bbcd127cac..b973d61c3720 100644
--- a/drivers/media/dvb-frontends/si2168.c
+++ b/drivers/media/dvb-frontends/si2168.c
@@ -40,7 +40,7 @@ static int si2168_cmd_execute(struct i2c_client *client, 
struct si2168_cmd *cmd)
 
        if (cmd->rlen) {
                /* wait cmd execution terminate */
-               #define TIMEOUT 70
+               #define TIMEOUT 140
                timeout = jiffies + msecs_to_jiffies(TIMEOUT);
                while (!time_after(jiffies, timeout)) {
                        ret = i2c_master_recv(client, cmd->args, cmd->rlen);
@@ -54,6 +54,8 @@ static int si2168_cmd_execute(struct i2c_client *client, 
struct si2168_cmd *cmd)
                        /* firmware ready? */
                        if ((cmd->args[0] >> 7) & 0x01)
                                break;
+
+                       usleep_range(2500, 3500);
                }
 
                dev_dbg(&client->dev, "cmd execution took %d ms\n",
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to