From 2b8de7436bbdb54da99bf6bdb79359876fd3bc1d Mon Sep 17 00:00:00 2001 From: robert-hh Date: Wed, 24 Jan 2024 16:48:43 +0100 Subject: [PATCH] rp2/machine_adc: Initialise ADC GPIO when a Pin is referenced by int. The change closes the gap in the API when an integer is used as Pin reference. With the change, e.g. ADC(26), ADC(Pin(26)) and ADC("GP26") behave identically and the GPIO is initialised in ACD/high-Z mode. Only when using ADC channel numbers 0-3 are the corresponding GPIO left uninitialised, and then the user is responsible for configuring the GPIO. Signed-off-by: robert-hh --- ports/rp2/machine_adc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ports/rp2/machine_adc.c b/ports/rp2/machine_adc.c index e5a428563..3594f4b12 100644 --- a/ports/rp2/machine_adc.c +++ b/ports/rp2/machine_adc.c @@ -74,14 +74,14 @@ static mp_obj_t mp_machine_adc_make_new(const mp_obj_type_t *type, size_t n_args const machine_pin_obj_t *pin = NULL; if (mp_obj_is_int(source)) { - // Get and validate channel number. channel = mp_obj_get_int(source); - if (ADC_IS_VALID_GPIO(channel)) { - channel = ADC_CHANNEL_FROM_GPIO(channel); - } else if (!(channel >= 0 && channel <= ADC_CHANNEL_TEMPSENSOR)) { - mp_raise_ValueError(MP_ERROR_TEXT("invalid channel")); + if (!(channel >= 0 && channel <= ADC_CHANNEL_TEMPSENSOR)) { + // Not a valid ADC channel, fallback to searching for a pin. + channel = -1; } - } else { + } + + if (channel == -1) { // Get GPIO and check it has ADC capabilities. pin = machine_pin_find(source); bool valid_adc_pin = false;