@@ -321,17 +321,55 @@ size_t pwm_pin_index(pin_size_t pinNumber) {
321321#define ADC_PINS (n, p, i ) \
322322 DIGITAL_PIN_GPIOS_FIND_PIN (DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), p, i)), \
323323 DT_PHA_BY_IDX(DT_PATH(zephyr_user), p, i, pin)),
324+ #define ADC_PINS_GLOBAL (n, p, i ) \
325+ ZARD_GLOBAL_GPIO_OFFSET (DT_PHANDLE_BY_IDX(n, p, i)) + DT_PHA_BY_IDX(n, p, i, pin),
324326#define ADC_CH_CFG (n, p, i ) arduino_adc[i].channel_cfg,
327+ #define ADC_CONN_CHANNEL_CFG (n, p, i ) \
328+ COND_CODE_1 (DT_NODE_HAS_STATUS_OKAY(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i)), \
329+ (ADC_CHANNEL_CFG_DT(ADC_CHANNEL_DT_NODE(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i), \
330+ DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 0 ))),), \
331+ ())
332+ #define ADC_CONN_CHANNEL_DT (n, p, i ) \
333+ COND_CODE_1 (DT_NODE_HAS_STATUS_OKAY(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i)), \
334+ (ADC_DT_SPEC_STRUCT(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i), \
335+ DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 0 )),), \
336+ ())
337+ #define ADC_CONN_PINNUM (n, p, i ) \
338+ COND_CODE_1 (DT_NODE_HAS_STATUS_OKAY(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i)), \
339+ (ZARD_CONNECTOR_PIN_NAME_A(DT_NODELABEL(ZARD_CONNECTOR), \
340+ DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 0 )),), \
341+ ())
325342
326343static const struct adc_dt_spec arduino_adc[] = {
327- DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), io_channels, ADC_DT_SPEC)};
344+ #if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
345+ DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), io_channels, ADC_DT_SPEC)
346+ #elif defined(ZARD_ADC_CONNECTOR)
347+ DT_FOREACH_MAP_ENTRY (DT_NODELABEL (ZARD_ADC_CONNECTOR), io_channel_map, ADC_CONN_CHANNEL_DT)
348+ #endif
349+ };
328350
329- /* io-channel-pins node provides a mapping digital pin numbers to adc channels */
351+ /* adc-pin-gpios provides a mapping digital pin numbers to adc channels */
330352const pin_size_t arduino_analog_pins[] = {
331- DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), adc_pin_gpios, ADC_PINS)};
353+ #if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), adc_pin_gpios)
354+ #if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), digital_pin_gpios)
355+ DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), adc_pin_gpios, ADC_PINS)
356+ #else
357+ DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), adc_pin_gpios, ADC_PINS_GLOBAL)
358+ #endif
359+ #elif defined(ZARD_ADC_CONNECTOR)
360+ DT_FOREACH_MAP_ENTRY (DT_NODELABEL (ZARD_ADC_CONNECTOR), io_channel_map, ADC_CONN_PINNUM)
361+ #endif
362+ };
332363
333364struct adc_channel_cfg channel_cfg[] = {
334- DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), io_channels, ADC_CH_CFG)};
365+ #if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
366+ DT_FOREACH_PROP_ELEM (DT_PATH (zephyr_user), io_channels, ADC_CH_CFG)
367+ #elif defined(ZARD_ADC_CONNECTOR)
368+ DT_FOREACH_MAP_ENTRY (DT_NODELABEL (ZARD_ADC_CONNECTOR), io_channel_map, ADC_CONN_CHANNEL_CFG)
369+ #endif
370+ };
371+
372+ BUILD_ASSERT (ARRAY_SIZE(arduino_adc) == ARRAY_SIZE(arduino_analog_pins));
335373
336374size_t analog_pin_index (pin_size_t pinNumber) {
337375 for (size_t i = 0 ; i < ARRAY_SIZE (arduino_analog_pins); i++) {
0 commit comments