mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Carlo Caione <carlo.caione@gmail.com>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 5/5] Add support for GPIO (BCM2835/Raspberry-Pi)
Date: Wed, 10 Oct 2012 22:36:59 +0200	[thread overview]
Message-ID: <19A97966-0AF1-4D37-BC6F-CA6D47F59B50@gmail.com> (raw)
In-Reply-To: <20121009113142.GD26553@game.jcrosoft.org>


[-- Attachment #1.1: Type: text/plain, Size: 2361 bytes --]


On Oct 9, 2012, at 1:31 PM, Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> wrote:
[cut]

>> 
>> +
>> +#include <common.h>
>> +#include <errno.h>
>> +#include <malloc.h>
>> +#include <io.h>
>> +#include <gpio.h>
>> +#include <init.h>
>> +#include <mach/platform.h>
>> +
>> +#define GPIOFSEL(x)  (0x00+(x)*4)
>> +#define GPIOSET(x)   (0x1c+(x)*4)
>> +#define GPIOCLR(x)   (0x28+(x)*4)
>> +#define GPIOLEV(x)   (0x34+(x)*4)
>> +#define GPIOEDS(x)   (0x40+(x)*4)
>> +#define GPIOREN(x)   (0x4c+(x)*4)
>> +#define GPIOFEN(x)   (0x58+(x)*4)
>> +#define GPIOHEN(x)   (0x64+(x)*4)
>> +#define GPIOLEN(x)   (0x70+(x)*4)
>> +#define GPIOAREN(x)  (0x7c+(x)*4)
>> +#define GPIOAFEN(x)  (0x88+(x)*4)
>> +#define GPIOUD(x)    (0x94+(x)*4)
>> +#define GPIOUDCLK(x) (0x98+(x)*4)
> 
>> +
>> +enum {
>> +	GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT,
>> +	GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4,
>> +	GPIO_FSEL_ALT0, GPIO_FSEL_ALT1,
>> +	GPIO_FSEL_ALT2, GPIO_FSEL_ALT3,
>> +};
>> +
>> +struct bcm2835_gpio_chip {
>> +	void __iomem *base;
>> +	struct gpio_chip chip;
>> +};
>> +
>> +static int bcm2835_set_function(struct gpio_chip *chip, unsigned gpio, int function)
>> +{
> 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 …

Best,

--
Carlo Caione

[-- Attachment #1.2: Type: text/html, Size: 4157 bytes --]

[-- Attachment #2: Type: text/plain, Size: 149 bytes --]

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

  reply	other threads:[~2012-10-10 20:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-08 22:07 [PATCH 0/5] BCM2835/Raspberry-Pi: add support Carlo Caione
2012-10-08 22:07 ` [PATCH 1/5] Add support for ARM1176 Carlo Caione
2012-10-08 22:07 ` [PATCH 2/5] Add support for BCM2835 Carlo Caione
2012-10-09 11:26   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-08 22:07 ` [PATCH 3/5] Add support for Raspberry-Pi Carlo Caione
2012-10-09 11:28   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-08 22:07 ` [PATCH 4/5] Add support for BCM2835 clocksource Carlo Caione
2012-10-09 11:20   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-09 11:29   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-08 22:07 ` [PATCH 5/5] Add support for GPIO (BCM2835/Raspberry-Pi) Carlo Caione
2012-10-09 11:31   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-10 20:36     ` Carlo Caione [this message]
2012-10-11  7:17       ` Sascha Hauer
2012-10-11 14:15         ` Jean-Christophe PLAGNIOL-VILLARD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=19A97966-0AF1-4D37-BC6F-CA6D47F59B50@gmail.com \
    --to=carlo.caione@gmail.com \
    --cc=barebox@lists.infradead.org \
    --cc=plagnioj@jcrosoft.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox