[U-Boot] [PATCH 0/2] arm nomadik: gpio and i2c
Heiko Schocher
heiko.schocher at invitel.hu
Mon Jul 20 09:55:40 CEST 2009
Hello Wolfgang,
Wolfgang Denk wrote:
> Dear Alessandro Rubini,
>
> In message <cover.1247999841.git.rubini at unipv.it> you wrote:
>> To use soft_i2c I need to define some macros in the config file.
>> Instead of writing hard numbers there I called the gpio functions, but
>> the config file is inluded from asm sources as well. I don't think my
>> approach is beautiful at all (both #ifndef __ASSEMBLY__ and #include
>> "../board/"), but I didn't find a better solution.
>
> Agreed. It's a bit intricate to get this done, but I don't see a
> better way either.
Hmm.. maybe my previous patch is a better solution?
>> I would like to add a gpio command, and I've found no generic gpio
>> stuff. Only one board (cm-bf527) has a gpio commands, but quite a few
>> have similar commands to set leds or other bits. Is time ripe for a
>> generic gpio driver with board-specific limits and operations? Would
>> that be interesting for u-boot-next? Should I process with a board-specific
>> gpio command by now?
>
> Well, my opinion on that is a clear "yes, but..." :-)
>
> Yes, some generic gpio framework would be nice - for example, if it
> would allow us to get rid of the 14 largely similar "led.c" files, to
> name just one.
>
> On the other hand, the design of such a framework should be lean and
> not necessarily try to cover 100% of all possible use cases - I'd
> rather have a small and beautiful solution that covers 90% of the
> cases and use board-specific exceptions where really needed, instead
> of a fat thing that solves each and every problem but costs 50 kB.
Agreed. So we need an gpio_core.c / .h which defines the following
functions (just a proposal):
typedef struct gpio_adapter {
int (*init_pin)(int pin);
int (*set)(int pin, value);
int (*get)(int pin);
int (*dir)(int pin, int direction);
int (*level)(int pin, int level);
}
int gpio_init(gpio_adapter *adap);
int gpio_init_pin(pin);
? maybe with setting a marker, that this pin is initialized,
so this can be checked in the above functions ... ?
int gpio_set(pin, value);
int gpio_get(pin);
int gpio_dir(pin, dir);
int gpio_level(pin, dir);
bye
Heiko
More information about the U-Boot
mailing list