[PATCH] gpio/generic: initialize the shadow of direction register
Lothar Waßmann
LW at KARO-electronics.de
Wed May 16 02:53:42 EDT 2012
Hi,
Shawn Guo writes:
> On Tue, May 15, 2012 at 09:17:50AM +0200, Lothar Waßmann wrote:
> > This will blow up in your face when calling bgpio_init() without any
> > direction register (which is well supported by the generic driver).
> >
> > You need to do this in the platform specific driver that uses the
> > generic driver. See gpio-mxc.c for reference:
> > | err = bgpio_init(&port->bgc, &pdev->dev, 4,
> > | port->base + GPIO_PSR,
> > | port->base + GPIO_DR, NULL,
> > | port->base + GPIO_GDIR, NULL, false);
> > | if (err)
> > | goto out_iounmap;
> > |
> > | port->bgc.gc.to_irq = mxc_gpio_to_irq;
> > | port->bgc.gc.base = pdev->id * 32;
> > | port->bgc.dir = port->bgc.read_reg(port->bgc.reg_dir);
> > | port->bgc.data = port->bgc.read_reg(port->bgc.reg_set);
> >
> Ah, thanks for the info. I did not know that we ran into the issue
> on gpio-mxc and had it fixed there. But instead of asking every
> single platform gpio driver to do the fixup, we should really fix it
> in generic driver. Imaging if you fixed the issue in gpio-generic
> when you ran into the problem on MXC/IMX, I wouldn't have spent half
> day to track the issue down on MXS :)
>
> So back to the right fixing, does the following one look good to you?
>
> @@ -394,6 +394,10 @@ int bgpio_init(struct bgpio_chip *bgc, struct device *dev,
> return ret;
>
> bgc->data = bgc->read_reg(bgc->reg_dat);
> + if (bgc->gc.set == bgpio_set_set)
> + bgc->data = bgc->read_reg(bgc->reg_set);
> + if (bgc->reg_dir)
> + bgc->dir = bgc->read_reg(bgc->reg_dir);
>
> return ret;
> }
>
That might change the behaviour of existing implementations.
Lothar Waßmann
--
___________________________________________________________
Ka-Ro electronics GmbH | Pascalstraße 22 | D - 52076 Aachen
Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10
Geschäftsführer: Matthias Kaussen
Handelsregistereintrag: Amtsgericht Aachen, HRB 4996
www.karo-electronics.de | info at karo-electronics.de
___________________________________________________________
More information about the linux-arm-kernel
mailing list