aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSean Anderson2020-09-14 11:01:57 -0400
committerTom Rini2020-10-08 11:42:36 -0400
commit7f0f1806e3a474dc15b6bad806b4afa967447774 (patch)
tree67ae12ff6c548fe4c3f13177a8a4ef9b3ea781b8 /test
parent5eee93e5b1ae9b2b31db99f774e0f635ad276068 (diff)
test: pinmux: Add test for pin muxing
This extends the pinctrl-sandbox driver to support pin muxing, and adds a test for that behaviour. The test is done in C and not python (like the existing tests for the pinctrl uclass) because it needs to call pinctrl_select_state. Another option could be to add a command that invokes pinctrl_select_state and then test everything in test/py/tests/test_pinmux.py. The pinctrl-sandbox driver now mimics the way that many pinmux devices work. There are two groups of pins which are muxed together, as well as four pins which are muxed individually. I have tried to test all normal paths. However, very few error cases are explicitly checked for. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test')
-rw-r--r--test/dm/Makefile3
-rw-r--r--test/dm/pinmux.c57
-rw-r--r--test/py/tests/test_pinmux.py36
3 files changed, 78 insertions, 18 deletions
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 70ba1b66953..e2b07983885 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -81,4 +81,7 @@ obj-$(CONFIG_CLK_K210_SET_RATE) += k210_pll.o
obj-$(CONFIG_SIMPLE_PM_BUS) += simple-pm-bus.o
obj-$(CONFIG_RESET_SYSCON) += syscon-reset.o
obj-$(CONFIG_SCMI_FIRMWARE) += scmi.o
+ifneq ($(CONFIG_PINMUX),)
+obj-$(CONFIG_PINCONF) += pinmux.o
+endif
endif
diff --git a/test/dm/pinmux.c b/test/dm/pinmux.c
new file mode 100644
index 00000000000..047184d4bcb
--- /dev/null
+++ b/test/dm/pinmux.c
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 Sean Anderson <seanga2@gmail.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/pinctrl.h>
+#include <dm/test.h>
+#include <test/ut.h>
+
+static int dm_test_pinmux(struct unit_test_state *uts)
+{
+ char buf[64];
+ struct udevice *dev;
+
+#define test_muxing(selector, expected) do { \
+ ut_assertok(pinctrl_get_pin_muxing(dev, selector, buf, sizeof(buf))); \
+ ut_asserteq_str(expected, (char *)&buf); \
+} while (0)
+
+ ut_assertok(uclass_get_device_by_name(UCLASS_PINCTRL, "pinctrl", &dev));
+ test_muxing(0, "UART TX.");
+ test_muxing(1, "UART RX.");
+ test_muxing(2, "I2S SCK.");
+ test_muxing(3, "I2S SD.");
+ test_muxing(4, "I2S WS.");
+ test_muxing(5, "GPIO0 bias-pull-up input-disable.");
+ test_muxing(6, "GPIO1 drive-open-drain.");
+ test_muxing(7, "GPIO2 bias-pull-down input-enable.");
+ test_muxing(8, "GPIO3 bias-disable.");
+
+ ut_assertok(pinctrl_select_state(dev, "alternate"));
+ test_muxing(0, "I2C SCL drive-open-drain.");
+ test_muxing(1, "I2C SDA drive-open-drain.");
+ test_muxing(2, "SPI SCLK.");
+ test_muxing(3, "SPI MOSI.");
+ test_muxing(4, "SPI MISO.");
+ test_muxing(5, "SPI CS0.");
+ test_muxing(6, "SPI CS1.");
+ test_muxing(7, "GPIO2 bias-pull-down input-enable.");
+ test_muxing(8, "GPIO3 bias-disable.");
+
+ ut_assertok(pinctrl_select_state(dev, "0"));
+ test_muxing(0, "I2C SCL drive-open-drain.");
+ test_muxing(1, "I2C SDA drive-open-drain.");
+ test_muxing(2, "I2S SCK.");
+ test_muxing(3, "I2S SD.");
+ test_muxing(4, "I2S WS.");
+ test_muxing(5, "GPIO0 bias-pull-up input-disable.");
+ test_muxing(6, "GPIO1 drive-open-drain.");
+ test_muxing(7, "GPIO2 bias-pull-down input-enable.");
+ test_muxing(8, "GPIO3 bias-disable.");
+
+ return 0;
+}
+DM_TEST(dm_test_pinmux, UT_TESTF_SCAN_FDT);
diff --git a/test/py/tests/test_pinmux.py b/test/py/tests/test_pinmux.py
index 4e6df992a4e..0cbbae000c8 100644
--- a/test/py/tests/test_pinmux.py
+++ b/test/py/tests/test_pinmux.py
@@ -28,15 +28,15 @@ def test_pinmux_status_all(u_boot_console):
assert ('a6 : gpio output .' in output)
assert ('pinctrl:' in output)
- assert ('SCL : I2C SCL.' in output)
- assert ('SDA : I2C SDA.' in output)
- assert ('TX : Uart TX.' in output)
- assert ('RX : Uart RX.' in output)
- assert ('W1 : 1-wire gpio.' in output)
- assert ('GPIO0 : gpio bias-pull-up input-disable.' in output)
- assert ('GPIO1 : gpio drive-open-drain.' in output)
- assert ('GPIO2 : gpio bias-pull-down input-enable.' in output)
- assert ('GPIO3 : gpio bias-disable.' in output)
+ assert ('P0 : UART TX.' in output)
+ assert ('P1 : UART RX.' in output)
+ assert ('P2 : I2S SCK.' in output)
+ assert ('P3 : I2S SD.' in output)
+ assert ('P4 : I2S WS.' in output)
+ assert ('P5 : GPIO0 bias-pull-up input-disable.' in output)
+ 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)
@pytest.mark.buildconfigspec('cmd_pinmux')
@pytest.mark.boardspec('sandbox')
@@ -73,12 +73,12 @@ def test_pinmux_status(u_boot_console):
assert (not 'pinctrl-gpio:' in output)
assert (not 'pinctrl:' in output)
- assert ('SCL : I2C SCL.' in output)
- assert ('SDA : I2C SDA.' in output)
- assert ('TX : Uart TX.' in output)
- assert ('RX : Uart RX.' in output)
- assert ('W1 : 1-wire gpio.' in output)
- assert ('GPIO0 : gpio bias-pull-up input-disable.' in output)
- assert ('GPIO1 : gpio drive-open-drain.' in output)
- assert ('GPIO2 : gpio bias-pull-down input-enable.' in output)
- assert ('GPIO3 : gpio bias-disable.' in output)
+ assert ('P0 : UART TX.' in output)
+ assert ('P1 : UART RX.' in output)
+ assert ('P2 : I2S SCK.' in output)
+ assert ('P3 : I2S SD.' in output)
+ assert ('P4 : I2S WS.' in output)
+ assert ('P5 : GPIO0 bias-pull-up input-disable.' in output)
+ 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)