int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int i, match = 0; enum led_cmd cmd; int freq; /* Validate arguments */ if ((argc < 3) || (argc > 4)) return CMD_RET_USAGE; cmd = get_led_cmd(argv[2]); if (cmd < 0) { return CMD_RET_USAGE; } for (i = 0; led_commands[i].string; i++) { if ((strcmp("all", argv[1]) == 0) || (strcmp(led_commands[i].string, argv[1]) == 0)) { match = 1; switch (cmd) { case LED_ON: if (led_commands[i].on) led_commands[i].on(); else __led_set(led_commands[i].mask, STATUS_LED_ON); break; case LED_OFF: if (led_commands[i].off) led_commands[i].off(); else __led_set(led_commands[i].mask, STATUS_LED_OFF); break; case LED_TOGGLE: if (led_commands[i].toggle) led_commands[i].toggle(); else __led_toggle(led_commands[i].mask); 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); } /* Need to set only 1 led if led_name wasn't 'all' */ if (strcmp("all", argv[1]) != 0) break; } } /* If we ran out of matches, print Usage */ if (!match) { return CMD_RET_USAGE; } return 0; }
int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int i, match = 0; enum led_cmd cmd; /* Validate arguments */ if ((argc != 3)) { return cmd_usage(cmdtp); } cmd = get_led_cmd(argv[2]); if (cmd < 0) { return cmd_usage(cmdtp); } for (i = 0; led_commands[i].string; i++) { if ((strcmp("all", argv[1]) == 0) || (strcmp(led_commands[i].string, argv[1]) == 0)) { match = 1; switch (cmd) { case LED_ON: if (led_commands[i].on) led_commands[i].on(); else __led_set(led_commands[i].mask, 1); break; case LED_OFF: if (led_commands[i].off) led_commands[i].off(); else __led_set(led_commands[i].mask, 0); break; case LED_TOGGLE: if (led_commands[i].toggle) led_commands[i].toggle(); else __led_toggle(led_commands[i].mask); } /* Need to set only 1 led if led_name wasn't 'all' */ if (strcmp("all", argv[1]) != 0) break; } } /* If we ran out of matches, print Usage */ if (!match) { return cmd_usage(cmdtp); } return 0; }
void status_led_tick (ulong timestamp) { led_dev_t *ld; int i; if (!status_led_init_done) status_led_init (); for (i = 0, ld = led_dev; i < MAX_LED_DEV; i++, ld++) { if (ld->state != STATUS_LED_BLINKING) continue; if (++ld->cnt >= ld->period) { __led_toggle (ld->mask); ld->cnt -= ld->period; } } }
void led_toggle(unsigned int id) { __led_toggle(led_io[id].gpio, led_io[id].pin); }