pca953x: Probing too early
Fabio Estevam
festevam at gmail.com
Tue Aug 20 17:50:04 PDT 2024
On Tue, Aug 20, 2024 at 8:18 PM Fabio Estevam <festevam at gmail.com> wrote:
> The pca953x driver tries to write to the i2c-2 bus before i2c-2 is registered.
>
> This is the point I don't understand: how can the pca953x driver get
> probed before its I2C bus parent?
Disconsider what I wrote above.
I'm trying to recover from the arbitration lost like this:
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -491,6 +491,8 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct
*i2c_imx, int for_busy, bool a
/* check for arbitration lost */
if (temp & I2SR_IAL) {
i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
+ pr_err("******* Arbitration lost\n");
+ i2c_recover_bus(&i2c_imx->adapter);
return -EAGAIN;
}
@@ -1487,6 +1489,7 @@ static int i2c_imx_probe(struct platform_device *pdev)
i2c_imx->adapter.nr = pdev->id;
i2c_imx->adapter.dev.of_node = pdev->dev.of_node;
i2c_imx->base = base;
+ i2c_imx->adapter.retries = 5;
ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev));
but still get pca953x probe failure:
[ 1.756761] pca953x 2-0020: supply vcc not found, using dummy regulator
[ 1.766564] pca953x 2-0020: using no AI
[ 1.775333] ******* Arbitration lost
[ 1.783811] ******* Arbitration lost
[ 1.793701] ******* Arbitration lost
[ 1.797455] ******* Arbitration lost
[ 1.801209] ******* Arbitration lost
[ 1.804964] ******* Arbitration lost
[ 1.808562] pca953x 2-0020: failed writing register
[ 1.813602] pca953x: probe of 2-0020 failed with error -11
[ 1.819222] i2c i2c-2: IMX I2C adapter registered
More information about the linux-arm-kernel
mailing list