From 7bf0df3aec182329c2e9427d57b18b53b669e82b Mon Sep 17 00:00:00 2001 From: Maureen Helm Date: Tue, 11 Jul 2017 20:49:08 -0500 Subject: [PATCH] dts: Generate Kinetis adc settings from device tree Adds common and Kinetis-specific adc device tree properties, and updates all Kinetis SoC and board dts files to include adc nodes. Jira: ZEP-1396 Signed-off-by: Maureen Helm --- drivers/adc/Kconfig | 8 +++---- dts/arm/frdm_k64f.dts | 10 +++++++++ dts/arm/frdm_k64f.fixup | 10 +++++++++ dts/arm/frdm_kl25z.dts | 5 +++++ dts/arm/frdm_kl25z.fixup | 5 +++++ dts/arm/frdm_kw41z.dts | 5 +++++ dts/arm/frdm_kw41z.fixup | 5 +++++ dts/arm/hexiwear_k64.dts | 10 +++++++++ dts/arm/hexiwear_k64.fixup | 10 +++++++++ dts/arm/hexiwear_kw40z.dts | 5 +++++ dts/arm/hexiwear_kw40z.fixup | 5 +++++ dts/arm/nxp/nxp_k6x.dtsi | 16 +++++++++++++ dts/arm/nxp/nxp_kl25z.dtsi | 8 +++++++ dts/arm/nxp/nxp_kw40z.dtsi | 8 +++++++ dts/arm/nxp/nxp_kw41z.dtsi | 8 +++++++ dts/arm/yaml/nxp,kinetis-adc16.yaml | 35 +++++++++++++++++++++++++++++ dts/common/yaml/adc.yaml | 26 +++++++++++++++++++++ kernel/Kconfig | 7 ++++++ 18 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 dts/arm/yaml/nxp,kinetis-adc16.yaml create mode 100644 dts/common/yaml/adc.yaml diff --git a/drivers/adc/Kconfig b/drivers/adc/Kconfig index 8eaf90030c3..4d790ecb7f6 100644 --- a/drivers/adc/Kconfig +++ b/drivers/adc/Kconfig @@ -52,12 +52,12 @@ config ADC_0 config ADC_0_NAME string "ADC 0 Driver's name" - depends on ADC_0 + depends on ADC_0 && !HAS_DTS_ADC default "ADC_0" config ADC_0_IRQ_PRI int - depends on ADC_0 + depends on ADC_0 && !HAS_DTS_ADC prompt "ADC 0 interrupt priority" default 2 @@ -67,12 +67,12 @@ config ADC_1 config ADC_1_NAME string "ADC 1 Driver's name" - depends on ADC_1 + depends on ADC_1 && !HAS_DTS_ADC default "ADC_1" config ADC_1_IRQ_PRI int - depends on ADC_1 + depends on ADC_1 && !HAS_DTS_ADC prompt "ADC 1 interrupt priority" default 2 diff --git a/dts/arm/frdm_k64f.dts b/dts/arm/frdm_k64f.dts index 0c98738e5a9..717b1500f77 100644 --- a/dts/arm/frdm_k64f.dts +++ b/dts/arm/frdm_k64f.dts @@ -7,6 +7,8 @@ compatible = "nxp,mk64f12", "nxp,k64f", "nxp,k6x"; aliases { + adc_0 = &adc0; + adc_1 = &adc1; uart_0 = &uart0; uart_3 = &uart3; pinmux_a = &pinmux_a; @@ -29,6 +31,14 @@ }; }; +&adc0 { + status = "ok"; +}; + +&adc1 { + status = "ok"; +}; + &uart0 { status = "ok"; current-speed = <115200>; diff --git a/dts/arm/frdm_k64f.fixup b/dts/arm/frdm_k64f.fixup index 71cb0905202..74fbf3e72cf 100644 --- a/dts/arm/frdm_k64f.fixup +++ b/dts/arm/frdm_k64f.fixup @@ -23,3 +23,13 @@ #define CONFIG_UART_MCUX_5_BAUD_RATE NXP_KINETIS_UART_400EB000_CURRENT_SPEED #define CONFIG_UART_MCUX_5_IRQ_PRI NXP_KINETIS_UART_400EB000_IRQ_0_PRIORITY #define CONFIG_UART_MCUX_5_NAME NXP_KINETIS_UART_400EB000_LABEL + +#define CONFIG_ADC_0_BASE_ADDRESS NXP_KINETIS_ADC16_4003B000_BASE_ADDRESS_0 +#define CONFIG_ADC_0_IRQ NXP_KINETIS_ADC16_4003B000_IRQ_0 +#define CONFIG_ADC_0_IRQ_PRI NXP_KINETIS_ADC16_4003B000_IRQ_0_PRIORITY +#define CONFIG_ADC_0_NAME NXP_KINETIS_ADC16_4003B000_LABEL + +#define CONFIG_ADC_1_BASE_ADDRESS NXP_KINETIS_ADC16_400BB000_BASE_ADDRESS_0 +#define CONFIG_ADC_1_IRQ NXP_KINETIS_ADC16_400BB000_IRQ_0 +#define CONFIG_ADC_1_IRQ_PRI NXP_KINETIS_ADC16_400BB000_IRQ_0_PRIORITY +#define CONFIG_ADC_1_NAME NXP_KINETIS_ADC16_400BB000_LABEL diff --git a/dts/arm/frdm_kl25z.dts b/dts/arm/frdm_kl25z.dts index d8f358fddb5..77d150f15dd 100644 --- a/dts/arm/frdm_kl25z.dts +++ b/dts/arm/frdm_kl25z.dts @@ -7,6 +7,7 @@ compatible = "nxp,frdm-kl25z", "nxp,kl25z", "nxp,mkl25z4"; aliases { + adc_0 = &adc0; uart_0 = &uart0; }; @@ -17,6 +18,10 @@ }; }; +&adc0 { + status = "ok"; +}; + &uart0 { status = "ok"; current-speed = <115200>; diff --git a/dts/arm/frdm_kl25z.fixup b/dts/arm/frdm_kl25z.fixup index 48345f783f4..8a3a2b2a967 100644 --- a/dts/arm/frdm_kl25z.fixup +++ b/dts/arm/frdm_kl25z.fixup @@ -1,2 +1,7 @@ #define CONFIG_NUM_IRQ_PRIO_BITS ARM_V6M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS #define CONFIG_UART_MCUX_LPSCI_0_NAME NXP_KINETIS_LPSCI_4006A000_LABEL + +#define CONFIG_ADC_0_BASE_ADDRESS NXP_KINETIS_ADC16_4003B000_BASE_ADDRESS_0 +#define CONFIG_ADC_0_IRQ NXP_KINETIS_ADC16_4003B000_IRQ_0 +#define CONFIG_ADC_0_IRQ_PRI NXP_KINETIS_ADC16_4003B000_IRQ_0_PRIORITY +#define CONFIG_ADC_0_NAME NXP_KINETIS_ADC16_4003B000_LABEL diff --git a/dts/arm/frdm_kw41z.dts b/dts/arm/frdm_kw41z.dts index ff0e8f9c849..057d0e685f0 100644 --- a/dts/arm/frdm_kw41z.dts +++ b/dts/arm/frdm_kw41z.dts @@ -7,6 +7,7 @@ compatible = "nxp,kw41z", "nxp,mkw41z4"; aliases { + adc_0 = &adc0; lpuart_0 = &lpuart0; pinmux_a = &pinmux_a; pinmux_b = &pinmux_b; @@ -23,6 +24,10 @@ }; }; +&adc0 { + status = "ok"; +}; + &lpuart0 { status = "ok"; current-speed = <115200>; diff --git a/dts/arm/frdm_kw41z.fixup b/dts/arm/frdm_kw41z.fixup index 40bd2aacf0d..dbe2561b3c6 100644 --- a/dts/arm/frdm_kw41z.fixup +++ b/dts/arm/frdm_kw41z.fixup @@ -3,3 +3,8 @@ #define CONFIG_UART_MCUX_LPUART_0_BAUD_RATE NXP_KINETIS_LPUART_40054000_CURRENT_SPEED #define CONFIG_UART_MCUX_LPUART_0_IRQ_PRI NXP_KINETIS_LPUART_40054000_IRQ_0_PRIORITY #define CONFIG_UART_MCUX_LPUART_0_NAME NXP_KINETIS_LPUART_40054000_LABEL + +#define CONFIG_ADC_0_BASE_ADDRESS NXP_KINETIS_ADC16_4003B000_BASE_ADDRESS_0 +#define CONFIG_ADC_0_IRQ NXP_KINETIS_ADC16_4003B000_IRQ_0 +#define CONFIG_ADC_0_IRQ_PRI NXP_KINETIS_ADC16_4003B000_IRQ_0_PRIORITY +#define CONFIG_ADC_0_NAME NXP_KINETIS_ADC16_4003B000_LABEL diff --git a/dts/arm/hexiwear_k64.dts b/dts/arm/hexiwear_k64.dts index b03db74908c..e1345cf6afa 100644 --- a/dts/arm/hexiwear_k64.dts +++ b/dts/arm/hexiwear_k64.dts @@ -7,6 +7,8 @@ compatible = "nxp,hexiwear", "nxp,k64f", "nxp,k6x"; aliases { + adc_0 = &adc0; + adc_1 = &adc1; uart_0 = &uart0; uart_4 = &uart4; pinmux_a = &pinmux_a; @@ -29,6 +31,14 @@ }; +&adc0 { + status = "ok"; +}; + +&adc1 { + status = "ok"; +}; + &uart0 { status = "ok"; current-speed = <115200>; diff --git a/dts/arm/hexiwear_k64.fixup b/dts/arm/hexiwear_k64.fixup index 71cb0905202..74fbf3e72cf 100644 --- a/dts/arm/hexiwear_k64.fixup +++ b/dts/arm/hexiwear_k64.fixup @@ -23,3 +23,13 @@ #define CONFIG_UART_MCUX_5_BAUD_RATE NXP_KINETIS_UART_400EB000_CURRENT_SPEED #define CONFIG_UART_MCUX_5_IRQ_PRI NXP_KINETIS_UART_400EB000_IRQ_0_PRIORITY #define CONFIG_UART_MCUX_5_NAME NXP_KINETIS_UART_400EB000_LABEL + +#define CONFIG_ADC_0_BASE_ADDRESS NXP_KINETIS_ADC16_4003B000_BASE_ADDRESS_0 +#define CONFIG_ADC_0_IRQ NXP_KINETIS_ADC16_4003B000_IRQ_0 +#define CONFIG_ADC_0_IRQ_PRI NXP_KINETIS_ADC16_4003B000_IRQ_0_PRIORITY +#define CONFIG_ADC_0_NAME NXP_KINETIS_ADC16_4003B000_LABEL + +#define CONFIG_ADC_1_BASE_ADDRESS NXP_KINETIS_ADC16_400BB000_BASE_ADDRESS_0 +#define CONFIG_ADC_1_IRQ NXP_KINETIS_ADC16_400BB000_IRQ_0 +#define CONFIG_ADC_1_IRQ_PRI NXP_KINETIS_ADC16_400BB000_IRQ_0_PRIORITY +#define CONFIG_ADC_1_NAME NXP_KINETIS_ADC16_400BB000_LABEL diff --git a/dts/arm/hexiwear_kw40z.dts b/dts/arm/hexiwear_kw40z.dts index 23964e8265e..90a2db6e3c9 100644 --- a/dts/arm/hexiwear_kw40z.dts +++ b/dts/arm/hexiwear_kw40z.dts @@ -7,6 +7,7 @@ compatible = "nxp,kw40z", "nxp,mkw40z4"; aliases { + adc_0 = &adc0; lpuart_0 = &lpuart0; pinmux_a = &pinmux_a; pinmux_b = &pinmux_b; @@ -22,6 +23,10 @@ }; }; +&adc0 { + status = "ok"; +}; + &lpuart0 { status = "ok"; current-speed = <115200>; diff --git a/dts/arm/hexiwear_kw40z.fixup b/dts/arm/hexiwear_kw40z.fixup index 40bd2aacf0d..dbe2561b3c6 100644 --- a/dts/arm/hexiwear_kw40z.fixup +++ b/dts/arm/hexiwear_kw40z.fixup @@ -3,3 +3,8 @@ #define CONFIG_UART_MCUX_LPUART_0_BAUD_RATE NXP_KINETIS_LPUART_40054000_CURRENT_SPEED #define CONFIG_UART_MCUX_LPUART_0_IRQ_PRI NXP_KINETIS_LPUART_40054000_IRQ_0_PRIORITY #define CONFIG_UART_MCUX_LPUART_0_NAME NXP_KINETIS_LPUART_40054000_LABEL + +#define CONFIG_ADC_0_BASE_ADDRESS NXP_KINETIS_ADC16_4003B000_BASE_ADDRESS_0 +#define CONFIG_ADC_0_IRQ NXP_KINETIS_ADC16_4003B000_IRQ_0 +#define CONFIG_ADC_0_IRQ_PRI NXP_KINETIS_ADC16_4003B000_IRQ_0_PRIORITY +#define CONFIG_ADC_0_NAME NXP_KINETIS_ADC16_4003B000_LABEL diff --git a/dts/arm/nxp/nxp_k6x.dtsi b/dts/arm/nxp/nxp_k6x.dtsi index 54ba48c10f5..b1b7c672cc3 100644 --- a/dts/arm/nxp/nxp_k6x.dtsi +++ b/dts/arm/nxp/nxp_k6x.dtsi @@ -273,6 +273,22 @@ clock-source = <0>; /* channel information needed - fixme */ }; + + adc0: adc@4003b000{ + compatible = "nxp,kinetis-adc16"; + reg = <0x4003b000 0x70>; + interrupts = <39 0>; + label = "ADC_0"; + status = "disabled"; + }; + + adc1: adc@400bb000{ + compatible = "nxp,kinetis-adc16"; + reg = <0x400bb000 0x70>; + interrupts = <73 0>; + label = "ADC_1"; + status = "disabled"; + }; }; }; diff --git a/dts/arm/nxp/nxp_kl25z.dtsi b/dts/arm/nxp/nxp_kl25z.dtsi index ccd0b7ef525..d746a123f69 100644 --- a/dts/arm/nxp/nxp_kl25z.dtsi +++ b/dts/arm/nxp/nxp_kl25z.dtsi @@ -25,6 +25,14 @@ status = "disabled"; }; + + adc0: adc@4003b000{ + compatible = "nxp,kinetis-adc16"; + reg = <0x4003b000 0x70>; + interrupts = <15 0>; + label = "ADC_0"; + status = "disabled"; + }; }; }; diff --git a/dts/arm/nxp/nxp_kw40z.dtsi b/dts/arm/nxp/nxp_kw40z.dtsi index 838d10b8cbf..fe744b1ca1c 100644 --- a/dts/arm/nxp/nxp_kw40z.dtsi +++ b/dts/arm/nxp/nxp_kw40z.dtsi @@ -178,6 +178,14 @@ clock-source = <0>; /* channel information needed - fixme */ }; + + adc0: adc@4003b000{ + compatible = "nxp,kinetis-adc16"; + reg = <0x4003b000 0x70>; + interrupts = <15 0>; + label = "ADC_0"; + status = "disabled"; + }; }; }; diff --git a/dts/arm/nxp/nxp_kw41z.dtsi b/dts/arm/nxp/nxp_kw41z.dtsi index 9e9e9ff9adf..ecb9dc68c80 100644 --- a/dts/arm/nxp/nxp_kw41z.dtsi +++ b/dts/arm/nxp/nxp_kw41z.dtsi @@ -178,6 +178,14 @@ clock-source = <0>; /* channel information needed - fixme */ }; + + adc0: adc@4003b000{ + compatible = "nxp,kinetis-adc16"; + reg = <0x4003b000 0x70>; + interrupts = <15 0>; + label = "ADC_0"; + status = "disabled"; + }; }; }; diff --git a/dts/arm/yaml/nxp,kinetis-adc16.yaml b/dts/arm/yaml/nxp,kinetis-adc16.yaml new file mode 100644 index 00000000000..18aa9a00671 --- /dev/null +++ b/dts/arm/yaml/nxp,kinetis-adc16.yaml @@ -0,0 +1,35 @@ +# +# Copyright (c) 2017, NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +--- +title: Kinetis ADC16 +id: nxp,kinetis-adc16 +version: 0.1 + +description: > + This binding gives a base representation of the Kinetis ADC16 + +inherits: + - !include adc.yaml + +properties: + - compatible: + type: string + category: required + description: compatible strings + constraint: "nxp,kinetis-adc16" + + - reg: + type: array + description: mmio register space + generation: define + category: required + + - interrupts: + type: array + category: required + description: required interrupts + generation: define +... diff --git a/dts/common/yaml/adc.yaml b/dts/common/yaml/adc.yaml new file mode 100644 index 00000000000..efad95fb875 --- /dev/null +++ b/dts/common/yaml/adc.yaml @@ -0,0 +1,26 @@ +# +# Copyright (c) 2017, NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +--- +title: ADC Base Structure +id: adc +version: 0.1 + +description: > + This binding gives the base structures for all ADC devices + +properties: + - clocks: + type: array + category: required + description: Clock gate information + generation: define + + - label: + type: string + category: required + description: Human readable string describing the device (used by Zephyr for API name) + generation: define +... diff --git a/kernel/Kconfig b/kernel/Kconfig index f49335ad019..56a0c180b87 100644 --- a/kernel/Kconfig +++ b/kernel/Kconfig @@ -15,6 +15,13 @@ config HAS_DTS This option specifies that the target platform supports device tree configuration. +config HAS_DTS_ADC + bool "ADC uses Device Tree" + depends on HAS_DTS + help + This option specifies that the target platform supports device tree + configuration for ADC. + config HAS_DTS_I2C bool "I2C uses Device Tree" default n