[PATCH] i2c: uniphier-f: correct error recovery
Kunihiko Hayashi
hayashi.kunihiko at socionext.com
Mon Dec 26 01:49:00 CET 2022
On 2022/12/09 20:38, Dai Okamura wrote:
> The uniphier i2c block can recognize some handshake errors.
> But driver handles all error detections as no error if no timeout.
> So this makes unrecoverable state.
>
> This replaces the return values with the right ones to tell the i2c
> framework the errors:
> - EDEADLK for arbitration lost error
> - ENODATA for no answer error
>
> Signed-off-by: Dai Okamura <okamura.dai at socionext.com>
> ---
> drivers/i2c/i2c-uniphier-f.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/i2c-uniphier-f.c b/drivers/i2c/i2c-uniphier-f.c
> index 9d6f1688cb..3dcd382469 100644
> --- a/drivers/i2c/i2c-uniphier-f.c
> +++ b/drivers/i2c/i2c-uniphier-f.c
> @@ -130,12 +130,12 @@ static int wait_for_irq(struct uniphier_fi2c_priv
> *priv, u32 flags,
> if (irq & I2C_INT_AL) {
> dev_dbg(priv->dev, "error: arbitration lost\n");
> *stop = false;
> - return ret;
> + return -EDEADLK;
> }
>
> if (irq & I2C_INT_NA) {
> dev_dbg(priv->dev, "error: no answer\n");
> - return ret;
> + return -ENODATA;
> }
>
> return 0;
I understand this "ret" comes from readl_poll_timeout() and is zero,
so the error can't be detected. It should be fixed.
Fixes: 238bd0b8ce52 ("i2c: UniPhier: add driver for UniPhier FIFO-builtin i2c controller")
and,
Acked-by: Kunihiko Hayashi <hayashi.kunihiko at socionext.com>
Thank you,
---
Best Regards
Kunihiko Hayashi
More information about the U-Boot
mailing list