Re: [PATCH 5/5] Add support for GPIO (BCM2835/Raspberry-Pi)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09:17 Thu 11 Oct     , Sascha Hauer wrote:
> On Wed, Oct 10, 2012 at 10:36:59PM +0200, Carlo Caione wrote:
> > 
> > On Oct 9, 2012, at 1:31 PM, Jean-Christophe PLAGNIOL-VILLARD <plagnioj@xxxxxxxxxxxx> wrote:
> > [cut]
> > 
> > > you should add one bank pre gpio_chip 
> > >> +	struct bcm2835_gpio_chip *bcmgpio = container_of(chip, struct bcm2835_gpio_chip, chip);
> > >> +	void __iomem *base = bcmgpio->base;
> > >> +	unsigned gpiodir;
> > >> +	unsigned gpio_bank = gpio / 10;
> > >> +	unsigned gpio_field_offset = (gpio - 10 * gpio_bank) * 3;
> > > so this will be dropped
> > >> +
> > >> +	gpiodir = readl(base + GPIOFSEL(gpio_bank));
> > >> +	gpiodir &= ~(7 << gpio_field_offset);
> > >> +	gpiodir |= function << gpio_field_offset;
> > >> +	writel(gpiodir, base + GPIOFSEL(gpio_bank));
> > >> +	gpiodir = readl(base + GPIOFSEL(gpio_bank));
> > >> +
> > >> +	return 0;
> > >> +}
> > >> +
> > 
> > Uhm, this could be not convenient since the two banks in BCM2835 are
> > not really separated, there are not exclusive registers for one bank
> > or for the other. The registers used for GPIOs configuration manage
> > both the two banks (see for example GPFSELx).  If I add one bank I can
> > avoid calculating the bank offset for GPCLRx and GPSETx but not for
> > GPFSELx and viceversa (in fact in the code I select the bank for
> > GPCLRx and GPSETx with gpio_bank = gpio / 32 whereas for GPIOFSEL with
> > gpio_bank = gpio / 10).  Yay, confusing …
> 
> I sometimes wonder if hardware designers know what pains they cause...
They think software is here to serve the hw where it was true 20 or 30 years
ago but now it's the invert

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux