[U-Boot] [RFC] Add 'led' command
Simon Glass
sjg at chromium.org
Wed Dec 14 22:31:39 CET 2011
Hi,
On Wed, Dec 14, 2011 at 11:38 AM, Ulf Samuelsson
<ulf_samuelsson at telia.com> wrote:
> On 2011-12-14 20:11, Simon Glass wrote:
>>
>> Hi,
>>
>> On Tue, Dec 13, 2011 at 3:55 PM, Ulf Samuelsson
>> <ulf_samuelsson at telia.com> wrote:
>>>
>>> On 2010-11-05 13:21, Wolfgang Denk wrote:
>>>>
>>>> Dear Jason Kridner,
>>>>
>>>> In message<1288936236-30603-1-git-send-email-jkridner at beagleboard.org>
>>>> you wrote:
>>>>>
>>>>> It is desired to have the led command on the BeagleBoard to allow for
>>>>> some
>>>>> interaction in the scripts.
>>>>>
>>>>> This patch allows any board implementing the coloured LED API
>>>>> to control the LEDs from the console.
>>>>>
>>>>> led [green | yellow | red | all ] [ on | off ]
>>>>>
>>>>> or
>>>>>
>>>>> led [ 1 | 2 | 3 | all ] [ on | off ]
>>>>>
>>>>> Adds configuration item CONFIG_CMD_LED enabling the command.
>>>>>
>>>>> Partially based on patch from Ulf Samuelsson:
>>>>> http://www.mail-archive.com/u-boot@lists.denx.de/msg09593.html.
>>>>>
>>>>> Signed-off-by: Jason Kridner<jkridner at beagleboard.org>
>>>>> ---
>>>>> common/Makefile | 1 +
>>>>> common/cmd_led.c | 207
>>>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>> 2 files changed, 208 insertions(+), 0 deletions(-)
>>>>> create mode 100644 common/cmd_led.c
>>>>
>>>> I understand the requirement, but I think it is more than time to come
>>>> up with a common solution here instead of adding more and more copies
>>>> of very similar code.
>>>>
>>>> We already have:
>>>>
>>>> arch/arm/cpu/arm920t/ep93xx/led.c
>>>
>>> The file below is mapping the led commands I.E: red_led_on
>>> to at91 I/O calls like at91_set_gpio_value.
>>> A merge, means that a common way of setting GPIO must be available
>>>
>>>> arch/arm/cpu/arm926ejs/at91/led.c
>>>
>>>
>>>
>>>
>>> The only thing the files below do are to initialize the pins for the LED.
>>> While the actual pins are hidden in the configs,
>>> you have a variation of which LEDs are available.
>>> Also you need to enable different clocks.
>>> It is really an extension of the board init file.
>>> Maybe they should be merged with the board file instead.
>>> I personally don't see a problem with keeping the separate file.
>>>
>>> There is no commonality between these files and the led.c
>>> in "arch/arm/cpu/arm926ejs/at91/led.c"
>>>
>>>
>>>> board/atmel/at91cap9adk/led.c
>>>> board/atmel/at91rm9200dk/led.c
>>>> board/atmel/at91rm9200ek/led.c
>>>> board/atmel/at91sam9260ek/led.c
>>>> board/atmel/at91sam9261ek/led.c
>>>> board/atmel/at91sam9263ek/led.c
>>>> board/atmel/at91sam9m10g45ek/led.c
>>>> board/atmel/at91sam9rlek/led.c
>>>> board/ronetix/pm9261/led.c
>>>> board/ronetix/pm9263/led.c
>>>> board/eukrea/cpu9260/led.c
>>>
>>>
>>>
>>>> board/logicpd/zoom2/led.c
>>>> board/ns9750dev/led.c
>>>> board/psyent/pk1c20/led.c
>>>>
>>>> Please, let's unify these.
>>>>
>>>> Best regards,
>>>>
>>>> Wolfgang Denk
>>>>
>>> The proposed patch is adding a command, and
>>> which uses the coloured LED interface and there
>>> is no commonality between this code and
>>> the code in the board and cpu directories.
>>
>> IMO this LED interface is not very nice. Is there a reason there is
>> not just one function? Perhaps like:
>>
>> enum led_colour {
>> LED_GREEN,
>> LED_YELLOW,
>> LED_RED,
>> LED_BLUE,
>> };
>>
>> void led_init(void);
>>
>> /**
>> * Set the state of a coloured LED
>> *
>> * @param led LED to adjust
>> * @param on 1 to turn it on, 0 to turn it off
>> */
>> void led_set_state(enum led_colour led, int on);
>>
>> instead of:
>>
>> extern void coloured_LED_init (void);
>> extern void red_LED_on(void);
>> extern void red_LED_off(void);
>> extern void green_LED_on(void);
>> extern void green_LED_off(void);
>> extern void yellow_LED_on(void);
>> extern void yellow_LED_off(void);
>> extern void blue_LED_on(void);
>> extern void blue_LED_off(void);
>>
>> and associated weak symbols.
>>
>> It may even be possible to tidy up the existing status_led.h file at
>> the same time.
>
> The reason is simple.
> The API was developed to figure out why u-boot never reached the prompt.
> The API should be so simple to use in assembler that it did not introduce
> further bugs.
>
> In assembler the call maps to something like (IIRC):
> bl green_LED_on
>
> Much easier than passing parameters in registers.
Yes I see what you mean
mov r0, #LED_GREEN
mov r1, #1
bl led_set_state
presumably you have r0 and r1 used for other things. Still it seems
painful to subject board.c to this very assembler-specific API.
Perhaps the current API could be relegated to a driver somewhere.
> There are other advantages of doing it your way of course.
>
> If you want to change, make sure you don't break any boards.
I am cleaning this up as part of the new board.c effort, waiting on
some responses on relocation still.
Regards,
Simon
>
> BR
> Ulf Samuelsson
>
>
>> I agree that the command is sort-of sideways, but really I think this
>> should be cleaned up before adding more code that uses the API. It
>> just makes the job harder.
>>
>> Regards,
>> Simon
>>
>>> --
>>> Best Regards
>>> Ulf Samuelsson
>>>
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot at lists.denx.de
>>> http://lists.denx.de/mailman/listinfo/u-boot
>
>
>
> --
> Best Regards
> Ulf Samuelsson
> +46 722 427437
>
More information about the U-Boot
mailing list