On 6/15/22 4:39 AM, Suniel Mahesh wrote: > The R16-Vista-E board from RenewWorldOutreach based on allwinner > R16(A33). > > General features: > - 1GB RAM > - microSD slot > - Realtek Wifi > - 1 x USB 2.0 > - HDMI IN > - HDMI OUT > - Audio out > - MIPI DSI > - TI DLPC3433 > > It has also connectors to connect an external mini keypad. > > Signed-off-by: Christopher Vollo <chris@xxxxxxxxxxxxxxxxx> > Signed-off-by: Jagan Teki <jagan@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Suniel Mahesh <sunil@xxxxxxxxxxxxxxxxxxxx> > > --- > Changes for v2: > - Add missing compatible string > - insert missing signatures of contributors > --- > arch/arm/boot/dts/Makefile | 1 + > arch/arm/boot/dts/sun8i-r16-renew-vista-e.dts | 361 ++++++++++++++++++ > 2 files changed, 362 insertions(+) > create mode 100644 arch/arm/boot/dts/sun8i-r16-renew-vista-e.dts > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index 184899808ee7..b5966c0742e1 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -1353,6 +1353,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \ > sun8i-r16-nintendo-nes-classic.dtb \ > sun8i-r16-nintendo-super-nes-classic.dtb \ > sun8i-r16-parrot.dtb \ > + sun8i-r16-renew-vista-e.dtb \ > sun8i-r40-bananapi-m2-ultra.dtb \ > sun8i-r40-oka40i-c.dtb \ > sun8i-s3-elimo-initium.dtb \ > diff --git a/arch/arm/boot/dts/sun8i-r16-renew-vista-e.dts b/arch/arm/boot/dts/sun8i-r16-renew-vista-e.dts > new file mode 100644 > index 000000000000..45f620203c33 > --- /dev/null > +++ b/arch/arm/boot/dts/sun8i-r16-renew-vista-e.dts > @@ -0,0 +1,361 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * Copyright (C) 2022 RenewWorldOutreach > + * Copyright (C) 2022 Amarula Solutions(India) > + */ > + > +/dts-v1/; > +#include "sun8i-a33.dtsi" > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > +#include <dt-bindings/leds/common.h> > + > +/ { > + model = "RenewWorldOutreach R16-Vista-E"; > + compatible = "renewworldoutreach,r16-vista-e", "allwinner,sun8i-r16", "allwinner,sun8i-a33"; > + > + aliases { > + serial0 = &uart0; > + }; > + > + chosen { > + stdout-path = "serial0:115200n8"; > + }; > + > + gpio-keys-polled { > + compatible = "gpio-keys-polled"; > + poll-interval = <100>; > + > + ok { > + label = "ok"; > + linux,code = <KEY_OK>; > + gpios = <&pio 4 0 GPIO_ACTIVE_LOW>; > + }; > + > + left { > + label = "left"; > + linux,code = <KEY_LEFT>; > + gpios = <&pio 4 1 GPIO_ACTIVE_LOW>; > + }; > + > + right { > + label = "right"; > + linux,code = <KEY_RIGHT>; > + gpios = <&pio 4 2 GPIO_ACTIVE_LOW>; > + }; > + > + up { > + label = "up"; > + linux,code = <KEY_UP>; > + gpios = <&pio 4 3 GPIO_ACTIVE_LOW>; > + }; > + > + down { > + label = "down"; > + linux,code = <KEY_DOWN>; > + gpios = <&pio 4 4 GPIO_ACTIVE_LOW>; > + }; > + > + back { > + label = "back"; > + linux,code = <KEY_BACK>; > + gpios = <&pio 4 5 GPIO_ACTIVE_LOW>; > + }; > + > + power { > + label = "power"; > + linux,code = <KEY_POWER>; > + gpios = <&pio 4 6 GPIO_ACTIVE_LOW>; > + }; > + > + vol-down { > + label = "vol-down"; > + linux,code = <KEY_VOLUMEDOWN>; > + gpios = <&pio 7 3 GPIO_ACTIVE_LOW>; > + }; > + > + vol-up { > + label = "vol-up"; > + linux,code = <KEY_VOLUMEUP>; > + gpios = <&pio 7 9 GPIO_ACTIVE_LOW>; > + }; > + }; > + > + leds { > + compatible = "gpio-leds"; > + > + battery-led0 { > + label = "renew-e:battery-led0"; > + gpios = <&r_pio 0 2 GPIO_ACTIVE_HIGH>; > + }; > + > + battery-led1 { > + label = "renew-e:battery-led1"; > + gpios = <&r_pio 0 3 GPIO_ACTIVE_HIGH>; > + }; > + > + battery-led2 { > + label = "renew-e:battery-led2"; > + gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; > + }; > + > + battery-led3 { > + label = "renew-e:battery-led3"; > + gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; > + }; > + > + pad-intz { > + label = "renew-e:pad-intz"; > + gpios = <&pio 4 16 GPIO_ACTIVE_HIGH>; > + default-state = "on"; > + }; Is this really an LED, or just a generic output? > + > + battery-led4 { > + label = "renew-e:battery-led4"; > + gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; > + }; > + > + volume-led0 { > + label = "renew-e:volume-led0"; > + gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; > + }; Indent with tabs, please. > + > + volume-led1 { > + label = "renew-e:volume-led1"; > + gpios = <&pio 6 13 GPIO_ACTIVE_HIGH>; > + }; > + > + volume-led2 { > + label = "renew-e:volume-led2"; > + gpios = <&pio 6 12 GPIO_ACTIVE_HIGH>; > + }; > + > + volume-led3 { > + label = "renew-e:volume-led3"; > + gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>; > + }; > + > + volume-led4 { > + label = "renew-e:volume-led4"; > + gpios = <&pio 6 10 GPIO_ACTIVE_HIGH>; > + }; > + > + fans-on { > + label = "renew-e:fans-on"; > + gpios = <&pio 4 14 GPIO_ACTIVE_HIGH>; /* FAN_ON/OFF: PE14 */ > + default-state = "on"; > + }; Does this drive an LED or control a fan? If it controls a fan, it should use the gpio-fan binding, and not pretend to be an LED. It also does not validate against the gpio-leds binding: sun8i-r16-renew-vista-e.dtb: leds: 'fans-on', 'pad-intz' do not match any of the regexes: '(^led-[0-9a-f]$|led)', 'pinctrl-[0-9]+' > + }; > + > + reg_vcc5v0: vcc5v0 { > + compatible = "regulator-fixed"; > + regulator-name = "vcc5v0"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + }; > +}; > + > +&codec { > + status = "okay"; > +}; > + > +&cpu0 { > + cpu-supply = <®_dcdc3>; > +}; > + > +&cpu0_opp_table { > + opp-1104000000 { > + opp-hz = /bits/ 64 <1104000000>; > + opp-microvolt = <1320000>; > + clock-latency-ns = <244144>; /* 8 32k periods */ > + }; > + > + opp-1200000000 { > + opp-hz = /bits/ 64 <1200000000>; > + opp-microvolt = <1320000>; > + clock-latency-ns = <244144>; /* 8 32k periods */ > + }; > +}; > + > +&dai { > + status = "okay"; > +}; > + > +&de { > + status = "okay"; > +}; > + > +&dphy { > + status = "okay"; > +}; > + > +&ehci0 { > + status = "okay"; > +}; > + > +&mmc0 { > + vmmc-supply = <®_dcdc1>; > + bus-width = <4>; > + non-removable; > + status = "okay"; > +}; > + > +&mmc1 { > + pinctrl-names = "default"; > + pinctrl-0 = <&mmc1_pg_pins>; > + vmmc-supply = <®_dcdc1>; > + bus-width = <4>; > + broken-cd; > + status = "okay"; > +}; > + > +&ohci0 { > + status = "okay"; > +}; > + > +&r_rsb { > + status = "okay"; > + > + axp22x: pmic@3a3 { > + compatible = "x-powers,axp223"; > + reg = <0x3a3>; > + interrupt-parent = <&r_intc>; > + interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>; > + eldoin-supply = <®_dcdc1>; > + x-powers,drive-vbus-en; > + }; > +}; > + > +#include "axp223.dtsi" > + > +&ac_power_supply { > + status = "okay"; > +}; > + > +®_aldo1 { > + regulator-always-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + regulator-name = "vcc-io"; > +}; > + > +®_aldo2 { > + regulator-always-on; > + regulator-min-microvolt = <2500000>; > + regulator-max-microvolt = <2500000>; > + regulator-name = "vdd-dll"; > +}; > + > +®_aldo3 { > + regulator-always-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + regulator-name = "avcc"; > +}; > + > +®_dc1sw { > + regulator-name = "vcc-lcd"; > +}; > + > +®_dc5ldo { > + regulator-always-on; > + regulator-min-microvolt = <900000>; > + regulator-max-microvolt = <1400000>; > + regulator-name = "vdd-cpus"; > +}; > + > +®_dcdc1 { > + regulator-always-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + regulator-name = "vcc-3v0"; > +}; > + > +®_dcdc2 { > + regulator-always-on; > + regulator-min-microvolt = <900000>; > + regulator-max-microvolt = <1400000>; > + regulator-name = "vdd-sys"; > +}; > + > +®_dcdc3 { > + regulator-always-on; > + regulator-min-microvolt = <900000>; > + regulator-max-microvolt = <1400000>; > + regulator-name = "vdd-cpu"; > +}; > + > +®_dcdc5 { > + regulator-always-on; > + regulator-min-microvolt = <1500000>; > + regulator-max-microvolt = <1500000>; > + regulator-name = "vcc-dram"; > +}; > + > +®_dldo1 { > + regulator-always-on; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-name = "vcc-3v3-main1"; > +}; > + > +®_dldo2 { > + regulator-always-on; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-name = "vcc-3v3-main2"; > +}; > + > +®_dldo3 { > + regulator-always-on; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-name = "vcc-3v3-main3"; > +}; > + > +®_dldo4 { > + regulator-always-on; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-name = "vcc-3v3-main4"; > +}; > + > +®_eldo1 { > + regulator-always-on; > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1200000>; > + regulator-name = "vcc-1v2-hdmi"; > +}; > + > +®_drivevbus { > + regulator-name = "usb0-vbus"; > + status = "okay"; > +}; > + > +®_rtc_ldo { > + regulator-name = "vcc-rtc"; > +}; > + > +&sound { > + status = "okay"; > + simple-audio-card,routing = > + "Left DAC", "AIF1 Slot 0 Left", > + "Right DAC", "AIF1 Slot 0 Right"; Please use "DACL" and "DACR" here, instead of the AIF1 Slot 0 widgets. The AIF1 Slot 0 widgets do not accurately describe the audio routing and are only kept for backward compatibility. > +}; > + > +&uart0 { > + pinctrl-names = "default"; > + pinctrl-0 = <&uart0_pb_pins>; > + status = "okay"; > +}; > + > +&usb_otg { > + dr_mode = "host"; > + status = "okay"; > +}; > + > +&usbphy { > + usb0_vbus-supply = <®_vcc5v0>; You enable drivevbus and label it as "usb0-vbus". But this suggests the VBUS is always on. Which is correct? > + status = "okay"; > +}; >