From 49c21305453528ec5066b90e40e3f83a2e2f4c7b Mon Sep 17 00:00:00 2001 From: bunnie Date: Mon, 15 Sep 2014 04:57:19 +0000 Subject: [PATCH] add LED control function Command-line to turn LEDs on the board on or off. Also, modified .gitignore to be emacs-friendly. --- .gitignore | 1 + Makefile | 1 + cmd-led.c | 27 +++++++++++++++++++++++++++ include/fernvale-kbd.h | 14 ++++++++++++++ main.c | 6 ++++++ 5 files changed, 49 insertions(+) create mode 100644 cmd-led.c create mode 100644 include/fernvale-kbd.h diff --git a/.gitignore b/.gitignore index 86fef77..a57153e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /build *.swp *.swo +*~ diff --git a/Makefile b/Makefile index e3087be..09f1230 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,7 @@ SRC_C = \ cmd-reboot.c \ cmd-sleep.c \ cmd-spi.c \ + cmd-led.c \ emi.c \ irq.c \ main.c \ diff --git a/cmd-led.c b/cmd-led.c new file mode 100644 index 0000000..fd6ad4b --- /dev/null +++ b/cmd-led.c @@ -0,0 +1,27 @@ +#include +#include "bionic.h" +#include "memio.h" +#include "printf.h" +#include "serial.h" +#include "fernvale-kbd.h" + +int cmd_led(int argc, char **argv) +{ + uint32_t state; + + if (argc < 1) { + printf("Usage: led [1 = on, 0 = off]\n"); + return -1; + } + + state = _strtoul(argv[0], NULL, 0); + + if( state ) { + *((volatile uint32_t *) BIG_LED_ADDR) = BIG_LED_ON; + } else { + *((volatile uint32_t *) BIG_LED_ADDR) = BIG_LED_OFF; + } + + return 0; +} + diff --git a/include/fernvale-kbd.h b/include/fernvale-kbd.h new file mode 100644 index 0000000..b087eb6 --- /dev/null +++ b/include/fernvale-kbd.h @@ -0,0 +1,14 @@ +#ifndef __FV_KBD_H__ +#define __FV_KBD_H__ + +/// The BIG_LED is a 60mA drive-capable open-drain switch +/// it's useful for driving circuits such as an array of LEDs +/// used to illuminate a keyboard, hence its inclusion in the +/// keyboard section. However, on PCBs with no keyboard, it's +/// simply a big LED driver. + +#define BIG_LED_ADDR (0xA0700000 + 0x0C80) +#define BIG_LED_ON (0x3) +#define BIG_LED_OFF (0x0) + +#endif /* __FV_KBD_H__ */ diff --git a/main.c b/main.c index 2d54698..ccc3b88 100644 --- a/main.c +++ b/main.c @@ -339,6 +339,7 @@ extern int cmd_poke(int argc, char **argv); extern int cmd_spi(int argc, char **argv); extern int cmd_swi(int argc, char **argv); extern int cmd_reboot(int argc, char **argv); +extern int cmd_led(int argc, char **argv); static const struct { int (*func)(int argc, char **argv); @@ -390,6 +391,11 @@ static const struct { .name = "swi", .help = "Generate software interrupt", }, + { + .func = cmd_led, + .name = "led", + .help = "Turn the on-board LED on or off", + }, }; int cmd_help(int argc, char **argv)