[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