From e2ee00cc297c2dacefe099e41145a974bf70e3a0 Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Thu, 28 Aug 2025 12:07:19 +0530 Subject: [PATCH 1/5] drivers: adc: ti_am335x: change ADC reference Change the ADC reference for channels from internal to VDD. This involves removing the present binding to get the internal reference. Signed-off-by: Amneesh Singh --- drivers/adc/adc_ti_am335x.c | 21 ++++++++++++++------- dts/bindings/adc/ti,am335x-adc.yaml | 5 ----- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/drivers/adc/adc_ti_am335x.c b/drivers/adc/adc_ti_am335x.c index 80cd63b60c619..24fb38d127dca 100644 --- a/drivers/adc/adc_ti_am335x.c +++ b/drivers/adc/adc_ti_am335x.c @@ -186,6 +186,11 @@ static int ti_adc_channel_setup(const struct device *dev, const struct adc_chann return -EINVAL; } + if (chan_cfg->reference != ADC_REF_VDD_1) { + LOG_ERR("Invalid channel reference"); + return -EINVAL; + } + if (chan_cfg->gain != ADC_GAIN_1) { LOG_ERR("Gain must be 1x"); return -EINVAL; @@ -370,13 +375,15 @@ static void ti_adc_isr(const struct device *dev) #define CHAN_PROP_LIST(n, prop) {DT_INST_FOREACH_CHILD_SEP_VARGS(n, EXPLICIT_CHAN_PROP, (,), prop)} +static DEVICE_API(adc, ti_adc_driver_api) = { + .channel_setup = ti_adc_channel_setup, + .read = ti_adc_read, +#ifdef CONFIG_ADC_ASYNC + .read_async = ti_adc_read_async, +#endif /* CONFIG_ADC_ASYNC */ +}; + #define TI_ADC_INIT(n) \ - static DEVICE_API(adc, ti_adc_driver_api_##n) = { \ - .channel_setup = ti_adc_channel_setup, \ - .read = ti_adc_read, \ - .ref_internal = DT_INST_PROP(n, ti_vrefp), \ - IF_ENABLED(CONFIG_ADC_ASYNC, (.read_async = ti_adc_read_async,)) }; \ - \ static void ti_adc_irq_setup_##n(const struct device *dev) \ { \ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), ti_adc_isr, \ @@ -400,6 +407,6 @@ static void ti_adc_isr(const struct device *dev) }; \ \ DEVICE_DT_INST_DEFINE(n, ti_adc_init, NULL, &ti_adc_data_##n, &ti_adc_cfg_##n, \ - POST_KERNEL, CONFIG_ADC_INIT_PRIORITY, &ti_adc_driver_api_##n); + POST_KERNEL, CONFIG_ADC_INIT_PRIORITY, &ti_adc_driver_api); DT_INST_FOREACH_STATUS_OKAY(TI_ADC_INIT) diff --git a/dts/bindings/adc/ti,am335x-adc.yaml b/dts/bindings/adc/ti,am335x-adc.yaml index d9ef025c4c7a7..76addd9fc4890 100644 --- a/dts/bindings/adc/ti,am335x-adc.yaml +++ b/dts/bindings/adc/ti,am335x-adc.yaml @@ -12,11 +12,6 @@ properties: interrupts: required: true - ti,vrefp: - type: int - required: true - description: Reference Voltage (in mV) - ti,fifo: type: int required: true From d783871bd038db587bd3cded5e3dbca3a5942ffc Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Thu, 28 Aug 2025 12:37:43 +0530 Subject: [PATCH 2/5] boards: am243x_evm: remove ADC channel nodes ADC channel nodes should not belong to the board device tree definition and hence, remove them. Signed-off-by: Amneesh Singh --- .../am243x_evm/am243x_evm_am2434_r5f0_0.dts | 82 ------------------- 1 file changed, 82 deletions(-) diff --git a/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts b/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts index b498b214c257b..18ad2a0a87cd6 100644 --- a/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts +++ b/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts @@ -24,7 +24,6 @@ aliases { led0 = &ld26; - adc0 = &main_adc0; }; leds: leds { @@ -97,90 +96,9 @@ }; &main_adc0 { - ti,vrefp = <1800>; ti,fifo = <0>; status = "okay"; power-domains = <&adc0_pd>; - - channel@0 { - reg = <0>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@1 { - reg = <1>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@2 { - reg = <2>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@3 { - reg = <3>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@4 { - reg = <4>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@5 { - reg = <5>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@6 { - reg = <6>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; - - channel@7 { - reg = <7>; - ti,open-delay = <0>; - zephyr,gain = "ADC_GAIN_1"; - zephyr,reference = "ADC_REF_INTERNAL"; - zephyr,acquisition-time = <0>; - zephyr,resolution = <12>; - zephyr,oversampling = <4>; - }; }; &main_mbox6 { From b8d69f5072de770901a14f8e5b2c01025d83ca3a Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Thu, 28 Aug 2025 12:47:13 +0530 Subject: [PATCH 3/5] samples: drivers: adc: am243x_evm: update overlays Update the sample overlays to match the current ADC device driver bindings. Signed-off-by: Amneesh Singh --- .../boards/am243x_evm_am2434_r5f0_0.overlay | 27 ++++- .../boards/am243x_evm_am2434_r5f0_0.overlay | 101 ++++++++++++++++++ 2 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 samples/drivers/adc/adc_sequence/boards/am243x_evm_am2434_r5f0_0.overlay diff --git a/samples/drivers/adc/adc_dt/boards/am243x_evm_am2434_r5f0_0.overlay b/samples/drivers/adc/adc_dt/boards/am243x_evm_am2434_r5f0_0.overlay index 5d8dccf46af83..2defbeb90bd61 100644 --- a/samples/drivers/adc/adc_dt/boards/am243x_evm_am2434_r5f0_0.overlay +++ b/samples/drivers/adc/adc_dt/boards/am243x_evm_am2434_r5f0_0.overlay @@ -6,7 +6,30 @@ / { zephyr,user { - io-channels = <&adc0 0>, <&adc0 1>, <&adc0 2>, <&adc0 3>, <&adc0 4>, <&adc0 5>, - <&adc0 6>, <&adc0 7>; + io-channels = <&main_adc0 0>, <&main_adc0 7>; + }; +}; + +&main_adc0 { + channel@0 { + reg = <0>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@7 { + reg = <7>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; }; }; diff --git a/samples/drivers/adc/adc_sequence/boards/am243x_evm_am2434_r5f0_0.overlay b/samples/drivers/adc/adc_sequence/boards/am243x_evm_am2434_r5f0_0.overlay new file mode 100644 index 0000000000000..20658cd92aa18 --- /dev/null +++ b/samples/drivers/adc/adc_sequence/boards/am243x_evm_am2434_r5f0_0.overlay @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2025 Texas Instruments + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + adc0 = &main_adc0; + }; +}; + +&main_adc0 { + channel@0 { + reg = <0>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@1 { + reg = <1>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@2 { + reg = <2>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@3 { + reg = <3>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@4 { + reg = <4>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@5 { + reg = <5>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@6 { + reg = <6>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; + + channel@7 { + reg = <7>; + ti,open-delay = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_VDD_1"; + zephyr,acquisition-time = <0>; + zephyr,resolution = <12>; + zephyr,oversampling = <4>; + zephyr,vref-mv = <1800>; + }; +}; From b41045c30133eabbfa334f1aaa40c0105a8a9496 Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Thu, 4 Dec 2025 19:57:37 +0530 Subject: [PATCH 4/5] drivers: adc: adc_ti_am335x: add support for pinctrl Support configuration of pins for ADC channels in the driver. Signed-off-by: Amneesh Singh --- drivers/adc/adc_ti_am335x.c | 15 ++++++++++++++- dts/bindings/adc/ti,am335x-adc.yaml | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/adc/adc_ti_am335x.c b/drivers/adc/adc_ti_am335x.c index 24fb38d127dca..c92155e43bba2 100644 --- a/drivers/adc/adc_ti_am335x.c +++ b/drivers/adc/adc_ti_am335x.c @@ -8,6 +8,7 @@ #include #include #include +#include #define ADC_CONTEXT_USES_KERNEL_TIMER #include "adc_context.h" @@ -97,6 +98,7 @@ enum ti_adc_irq { struct ti_adc_cfg { DEVICE_MMIO_ROM; + const struct pinctrl_dev_config *pinctrl; void (*irq_func)(const struct device *dev); uint32_t open_delay[TI_ADC_TOTAL_CHANNELS]; uint8_t oversampling[TI_ADC_TOTAL_CHANNELS]; @@ -293,10 +295,19 @@ static int ti_adc_init(const struct device *dev) { const struct ti_adc_cfg *cfg = DEV_CFG(dev); struct ti_adc_data *data = DEV_DATA(dev); - struct ti_adc_regs *regs = DEV_REGS(dev); + struct ti_adc_regs *regs; + int ret; DEVICE_MMIO_MAP(dev, K_MEM_CACHE_NONE); + regs = DEV_REGS(dev); + + ret = pinctrl_apply_state(cfg->pinctrl, PINCTRL_STATE_DEFAULT); + if (ret < 0) { + LOG_ERR("failed to apply pinctrl"); + return ret; + } + cfg->irq_func(dev); if (cfg->fifo == 0) { @@ -384,6 +395,7 @@ static DEVICE_API(adc, ti_adc_driver_api) = { }; #define TI_ADC_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ static void ti_adc_irq_setup_##n(const struct device *dev) \ { \ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), ti_adc_isr, \ @@ -393,6 +405,7 @@ static DEVICE_API(adc, ti_adc_driver_api) = { \ static const struct ti_adc_cfg ti_adc_cfg_##n = { \ DEVICE_MMIO_ROM_INIT(DT_DRV_INST(n)), \ + .pinctrl = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .irq_func = &ti_adc_irq_setup_##n, \ .open_delay = CHAN_PROP_LIST(n, ti_open_delay), \ .oversampling = CHAN_PROP_LIST(n, zephyr_oversampling), \ diff --git a/dts/bindings/adc/ti,am335x-adc.yaml b/dts/bindings/adc/ti,am335x-adc.yaml index 76addd9fc4890..be86f00ac554e 100644 --- a/dts/bindings/adc/ti,am335x-adc.yaml +++ b/dts/bindings/adc/ti,am335x-adc.yaml @@ -6,7 +6,7 @@ description: TI AM335X ADC compatible: "ti,am335x-adc" -include: [adc-controller.yaml] +include: [adc-controller.yaml, pinctrl-device.yaml] properties: interrupts: From 7a74d57b30f604edc3819e40d5abf317b5d74772 Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Thu, 4 Dec 2025 19:54:21 +0530 Subject: [PATCH 5/5] boards: am243x_evm: add pinctrl nodes for main_adc0 Add the missing pins for ADC0 channels in the main domain. Signed-off-by: Amneesh Singh --- .../am243x_evm_am2434_r5f0_0-pinctrl.dtsi | 32 +++++++++++++++++++ .../am243x_evm/am243x_evm_am2434_r5f0_0.dts | 3 ++ 2 files changed, 35 insertions(+) diff --git a/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0-pinctrl.dtsi b/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0-pinctrl.dtsi index ebb531a862931..58f375169b03e 100644 --- a/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0-pinctrl.dtsi +++ b/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0-pinctrl.dtsi @@ -25,6 +25,38 @@ pinmux = ; }; + main_adc0_ain0: adc0_ain0_default { + pinmux = ; + }; + + main_adc0_ain1: adc0_ain1_default { + pinmux = ; + }; + + main_adc0_ain2: adc0_ain2_default { + pinmux = ; + }; + + main_adc0_ain3: adc0_ain3_default { + pinmux = ; + }; + + main_adc0_ain4: adc0_ain4_default { + pinmux = ; + }; + + main_adc0_ain5: adc0_ain5_default { + pinmux = ; + }; + + main_adc0_ain6: adc0_ain6_default { + pinmux = ; + }; + + main_adc0_ain7: adc0_ain7_default { + pinmux = ; + }; + spi0_cs0: spi0_cs0_default { pinmux = ; }; diff --git a/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts b/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts index 18ad2a0a87cd6..abd22caa4efda 100644 --- a/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts +++ b/boards/ti/am243x_evm/am243x_evm_am2434_r5f0_0.dts @@ -97,6 +97,9 @@ &main_adc0 { ti,fifo = <0>; + pinctrl-0 = <&main_adc0_ain0 &main_adc0_ain1 &main_adc0_ain2 &main_adc0_ain3 + &main_adc0_ain4 &main_adc0_ain5 &main_adc0_ain6 &main_adc0_ain7>; + pinctrl-names = "default"; status = "okay"; power-domains = <&adc0_pd>; };