On 20/07/2023 13:29, Nikita Shubin via B4 Relay wrote: > From: Nikita Shubin <nikita.shubin@xxxxxxxxxxx> > > Add support for Cirrus Logic EP93XX SoC's family. > > Co-developed-by: Alexander Sverdlin <alexander.sverdlin@xxxxxxxxx> > Signed-off-by: Alexander Sverdlin <alexander.sverdlin@xxxxxxxxx> > Signed-off-by: Nikita Shubin <nikita.shubin@xxxxxxxxxxx> > --- > arch/arm/boot/dts/cirrus/ep93xx.dtsi | 449 +++++++++++++++++++++++++++++++++++ > 1 file changed, 449 insertions(+) > > diff --git a/arch/arm/boot/dts/cirrus/ep93xx.dtsi b/arch/arm/boot/dts/cirrus/ep93xx.dtsi > new file mode 100644 > index 000000000000..1e04f39d7b80 > --- /dev/null > +++ b/arch/arm/boot/dts/cirrus/ep93xx.dtsi > @@ -0,0 +1,449 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Device Tree file for Cirrus Logic systems EP93XX SoC > + */ > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/leds/common.h> > +#include <dt-bindings/input/input.h> > +#include <dt-bindings/clock/cirrus,ep93xx-clock.h> > +/ { > + soc: soc { > + compatible = "simple-bus"; > + ranges; > + #address-cells = <1>; > + #size-cells = <1>; > + > + syscon: syscon@80930000 { > + compatible = "cirrus,ep9301-syscon", > + "syscon", "simple-mfd"; Fix alignment. > + reg = <0x80930000 0x1000>; > + > + eclk: clock-controller { > + compatible = "cirrus,ep9301-clk"; > + #clock-cells = <1>; > + clocks = <&xtali>; > + status = "okay"; Drop statuses when not needed. > + }; > + > + pinctrl: pinctrl { > + compatible = "cirrus,ep9301-pinctrl"; > + > + spi_default_pins: pins-spi { > + function = "spi"; > + groups = "ssp"; > + }; > + ... > + > + keypad: keypad@800f0000 { > + compatible = "cirrus,ep9307-keypad"; > + reg = <0x800f0000 0x0c>; > + interrupt-parent = <&vic0>; > + interrupts = <29>; > + clocks = <&eclk EP93XX_CLK_KEYPAD>; > + pinctrl-names = "default"; > + pinctrl-0 = <&keypad_default_pins>; > + linux,keymap = No need for line break. > + <KEY_UP>, > + <KEY_DOWN>, > + <KEY_VOLUMEDOWN>, > + <KEY_HOME>, > + <KEY_RIGHT>, > + <KEY_LEFT>, > + <KEY_ENTER>, > + <KEY_VOLUMEUP>, > + <KEY_F6>, > + <KEY_F8>, > + <KEY_F9>, > + <KEY_F10>, > + <KEY_F1>, > + <KEY_F2>, > + <KEY_F3>, > + <KEY_POWER>; > + }; > + > + pwm0: pwm@80910000 { > + compatible = "cirrus,ep9301-pwm"; > + reg = <0x80910000 0x10>; > + clocks = <&eclk EP93XX_CLK_PWM>; > + status = "disabled"; > + }; > + > + pwm1: pwm@80910020 { > + compatible = "cirrus,ep9301-pwm"; > + reg = <0x80910020 0x10>; > + clocks = <&eclk EP93XX_CLK_PWM>; > + pinctrl-names = "default"; > + pinctrl-0 = <&pwm1_default_pins>; > + status = "disabled"; > + }; > + > + rtc0: rtc@80920000 { > + compatible = "cirrus,ep9301-rtc"; > + reg = <0x80920000 0x100>; > + }; > + > + spi0: spi@808a0000 { > + compatible = "cirrus,ep9301-spi"; > + reg = <0x808a0000 0x18>; > + #address-cells = <1>; > + #size-cells = <0>; > + interrupt-parent = <&vic1>; > + interrupts = <21>; > + clocks = <&eclk EP93XX_CLK_SPI>; > + pinctrl-names = "default"; > + pinctrl-0 = <&spi_default_pins>; > + status = "disabled"; > + }; > + > + timer: timer@80810000 { > + compatible = "cirrus,ep9301-timer"; > + reg = <0x80810000 0x100>; > + interrupt-parent = <&vic1>; > + interrupts = <19>; > + }; > + > + uart0: uart@808c0000 { > + compatible = "arm,primecell"; This looks incomplete. > + reg = <0x808c0000 0x1000>; > + arm,primecell-periphid = <0x00041010>; > + clocks = <&eclk EP93XX_CLK_UART1>, <&eclk EP93XX_CLK_UART>; > + clock-names = "apb:uart1", "apb_pclk"; 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). > + interrupt-parent = <&vic1>; > + interrupts = <20>; > + status = "disabled"; > + }; > + > + uart1: uart@808d0000 { > + compatible = "arm,primecell"; > + reg = <0x808d0000 0x1000>; > + arm,primecell-periphid = <0x00041010>; > + clocks = <&eclk EP93XX_CLK_UART2>, <&eclk EP93XX_CLK_UART>; > + clock-names = "apb:uart2", "apb_pclk"; 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). > + interrupt-parent = <&vic1>; > + interrupts = <22>; > + status = "disabled"; > + }; > + > + uart2: uart@808b0000 { > + compatible = "arm,primecell"; > + reg = <0x808b0000 0x1000>; > + arm,primecell-periphid = <0x00041010>; > + clocks = <&eclk EP93XX_CLK_UART3>, <&eclk EP93XX_CLK_UART>; > + clock-names = "apb:uart3", "apb_pclk"; > + interrupt-parent = <&vic1>; > + interrupts = <23>; > + status = "disabled"; > + }; > + > + usb0: usb@80020000 { > + compatible = "generic-ohci"; > + reg = <0x80020000 0x10000>; > + interrupt-parent = <&vic1>; > + interrupts = <24>; > + clocks = <&eclk EP93XX_CLK_USB>; > + status = "disabled"; > + }; > + > + watchdog0: watchdog@80940000 { > + compatible = "cirrus,ep9301-wdt"; > + reg = <0x80940000 0x08>; > + }; > + }; > + > + xtali: oscillator { > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <14745600>; > + clock-output-names = "xtali"; > + }; > + > + i2c0: i2c { > + compatible = "i2c-gpio"; > + sda-gpios = <&gpio6 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; > + scl-gpios = <&gpio6 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; Are you sure this is part of SoC? It is rather unusual... I would say this would be the first SoC, where GPIO pins must be an I2C. Best regards, Krzysztof