[U-Boot] [PATCH] gpio: Expand cmd_gpio functionality and script friendliness
Joe Hershberger
joe.hershberger at ni.com
Wed Aug 10 08:27:42 CEST 2011
Add quiet parameter to cmd_gpio for use when part of a script
Enable repeat... especially useful when used with input and toggle
Add "outstate" command that will return and print the state of an output
Signed-off-by: Joe Hershberger <joe.hershberger at ni.com>
Cc: Joe Hershberger <joe.hershberger at gmail.com>
Cc: Mike Frysinger <vapier at gentoo.org>
---
common/cmd_gpio.c | 39 ++++++++++++++++++++++++---------------
1 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/common/cmd_gpio.c b/common/cmd_gpio.c
index 9cc790a..0acb93e 100644
--- a/common/cmd_gpio.c
+++ b/common/cmd_gpio.c
@@ -20,6 +20,7 @@ enum gpio_cmd {
GPIO_SET,
GPIO_CLEAR,
GPIO_TOGGLE,
+ GPIO_OUTSTATE,
};
static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
@@ -27,7 +28,7 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int gpio;
enum gpio_cmd sub_cmd;
ulong value;
- const char *str_cmd, *str_gpio;
+ const char *str_cmd, *str_gpio, *str_quiet = "0";
#ifdef gpio_status
if (argc == 2 && !strcmp(argv[1], "status")) {
@@ -36,18 +37,22 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
}
#endif
- if (argc != 3)
+ if (argc != 3 && argc != 4)
show_usage:
return cmd_usage(cmdtp);
+
str_cmd = argv[1];
str_gpio = argv[2];
+ if (argc == 4)
+ str_quiet = argv[3];
/* parse the behavior */
switch (*str_cmd) {
- case 'i': sub_cmd = GPIO_INPUT; break;
- case 's': sub_cmd = GPIO_SET; break;
- case 'c': sub_cmd = GPIO_CLEAR; break;
- case 't': sub_cmd = GPIO_TOGGLE; break;
+ case 'i': sub_cmd = GPIO_INPUT; break;
+ case 's': sub_cmd = GPIO_SET; break;
+ case 'c': sub_cmd = GPIO_CLEAR; break;
+ case 't': sub_cmd = GPIO_TOGGLE; break;
+ case 'o': sub_cmd = GPIO_OUTSTATE; break;
default: goto show_usage;
}
@@ -68,22 +73,26 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
value = gpio_get_value(gpio);
} else {
switch (sub_cmd) {
- case GPIO_SET: value = 1; break;
- case GPIO_CLEAR: value = 0; break;
- case GPIO_TOGGLE: value = !gpio_get_value(gpio); break;
+ case GPIO_SET: value = 1; break;
+ case GPIO_CLEAR: value = 0; break;
+ case GPIO_TOGGLE: value = !gpio_get_value(gpio); break;
+ case GPIO_OUTSTATE: value = gpio_get_value(gpio); break;
default: goto show_usage;
}
gpio_direction_output(gpio, value);
}
- printf("gpio: pin %s (gpio %i) value is %lu\n",
- str_gpio, gpio, value);
+
+ if (*str_quiet == '0')
+ printf("gpio: pin %s (gpio %i) value is %lu\n",
+ str_gpio, gpio, value);
gpio_free(gpio);
return value;
}
-U_BOOT_CMD(gpio, 3, 0, do_gpio,
- "input/set/clear/toggle gpio pins",
- "<input|set|clear|toggle> <pin>\n"
- " - input/set/clear/toggle the specified pin");
+U_BOOT_CMD(gpio, 4, 1, do_gpio,
+ "input/set/clear/toggle/outstate gpio pins",
+ "<input|set|clear|toggle|outstate> <pin> [quiet]\n"
+ " - input/set/clear/toggle/outstate the specified pin\n"
+ " - quiet: if 1, do not print");
--
1.6.0.2
More information about the U-Boot
mailing list