13.09.2020 11:43, Andy Shevchenko пишет: > ... > >> + bool retried = false; > I thought Dmitry wants that to be retry In the comment to v2 you suggested to negate the condition, hence I thought it's YOU who wants it to be retried. The "retried" is a very common form among kernel drivers, so it's good to me. >> u8 buf[2]; >> int ret; > >> - ret = i2c_transfer(client->adapter, xfer, 2); >> - if (ret == 2) { >> - ret = 0; >> - } else { >> - if (ret >= 0) >> - ret = -EIO; >> +retry_read: > >> + ret = i2c_transfer(client->adapter, xfer, ARRAY_SIZE(xfer)); >> + if (ret != ARRAY_SIZE(xfer)) { ...> Also why switch from positive to negative conditional? This will make code less readable because of the goto, and thus, there will be two branches for handling of the returned value instead of one + goto. Hence this part is good to me as-is. >> + if (!retried) { >> + dev_dbg(&client->dev, "i2c retry\n"); >> + msleep(MXT_WAKEUP_TIME); >> + retried = true; >> + goto retry_read; >> + } >> + ret = ret < 0 ? ret : -EIO; >> dev_err(&client->dev, "%s: i2c transfer failed (%d)\n", >> __func__, ret); >> + return ret; >> } >> >> - return ret; >> + return 0; >> }