|
1 | 1 | /* |
2 | 2 | * Copyright (c) 2022 Dhruva Gole |
| 3 | + * Copyright (c) 2025 TOKITA Hiroshi |
3 | 4 | * |
4 | 5 | * SPDX-License-Identifier: Apache-2.0 |
5 | 6 | */ |
|
14 | 15 | #include <zephyr/drivers/adc.h> |
15 | 16 | #include <zephyr/drivers/i2c.h> |
16 | 17 |
|
| 18 | +#define ZARD_ADD_NGPIOS(i, n, p) DT_PROP(DT_PROP_BY_IDX(n, p, i), ngpios) + |
| 19 | +#define ZARD_ACCUM_NGPIOS(n, p, i, nd) \ |
| 20 | + COND_CODE_1(DT_SAME_NODE(DT_PROP_BY_IDX(n, p, i), nd), \ |
| 21 | + (LISTIFY(i, ZARD_ADD_NGPIOS, (), n, p)), ()) |
| 22 | +#define ZARD_GLOBAL_GPIO_NUM(n, p, i) \ |
| 23 | + DT_FOREACH_PROP_ELEM_VARGS(DT_PATH(zephyr_user), gpios, ZARD_ACCUM_NGPIOS, \ |
| 24 | + DT_PHANDLE_BY_IDX(n, p, i)) \ |
| 25 | + DT_PHA_BY_IDX(n, p, i, pin) |
17 | 26 | #define DIGITAL_PIN_EXISTS(n, p, i, dev, num) \ |
18 | 27 | (((dev == DT_REG_ADDR(DT_PHANDLE_BY_IDX(n, p, i))) && \ |
19 | 28 | (num == DT_PHA_BY_IDX(n, p, i, pin))) \ |
|
46 | 55 |
|
47 | 56 | #if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), builtin_led_gpios) && \ |
48 | 57 | (DT_PROP_LEN(DT_PATH(zephyr_user), builtin_led_gpios) > 0) |
| 58 | +#define LED_BUILTIN ZARD_GLOBAL_GPIO_NUM(DT_PATH(zephyr_user), builtin_led_gpios, 0) |
49 | 59 |
|
50 | 60 | #if !(DT_FOREACH_PROP_ELEM_SEP_VARGS( \ |
51 | 61 | DT_PATH(zephyr_user), digital_pin_gpios, DIGITAL_PIN_EXISTS, (+), \ |
|
67 | 77 | DT_PHA_BY_IDX(DT_ALIAS(led0), gpios, 0, pin)) > 0) |
68 | 78 | #warning "pin not found in digital_pin_gpios" |
69 | 79 | #else |
| 80 | +//#define LED_BUILTIN ZARD_GLOBAL_GPIO_NUM(DT_ALIAS(led0), gpios, 0) |
70 | 81 | #define LED_BUILTIN \ |
71 | 82 | DIGITAL_PIN_GPIOS_FIND_PIN(DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_ALIAS(led0), gpios, 0)), \ |
72 | 83 | DT_PHA_BY_IDX(DT_ALIAS(led0), gpios, 0, pin)) |
|
80 | 91 |
|
81 | 92 | /* |
82 | 93 | * expand as |
83 | | - * enum digitalPins { D0, D1, ... LED... NUM_OF_DIGITAL_PINS }; |
| 94 | + * enum digitalPins { D0, D1, ... }; |
84 | 95 | */ |
| 96 | +#define ZARD_DN_ENUMS(n, p, i) DX##i = ZARD_GLOBAL_GPIO_NUM(n, p, i) |
| 97 | +enum digitalPinsx { |
| 98 | + DT_FOREACH_PROP_ELEM_SEP(DT_PATH(zephyr_user), digital_pin_gpios, ZARD_DN_ENUMS, (,)) |
| 99 | +}; |
| 100 | + |
85 | 101 | enum digitalPins { |
86 | 102 | DT_FOREACH_PROP_ELEM_SEP(DT_PATH(zephyr_user), digital_pin_gpios, DN_ENUMS, (, )), |
87 | 103 | NUM_OF_DIGITAL_PINS |
88 | 104 | }; |
89 | 105 |
|
90 | 106 | #ifdef CONFIG_ADC |
91 | 107 |
|
| 108 | +#define ZARD_AN_ENUMS(n, p, i) AX##i = ZARD_GLOBAL_GPIO_NUM(n, p, i) |
| 109 | +enum analogPinsx { |
| 110 | + DT_FOREACH_PROP_ELEM_SEP(DT_PATH(zephyr_user), adc_pin_gpios, ZARD_AN_ENUMS, (,)) |
| 111 | +}; |
92 | 112 | #define AN_ENUMS(n, p, i) A ## i = DIGITAL_PIN_GPIOS_FIND_PIN( \ |
93 | 113 | DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), p, i)), \ |
94 | 114 | DT_PHA_BY_IDX(DT_PATH(zephyr_user), p, i, pin)), |
|
0 commit comments