All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.