From 484d0eb9e5e03e8b0f0ab2234a2e1a35bb4a3f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Fri, 14 Feb 2025 13:07:55 +0100 Subject: [PATCH 1/3] [nrf fromtree] drivers: adc: Add support for gain 2/7 in nRF devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extend current adc gains with new entry 2/7. Signed-off-by: Karol Lasończyk Signed-off-by: Sebastian Głąb (cherry picked from commit 057de458e2d3c7187f32ff109d1179fa8b8ca8b9) --- drivers/adc/adc_common.c | 1 + drivers/adc/adc_nrfx_saadc.c | 5 +++++ dts/bindings/adc/adc-controller.yaml | 2 ++ include/zephyr/drivers/adc.h | 1 + 4 files changed, 9 insertions(+) diff --git a/drivers/adc/adc_common.c b/drivers/adc/adc_common.c index cf6472718de..eed4ec4ead6 100644 --- a/drivers/adc/adc_common.c +++ b/drivers/adc/adc_common.c @@ -17,6 +17,7 @@ int adc_gain_invert(enum adc_gain gain, [ADC_GAIN_1_6] = {.mul = 6, .div = 1}, [ADC_GAIN_1_5] = {.mul = 5, .div = 1}, [ADC_GAIN_1_4] = {.mul = 4, .div = 1}, + [ADC_GAIN_2_7] = {.mul = 7, .div = 2}, [ADC_GAIN_1_3] = {.mul = 3, .div = 1}, [ADC_GAIN_2_5] = {.mul = 5, .div = 2}, [ADC_GAIN_1_2] = {.mul = 2, .div = 1}, diff --git a/drivers/adc/adc_nrfx_saadc.c b/drivers/adc/adc_nrfx_saadc.c index 279ba412651..e3ea05f1248 100644 --- a/drivers/adc/adc_nrfx_saadc.c +++ b/drivers/adc/adc_nrfx_saadc.c @@ -202,6 +202,11 @@ static int adc_nrfx_channel_setup(const struct device *dev, config.gain = NRF_SAADC_GAIN1_4; break; #endif +#if defined(SAADC_CH_CONFIG_GAIN_Gain2_7) + case ADC_GAIN_2_7: + config.gain = NRF_SAADC_GAIN2_7; + break; +#endif #if defined(SAADC_CH_CONFIG_GAIN_Gain1_3) || defined(SAADC_CH_CONFIG_GAIN_Gain2_6) case ADC_GAIN_1_3: config.gain = NRF_SAADC_GAIN1_3; diff --git a/dts/bindings/adc/adc-controller.yaml b/dts/bindings/adc/adc-controller.yaml index c52c913d522..8f38ccf3e4f 100644 --- a/dts/bindings/adc/adc-controller.yaml +++ b/dts/bindings/adc/adc-controller.yaml @@ -41,6 +41,7 @@ child-binding: - ADC_GAIN_1_6: x 1/6 - ADC_GAIN_1_5: x 1/5 - ADC_GAIN_1_4: x 1/4 + - ADC_GAIN_2_7: x 2/7 - ADC_GAIN_1_3: x 1/3 - ADC_GAIN_2_5: x 2/5 - ADC_GAIN_1_2: x 1/2 @@ -62,6 +63,7 @@ child-binding: - "ADC_GAIN_1_6" - "ADC_GAIN_1_5" - "ADC_GAIN_1_4" + - "ADC_GAIN_2_7" - "ADC_GAIN_1_3" - "ADC_GAIN_2_5" - "ADC_GAIN_1_2" diff --git a/include/zephyr/drivers/adc.h b/include/zephyr/drivers/adc.h index 1c95baa9707..7eabbe17937 100644 --- a/include/zephyr/drivers/adc.h +++ b/include/zephyr/drivers/adc.h @@ -35,6 +35,7 @@ enum adc_gain { ADC_GAIN_1_6, /**< x 1/6. */ ADC_GAIN_1_5, /**< x 1/5. */ ADC_GAIN_1_4, /**< x 1/4. */ + ADC_GAIN_2_7, /**< x 2/7. */ ADC_GAIN_1_3, /**< x 1/3. */ ADC_GAIN_2_5, /**< x 2/5. */ ADC_GAIN_1_2, /**< x 1/2. */ From ec9153f606d577c0d3a7a5aaaec7317ab2116ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Fri, 14 Feb 2025 12:57:08 +0100 Subject: [PATCH 2/3] [nrf fromtree] tests: drivers: adc: add nRF54L20 configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added the test configuration for nRF54L20 for the following tests: - adc_api - adc_error_cases Signed-off-by: Rafał Kuźnia Signed-off-by: Sebastian Głąb (cherry picked from commit f78742ff752c302da1016c2bfb95d4824ea9460a) --- drivers/adc/adc_nrfx_saadc.c | 2 +- .../nrf54l20pdk_nrf54l20_cpuapp.overlay | 44 +++++++++++++++++++ .../nrf54l20pdk_nrf54l20_cpuapp.overlay | 15 +++++++ .../drivers/adc/adc_error_cases/testcase.yaml | 1 + 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 tests/drivers/adc/adc_api/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay create mode 100644 tests/drivers/adc/adc_error_cases/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay diff --git a/drivers/adc/adc_nrfx_saadc.c b/drivers/adc/adc_nrfx_saadc.c index e3ea05f1248..0dde7c5bcb0 100644 --- a/drivers/adc/adc_nrfx_saadc.c +++ b/drivers/adc/adc_nrfx_saadc.c @@ -31,7 +31,7 @@ static const uint8_t saadc_psels[NRF_SAADC_AIN7 + 1] = { [NRF_SAADC_AIN6] = NRF_PIN_PORT_TO_PIN_NUMBER(6U, 1), [NRF_SAADC_AIN7] = NRF_PIN_PORT_TO_PIN_NUMBER(7U, 1), }; -#elif defined(CONFIG_SOC_NRF54L05) || defined(CONFIG_SOC_NRF54L10) || defined(CONFIG_SOC_NRF54L15) +#elif defined(CONFIG_SOC_COMPATIBLE_NRF54LX) static const uint32_t saadc_psels[NRF_SAADC_DVDD + 1] = { [NRF_SAADC_AIN0] = NRF_PIN_PORT_TO_PIN_NUMBER(4U, 1), [NRF_SAADC_AIN1] = NRF_PIN_PORT_TO_PIN_NUMBER(5U, 1), diff --git a/tests/drivers/adc/adc_api/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay b/tests/drivers/adc/adc_api/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay new file mode 100644 index 00000000000..e1ca1190b33 --- /dev/null +++ b/tests/drivers/adc/adc_api/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2025 Nordic Semiconductor ASA + */ + +/ { + zephyr,user { + io-channels = <&adc 0>, <&adc 1> , <&adc 2>; + }; +}; + +&adc { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <10>; + }; + + channel@1 { + reg = <1>; + zephyr,gain = "ADC_GAIN_1_4"; + zephyr,reference = "ADC_REF_EXTERNAL0"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <12>; + }; + + channel@2 { + reg = <2>; + zephyr,gain = "ADC_GAIN_2_3"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <10>; + }; +}; diff --git a/tests/drivers/adc/adc_error_cases/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay b/tests/drivers/adc/adc_error_cases/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay new file mode 100644 index 00000000000..c50279ce8f6 --- /dev/null +++ b/tests/drivers/adc/adc_error_cases/boards/nrf54l20pdk_nrf54l20_cpuapp.overlay @@ -0,0 +1,15 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2025 Nordic Semiconductor ASA + */ + +/ { + aliases { + adc = &adc; + }; +}; + +&adc { + status = "okay"; +}; diff --git a/tests/drivers/adc/adc_error_cases/testcase.yaml b/tests/drivers/adc/adc_error_cases/testcase.yaml index 039be590b38..d1e0860a23d 100644 --- a/tests/drivers/adc/adc_error_cases/testcase.yaml +++ b/tests/drivers/adc/adc_error_cases/testcase.yaml @@ -4,4 +4,5 @@ tests: platform_allow: - nrf52840dk/nrf52840 - nrf54l15dk/nrf54l15/cpuapp + - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp From 8f9a87b12cbf45ad20199073b96733c1a3ff2a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Fri, 14 Feb 2025 13:01:22 +0100 Subject: [PATCH 3/3] [nrf fromtree] drivers: adc: Fix Vref selection for nRF54L20pdk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Select Reference voltage of 900mV for ADC on nRF54L20pdk. Add ADC to the list of supported peripherals. Signed-off-by: Sebastian Głąb (cherry picked from commit 99c398845d15373f82839a7848359fe6f13e3394) --- boards/nordic/nrf54l20pdk/nrf54l20pdk_nrf54l20_cpuapp.yaml | 1 + drivers/adc/adc_nrfx_saadc.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/boards/nordic/nrf54l20pdk/nrf54l20pdk_nrf54l20_cpuapp.yaml b/boards/nordic/nrf54l20pdk/nrf54l20pdk_nrf54l20_cpuapp.yaml index af73d34f3de..bb77373ffb3 100644 --- a/boards/nordic/nrf54l20pdk/nrf54l20pdk_nrf54l20_cpuapp.yaml +++ b/boards/nordic/nrf54l20pdk/nrf54l20pdk_nrf54l20_cpuapp.yaml @@ -13,6 +13,7 @@ sysbuild: true ram: 512 flash: 449 supported: + - adc - counter - gpio - i2c diff --git a/drivers/adc/adc_nrfx_saadc.c b/drivers/adc/adc_nrfx_saadc.c index 0dde7c5bcb0..a1479ed2fd1 100644 --- a/drivers/adc/adc_nrfx_saadc.c +++ b/drivers/adc/adc_nrfx_saadc.c @@ -672,7 +672,7 @@ static DEVICE_API(adc, adc_nrfx_driver_api) = { #ifdef CONFIG_ADC_ASYNC .read_async = adc_nrfx_read_async, #endif -#if defined(CONFIG_SOC_NRF54L05) || defined(CONFIG_SOC_NRF54L10) || defined(CONFIG_SOC_NRF54L15) +#if defined(CONFIG_SOC_COMPATIBLE_NRF54LX) .ref_internal = 900, #elif defined(CONFIG_NRF_PLATFORM_HALTIUM) .ref_internal = 1024,