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 <alexandre.belloni@free-electrons.com>
This commit is contained in:
Родитель
d6faca40f4
Коммит
cde0fe2acd
|
@ -68,7 +68,7 @@ static irqreturn_t rv8803_handle_irq(int irq, void *dev_id)
|
||||||
do {
|
do {
|
||||||
flags = i2c_smbus_read_byte_data(client, RV8803_FLAG);
|
flags = i2c_smbus_read_byte_data(client, RV8803_FLAG);
|
||||||
try++;
|
try++;
|
||||||
} while ((flags == -ENXIO) && (try < 3));
|
} while (((flags == -ENXIO) || (flags == -EIO)) && (try < 4));
|
||||||
if (flags <= 0) {
|
if (flags <= 0) {
|
||||||
mutex_unlock(&rv8803->flags_lock);
|
mutex_unlock(&rv8803->flags_lock);
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
|
@ -452,7 +452,7 @@ static int rv8803_probe(struct i2c_client *client,
|
||||||
do {
|
do {
|
||||||
flags = i2c_smbus_read_byte_data(client, RV8803_FLAG);
|
flags = i2c_smbus_read_byte_data(client, RV8803_FLAG);
|
||||||
try++;
|
try++;
|
||||||
} while ((flags == -ENXIO) && (try < 3));
|
} while (((flags == -ENXIO) || (flags == -EIO)) && (try < 4));
|
||||||
|
|
||||||
if (flags < 0)
|
if (flags < 0)
|
||||||
return flags;
|
return flags;
|
||||||
|
@ -493,7 +493,7 @@ static int rv8803_probe(struct i2c_client *client,
|
||||||
err = i2c_smbus_write_byte_data(rv8803->client, RV8803_EXT,
|
err = i2c_smbus_write_byte_data(rv8803->client, RV8803_EXT,
|
||||||
RV8803_EXT_WADA);
|
RV8803_EXT_WADA);
|
||||||
try++;
|
try++;
|
||||||
} while ((err == -ENXIO) && (try < 3));
|
} while (((err == -ENXIO) || (flags == -EIO)) && (try < 4));
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче