mbox series

[0/3] i2c: qcom-geni: Make it possible to run i2cdetect

Message ID 20220717035027.2135106-1-bjorn.andersson@linaro.org
Headers show
Series i2c: qcom-geni: Make it possible to run i2cdetect | expand

Message

Bjorn Andersson July 17, 2022, 3:50 a.m. UTC
Attempting to run i2cdetect shows that error handling in the GENI I2C driver
could be better.

The first issue is that errors aren't returned from the driver. Following this
is an issue that if a timeout occurs the current operation is aborted, but the
abort code races with the isr so the abort times out as well. Lastly when this
happens, the driver is quite noisy, making it impossible to run i2cdetect on
the serial console.

With this series in place, I was able to run i2cdetect on the db845c and two
sc8180x devices - and get useful output.

Bjorn Andersson (3):
  i2c: qcom-geni: Use the correct return value
  i2c: qcom-geni: Propagate GENI_ABORT_DONE to geni_i2c_abort_xfer()
  i2c: qcom-geni: Silence NACK and GENI_TIMEOUT

 drivers/i2c/busses/i2c-qcom-geni.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

Comments

Vinod Koul July 18, 2022, 5:37 a.m. UTC | #1
On 16-07-22, 20:50, Bjorn Andersson wrote:
> Turn NACK and GENI_TIMEOUT into debug prints to silence the kernel log
> when running things such as i2cdetect to scan the bus.

Reviewed-by: Vinod Koul <vkoul@kernel.org>

> 
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
>  drivers/i2c/busses/i2c-qcom-geni.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
> index e212e7ae7ad2..6ac179a373ff 100644
> --- a/drivers/i2c/busses/i2c-qcom-geni.c
> +++ b/drivers/i2c/busses/i2c-qcom-geni.c
> @@ -208,6 +208,10 @@ static void geni_i2c_err(struct geni_i2c_dev *gi2c, int err)
>  	case GENI_ABORT_DONE:
>  		gi2c->abort_done = true;
>  		break;
> +	case NACK:
> +	case GENI_TIMEOUT:
> +		dev_dbg(gi2c->se.dev, "%s\n", gi2c_log[err].msg);
> +		break;
>  	default:
>  		dev_err(gi2c->se.dev, "%s\n", gi2c_log[err].msg);
>  		geni_i2c_err_misc(gi2c);
> -- 
> 2.35.1