From cde0fe2acd7cf6f76e926d4e2ce14439681fd5be Mon Sep 17 00:00:00 2001 From: Alexandre Belloni Date: Tue, 7 Jun 2016 20:44:05 +0200 Subject: [PATCH] rtc: rv8803: broaden workaround The previous workaround may still fail as there are actually 4 retries to be done to ensure the communication succeed. Also, some I2C adapter drivers may return -EIO instead of -ENXIO. Signed-off-by: Alexandre Belloni --- drivers/rtc/rtc-rv8803.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/rtc/rtc-rv8803.c b/drivers/rtc/rtc-rv8803.c index f623038e586e..022ef26bef47 100644 --- a/drivers/rtc/rtc-rv8803.c +++ b/drivers/rtc/rtc-rv8803.c @@ -68,7 +68,7 @@ static irqreturn_t rv8803_handle_irq(int irq, void *dev_id) do { flags = i2c_smbus_read_byte_data(client, RV8803_FLAG); try++; - } while ((flags == -ENXIO) && (try < 3)); + } while (((flags == -ENXIO) || (flags == -EIO)) && (try < 4)); if (flags <= 0) { mutex_unlock(&rv8803->flags_lock); return IRQ_NONE; @@ -452,7 +452,7 @@ static int rv8803_probe(struct i2c_client *client, do { flags = i2c_smbus_read_byte_data(client, RV8803_FLAG); try++; - } while ((flags == -ENXIO) && (try < 3)); + } while (((flags == -ENXIO) || (flags == -EIO)) && (try < 4)); if (flags < 0) return flags; @@ -493,7 +493,7 @@ static int rv8803_probe(struct i2c_client *client, err = i2c_smbus_write_byte_data(rv8803->client, RV8803_EXT, RV8803_EXT_WADA); try++; - } while ((err == -ENXIO) && (try < 3)); + } while (((err == -ENXIO) || (flags == -EIO)) && (try < 4)); if (err) return err; -- 2.34.1