Re: [PATCH 1/2] ARM: dts: imx6qdl: Add Variscite VAR-SOM-MX6 SoM support

From: Krzysztof Kozlowski
Date: Wed Jul 19 2023 - 13:16:42 EST


On 19/07/2023 18:00, James Hilliard wrote:
> This patch adds support for the Variscite VAR_SOM-MX6 SoM with :
> - i.MX6 Quad or Dual Lite SoC
> - 256 – 4096 MB DDR3
> - 4-64 GB eMMC
> - 128 – 1024 MB SLC NAND
> - Camera Interface
> - HDMI+CEC interface
> - LVDS / DSI / Parallel RGB interfaces
> - Ethernet RGMII interface
> - On-SoM Wi-Fi/Bluetooth with WiLink wl183x SDIO Module
> - SD/MMC/SDIO interface
> - USB Host + USB OTG interface
> - I2C interfaces
> - SPI interfaces
> - PCI-Express 2.0 interface
> - on-SoM Audio Codec with HP/Line-In interfaces + DMIC interface
> - Digital Audio interface
> - S/PDIF interface
>
> Product website : https://www.variscite.com/product/system-on-module-som/cortex-a9/var-som-mx6-cpu-freescale-imx6/
>
> Support is handled with a SoM-centric dtsi exporting the default interfaces
> along the default pinmuxing to be enabled by the board dts file.
>
> This file is based on the one provided by Variscite on their own
> kernel, but adapted for mainline.
>
> Signed-off-by: Gregory CLEMENT <gregory.clement@xxxxxxxxxxx>
> Signed-off-by: James Hilliard <james.hilliard1@xxxxxxxxx>
> ---
> arch/arm/boot/dts/imx6qdl-var-som.dtsi | 547 +++++++++++++++++++++++++
> 1 file changed, 547 insertions(+)
> create mode 100644 arch/arm/boot/dts/imx6qdl-var-som.dtsi
>
> diff --git a/arch/arm/boot/dts/imx6qdl-var-som.dtsi b/arch/arm/boot/dts/imx6qdl-var-som.dtsi
> new file mode 100644
> index 000000000000..e93dae59624e
> --- /dev/null
> +++ b/arch/arm/boot/dts/imx6qdl-var-som.dtsi
> @@ -0,0 +1,547 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Support for Variscite VAR-SOM-MX6 Module
> + *
> + * Copyright 2011 Linaro Ltd.
> + * Copyright 2012 Freescale Semiconductor, Inc.
> + * Copyright (C) 2014-2016 Variscite, Ltd.
> + * Author: Donio Ron <ron.d@xxxxxxxxxxxxx>
> + * Copyright 2022 Bootlin
> + */
> +
> +/dts-v1/;
> +
> +#include "imx6q.dtsi"
> +#include <dt-bindings/clock/imx6qdl-clock.h>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/sound/fsl-imx-audmux.h>
> +
> +/ {
> + model = "Variscite i.MX6 QUAD/DUAL VAR-SOM-MX6";
> + compatible = "fsl,imx6q";

That's not correct compatible. It's not Imx6 soc. It's a som.

> +...
> +
> + sound: sound {
> + compatible = "simple-audio-card";
> + simple-audio-card,name = "var-som-audio";
> + simple-audio-card,format = "i2s";
> + simple-audio-card,bitclock-master = <&sound_codec>;
> + simple-audio-card,frame-master = <&sound_codec>;
> + simple-audio-card,widgets = "Headphone", "Headphone Jack",
> + "Line", "Line In", "Microphone", "Mic Jack";
> + simple-audio-card,routing = "Headphone Jack", "HPLOUT",
> + "Headphone Jack", "HPROUT",
> + "LINE1L", "Line In",
> + "LINE1R", "Line In";
> +
> + sound_cpu: simple-audio-card,cpu {
> + sound-dai = <&ssi2>;
> + };
> +
> + sound_codec: simple-audio-card,codec {
> + sound-dai = <&tlv320aic3106>;
> + clocks = <&clks IMX6QDL_CLK_CKO>;
> + };
> + };
> +
> + wlan_bt_rfkill {

No underscores in node names.

Just "rfkill"


> + compatible = "rfkill-gpio";
> + name = "wlan_bt_rfkill";
> + type = <2>; /* bluetooth */
> + gpios = <&gpio6 18 GPIO_ACTIVE_HIGH>;
> + };
> +};
> +

...

> + tlv320aic3106: codec@1b {
> + compatible = "ti,tlv320aic3106";
> + reg = <0x1b>;
> + #sound-dai-cells = <0>;
> + DRVDD-supply = <&reg_3p3v>;
> + AVDD-supply = <&reg_3p3v>;
> + IOVDD-supply = <&reg_3p3v>;
> + DVDD-supply = <&reg_3p3v>;
> + ai3x-ocmv = <0>;
> + reset-gpios = <&gpio4 5 GPIO_ACTIVE_LOW>;
> + ai3x-gpio-func = <
> + 0 /* AIC3X_GPIO1_FUNC_DISABLED */
> + 5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */
> + >;
> + };
> +};
> +
> +&iomuxc {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_hog>;
> +
> + imx6qdl-var-som-mx6 {
> + pinctrl_hog: hoggrp {
> + fsl,pins = <
> + /* CTW6120 IRQ */
> + MX6QDL_PAD_EIM_DA7__GPIO3_IO07 0x80000000
> + /* SDMMC2 CD/WP */
> + MX6QDL_PAD_KEY_COL4__GPIO4_IO14 0x80000000
> + MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000
> + >;
> + };
> +
> + pinctrl_audmux: audmux {

It does not look like you tested the DTS against bindings. Please run
`make dtbs_check` (see
Documentation/devicetree/bindings/writing-schema.rst or
https://www.linaro.org/blog/tips-and-tricks-for-validating-devicetree-sources-with-the-devicetree-schema/
for instructions).

AFAIR, all of them end with grp


...

> +
> +&usdhc3 {
> + pinctrl-names = "default", "state_100mhz", "state_200mhz";
> + pinctrl-0 = <&pinctrl_usdhc3>;
> + pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
> + pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
> + bus-width = <4>;
> + vmmc-supply = <&reg_wl18xx_vmmc>;
> + non-removable;
> + wakeup-source;
> + keep-power-in-suspend;
> + cap-power-off-card;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + status = "okay";
> +
> + wlcore: wlcore@0 {

Generic node names. Is this wifi?

https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation

> + compatible = "ti,wl1835";
> + reg = <2>;


Best regards,
Krzysztof