* [PATCH v2 1/2] cmd: pinmux: update result of do_status
@ 2021-05-19 12:30 Patrick Delaunay
2021-05-19 12:30 ` [PATCH v2 2/2] cmd: pinmux: support pin name in status command Patrick Delaunay
2021-05-19 15:34 ` [PATCH v2 1/2] cmd: pinmux: update result of do_status Simon Glass
0 siblings, 2 replies; 4+ messages in thread
From: Patrick Delaunay @ 2021-05-19 12:30 UTC (permalink / raw)
To: u-boot
From: Patrick Delaunay <patrick.delaunay@st.com>
Update the result of do_status and always returns a CMD_RET_ value
(-ENOSYS was a possible result of show_pinmux).
This patch also adds pincontrol name in error messages (dev->name)
and treats correctly the status sub command when pin-controller device is
not selected.
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
---
Changes in v2:
- keep result in show_pinmux
- add comment in API pinctrl_get_pins_count() for -ENOSYS result
cmd/pinmux.c | 31 +++++++++++++++++--------------
include/dm/pinctrl.h | 2 +-
test/py/tests/test_pinmux.py | 4 ++--
3 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/cmd/pinmux.c b/cmd/pinmux.c
index 9942b15419..0df78c71da 100644
--- a/cmd/pinmux.c
+++ b/cmd/pinmux.c
@@ -52,20 +52,21 @@ static int show_pinmux(struct udevice *dev)
pins_count = pinctrl_get_pins_count(dev);
if (pins_count == -ENOSYS) {
- printf("Ops get_pins_count not supported\n");
+ printf("Ops get_pins_count not supported by %s\n", dev->name);
return pins_count;
}
for (i = 0; i < pins_count; i++) {
ret = pinctrl_get_pin_name(dev, i, pin_name, PINNAME_SIZE);
- if (ret == -ENOSYS) {
- printf("Ops get_pin_name not supported\n");
+ if (ret) {
+ printf("Ops get_pin_name error (%d) by %s\n", ret, dev->name);
return ret;
}
ret = pinctrl_get_pin_muxing(dev, i, pin_mux, PINMUX_SIZE);
if (ret) {
- printf("Ops get_pin_muxing error (%d)\n", ret);
+ printf("Ops get_pin_muxing error (%d) by %s in %s\n",
+ ret, pin_name, dev->name);
return ret;
}
@@ -80,25 +81,27 @@ static int do_status(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
struct udevice *dev;
- int ret = CMD_RET_USAGE;
- if (currdev && (argc < 2 || strcmp(argv[1], "-a")))
- return show_pinmux(currdev);
+ if (argc < 2) {
+ if (!currdev) {
+ printf("pin-controller device not selected\n");
+ return CMD_RET_FAILURE;
+ }
+ show_pinmux(currdev);
+ return CMD_RET_SUCCESS;
+ }
- if (argc < 2 || strcmp(argv[1], "-a"))
- return ret;
+ if (strcmp(argv[1], "-a"))
+ return CMD_RET_USAGE;
uclass_foreach_dev_probe(UCLASS_PINCTRL, dev) {
/* insert a separator between each pin-controller display */
printf("--------------------------\n");
printf("%s:\n", dev->name);
- ret = show_pinmux(dev);
- if (ret < 0)
- printf("Can't display pin muxing for %s\n",
- dev->name);
+ show_pinmux(dev);
}
- return ret;
+ return CMD_RET_SUCCESS;
}
static int do_list(struct cmd_tbl *cmdtp, int flag, int argc,
diff --git a/include/dm/pinctrl.h b/include/dm/pinctrl.h
index 1bdc8d3cbd..695e78ad0d 100644
--- a/include/dm/pinctrl.h
+++ b/include/dm/pinctrl.h
@@ -587,7 +587,7 @@ int pinctrl_get_pin_muxing(struct udevice *dev, int selector, char *buf,
*
* This allows to know the number of pins owned by a given pin-controller
*
- * Return: Number of pins if OK, or negative error code on failure
+ * Return: Number of pins if OK, or -ENOSYS when not supported
*/
int pinctrl_get_pins_count(struct udevice *dev);
diff --git a/test/py/tests/test_pinmux.py b/test/py/tests/test_pinmux.py
index 0cbbae000c..b3ae2ab024 100644
--- a/test/py/tests/test_pinmux.py
+++ b/test/py/tests/test_pinmux.py
@@ -13,9 +13,9 @@ def test_pinmux_usage_1(u_boot_console):
@pytest.mark.buildconfigspec('cmd_pinmux')
def test_pinmux_usage_2(u_boot_console):
"""Test that 'pinmux status' executed without previous "pinmux dev"
- command displays pinmux usage."""
+ command displays error message."""
output = u_boot_console.run_command('pinmux status')
- assert 'Usage:' in output
+ assert 'pin-controller device not selected' in output
@pytest.mark.buildconfigspec('cmd_pinmux')
@pytest.mark.boardspec('sandbox')
--
2.17.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] cmd: pinmux: support pin name in status command
2021-05-19 12:30 [PATCH v2 1/2] cmd: pinmux: update result of do_status Patrick Delaunay
@ 2021-05-19 12:30 ` Patrick Delaunay
2021-05-19 15:34 ` Simon Glass
2021-05-19 15:34 ` [PATCH v2 1/2] cmd: pinmux: update result of do_status Simon Glass
1 sibling, 1 reply; 4+ messages in thread
From: Patrick Delaunay @ 2021-05-19 12:30 UTC (permalink / raw)
To: u-boot
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@foss.st.com>
---
Changes in v2:
- use -ENOENT when the pin name is not found
- move the added pytests in a C file cmd/pinmux.c
cmd/pinmux.c | 38 +++++++++++++++++++++++++++++---------
test/cmd/Makefile | 1 +
test/cmd/pinmux.c | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 66 insertions(+), 9 deletions(-)
create mode 100644 test/cmd/pinmux.c
diff --git a/cmd/pinmux.c b/cmd/pinmux.c
index 0df78c71da..527d33d562 100644
--- a/cmd/pinmux.c
+++ b/cmd/pinmux.c
@@ -41,13 +41,14 @@ static int do_dev(struct cmd_tbl *cmdtp, int flag, int argc,
return CMD_RET_SUCCESS;
}
-static int show_pinmux(struct udevice *dev)
+static int 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);
@@ -62,7 +63,9 @@ static int show_pinmux(struct udevice *dev)
printf("Ops get_pin_name error (%d) by %s\n", ret, dev->name);
return ret;
}
-
+ 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",
@@ -74,6 +77,9 @@ static int show_pinmux(struct udevice *dev)
PINMUX_SIZE, pin_mux);
}
+ if (!found)
+ return -ENOENT;
+
return 0;
}
@@ -81,24 +87,38 @@ static int do_status(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
struct udevice *dev;
+ char *name;
+ int ret;
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);
+ }
+ ret = show_pinmux(dev, name);
+ /* stop when the status of requested pin is displayed */
+ if (name && !ret)
+ return CMD_RET_SUCCESS;
+ }
+
+ if (name) {
+ printf("%s not found\n", name);
+ return CMD_RET_FAILURE;
}
return CMD_RET_SUCCESS;
@@ -149,5 +169,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/cmd/Makefile b/test/cmd/Makefile
index 2cfe43a6bd..a59adb1e6d 100644
--- a/test/cmd/Makefile
+++ b/test/cmd/Makefile
@@ -8,5 +8,6 @@ endif
obj-y += mem.o
obj-$(CONFIG_CMD_ADDRMAP) += addrmap.o
obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o
+obj-$(CONFIG_CMD_PINMUX) += pinmux.o
obj-$(CONFIG_CMD_PWM) += pwm.o
obj-$(CONFIG_CMD_SETEXPR) += setexpr.o
diff --git a/test/cmd/pinmux.c b/test/cmd/pinmux.c
new file mode 100644
index 0000000000..8ae807b537
--- /dev/null
+++ b/test/cmd/pinmux.c
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Executes tests for pinmux command
+ *
+ * Copyright (C) 2021, STMicroelectronics - All Rights Reserved
+ */
+
+#include <common.h>
+#include <command.h>
+#include <dm/test.h>
+#include <test/test.h>
+#include <test/ut.h>
+
+static int dm_test_cmd_pinmux_status_pinname(struct unit_test_state *uts)
+{
+ /* Test that 'pinmux status <pinname>' displays the selected pin. */
+ console_record_reset();
+ run_command("pinmux status a5", 0);
+ ut_assert_nextline("a5 : gpio input . ");
+ ut_assert_console_end();
+
+ console_record_reset();
+ run_command("pinmux status P7", 0);
+ ut_assert_nextline("P7 : GPIO2 bias-pull-down input-enable. ");
+ ut_assert_console_end();
+
+ console_record_reset();
+ run_command("pinmux status P9", 0);
+ ut_assert_nextline("single-pinctrl pinctrl-single-no-width: missing register width");
+ ut_assert_nextline("P9 not found");
+ ut_assert_console_end();
+
+ return 0;
+}
+
+DM_TEST(dm_test_cmd_pinmux_status_pinname, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
--
2.17.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] cmd: pinmux: update result of do_status
2021-05-19 12:30 [PATCH v2 1/2] cmd: pinmux: update result of do_status Patrick Delaunay
2021-05-19 12:30 ` [PATCH v2 2/2] cmd: pinmux: support pin name in status command Patrick Delaunay
@ 2021-05-19 15:34 ` Simon Glass
1 sibling, 0 replies; 4+ messages in thread
From: Simon Glass @ 2021-05-19 15:34 UTC (permalink / raw)
To: u-boot
On Wed, 19 May 2021 at 06:30, Patrick Delaunay
<patrick.delaunay@foss.st.com> wrote:
>
> From: Patrick Delaunay <patrick.delaunay@st.com>
>
> Update the result of do_status and always returns a CMD_RET_ value
> (-ENOSYS was a possible result of show_pinmux).
>
> This patch also adds pincontrol name in error messages (dev->name)
> and treats correctly the status sub command when pin-controller device is
> not selected.
>
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>
> Changes in v2:
> - keep result in show_pinmux
> - add comment in API pinctrl_get_pins_count() for -ENOSYS result
>
> cmd/pinmux.c | 31 +++++++++++++++++--------------
> include/dm/pinctrl.h | 2 +-
> test/py/tests/test_pinmux.py | 4 ++--
> 3 files changed, 20 insertions(+), 17 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] cmd: pinmux: support pin name in status command
2021-05-19 12:30 ` [PATCH v2 2/2] cmd: pinmux: support pin name in status command Patrick Delaunay
@ 2021-05-19 15:34 ` Simon Glass
0 siblings, 0 replies; 4+ messages in thread
From: Simon Glass @ 2021-05-19 15:34 UTC (permalink / raw)
To: u-boot
Hi Patrick,
On Wed, 19 May 2021 at 06:30, Patrick Delaunay
<patrick.delaunay@foss.st.com> wrote:
>
> 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@foss.st.com>
> ---
>
> Changes in v2:
> - use -ENOENT when the pin name is not found
> - move the added pytests in a C file cmd/pinmux.c
>
> cmd/pinmux.c | 38 +++++++++++++++++++++++++++++---------
> test/cmd/Makefile | 1 +
> test/cmd/pinmux.c | 36 ++++++++++++++++++++++++++++++++++++
> 3 files changed, 66 insertions(+), 9 deletions(-)
> create mode 100644 test/cmd/pinmux.c
Reviewed-by: Simon Glass <sjg@chromium.org>
nit below
>
> diff --git a/cmd/pinmux.c b/cmd/pinmux.c
> index 0df78c71da..527d33d562 100644
> --- a/cmd/pinmux.c
> +++ b/cmd/pinmux.c
> @@ -41,13 +41,14 @@ static int do_dev(struct cmd_tbl *cmdtp, int flag, int argc,
> return CMD_RET_SUCCESS;
> }
>
> -static int show_pinmux(struct udevice *dev)
> +static int show_pinmux(struct udevice *dev, char *name)
Can you add a comment indicating what these args are (and that @name
can be NULL) and return values?
> {
> 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);
>
> @@ -62,7 +63,9 @@ static int show_pinmux(struct udevice *dev)
> printf("Ops get_pin_name error (%d) by %s\n", ret, dev->name);
> return ret;
> }
> -
> + 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",
> @@ -74,6 +77,9 @@ static int show_pinmux(struct udevice *dev)
> PINMUX_SIZE, pin_mux);
> }
>
> + if (!found)
> + return -ENOENT;
> +
> return 0;
> }
>
> @@ -81,24 +87,38 @@ static int do_status(struct cmd_tbl *cmdtp, int flag, int argc,
> char *const argv[])
> {
> struct udevice *dev;
> + char *name;
> + int ret;
>
> 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;
>
[..]
Regards,
Simon
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-05-19 15:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-19 12:30 [PATCH v2 1/2] cmd: pinmux: update result of do_status Patrick Delaunay
2021-05-19 12:30 ` [PATCH v2 2/2] cmd: pinmux: support pin name in status command Patrick Delaunay
2021-05-19 15:34 ` Simon Glass
2021-05-19 15:34 ` [PATCH v2 1/2] cmd: pinmux: update result of do_status Simon Glass
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.