[Letux-kernel] Pyra display driver once again broken in v5.2-rc1
Andreas Kemnade
andreas at kemnade.info
Wed May 29 20:04:01 CEST 2019
On Wed, 29 May 2019 19:51:21 +0200
Andreas Kemnade <andreas at kemnade.info> wrote:
> On Wed, 29 May 2019 02:12:27 -0700
> Tony Lindgren <tony at atomide.com> wrote:
>
> > Hi,
> >
> > * H. Nikolaus Schaller <hns at goldelico.com> [190529 08:57]:
> > > > [ 7.524125] pca953x 4-0022: failed writing register
> > > > [ 7.529444] pca953x: probe of 4-0022 failed with error -22
> >
> > I saw something similar with a BBB cape (early Baylibre
> > ACME cape) and it was device_pca95xx_init() somehow trying to
> > write to a read-only register causing an error.
> >
> > I did not debug further and I do not have it handy, and I
> > could not easily figure out what caused the regression..
> > But maybe take a look and see if commenting out the register
> > write device_pca95xx_init() helps.
> >
>
>
> root at letux:/sys/bus/i2c/drivers/pca953x# echo 4-0022 >bind
> [ 176.917013] pca953x 4-0022: writing reg 02 -> 88 = 00
> -> apparently inversion register
>
> [ 176.922460] pca953x 4-0022: failed writing register: 02
> [ 176.929805] pca953x: probe of 4-0022 failed with error -22
> -bash: echo: write error: No such device
> root at letux:/sys/bus/i2c/drivers/pca953x# i2cset -y 4 0x22 0x88 0
> root at letux:/sys/bus/i2c/drivers/pca953x# i2cset -y 4 0x22 0x2 0
> root at letux:/sys/bus/i2c/drivers/pca953x#
>
> debug output by this patch:
> diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
> index b7ef33f63392..161c5d5ee8c8 100644
> --- a/drivers/gpio/gpio-pca953x.c
> +++ b/drivers/gpio/gpio-pca953x.c
> @@ -338,10 +338,11 @@ static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val)
> {
> u8 regaddr = pca953x_recalc_addr(chip, reg, 0, true, true);
> int ret;
> -
> +
> + dev_info(&chip->client->dev, "writing reg %02x -> %02x = %02x", reg, regaddr, *val);
> ret = regmap_bulk_write(chip->regmap, regaddr, val, NBANK(chip));
> if (ret < 0) {
> - dev_err(&chip->client->dev, "failed writing register\n");
> + dev_err(&chip->client->dev, "failed writing register: %02x\n", reg);
> return ret;
> }
>
> perhaps this rings a bell for someone.
>
ok, commented out the invert access in the init:
@@ -865,7 +866,7 @@ static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert)
else
memset(val, 0, NBANK(chip));
- ret = pca953x_write_regs(chip, chip->regs->invert, val);
+// ret = pca953x_write_regs(chip, chip->regs->invert, val);
out:
return ret;
}
and it probes successfully. Maybe we should just ignore that error
there.
Regards,
Andreas
More information about the Letux-kernel
mailing list