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

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

 



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...

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
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