boards: opta: ADC support
A valid device tree configuration is provided for the ADCs of the 8 input
channels and the sample adc_dt works out of the box. Obviously this is
not the only possible configuration but it provides a good template for
further customization without the need to lookup the ADC GPIOs and
connections in the schematics.
Signed-off-by: Federico Di Gregorio <fog@dndg.it>
diff --git a/boards/arduino/opta/arduino_opta-common.dtsi b/boards/arduino/opta/arduino_opta-common.dtsi
index 580688e..36a96cc 100644
--- a/boards/arduino/opta/arduino_opta-common.dtsi
+++ b/boards/arduino/opta/arduino_opta-common.dtsi
@@ -103,3 +103,101 @@
re-gpios = <&gpiob 13 GPIO_ACTIVE_LOW>;
};
};
+
+&adc1 {
+ pinctrl-0 = <&adc1_inp0_pa0_c &adc1_inp6_pf12>;
+ pinctrl-names = "default";
+ st,adc-clock-source = <SYNC>;
+ st,adc-prescaler = <4>;
+ vref-mv = <10000>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ a0: channel@0 {
+ reg = <0>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+
+ a2: channel@6 {
+ reg = <6>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+
+};
+
+&adc2 {
+ pinctrl-0 = <&adc2_inp9_pb0>;
+ pinctrl-names = "default";
+ st,adc-clock-source = <SYNC>;
+ st,adc-prescaler = <4>;
+ vref-mv = <10000>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ a3: channel@9 {
+ reg = <9>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+};
+
+&adc3 {
+ pinctrl-0 = <&adc3_inp6_pf10 &adc3_inp7_pf8 &adc3_inp8_pf6 &adc3_inp9_pf4 &adc3_inp0_pc2_c>;
+ pinctrl-names = "default";
+ st,adc-clock-source = <SYNC>;
+ st,adc-prescaler = <4>;
+ vref-mv = <10000>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ a1: channel@0 {
+ reg = <0>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+
+ a4: channel@6 {
+ reg = <6>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+
+ a5: channel@7 {
+ reg = <7>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+
+ a6: channel@8 {
+ reg = <8>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+
+ a7: channel@9 {
+ reg = <9>;
+ zephyr,gain = "ADC_GAIN_1";
+ zephyr,reference = "ADC_REF_INTERNAL";
+ zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
+ zephyr,resolution = <16>;
+ };
+};
diff --git a/samples/drivers/adc/adc_dt/boards/arduino_opta_stm32h747xx_m7.overlay b/samples/drivers/adc/adc_dt/boards/arduino_opta_stm32h747xx_m7.overlay
new file mode 100644
index 0000000..098deab
--- /dev/null
+++ b/samples/drivers/adc/adc_dt/boards/arduino_opta_stm32h747xx_m7.overlay
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2021 STMicroelectronics
+ * Copyright (c) 2024 DNDG srl
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/ {
+ zephyr,user {
+ io-channels =
+ <&adc1 0>, /* I1 */
+ <&adc3 0>, /* I2 */
+ <&adc1 6>, /* I3 */
+ <&adc2 9>, /* I4 */
+ <&adc3 6>, /* I5 */
+ <&adc3 7>, /* I6 */
+ <&adc3 8>, /* I7 */
+ <&adc3 9>; /* I8 */
+ };
+};
+
+&adc1 {
+ status ="okay";
+};
+
+&adc2 {
+ status ="okay";
+};
+
+&adc3 {
+ status = "okay";
+};