Skip to content

Commit f5ed5e6

Browse files
gmarullnashif
authored andcommitted
tests: drivers: pinctrl: gd32: add DT AF parse test
Add a test to check that DT information for AF model is extracted correctly. Signed-off-by: Gerard Marull-Paretas <[email protected]>
1 parent d702e74 commit f5ed5e6

File tree

6 files changed

+228
-0
lines changed

6 files changed

+228
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright (c) 2021 Teslabs Engineering S.L.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
cmake_minimum_required(VERSION 3.20.0)
5+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
6+
7+
project(pinctrl_gd32)
8+
9+
target_sources(app PRIVATE ../common/test_device.c)
10+
if(CONFIG_PINCTRL_GD32_AF)
11+
target_sources(app PRIVATE src/main_af.c)
12+
endif()

tests/drivers/pinctrl/gd32/Kconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Copyright (c) 2021 Teslabs Engineering S.L.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
mainmenu "pinctrl GD32 DT Test"
5+
6+
source "Kconfig.zephyr"
7+
8+
config PINCTRL_TEST_NON_STATIC
9+
bool "Enable access to pin control configuration"
10+
select PINCTRL_NON_STATIC
11+
help
12+
This option should be selected by unit tests that need to access the pin
13+
control configuration defined in a device driver.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright (c) 2021 Teslabs Engineering S.L.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
/ {
7+
test_device: test_device {
8+
compatible = "vnd,pinctrl-device";
9+
pinctrl-0 = <&test_device_default>;
10+
pinctrl-names = "default";
11+
};
12+
};
13+
14+
&pinctrl {
15+
test_device_default: test_device_default {
16+
/* Note: the groups are just meant for testing if properties and
17+
pins are parsed correctly, but do not necessarily represent a
18+
feasible combination */
19+
pins1 {
20+
pinmux = <GD32_PINMUX_AF('A', 0, AF0)>,
21+
<GD32_PINMUX_AF('B', 1, AF1)>;
22+
};
23+
pins2 {
24+
pinmux = <GD32_PINMUX_AF('C', 2, AF2)>;
25+
drive-push-pull;
26+
};
27+
pins3 {
28+
pinmux = <GD32_PINMUX_AF('A', 3, AF3)>;
29+
drive-open-drain;
30+
};
31+
pins4 {
32+
pinmux = <GD32_PINMUX_AF('B', 4, AF4)>;
33+
bias-disable;
34+
};
35+
pins5 {
36+
pinmux = <GD32_PINMUX_AF('C', 5, AF5)>;
37+
bias-pull-up;
38+
};
39+
pins6 {
40+
pinmux = <GD32_PINMUX_AF('A', 6, AF6)>;
41+
bias-pull-down;
42+
};
43+
pins7 {
44+
pinmux = <GD32_PINMUX_AF('B', 7, AF7)>;
45+
slew-rate = "max-speed-2mhz";
46+
};
47+
pins8 {
48+
pinmux = <GD32_PINMUX_AF('C', 8, AF8)>;
49+
slew-rate = "max-speed-25mhz";
50+
};
51+
pins9 {
52+
pinmux = <GD32_PINMUX_AF('A', 9, AF9)>;
53+
slew-rate = "max-speed-50mhz";
54+
};
55+
pins10 {
56+
pinmux = <GD32_PINMUX_AF('B', 10, AF10)>;
57+
slew-rate = "max-speed-200mhz";
58+
};
59+
pins11 {
60+
pinmux = <GD32_PINMUX_AF('C', 11, ANALOG)>;
61+
};
62+
};
63+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright (c) 2021 Teslabs Engineering S.L.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_ZTEST=y
5+
CONFIG_PINCTRL_TEST_NON_STATIC=y
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*
2+
* Copyright (c) 2021 Teslabs Engineering S.L.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
#include <drivers/pinctrl.h>
7+
#include <ztest.h>
8+
9+
/* pin configuration for test device */
10+
#define TEST_DEVICE DT_NODELABEL(test_device)
11+
PINCTRL_DT_DEV_CONFIG_DECLARE(TEST_DEVICE);
12+
static const struct pinctrl_dev_config *pcfg = PINCTRL_DT_DEV_CONFIG_GET(TEST_DEVICE);
13+
14+
static void test_dt_extract(void)
15+
{
16+
const struct pinctrl_state *scfg;
17+
pinctrl_soc_pin_t pin;
18+
19+
zassert_equal(pcfg->state_cnt, 1U, NULL);
20+
21+
scfg = &pcfg->states[0];
22+
23+
zassert_equal(scfg->id, PINCTRL_STATE_DEFAULT, NULL);
24+
zassert_equal(scfg->pin_cnt, 12U, NULL);
25+
26+
pin = scfg->pins[0];
27+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
28+
zassert_equal(GD32_PIN_GET(pin), 0, NULL);
29+
zassert_equal(GD32_AF_GET(pin), GD32_AF0, NULL);
30+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
31+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
32+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
33+
34+
pin = scfg->pins[1];
35+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
36+
zassert_equal(GD32_PIN_GET(pin), 1, NULL);
37+
zassert_equal(GD32_AF_GET(pin), GD32_AF1, NULL);
38+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
39+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
40+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
41+
42+
pin = scfg->pins[2];
43+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
44+
zassert_equal(GD32_PIN_GET(pin), 2, NULL);
45+
zassert_equal(GD32_AF_GET(pin), GD32_AF2, NULL);
46+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
47+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
48+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
49+
50+
pin = scfg->pins[3];
51+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
52+
zassert_equal(GD32_PIN_GET(pin), 3, NULL);
53+
zassert_equal(GD32_AF_GET(pin), GD32_AF3, NULL);
54+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
55+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_OD, NULL);
56+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
57+
58+
pin = scfg->pins[4];
59+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
60+
zassert_equal(GD32_PIN_GET(pin), 4, NULL);
61+
zassert_equal(GD32_AF_GET(pin), GD32_AF4, NULL);
62+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
63+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
64+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
65+
66+
pin = scfg->pins[5];
67+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
68+
zassert_equal(GD32_PIN_GET(pin), 5, NULL);
69+
zassert_equal(GD32_AF_GET(pin), GD32_AF5, NULL);
70+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_PULLUP, NULL);
71+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
72+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
73+
74+
pin = scfg->pins[6];
75+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
76+
zassert_equal(GD32_PIN_GET(pin), 6, NULL);
77+
zassert_equal(GD32_AF_GET(pin), GD32_AF6, NULL);
78+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_PULLDOWN, NULL);
79+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
80+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
81+
82+
pin = scfg->pins[7];
83+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
84+
zassert_equal(GD32_PIN_GET(pin), 7, NULL);
85+
zassert_equal(GD32_AF_GET(pin), GD32_AF7, NULL);
86+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
87+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
88+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
89+
90+
pin = scfg->pins[8];
91+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
92+
zassert_equal(GD32_PIN_GET(pin), 8, NULL);
93+
zassert_equal(GD32_AF_GET(pin), GD32_AF8, NULL);
94+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
95+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
96+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_25MHZ, NULL);
97+
98+
pin = scfg->pins[9];
99+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
100+
zassert_equal(GD32_PIN_GET(pin), 9, NULL);
101+
zassert_equal(GD32_AF_GET(pin), GD32_AF9, NULL);
102+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
103+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
104+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_50MHZ, NULL);
105+
106+
pin = scfg->pins[10];
107+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
108+
zassert_equal(GD32_PIN_GET(pin), 10, NULL);
109+
zassert_equal(GD32_AF_GET(pin), GD32_AF10, NULL);
110+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
111+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
112+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_200MHZ, NULL);
113+
114+
pin = scfg->pins[11];
115+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
116+
zassert_equal(GD32_PIN_GET(pin), 11, NULL);
117+
zassert_equal(GD32_AF_GET(pin), GD32_ANALOG, NULL);
118+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
119+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
120+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
121+
}
122+
123+
void test_main(void)
124+
{
125+
ztest_test_suite(pinctrl_gd32,
126+
ztest_unit_test(test_dt_extract));
127+
ztest_run_test_suite(pinctrl_gd32);
128+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Copyright (c) 2021 Teslabs Engineering S.L.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
tests:
5+
drivers.pinctrl.gd32_af:
6+
tags: drivers pinctrl
7+
platform_allow: gd32f450i_eval

0 commit comments

Comments
 (0)