From 8bc05dceeb8e84537803c44786047b3a541c1965 Mon Sep 17 00:00:00 2001 From: Hiago De Franco Date: Wed, 17 Jan 2024 13:12:30 -0300 Subject: linux-toradex-mainline: Add patch for Apalis Evaluation Board v1.2 Backport patches to add device tree support for the new Apalis Evaluation Board v1.2. Related-to: ELB-5532 Signed-off-by: Hiago De Franco --- ...-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch | 54 +++ ...-imx-Add-support-for-Apalis-Evaluation-Bo.patch | 537 +++++++++++++++++++++ recipes-kernel/linux/linux-toradex-mainline_git.bb | 2 + 3 files changed, 593 insertions(+) create mode 100644 recipes-kernel/linux/linux-toradex-mainline-git/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch create mode 100644 recipes-kernel/linux/linux-toradex-mainline-git/0002-arm-dts-nxp-imx-Add-support-for-Apalis-Evaluation-Bo.patch diff --git a/recipes-kernel/linux/linux-toradex-mainline-git/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch b/recipes-kernel/linux/linux-toradex-mainline-git/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch new file mode 100644 index 0000000..3c0236c --- /dev/null +++ b/recipes-kernel/linux/linux-toradex-mainline-git/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch @@ -0,0 +1,54 @@ +From ac951810425501d4d33e5c5fab65d643dfd682b5 Mon Sep 17 00:00:00 2001 +From: Hiago De Franco +Date: Mon, 15 Jan 2024 09:07:27 -0300 +Subject: [PATCH v2 1/2] dt-bindings: arm: fsl: Add + toradex,apalis_imx6q-eval-v1.2 board + +Add the toradex,apalis_imx6q-eval-v1.2 compatible string for version 1.2 +of the Apalis Evaluation Board. + +Version v1.2 includes the following changes compared to v1.1: + +- 8-bit MMC connector replaced with a 4-bit uSD connector. +- Audio codec NAU88C22 added. +- M24C02 EEPROM i2c added. +- MIPI-CSI-2 connector directly to the board added. +- PCIe switch PEX8605 removed and PCIe now is routed directly to Mini + PCIe connector. +- Power measurement IC INA219 added. +- Replaced DVI with HDMI connector. +- Single-channel USB to UART converter replaced with four-channel USB + to UART/JTAG. +- Temperature sensor TMP75 added. + +Please note that version v1.0 (which reached EOL) is compatible with +v1.1, therefore toradex,apalis_imx6q-eval compatible string should be +used for both v1.0 and v1.1. + +Upstream-Status: Submitted [https://lore.kernel.org/all/20240124141849.26254-3-hiagofranco@gmail.com/] +Acked-by: Conor Dooley +Signed-off-by: Hiago De Franco +--- +v2: + - Add Acked-by: Conor Dooley. +--- + Documentation/devicetree/bindings/arm/fsl.yaml | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml +index fbfc4f99c01e..05872d7e70a9 100644 +--- a/Documentation/devicetree/bindings/arm/fsl.yaml ++++ b/Documentation/devicetree/bindings/arm/fsl.yaml +@@ -322,7 +322,8 @@ properties: + - toradex,apalis_imx6q-ixora # Apalis iMX6Q/D Module on Ixora Carrier Board + - toradex,apalis_imx6q-ixora-v1.1 # Apalis iMX6Q/D Module on Ixora V1.1 Carrier Board + - toradex,apalis_imx6q-ixora-v1.2 # Apalis iMX6Q/D Module on Ixora V1.2 Carrier Board +- - toradex,apalis_imx6q-eval # Apalis iMX6Q/D Module on Apalis Evaluation Board ++ - toradex,apalis_imx6q-eval # Apalis iMX6Q/D Module on Apalis Evaluation Board v1.0/v1.1 ++ - toradex,apalis_imx6q-eval-v1.2 # Apalis iMX6Q/D Module on Apalis Evaluation Board v1.2 + - const: toradex,apalis_imx6q + - const: fsl,imx6q + +-- +2.43.0 + diff --git a/recipes-kernel/linux/linux-toradex-mainline-git/0002-arm-dts-nxp-imx-Add-support-for-Apalis-Evaluation-Bo.patch b/recipes-kernel/linux/linux-toradex-mainline-git/0002-arm-dts-nxp-imx-Add-support-for-Apalis-Evaluation-Bo.patch new file mode 100644 index 0000000..7b98a04 --- /dev/null +++ b/recipes-kernel/linux/linux-toradex-mainline-git/0002-arm-dts-nxp-imx-Add-support-for-Apalis-Evaluation-Bo.patch @@ -0,0 +1,537 @@ +From 18110e8fc4a23f626b4f67b3c95fe42c24d2bdd1 Mon Sep 17 00:00:00 2001 +From: Hiago De Franco +Date: Tue, 16 Jan 2024 11:35:15 -0300 +Subject: [PATCH v2 2/2] arm: dts: nxp: imx: Add support for Apalis Evaluation + Board v1.2 + +Add support for the new Apalis Evaluation Board v1.2. Because +only the imx6q-apalis-eval.dts was available, the imx6q-apalis-eval.dtsi +has been created which has common hardware configurations for v1.0, v1.1 +and v1.2. Both imx6q-apalis-eval.dts and imx6q-apalis-eval-v1.2.dts +files include imx6q-apalis-eval.dtsi. + +Versions 1.0 and 1.1 are compatible with each other and should +use imx6q-apalis-eval.dts file. Now for v1.2, the new device-tree file +should be used. + +Upstream-Status: Submitted [https://lore.kernel.org/all/20240124141849.26254-3-hiagofranco@gmail.com/] +Reviewed-by: Francesco Dolcini +Signed-off-by: Hiago De Franco +--- +v2: + - Add missing off-on-delay-us property with 100ms to reg_3v3_mmc and + reg_3v3_sd. + - Fix startup-delay-us property from 100us (reg_3v3_mmc and reg_3v3_sd) + and 1ms (reg_can1 and reg_can2) to 10ms. + - Fix pinctrl mux from 0xb000 to 0x1b0b0. + - Add Reviewed-by: Francesco Dolcini. +--- + arch/arm/boot/dts/Makefile | 1 + + arch/arm/boot/dts/imx6q-apalis-eval-v1.2.dts | 200 +++++++++++++++++++ + arch/arm/boot/dts/imx6q-apalis-eval.dts | 108 +--------- + arch/arm/boot/dts/imx6q-apalis-eval.dtsi | 120 +++++++++++ + 4 files changed, 323 insertions(+), 106 deletions(-) + create mode 100644 arch/arm/boot/dts/imx6q-apalis-eval-v1.2.dts + create mode 100644 arch/arm/boot/dts/imx6q-apalis-eval.dtsi + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index 6aa7dc4db2fc..01b6aec3dd7a 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -558,6 +558,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ + imx6dl-yapp4-orion.dtb \ + imx6dl-yapp4-ursa.dtb \ + imx6q-apalis-eval.dtb \ ++ imx6q-apalis-eval-v1.2.dtb \ + imx6q-apalis-ixora.dtb \ + imx6q-apalis-ixora-v1.1.dtb \ + imx6q-apalis-ixora-v1.2.dtb \ +diff --git a/arch/arm/boot/dts/imx6q-apalis-eval-v1.2.dts b/arch/arm/boot/dts/imx6q-apalis-eval-v1.2.dts +new file mode 100644 +index 000000000000..15d4a98ee976 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6q-apalis-eval-v1.2.dts +@@ -0,0 +1,200 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT ++/* ++ * Copyright 2024 Toradex ++ */ ++ ++/dts-v1/; ++ ++#include "imx6q-apalis-eval.dtsi" ++ ++/ { ++ model = "Toradex Apalis iMX6Q/D Module on Apalis Evaluation Board v1.2"; ++ compatible = "toradex,apalis_imx6q-eval-v1.2", "toradex,apalis_imx6q", ++ "fsl,imx6q"; ++ ++ reg_3v3_mmc: regulator-3v3-mmc { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio2 0 GPIO_ACTIVE_HIGH>; ++ off-on-delay-us = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_enable_3v3_mmc>; ++ regulator-max-microvolt = <3300000>; ++ regulator-min-microvolt = <3300000>; ++ regulator-name = "3.3V_MMC"; ++ startup-delay-us = <10000>; ++ }; ++ ++ reg_3v3_sd: regulator-3v3-sd { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio2 1 GPIO_ACTIVE_HIGH>; ++ off-on-delay-us = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_enable_3v3_sd>; ++ regulator-max-microvolt = <3300000>; ++ regulator-min-microvolt = <3300000>; ++ regulator-name = "3.3V_SD"; ++ startup-delay-us = <10000>; ++ }; ++ ++ reg_can1: regulator-can1 { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio2 3 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_enable_can1_power>; ++ regulator-name = "5V_SW_CAN1"; ++ startup-delay-us = <10000>; ++ }; ++ ++ reg_can2: regulator-can2 { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio2 2 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_enable_can2_power>; ++ regulator-name = "5V_SW_CAN2"; ++ startup-delay-us = <10000>; ++ }; ++ ++ sound-carrier { ++ compatible = "simple-audio-card"; ++ simple-audio-card,bitclock-master = <&codec_dai>; ++ simple-audio-card,format = "i2s"; ++ simple-audio-card,frame-master = <&codec_dai>; ++ simple-audio-card,name = "apalis-nau8822"; ++ simple-audio-card,routing = ++ "Headphones", "LHP", ++ "Headphones", "RHP", ++ "Speaker", "LSPK", ++ "Speaker", "RSPK", ++ "Line Out", "AUXOUT1", ++ "Line Out", "AUXOUT2", ++ "LAUX", "Line In", ++ "RAUX", "Line In", ++ "LMICP", "Mic In", ++ "RMICP", "Mic In"; ++ simple-audio-card,widgets = ++ "Headphones", "Headphones", ++ "Line Out", "Line Out", ++ "Speaker", "Speaker", ++ "Microphone", "Mic In", ++ "Line", "Line In"; ++ ++ codec_dai: simple-audio-card,codec { ++ sound-dai = <&nau8822_1a>; ++ system-clock-frequency = <12288000>; ++ }; ++ ++ simple-audio-card,cpu { ++ sound-dai = <&ssi2>; ++ }; ++ }; ++}; ++ ++&can1 { ++ xceiver-supply = <®_can1>; ++ status = "okay"; ++}; ++ ++&can2 { ++ xceiver-supply = <®_can2>; ++ status = "okay"; ++}; ++ ++/* I2C1_SDA/SCL on MXM3 209/211 */ ++&i2c1 { ++ /* Audio Codec */ ++ nau8822_1a: audio-codec@1a { ++ compatible = "nuvoton,nau8822"; ++ reg = <0x1a>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_nau8822>; ++ #sound-dai-cells = <0>; ++ }; ++ ++ /* Current measurement into module VCC */ ++ hwmon@40 { ++ compatible = "ti,ina219"; ++ reg = <0x40>; ++ shunt-resistor = <5000>; ++ }; ++ ++ /* Temperature Sensor */ ++ temperature-sensor@4f { ++ compatible = "ti,tmp75c"; ++ reg = <0x4f>; ++ }; ++ ++ /* EEPROM */ ++ eeprom@57 { ++ compatible = "st,24c02", "atmel,24c02"; ++ reg = <0x57>; ++ pagesize = <16>; ++ size = <256>; ++ }; ++}; ++ ++&pcie { ++ status = "okay"; ++}; ++ ++&ssi2 { ++ status = "okay"; ++}; ++ ++/* MMC1 */ ++&usdhc1 { ++ bus-width = <4>; ++ pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_mmc_cd>; ++ vmmc-supply = <®_3v3_mmc>; ++ status = "okay"; ++}; ++ ++/* SD1 */ ++&usdhc2 { ++ cd-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>; ++ pinctrl-0 = <&pinctrl_usdhc2 &pinctrl_sd_cd>; ++ vmmc-supply = <®_3v3_sd>; ++ status = "okay"; ++}; ++ ++&iomuxc { ++ pinctrl_enable_3v3_mmc: enable3v3mmcgrp { ++ fsl,pins = < ++ /* MMC1_PWR_CTRL */ ++ MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x1b0b0 ++ >; ++ }; ++ ++ pinctrl_enable_3v3_sd: enable3v3sdgrp { ++ fsl,pins = < ++ /* SD1_PWR_CTRL */ ++ MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x1b0b0 ++ >; ++ }; ++ ++ pinctrl_enable_can1_power: enablecan1powergrp { ++ fsl,pins = < ++ /* CAN1_PWR_EN */ ++ MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x1b0b0 ++ >; ++ }; ++ ++ pinctrl_enable_can2_power: enablecan2powergrp { ++ fsl,pins = < ++ /* CAN2_PWR_EN */ ++ MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x1b0b0 ++ >; ++ }; ++ ++ pinctrl_nau8822: nau8822grp { ++ fsl,pins = < ++ MX6QDL_PAD_DISP0_DAT16__AUD5_TXC 0x130b0 ++ MX6QDL_PAD_DISP0_DAT17__AUD5_TXD 0x130b0 ++ MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS 0x130b0 ++ MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0 ++ >; ++ }; ++}; +diff --git a/arch/arm/boot/dts/imx6q-apalis-eval.dts b/arch/arm/boot/dts/imx6q-apalis-eval.dts +index 3fc079dfd61e..e1077e2da5f4 100644 +--- a/arch/arm/boot/dts/imx6q-apalis-eval.dts ++++ b/arch/arm/boot/dts/imx6q-apalis-eval.dts +@@ -7,29 +7,13 @@ + + /dts-v1/; + +-#include +-#include +-#include +-#include "imx6q.dtsi" +-#include "imx6qdl-apalis.dtsi" ++#include "imx6q-apalis-eval.dtsi" + + / { + model = "Toradex Apalis iMX6Q/D Module on Apalis Evaluation Board"; + compatible = "toradex,apalis_imx6q-eval", "toradex,apalis_imx6q", + "fsl,imx6q"; + +- aliases { +- i2c0 = &i2c1; +- i2c1 = &i2c3; +- i2c2 = &i2c2; +- rtc0 = &rtc_i2c; +- rtc1 = &snvs_rtc; +- }; +- +- chosen { +- stdout-path = "serial0:115200n8"; +- }; +- + reg_pcie_switch: regulator-pcie-switch { + compatible = "regulator-fixed"; + enable-active-high; +@@ -40,14 +24,6 @@ reg_pcie_switch: regulator-pcie-switch { + startup-delay-us = <100000>; + status = "okay"; + }; +- +- reg_3v3_sw: regulator-3v3-sw { +- compatible = "regulator-fixed"; +- regulator-always-on; +- regulator-max-microvolt = <3300000>; +- regulator-min-microvolt = <3300000>; +- regulator-name = "3.3V_SW"; +- }; + }; + + &can1 { +@@ -62,102 +38,22 @@ &can2 { + + /* I2C1_SDA/SCL on MXM3 209/211 (e.g. RTC on carrier board) */ + &i2c1 { +- status = "okay"; +- ++ /* PCIe Switch */ + pcie-switch@58 { + compatible = "plx,pex8605"; + reg = <0x58>; + }; +- +- /* M41T0M6 real time clock on carrier board */ +- rtc_i2c: rtc@68 { +- compatible = "st,m41t0"; +- reg = <0x68>; +- }; +-}; +- +-/* +- * I2C3_SDA/SCL (CAM) on MXM3 pin 201/203 (e.g. camera sensor on carrier +- * board) +- */ +-&i2c3 { +- status = "okay"; + }; + + &pcie { +- pinctrl-names = "default"; +- pinctrl-0 = <&pinctrl_reset_moci>; +- /* active-high meaning opposite of regular PERST# active-low polarity */ +- reset-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>; +- reset-gpio-active-high; + vpcie-supply = <®_pcie_switch>; + status = "okay"; + }; + +-&pwm1 { +- status = "okay"; +-}; +- +-&pwm2 { +- status = "okay"; +-}; +- +-&pwm3 { +- status = "okay"; +-}; +- +-&pwm4 { +- status = "okay"; +-}; +- +-®_usb_host_vbus { +- status = "okay"; +-}; +- +-®_usb_otg_vbus { +- status = "okay"; +-}; +- +-&sata { +- status = "okay"; +-}; +- + &sound_spdif { + status = "okay"; + }; + +-&spdif { +- status = "okay"; +-}; +- +-&uart1 { +- status = "okay"; +-}; +- +-&uart2 { +- status = "okay"; +-}; +- +-&uart4 { +- status = "okay"; +-}; +- +-&uart5 { +- status = "okay"; +-}; +- +-&usbh1 { +- disable-over-current; +- vbus-supply = <®_usb_host_vbus>; +- status = "okay"; +-}; +- +-&usbotg { +- disable-over-current; +- vbus-supply = <®_usb_otg_vbus>; +- status = "okay"; +-}; +- + /* MMC1 */ + &usdhc1 { + status = "okay"; +diff --git a/arch/arm/boot/dts/imx6q-apalis-eval.dtsi b/arch/arm/boot/dts/imx6q-apalis-eval.dtsi +new file mode 100644 +index 000000000000..b6c45ad3f430 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6q-apalis-eval.dtsi +@@ -0,0 +1,120 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT ++/* ++ * Copyright 2014-2024 Toradex ++ */ ++ ++#include ++#include ++#include ++#include "imx6q.dtsi" ++#include "imx6qdl-apalis.dtsi" ++ ++/ { ++ aliases { ++ i2c0 = &i2c1; ++ i2c1 = &i2c3; ++ i2c2 = &i2c2; ++ rtc0 = &rtc_i2c; ++ rtc1 = &snvs_rtc; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ reg_3v3_sw: regulator-3v3-sw { ++ compatible = "regulator-fixed"; ++ regulator-always-on; ++ regulator-max-microvolt = <3300000>; ++ regulator-min-microvolt = <3300000>; ++ regulator-name = "3.3V_SW"; ++ }; ++}; ++ ++&i2c1 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ ++ /* M41T0M6 real time clock on carrier board */ ++ rtc_i2c: rtc@68 { ++ compatible = "st,m41t0"; ++ reg = <0x68>; ++ }; ++}; ++ ++/* ++ * I2C3_SDA/SCL (CAM) on MXM3 pin 201/203 (e.g. camera sensor on carrier ++ * board) ++ */ ++&i2c3 { ++ status = "okay"; ++}; ++ ++&pcie { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_reset_moci>; ++ /* active-high meaning opposite of regular PERST# active-low polarity */ ++ reset-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>; ++ reset-gpio-active-high; ++}; ++ ++&pwm1 { ++ status = "okay"; ++}; ++ ++&pwm2 { ++ status = "okay"; ++}; ++ ++&pwm3 { ++ status = "okay"; ++}; ++ ++&pwm4 { ++ status = "okay"; ++}; ++ ++®_usb_host_vbus { ++ status = "okay"; ++}; ++ ++®_usb_otg_vbus { ++ status = "okay"; ++}; ++ ++&sata { ++ status = "okay"; ++}; ++ ++&spdif { ++ status = "okay"; ++}; ++ ++&uart1 { ++ status = "okay"; ++}; ++ ++&uart2 { ++ status = "okay"; ++}; ++ ++&uart4 { ++ status = "okay"; ++}; ++ ++&uart5 { ++ status = "okay"; ++}; ++ ++&usbh1 { ++ disable-over-current; ++ vbus-supply = <®_usb_host_vbus>; ++ status = "okay"; ++}; ++ ++&usbotg { ++ disable-over-current; ++ vbus-supply = <®_usb_otg_vbus>; ++ status = "okay"; ++}; +-- +2.43.0 + diff --git a/recipes-kernel/linux/linux-toradex-mainline_git.bb b/recipes-kernel/linux/linux-toradex-mainline_git.bb index db88c31..8b490f7 100644 --- a/recipes-kernel/linux/linux-toradex-mainline_git.bb +++ b/recipes-kernel/linux/linux-toradex-mainline_git.bb @@ -53,6 +53,8 @@ SRC_URI:append = " \ file://0003-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch \ file://0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch \ file://0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch \ + file://0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch \ + file://0002-arm-dts-nxp-imx-Add-support-for-Apalis-Evaluation-Bo.patch \ " LINUX_VERSION ?= "6.1.71" -- cgit v1.2.3