aboutsummaryrefslogtreecommitdiff
path: root/test/dm/pinmux.c
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2020-09-14 11:01:57 -0400
committerTom Rini <trini@konsulko.com>2020-10-08 11:42:36 -0400
commit7f0f1806e3a474dc15b6bad806b4afa967447774 (patch)
tree67ae12ff6c548fe4c3f13177a8a4ef9b3ea781b8 /test/dm/pinmux.c
parent5eee93e5b1ae9b2b31db99f774e0f635ad276068 (diff)
downloadu-boot-7f0f1806e3a474dc15b6bad806b4afa967447774.zip
u-boot-7f0f1806e3a474dc15b6bad806b4afa967447774.tar.gz
u-boot-7f0f1806e3a474dc15b6bad806b4afa967447774.tar.bz2
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/dm/pinmux.c')
-rw-r--r--test/dm/pinmux.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/dm/pinmux.c b/test/dm/pinmux.c
new file mode 100644
index 0000000..047184d
--- /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);