fuzev2: prevent button light flickering when accessing µSD
[kugel-rb.git] / firmware / drivers / led.c
blob22583364d55aa93d0b39b5094dcdf3c8ade74bff
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2002 by Alan Korr
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
21 #include "config.h"
22 #include <stdbool.h>
23 #include "cpu.h"
24 #include "led.h"
25 #include "system.h"
26 #include "kernel.h"
28 #if (CONFIG_LED == LED_REAL)
30 void led(bool on)
32 if ( on )
34 or_b(0x40, &PBDRL);
36 else
38 and_b(~0x40, &PBDRL);
42 #elif (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD)
44 static bool current;
45 static long last_on; /* timestamp of switching off */
47 void led(bool on)
49 if (current && !on) /* switching off */
51 last_on = current_tick; /* remember for off delay */
53 current = on;
56 bool led_read(int delayticks) /* read by status bar update */
58 /* reading "off" is delayed by user-supplied monoflop value */
59 return (current || TIME_BEFORE(current_tick, last_on+delayticks));
62 #else
64 void led(bool on)
66 (void)on;
68 #endif /* CONFIG_LED, HAVE_REMOTE_LCD */