Blame view

cmd/legacy_led.c 4.11 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
b633f66f0   Jason Kridner   Add 'led' command
2
3
4
5
6
7
8
9
  /*
   * (C) Copyright 2010
   * Jason Kridner <jkridner@beagleboard.org>
   *
   * Based on cmd_led.c patch from:
   * http://www.mail-archive.com/u-boot@lists.denx.de/msg06873.html
   * (C) Copyright 2008
   * Ulf Samuelsson <ulf.samuelsson@atmel.com>
b633f66f0   Jason Kridner   Add 'led' command
10
11
12
13
14
15
16
17
18
19
   */
  
  #include <common.h>
  #include <config.h>
  #include <command.h>
  #include <status_led.h>
  
  struct led_tbl_s {
  	char		*string;	/* String for use in the command */
  	led_id_t	mask;		/* Mask used for calling __led_set() */
4086b51cb   Jason Kridner   led: correct off/...
20
21
  	void		(*off)(void);	/* Optional function for turning LED off */
  	void		(*on)(void);	/* Optional function for turning LED on */
b8bc8973a   Joel A Fernandes   led: Remove state...
22
  	void		(*toggle)(void);/* Optional function for toggling LED */
b633f66f0   Jason Kridner   Add 'led' command
23
24
25
26
27
  };
  
  typedef struct led_tbl_s led_tbl_t;
  
  static const led_tbl_t led_commands[] = {
2d8d190c8   Uri Mashiach   status_led: Kconf...
28
29
30
  #ifdef CONFIG_LED_STATUS_BOARD_SPECIFIC
  #ifdef CONFIG_LED_STATUS0
  	{ "0", CONFIG_LED_STATUS_BIT, NULL, NULL, NULL },
b633f66f0   Jason Kridner   Add 'led' command
31
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
32
33
  #ifdef CONFIG_LED_STATUS1
  	{ "1", CONFIG_LED_STATUS_BIT1, NULL, NULL, NULL },
b633f66f0   Jason Kridner   Add 'led' command
34
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
35
36
  #ifdef CONFIG_LED_STATUS2
  	{ "2", CONFIG_LED_STATUS_BIT2, NULL, NULL, NULL },
b633f66f0   Jason Kridner   Add 'led' command
37
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
38
39
  #ifdef CONFIG_LED_STATUS3
  	{ "3", CONFIG_LED_STATUS_BIT3, NULL, NULL, NULL },
b633f66f0   Jason Kridner   Add 'led' command
40
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
41
42
  #ifdef CONFIG_LED_STATUS4
  	{ "4", CONFIG_LED_STATUS_BIT4, NULL, NULL, NULL },
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
43
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
44
45
  #ifdef CONFIG_LED_STATUS5
  	{ "5", CONFIG_LED_STATUS_BIT5, NULL, NULL, NULL },
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
46
  #endif
b633f66f0   Jason Kridner   Add 'led' command
47
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
48
49
  #ifdef CONFIG_LED_STATUS_GREEN
  	{ "green", CONFIG_LED_STATUS_GREEN, green_led_off, green_led_on, NULL },
b633f66f0   Jason Kridner   Add 'led' command
50
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
51
52
53
  #ifdef CONFIG_LED_STATUS_YELLOW
  	{ "yellow", CONFIG_LED_STATUS_YELLOW, yellow_led_off, yellow_led_on,
  	  NULL },
b633f66f0   Jason Kridner   Add 'led' command
54
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
55
56
  #ifdef CONFIG_LED_STATUS_RED
  	{ "red", CONFIG_LED_STATUS_RED, red_led_off, red_led_on, NULL },
b633f66f0   Jason Kridner   Add 'led' command
57
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
58
59
  #ifdef CONFIG_LED_STATUS_BLUE
  	{ "blue", CONFIG_LED_STATUS_BLUE, blue_led_off, blue_led_on, NULL },
b633f66f0   Jason Kridner   Add 'led' command
60
  #endif
b8bc8973a   Joel A Fernandes   led: Remove state...
61
  	{ NULL, 0, NULL, NULL, NULL }
b633f66f0   Jason Kridner   Add 'led' command
62
  };
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
63
  enum led_cmd { LED_ON, LED_OFF, LED_TOGGLE, LED_BLINK };
b8bc8973a   Joel A Fernandes   led: Remove state...
64
65
  
  enum led_cmd get_led_cmd(char *var)
b633f66f0   Jason Kridner   Add 'led' command
66
  {
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
67
  	if (strcmp(var, "off") == 0)
b8bc8973a   Joel A Fernandes   led: Remove state...
68
  		return LED_OFF;
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
69
  	if (strcmp(var, "on") == 0)
b8bc8973a   Joel A Fernandes   led: Remove state...
70
  		return LED_ON;
b8bc8973a   Joel A Fernandes   led: Remove state...
71
72
  	if (strcmp(var, "toggle") == 0)
  		return LED_TOGGLE;
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
73
74
  	if (strcmp(var, "blink") == 0)
  		return LED_BLINK;
b633f66f0   Jason Kridner   Add 'led' command
75
76
  	return -1;
  }
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
77
78
79
80
81
82
83
  /*
   * LED drivers providing a blinking LED functionality, like the
   * PCA9551, can override this empty weak function
   */
  void __weak __led_blink(led_id_t mask, int freq)
  {
  }
