[PATCH 2/2] cmd: pinmux: support pin name in status command
Patrick Delaunay
patrick.delaunay at st.com
Wed Oct 28 11:06:40 CET 2020
Allow pin name parameter for pimux staus command,
as gpio command to get status of one pin.
The possible usage of the command is:
> pinmux dev pinctrl
> pinmux status
> pinmux status -a
> pinmux status <pin-name>
Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
---
cmd/pinmux.c | 41 +++++++++++++++++++++++++-----------
test/py/tests/test_pinmux.py | 29 +++++++++++++++++++++++++
2 files changed, 58 insertions(+), 12 deletions(-)
diff --git a/cmd/pinmux.c b/cmd/pinmux.c
index af04c95a46..e096f16982 100644
--- a/cmd/pinmux.c
+++ b/cmd/pinmux.c
@@ -41,19 +41,20 @@ static int do_dev(struct cmd_tbl *cmdtp, int flag, int argc,
return CMD_RET_SUCCESS;
}
-static void show_pinmux(struct udevice *dev)
+static bool show_pinmux(struct udevice *dev, char *name)
{
char pin_name[PINNAME_SIZE];
char pin_mux[PINMUX_SIZE];
int pins_count;
int i;
int ret;
+ bool found = false;
pins_count = pinctrl_get_pins_count(dev);
if (pins_count < 0) {
printf("Ops get_pins_count not supported by %s\n", dev->name);
- return;
+ return found;
}
for (i = 0; i < pins_count; i++) {
@@ -61,43 +62,59 @@ static void show_pinmux(struct udevice *dev)
if (ret) {
printf("Ops get_pin_name error (%d) by %s\n",
ret, dev->name);
- return;
+ return found;
}
-
+ if (name && strcmp(name, pin_name))
+ continue;
+ found = true;
ret = pinctrl_get_pin_muxing(dev, i, pin_mux, PINMUX_SIZE);
if (ret) {
printf("Ops get_pin_muxing error (%d) by %s in %s\n",
ret, pin_name, dev->name);
- return;
+ return found;
}
printf("%-*s: %-*s\n", PINNAME_SIZE, pin_name,
PINMUX_SIZE, pin_mux);
}
+
+ return found;
}
static int do_status(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
struct udevice *dev;
+ char *name;
+ bool found = false;
if (argc < 2) {
if (!currdev) {
printf("pin-controller device not selected\n");
return CMD_RET_FAILURE;
}
- show_pinmux(currdev);
+ show_pinmux(currdev, NULL);
return CMD_RET_SUCCESS;
}
if (strcmp(argv[1], "-a"))
- return CMD_RET_USAGE;
+ name = argv[1];
+ else
+ name = NULL;
uclass_foreach_dev_probe(UCLASS_PINCTRL, dev) {
- /* insert a separator between each pin-controller display */
- printf("--------------------------\n");
- printf("%s:\n", dev->name);
- show_pinmux(dev);
+ if (!name) {
+ /* insert a separator between each pin-controller display */
+ printf("--------------------------\n");
+ printf("%s:\n", dev->name);
+ }
+ if (show_pinmux(dev, name))
+ found = true;
+ }
+
+ if (name && !found) {
+ printf("%s not found\n", name);
+ return CMD_RET_FAILURE;
}
return CMD_RET_SUCCESS;
@@ -148,5 +165,5 @@ U_BOOT_CMD(pinmux, CONFIG_SYS_MAXARGS, 1, do_pinmux,
"show pin-controller muxing",
"list - list UCLASS_PINCTRL devices\n"
"pinmux dev [pincontroller-name] - select pin-controller device\n"
- "pinmux status [-a] - print pin-controller muxing [for all]\n"
+ "pinmux status [-a | pin-name] - print pin-controller muxing [for all | for pin-name]\n"
)
diff --git a/test/py/tests/test_pinmux.py b/test/py/tests/test_pinmux.py
index b3ae2ab024..fbde1d99b1 100644
--- a/test/py/tests/test_pinmux.py
+++ b/test/py/tests/test_pinmux.py
@@ -82,3 +82,32 @@ def test_pinmux_status(u_boot_console):
assert ('P6 : GPIO1 drive-open-drain.' in output)
assert ('P7 : GPIO2 bias-pull-down input-enable.' in output)
assert ('P8 : GPIO3 bias-disable.' in output)
+
+ at pytest.mark.buildconfigspec('cmd_pinmux')
+ at pytest.mark.boardspec('sandbox')
+def test_pinmux_status_pinname(u_boot_console):
+ """Test that 'pinmux status <pinname>' displays selected pin."""
+
+ output = u_boot_console.run_command('pinmux status a5')
+ assert ('a5 : gpio output .' in output)
+ assert (not 'pinctrl-gpio:' in output)
+ assert (not 'pinctrl:' in output)
+ assert (not 'a6' in output)
+ assert (not 'P0' in output)
+ assert (not 'P8' in output)
+
+ output = u_boot_console.run_command('pinmux status P7')
+ assert (not 'pinctrl-gpio:' in output)
+ assert (not 'pinctrl:' in output)
+ assert (not 'a5' in output)
+ assert (not 'P0' in output)
+ assert (not 'P6' in output)
+ assert ('P7 : GPIO2 bias-pull-down input-enable.' in output)
+ assert (not 'P8' in output)
+
+ output = u_boot_console.run_command('pinmux status P9')
+ assert (not 'pinctrl-gpio:' in output)
+ assert (not 'pinctrl:' in output)
+ assert (not 'a5' in output)
+ assert (not 'P8' in output)
+ assert ('P9 not found' in output)
--
2.17.1
More information about the U-Boot
mailing list