Skip to content

Commit 3e1e370

Browse files
committed
variants: Introduce a digital-pin-gpios array to define digital pin
The `d0-gpios` node format makes it difficult to handle digital pin configuration from DTS macros. Introduce the simple array `digital-pin-gpios` to define digital pin to GPIO port and pin mapping. Signed-off-by: TOKITA Hiroshi <[email protected]>
1 parent 5c305c6 commit 3e1e370

File tree

6 files changed

+118
-131
lines changed

6 files changed

+118
-131
lines changed

variants/arduino_mkrzero/arduino_mkrzero.overlay

+22-22
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,28 @@
88

99
/ {
1010
zephyr,user {
11-
d0_gpios = <&arduino_mkr_header 0 0>;
12-
d1_gpios = <&arduino_mkr_header 1 0>;
13-
d2_gpios = <&arduino_mkr_header 2 0>;
14-
d3_gpios = <&arduino_mkr_header 3 0>;
15-
d4_gpios = <&arduino_mkr_header 4 0>;
16-
d5_gpios = <&arduino_mkr_header 5 0>;
17-
d6_gpios = <&arduino_mkr_header 6 0>;
18-
d7_gpios = <&arduino_mkr_header 7 0>;
19-
d8_gpios = <&arduino_mkr_header 8 0>;
20-
d9_gpios = <&arduino_mkr_header 9 0>;
21-
d10_gpios = <&arduino_mkr_header 10 0>;
22-
d11_gpios = <&arduino_mkr_header 11 0>;
23-
d12_gpios = <&arduino_mkr_header 12 0>;
24-
d13_gpios = <&arduino_mkr_header 13 0>;
25-
d14_gpios = <&arduino_mkr_header 14 0>; /* D14 / A0 */
26-
d15_gpios = <&arduino_mkr_header 15 0>;
27-
d16_gpios = <&arduino_mkr_header 16 0>;
28-
d17_gpios = <&arduino_mkr_header 17 0>;
29-
d18_gpios = <&arduino_mkr_header 18 0>; /* D18 / A4 / I2C-SDA */
30-
d19_gpios = <&arduino_mkr_header 19 0>; /* D19 / A5 / I2C-SCL */
31-
d20_gpios = <&arduino_mkr_header 20 0>;
32-
d21_gpios = <&arduino_mkr_header 21 0>;
11+
digital-pin-gpios = <&arduino_mkr_header 0 0>,
12+
<&arduino_mkr_header 1 0>,
13+
<&arduino_mkr_header 2 0>,
14+
<&arduino_mkr_header 3 0>,
15+
<&arduino_mkr_header 4 0>,
16+
<&arduino_mkr_header 5 0>,
17+
<&arduino_mkr_header 6 0>,
18+
<&arduino_mkr_header 7 0>,
19+
<&arduino_mkr_header 8 0>,
20+
<&arduino_mkr_header 9 0>,
21+
<&arduino_mkr_header 10 0>,
22+
<&arduino_mkr_header 11 0>,
23+
<&arduino_mkr_header 12 0>,
24+
<&arduino_mkr_header 13 0>,
25+
<&arduino_mkr_header 14 0>, /* D14 / A0 */
26+
<&arduino_mkr_header 15 0>,
27+
<&arduino_mkr_header 16 0>,
28+
<&arduino_mkr_header 17 0>,
29+
<&arduino_mkr_header 18 0>, /* D18 / A4 / I2C-SDA */
30+
<&arduino_mkr_header 19 0>, /* D19 / A5 / I2C-SCL */
31+
<&arduino_mkr_header 20 0>,
32+
<&arduino_mkr_header 21 0>;
3333

3434
pwms = <&tcc0 2 255>,
3535
<&tcc0 3 255>;

variants/arduino_nano_33_ble/arduino_nano_33_ble.overlay

+22-22
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
/ {
22
zephyr,user {
3-
d0_gpios = <&arduino_nano_header 0 0>;
4-
d1_gpios = <&arduino_nano_header 1 0>;
5-
d2_gpios = <&arduino_nano_header 2 0>;
6-
d3_gpios = <&arduino_nano_header 3 0>;
7-
d4_gpios = <&arduino_nano_header 4 0>;
8-
d5_gpios = <&arduino_nano_header 5 0>;
9-
d6_gpios = <&arduino_nano_header 6 0>;
10-
d7_gpios = <&arduino_nano_header 7 0>;
11-
d8_gpios = <&arduino_nano_header 8 0>;
12-
d9_gpios = <&arduino_nano_header 9 0>;
13-
d10_gpios = <&arduino_nano_header 10 0>;
14-
d11_gpios = <&arduino_nano_header 11 0>;
15-
d12_gpios = <&arduino_nano_header 12 0>;
16-
d13_gpios = <&arduino_nano_header 13 0>;
17-
d14_gpios = <&arduino_nano_header 14 0>; /* D14 / A0 */
18-
d15_gpios = <&arduino_nano_header 15 0>;
19-
d16_gpios = <&arduino_nano_header 16 0>;
20-
d17_gpios = <&arduino_nano_header 17 0>;
21-
d18_gpios = <&arduino_nano_header 18 0>; /* D18 / A4 / I2C-SDA */
22-
d19_gpios = <&arduino_nano_header 19 0>; /* D19 / A5 / I2C-SCL */
23-
d20_gpios = <&arduino_nano_header 20 0>;
24-
d21_gpios = <&arduino_nano_header 21 0>;
3+
digital-pin-gpios = <&arduino_nano_header 0 0>,
4+
<&arduino_nano_header 1 0>,
5+
<&arduino_nano_header 2 0>,
6+
<&arduino_nano_header 3 0>,
7+
<&arduino_nano_header 4 0>,
8+
<&arduino_nano_header 5 0>,
9+
<&arduino_nano_header 6 0>,
10+
<&arduino_nano_header 7 0>,
11+
<&arduino_nano_header 8 0>,
12+
<&arduino_nano_header 9 0>,
13+
<&arduino_nano_header 10 0>,
14+
<&arduino_nano_header 11 0>,
15+
<&arduino_nano_header 12 0>,
16+
<&arduino_nano_header 13 0>,
17+
<&arduino_nano_header 14 0>, /* D14 / A0 */
18+
<&arduino_nano_header 15 0>,
19+
<&arduino_nano_header 16 0>,
20+
<&arduino_nano_header 17 0>,
21+
<&arduino_nano_header 18 0>, /* D18 / A4 / I2C-SDA */
22+
<&arduino_nano_header 19 0>, /* D19 / A5 / I2C-SCL */
23+
<&arduino_nano_header 20 0>,
24+
<&arduino_nano_header 21 0>;
2525

2626
pwms = <&pwm1 1 255 PWM_POLARITY_NORMAL>,
2727
<&pwm1 2 255 PWM_POLARITY_NORMAL>,

variants/arduino_nano_33_ble_sense/arduino_nano_33_ble_sense.overlay

+22-22
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
/ {
22
zephyr,user {
3-
d0_gpios = <&arduino_nano_header 0 0>;
4-
d1_gpios = <&arduino_nano_header 1 0>;
5-
d2_gpios = <&arduino_nano_header 2 0>;
6-
d3_gpios = <&arduino_nano_header 3 0>;
7-
d4_gpios = <&arduino_nano_header 4 0>;
8-
d5_gpios = <&arduino_nano_header 5 0>;
9-
d6_gpios = <&arduino_nano_header 6 0>;
10-
d7_gpios = <&arduino_nano_header 7 0>;
11-
d8_gpios = <&arduino_nano_header 8 0>;
12-
d9_gpios = <&arduino_nano_header 9 0>;
13-
d10_gpios = <&arduino_nano_header 10 0>;
14-
d11_gpios = <&arduino_nano_header 11 0>;
15-
d12_gpios = <&arduino_nano_header 12 0>;
16-
d13_gpios = <&arduino_nano_header 13 0>;
17-
d14_gpios = <&arduino_nano_header 14 0>; /* D14 / A0 */
18-
d15_gpios = <&arduino_nano_header 15 0>;
19-
d16_gpios = <&arduino_nano_header 16 0>;
20-
d17_gpios = <&arduino_nano_header 17 0>;
21-
d18_gpios = <&arduino_nano_header 18 0>; /* D18 / A4 / I2C-SDA */
22-
d19_gpios = <&arduino_nano_header 19 0>; /* D19 / A5 / I2C-SCL */
23-
d20_gpios = <&arduino_nano_header 20 0>;
24-
d21_gpios = <&arduino_nano_header 21 0>;
3+
digital-pin-gpios = <&arduino_nano_header 0 0>,
4+
<&arduino_nano_header 1 0>,
5+
<&arduino_nano_header 2 0>,
6+
<&arduino_nano_header 3 0>,
7+
<&arduino_nano_header 4 0>,
8+
<&arduino_nano_header 5 0>,
9+
<&arduino_nano_header 6 0>,
10+
<&arduino_nano_header 7 0>,
11+
<&arduino_nano_header 8 0>,
12+
<&arduino_nano_header 9 0>,
13+
<&arduino_nano_header 10 0>,
14+
<&arduino_nano_header 11 0>,
15+
<&arduino_nano_header 12 0>,
16+
<&arduino_nano_header 13 0>,
17+
<&arduino_nano_header 14 0>, /* D14 / A0 */
18+
<&arduino_nano_header 15 0>,
19+
<&arduino_nano_header 16 0>,
20+
<&arduino_nano_header 17 0>,
21+
<&arduino_nano_header 18 0>, /* D18 / A4 / I2C-SDA */
22+
<&arduino_nano_header 19 0>, /* D19 / A5 / I2C-SCL */
23+
<&arduino_nano_header 20 0>,
24+
<&arduino_nano_header 21 0>;
2525

2626
pwms = <&pwm1 1 255 PWM_POLARITY_NORMAL>,
2727
<&pwm1 2 255 PWM_POLARITY_NORMAL>,

variants/arduino_nano_33_iot/arduino_nano_33_iot.overlay

+22-22
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,28 @@
22

33
/ {
44
zephyr,user {
5-
d0_gpios = <&arduino_nano_header 0 0>;
6-
d1_gpios = <&arduino_nano_header 1 0>;
7-
d2_gpios = <&arduino_nano_header 2 0>;
8-
d3_gpios = <&arduino_nano_header 3 0>;
9-
d4_gpios = <&arduino_nano_header 4 0>;
10-
d5_gpios = <&arduino_nano_header 5 0>;
11-
d6_gpios = <&arduino_nano_header 6 0>;
12-
d7_gpios = <&arduino_nano_header 7 0>;
13-
d8_gpios = <&arduino_nano_header 8 0>;
14-
d9_gpios = <&arduino_nano_header 9 0>;
15-
d10_gpios = <&arduino_nano_header 10 0>;
16-
d11_gpios = <&arduino_nano_header 11 0>;
17-
d12_gpios = <&arduino_nano_header 12 0>;
18-
d13_gpios = <&arduino_nano_header 13 0>;
19-
d14_gpios = <&arduino_nano_header 14 0>; /* D14 / A0 */
20-
d15_gpios = <&arduino_nano_header 15 0>;
21-
d16_gpios = <&arduino_nano_header 16 0>;
22-
d17_gpios = <&arduino_nano_header 17 0>;
23-
d18_gpios = <&arduino_nano_header 18 0>; /* D18 / A4 / I2C-SDA */
24-
d19_gpios = <&arduino_nano_header 19 0>; /* D19 / A5 / I2C-SCL */
25-
d20_gpios = <&arduino_nano_header 20 0>;
26-
d21_gpios = <&arduino_nano_header 21 0>;
5+
digital-pin-gpios = <&arduino_nano_header 0 0>,
6+
<&arduino_nano_header 1 0>,
7+
<&arduino_nano_header 2 0>,
8+
<&arduino_nano_header 3 0>,
9+
<&arduino_nano_header 4 0>,
10+
<&arduino_nano_header 5 0>,
11+
<&arduino_nano_header 6 0>,
12+
<&arduino_nano_header 7 0>,
13+
<&arduino_nano_header 8 0>,
14+
<&arduino_nano_header 9 0>,
15+
<&arduino_nano_header 10 0>,
16+
<&arduino_nano_header 11 0>,
17+
<&arduino_nano_header 12 0>,
18+
<&arduino_nano_header 13 0>,
19+
<&arduino_nano_header 14 0>, /* D14 / A0 */
20+
<&arduino_nano_header 15 0>,
21+
<&arduino_nano_header 16 0>,
22+
<&arduino_nano_header 17 0>,
23+
<&arduino_nano_header 18 0>, /* D18 / A4 / I2C-SDA */
24+
<&arduino_nano_header 19 0>, /* D19 / A5 / I2C-SCL */
25+
<&arduino_nano_header 20 0>,
26+
<&arduino_nano_header 21 0>;
2727

2828
pwms = <&tcc0 0 255>,
2929
<&tcc0 1 255>,

variants/nrf52840dk_nrf52840/nrf52840dk_nrf52840.overlay

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
/ {
22
zephyr,user {
3-
d0_gpios = <&arduino_header 6 0>; /* Digital */
4-
d1_gpios = <&arduino_header 7 0>;
5-
d2_gpios = <&arduino_header 8 0>;
6-
d3_gpios = <&arduino_header 9 0>;
7-
d4_gpios = <&arduino_header 10 0>;
8-
d5_gpios = <&arduino_header 11 0>;
9-
d6_gpios = <&arduino_header 12 0>;
10-
d7_gpios = <&arduino_header 13 0>;
11-
d8_gpios = <&arduino_header 14 0>;
12-
d9_gpios = <&arduino_header 15 0>;
13-
d10_gpios = <&arduino_header 16 0>;
14-
d11_gpios = <&arduino_header 17 0>;
15-
d12_gpios = <&arduino_header 18 0>;
16-
d13_gpios = <&arduino_header 19 0>;
17-
d14_gpios = <&arduino_header 20 0>;
18-
d15_gpios = <&arduino_header 21 0>;
19-
d16_gpios = <&arduino_header 0 0>; /* Analog */
20-
d17_gpios = <&arduino_header 1 0>;
21-
d18_gpios = <&arduino_header 2 0>;
22-
d19_gpios = <&arduino_header 3 0>;
23-
d20_gpios = <&arduino_header 4 0>;
24-
d21_gpios = <&arduino_header 5 0>;
25-
d22_gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
3+
digital-pin-gpios = <&arduino_header 6 0>, /* Digital */
4+
<&arduino_header 7 0>,
5+
<&arduino_header 8 0>,
6+
<&arduino_header 9 0>,
7+
<&arduino_header 10 0>,
8+
<&arduino_header 11 0>,
9+
<&arduino_header 12 0>,
10+
<&arduino_header 13 0>,
11+
<&arduino_header 14 0>,
12+
<&arduino_header 15 0>,
13+
<&arduino_header 16 0>,
14+
<&arduino_header 17 0>,
15+
<&arduino_header 18 0>,
16+
<&arduino_header 19 0>,
17+
<&arduino_header 20 0>,
18+
<&arduino_header 21 0>,
19+
<&arduino_header 0 0>, /* Analog */
20+
<&arduino_header 1 0>,
21+
<&arduino_header 2 0>,
22+
<&arduino_header 3 0>,
23+
<&arduino_header 4 0>,
24+
<&arduino_header 5 0>,
25+
<&gpio0 13 GPIO_ACTIVE_LOW>;
2626

2727
pwms = <&pwm0 1 255 PWM_POLARITY_NORMAL>,
2828
<&pwm0 2 255 PWM_POLARITY_NORMAL>,

variants/variants.h

+7-20
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,20 @@
1818
#include "arduino_mkrzero_pinmap.h"
1919
#endif // CONFIG_BOARD_ARDUINO_MKRZERO
2020

21-
#define MAX_DIGITAL_PINS 255
22-
23-
#define DN_ENUMS(n, _) COND_CODE_1(DT_NODE_HAS_PROP(DT_PATH(zephyr_user), \
24-
d ## n ## _gpios), (D ## n ,), ())
25-
26-
#define LABEL_UPPER_TOKEN_COMMA(nodeid) DT_STRING_UPPER_TOKEN(nodeid, label),
21+
#define DN_ENUMS(n, p, i) D##i = i
2722

2823
/*
2924
* expand as
3025
* enum digitalPins { D0, D1, ... LED... NUM_OF_DIGITAL_PINS };
3126
*/
32-
enum digitalPins { LISTIFY(MAX_DIGITAL_PINS, DN_ENUMS, ())
33-
DT_FOREACH_CHILD(DT_PATH(leds), LABEL_UPPER_TOKEN_COMMA)
34-
NUM_OF_DIGITAL_PINS };
35-
36-
37-
#define NUMBERED_GPIO_DT_SPEC(n, _) \
38-
COND_CODE_1(DT_NODE_HAS_PROP(DT_PATH(zephyr_user), d ## n ## _gpios), \
39-
(GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d ## n ## _gpios),), ())
40-
41-
#define LABELED_GPIO_DT_SPEC(nodeid) GPIO_DT_SPEC_GET_BY_IDX(nodeid, gpios, 0),
42-
43-
static struct gpio_dt_spec arduino_pins[NUM_OF_DIGITAL_PINS] = {
44-
LISTIFY(MAX_DIGITAL_PINS, NUMBERED_GPIO_DT_SPEC, ())
45-
DT_FOREACH_CHILD(DT_PATH(leds), LABELED_GPIO_DT_SPEC)
27+
enum digitalPins {
28+
DT_FOREACH_PROP_ELEM_SEP(DT_PATH(zephyr_user), digital_pin_gpios, DN_ENUMS, (, )),
29+
NUM_OF_DIGITAL_PINS
4630
};
4731

32+
const struct gpio_dt_spec arduino_pins[] = {DT_FOREACH_PROP_ELEM_SEP(
33+
DT_PATH(zephyr_user), digital_pin_gpios, GPIO_DT_SPEC_GET_BY_IDX, (, ))};
34+
4835
#ifdef CONFIG_ADC
4936

5037
#define AN_ENUMS(n, p, i) A ## i = DT_PROP_BY_IDX(n, p, i),

0 commit comments

Comments
 (0)