21c340849   Simon Glass   led: Mark existin...
84
  int do_legacy_led(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
b633f66f0   Jason Kridner   Add 'led' command
85
  {
b8bc8973a   Joel A Fernandes   led: Remove state...
86
87
  	int i, match = 0;
  	enum led_cmd cmd;
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
88
  	int freq;
b633f66f0   Jason Kridner   Add 'led' command
89
90
  
  	/* Validate arguments */
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
91
  	if ((argc < 3) || (argc > 4))
4c12eeb8b   Simon Glass   Convert cmd_usage...
92
  		return CMD_RET_USAGE;
b633f66f0   Jason Kridner   Add 'led' command
93

b8bc8973a   Joel A Fernandes   led: Remove state...
94
95
  	cmd = get_led_cmd(argv[2]);
  	if (cmd < 0) {
4c12eeb8b   Simon Glass   Convert cmd_usage...
96
  		return CMD_RET_USAGE;
b633f66f0   Jason Kridner   Add 'led' command
97
98
99
  	}
  
  	for (i = 0; led_commands[i].string; i++) {
cd6881b51   Wolfgang Denk   Minor coding styl...
100
  		if ((strcmp("all", argv[1]) == 0) ||
b633f66f0   Jason Kridner   Add 'led' command
101
  		    (strcmp(led_commands[i].string, argv[1]) == 0)) {
b8bc8973a   Joel A Fernandes   led: Remove state...
102
103
104
105
  			match = 1;
  			switch (cmd) {
  			case LED_ON:
  				if (led_commands[i].on)
b633f66f0   Jason Kridner   Add 'led' command
106
  					led_commands[i].on();
b8bc8973a   Joel A Fernandes   led: Remove state...
107
  				else
af73034c6   Otavio Salvador   led: Use STATUS_L...
108
  					__led_set(led_commands[i].mask,
2d8d190c8   Uri Mashiach   status_led: Kconf...
109
  							  CONFIG_LED_STATUS_ON);
b8bc8973a   Joel A Fernandes   led: Remove state...
110
111
112
  				break;
  			case LED_OFF:
  				if (led_commands[i].off)
b633f66f0   Jason Kridner   Add 'led' command
113
  					led_commands[i].off();
b8bc8973a   Joel A Fernandes   led: Remove state...
114
  				else
af73034c6   Otavio Salvador   led: Use STATUS_L...
115
  					__led_set(led_commands[i].mask,
2d8d190c8   Uri Mashiach   status_led: Kconf...
116
  						  CONFIG_LED_STATUS_OFF);
b8bc8973a   Joel A Fernandes   led: Remove state...
117
118
119
120
121
122
  				break;
  			case LED_TOGGLE:
  				if (led_commands[i].toggle)
  					led_commands[i].toggle();
  				else
  					__led_toggle(led_commands[i].mask);
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
123
124
125
126
127
128
129
  				break;
  			case LED_BLINK:
  				if (argc != 4)
  					return CMD_RET_USAGE;
  
  				freq = simple_strtoul(argv[3], NULL, 10);
  				__led_blink(led_commands[i].mask, freq);
b633f66f0   Jason Kridner   Add 'led' command
130
  			}
d604cda34   Joel A Fernandes   led: Fixed settin...
131
132
133
  			/* Need to set only 1 led if led_name wasn't 'all' */
  			if (strcmp("all", argv[1]) != 0)
  				break;
b633f66f0   Jason Kridner   Add 'led' command
134
135
136
137
  		}
  	}
  
  	/* If we ran out of matches, print Usage */
95492d784   Jason Kridner   Corrected LED nam...
138
  	if (!match) {
4c12eeb8b   Simon Glass   Convert cmd_usage...
139
  		return CMD_RET_USAGE;
b633f66f0   Jason Kridner   Add 'led' command
140
141
142
143
144
145
  	}
  
  	return 0;
  }
  
  U_BOOT_CMD(
21c340849   Simon Glass   led: Mark existin...
146
  	led, 4, 1, do_legacy_led,
d4b901dd7   Robert P. J. Day   cmd_led.c: Standa...
147
  	"["
2d8d190c8   Uri Mashiach   status_led: Kconf...
148
149
  #ifdef CONFIG_LED_STATUS_BOARD_SPECIFIC
  #ifdef CONFIG_LED_STATUS0
b633f66f0   Jason Kridner   Add 'led' command
150
151
  	"0|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
152
  #ifdef CONFIG_LED_STATUS1
b633f66f0   Jason Kridner   Add 'led' command
153
154
  	"1|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
155
  #ifdef CONFIG_LED_STATUS2
b633f66f0   Jason Kridner   Add 'led' command
156
157
  	"2|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
158
  #ifdef CONFIG_LED_STATUS3
b633f66f0   Jason Kridner   Add 'led' command
159
160
  	"3|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
161
  #ifdef CONFIG_LED_STATUS4
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
162
163
  	"4|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
164
  #ifdef CONFIG_LED_STATUS5
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
165
166
  	"5|"
  #endif
b633f66f0   Jason Kridner   Add 'led' command
167
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
168
  #ifdef CONFIG_LED_STATUS_GREEN
b633f66f0   Jason Kridner   Add 'led' command
169
170
  	"green|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
171
  #ifdef CONFIG_LED_STATUS_YELLOW
b633f66f0   Jason Kridner   Add 'led' command
172
173
  	"yellow|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
174
  #ifdef CONFIG_LED_STATUS_RED
b633f66f0   Jason Kridner   Add 'led' command
175
176
  	"red|"
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
177
  #ifdef CONFIG_LED_STATUS_BLUE
b633f66f0   Jason Kridner   Add 'led' command
178
179
  	"blue|"
  #endif
a8eeaf2f7   Stefan Roese   cmd_led: Extend l...
180
181
  	"all] [on|off|toggle|blink] [blink-freq in ms]",
  	"[led_name] [on|off|toggle|blink] sets or clears led(s)"
b633f66f0   Jason Kridner   Add 'led' command
182
  );