123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542 |
- // SPDX-License-Identifier: GPL-2.0
- /dts-v1/;
- #include "jz4770.dtsi"
- #include <dt-bindings/clock/ingenic,tcu.h>
- #include <dt-bindings/gpio/gpio.h>
- #include <dt-bindings/iio/adc/ingenic,adc.h>
- #include <dt-bindings/input/input.h>
- / {
- compatible = "gcw,zero", "ingenic,jz4770";
- model = "GCW Zero";
- aliases {
- serial0 = &uart0;
- serial1 = &uart1;
- serial2 = &uart2;
- serial3 = &uart3;
- };
- memory: memory {
- device_type = "memory";
- reg = <0x0 0x10000000>,
- <0x30000000 0x10000000>;
- };
- chosen {
- stdout-path = "serial2:57600n8";
- };
- vcc: regulator@0 {
- compatible = "regulator-fixed";
- regulator-name = "vcc";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- };
- mmc1_power: regulator@1 {
- compatible = "regulator-fixed";
- regulator-name = "mmc1_vcc";
- gpio = <&gpe 9 0>;
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- vin-supply = <&vcc>;
- };
- headphones_amp: analog-amplifier@0 {
- compatible = "simple-audio-amplifier";
- enable-gpios = <&gpf 3 GPIO_ACTIVE_LOW>;
- enable-delay-ms = <50>;
- VCC-supply = <&ldo5>;
- sound-name-prefix = "Headphones Amp";
- };
- speaker_amp: analog-amplifier@1 {
- compatible = "simple-audio-amplifier";
- enable-gpios = <&gpf 20 GPIO_ACTIVE_HIGH>;
- VCC-supply = <&ldo5>;
- sound-name-prefix = "Speaker Amp";
- };
- sound {
- compatible = "simple-audio-card";
- simple-audio-card,name = "gcw0-audio";
- simple-audio-card,format = "i2s";
- simple-audio-card,widgets =
- "Speaker", "Speaker",
- "Headphone", "Headphones",
- "Microphone", "Built-in Mic";
- simple-audio-card,routing =
- "Headphones Amp INL", "LHPOUT",
- "Headphones Amp INR", "RHPOUT",
- "Headphones", "Headphones Amp OUTL",
- "Headphones", "Headphones Amp OUTR",
- "Speaker Amp INL", "LOUT",
- "Speaker Amp INR", "ROUT",
- "Speaker", "Speaker Amp OUTL",
- "Speaker", "Speaker Amp OUTR",
- "LLINEIN", "Cap-less",
- "RLINEIN", "Cap-less",
- "Built-in Mic", "MICBIAS",
- "MIC1P", "Built-in Mic",
- "MIC1N", "Built-in Mic";
- simple-audio-card,pin-switches = "Speaker", "Headphones";
- simple-audio-card,hp-det-gpio = <&gpf 21 GPIO_ACTIVE_LOW>;
- simple-audio-card,aux-devs = <&speaker_amp>, <&headphones_amp>;
- simple-audio-card,bitclock-master = <&dai_codec>;
- simple-audio-card,frame-master = <&dai_codec>;
- dai_cpu: simple-audio-card,cpu {
- sound-dai = <&aic>;
- };
- dai_codec: simple-audio-card,codec {
- sound-dai = <&codec>;
- };
- };
- rumble {
- compatible = "pwm-vibrator";
- pwms = <&pwm 4 2000000 0>;
- pwm-names = "enable";
- pinctrl-names = "default";
- pinctrl-0 = <&pins_pwm4>;
- };
- backlight: backlight {
- compatible = "pwm-backlight";
- pwms = <&pwm 1 40000 0>;
- power-supply = <&vcc>;
- brightness-levels = <0 16 32 48 64 80 96 112 128
- 144 160 176 192 208 224 240 255>;
- default-brightness-level = <12>;
- pinctrl-names = "default";
- pinctrl-0 = <&pins_pwm1>;
- };
- gpio-keys {
- compatible = "gpio-keys";
- autorepeat;
- button-0 {
- label = "D-pad up";
- linux,code = <KEY_UP>;
- linux,can-disable;
- gpios = <&gpe 21 GPIO_ACTIVE_LOW>;
- };
- button-1 {
- label = "D-pad down";
- linux,code = <KEY_DOWN>;
- linux,can-disable;
- gpios = <&gpe 25 GPIO_ACTIVE_LOW>;
- };
- button-2 {
- label = "D-pad left";
- linux,code = <KEY_LEFT>;
- linux,can-disable;
- gpios = <&gpe 23 GPIO_ACTIVE_LOW>;
- };
- button-3 {
- label = "D-pad right";
- linux,code = <KEY_RIGHT>;
- linux,can-disable;
- gpios = <&gpe 24 GPIO_ACTIVE_LOW>;
- };
- button-4 {
- label = "Button A";
- linux,code = <KEY_LEFTCTRL>;
- linux,can-disable;
- gpios = <&gpe 29 GPIO_ACTIVE_LOW>;
- };
- button-5 {
- label = "Button B";
- linux,code = <KEY_LEFTALT>;
- linux,can-disable;
- gpios = <&gpe 20 GPIO_ACTIVE_LOW>;
- };
- button-6 {
- label = "Button Y";
- linux,code = <KEY_SPACE>;
- linux,can-disable;
- gpios = <&gpe 27 GPIO_ACTIVE_LOW>;
- };
- button-7 {
- label = "Button X";
- linux,code = <KEY_LEFTSHIFT>;
- linux,can-disable;
- gpios = <&gpe 28 GPIO_ACTIVE_LOW>;
- };
- button-8 {
- label = "Left shoulder button";
- linux,code = <KEY_TAB>;
- linux,can-disable;
- gpios = <&gpb 20 GPIO_ACTIVE_LOW>;
- };
- button-9 {
- label = "Right shoulder button";
- linux,code = <KEY_BACKSPACE>;
- linux,can-disable;
- gpios = <&gpe 26 GPIO_ACTIVE_LOW>;
- };
- button-10 {
- label = "Start button";
- linux,code = <KEY_ENTER>;
- linux,can-disable;
- gpios = <&gpb 21 GPIO_ACTIVE_LOW>;
- };
- button-11 {
- label = "Select button";
- linux,code = <KEY_ESC>;
- linux,can-disable;
- /*
- * This is the only button that is active high,
- * since it doubles as BOOT_SEL1.
- */
- gpios = <&gpd 18 GPIO_ACTIVE_HIGH>;
- };
- button-12 {
- label = "Power slider";
- linux,code = <KEY_POWER>;
- linux,can-disable;
- gpios = <&gpa 30 GPIO_ACTIVE_LOW>;
- wakeup-source;
- };
- button-13 {
- label = "Power hold";
- linux,code = <KEY_PAUSE>;
- linux,can-disable;
- gpios = <&gpf 11 GPIO_ACTIVE_LOW>;
- };
- };
- i2c3: i2c-controller@3 {
- compatible = "i2c-gpio";
- #address-cells = <1>;
- #size-cells = <0>;
- sda-gpios = <&gpd 5 GPIO_ACTIVE_HIGH>;
- scl-gpios = <&gpd 4 GPIO_ACTIVE_HIGH>;
- i2c-gpio,delay-us = <2>; /* 250 kHz */
- act8600: pmic@5a {
- compatible = "active-semi,act8600";
- reg = <0x5a>;
- regulators {
- /* USB OTG */
- otg_vbus: SUDCDC_REG4 {
- /*
- * 5.3V instead of 5.0V to compensate
- * for the voltage drop of a diode
- * between the regulator and the
- * connector.
- */
- regulator-min-microvolt = <5300000>;
- regulator-max-microvolt = <5300000>;
- inl-supply = <&vcc>;
- };
- /*
- * When this is off, there is no sound, but also
- * no USB networking.
- */
- ldo5: LDO5 {
- regulator-min-microvolt = <2500000>;
- regulator-max-microvolt = <2500000>;
- inl-supply = <&vcc>;
- };
- /* LCD panel and FM radio */
- ldo6: LDO6 {
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- inl-supply = <&vcc>;
- };
- /* ??? */
- LDO7 {
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- /*regulator-always-on;*/
- inl-supply = <&vcc>;
- };
- /*
- * The colors on the LCD are wrong when this is
- * off. Which is strange, since the LCD panel
- * data sheet only mentions a 3.3V input.
- */
- LDO8 {
- regulator-min-microvolt = <1800000>;
- regulator-max-microvolt = <1800000>;
- regulator-always-on;
- inl-supply = <&vcc>;
- };
- /* RTC fixed 3.3V */
- LDO_REG9 {
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- inl-supply = <&vcc>;
- };
- /* Unused fixed 1.2V */
- LDO_REG10 {
- inl-supply = <&vcc>;
- };
- };
- };
- };
- leds {
- compatible = "gpio-leds";
- led {
- gpios = <&gpb 30 GPIO_ACTIVE_LOW>;
- default-state = "on";
- };
- };
- spi {
- compatible = "spi-gpio";
- #address-cells = <1>;
- #size-cells = <0>;
- sck-gpios = <&gpe 15 GPIO_ACTIVE_HIGH>;
- mosi-gpios = <&gpe 17 GPIO_ACTIVE_HIGH>;
- cs-gpios = <&gpe 16 GPIO_ACTIVE_HIGH>;
- num-chipselects = <1>;
- nt39016@0 {
- compatible = "kingdisplay,kd035g6-54nt";
- reg = <0>;
- spi-max-frequency = <3125000>;
- spi-3wire;
- reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
- backlight = <&backlight>;
- power-supply = <&ldo6>;
- port {
- panel_input: endpoint {
- remote-endpoint = <&panel_output>;
- };
- };
- };
- };
- connector {
- compatible = "gpio-usb-b-connector", "usb-b-connector";
- label = "mini-USB";
- type = "mini";
- /*
- * USB OTG is not yet working reliably, the ID detection
- * mechanism tends to fry easily for unknown reasons.
- * Until this is fixed, disable OTG by not providing the
- * ID GPIO to the driver.
- */
- //id-gpios = <&gpf 18 GPIO_ACTIVE_LOW>;
- vbus-gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
- vbus-supply = <&otg_vbus>;
- pinctrl-names = "default";
- pinctrl-0 = <&pins_otg>;
- port {
- usb_ep: endpoint {
- remote-endpoint = <&usb_otg_ep>;
- };
- };
- };
- };
- &ext {
- clock-frequency = <12000000>;
- };
- &pinctrl {
- pins_lcd: lcd {
- function = "lcd";
- groups = "lcd-24bit";
- };
- pins_uart2: uart2 {
- function = "uart2";
- groups = "uart2-data";
- };
- pins_mmc0: mmc0 {
- function = "mmc0";
- groups = "mmc0-1bit-a", "mmc0-4bit-a";
- };
- pins_mmc1: mmc1 {
- function = "mmc1";
- groups = "mmc1-1bit-d", "mmc1-4bit-d";
- };
- pins_otg: otg {
- otg-vbus-pin {
- function = "otg";
- groups = "otg-vbus";
- };
- vbus-pin {
- pins = "PB5";
- bias-disable;
- };
- };
- pins_pwm1: pwm1 {
- function = "pwm1";
- groups = "pwm1";
- };
- pins_pwm4: pwm4 {
- function = "pwm4";
- groups = "pwm4";
- };
- };
- &uart2 {
- pinctrl-names = "default";
- pinctrl-0 = <&pins_uart2>;
- status = "okay";
- };
- &cgu {
- /*
- * Put high-speed peripherals under PLL1, such that we can change the
- * PLL0 frequency on demand without having to suspend peripherals.
- * We use a rate of 432 MHz, which is the least common multiple of
- * 27 MHz (required by TV encoder) and 48 MHz (required by USB host).
- * Put the GPU under PLL0 since we want a higher frequency.
- * Use the 32 kHz oscillator as the parent of the RTC for a higher
- * precision.
- */
- assigned-clocks =
- <&cgu JZ4770_CLK_PLL1>,
- <&cgu JZ4770_CLK_GPU>,
- <&cgu JZ4770_CLK_RTC>,
- <&cgu JZ4770_CLK_UHC>,
- <&cgu JZ4770_CLK_LPCLK_MUX>,
- <&cgu JZ4770_CLK_MMC0_MUX>,
- <&cgu JZ4770_CLK_MMC1_MUX>;
- assigned-clock-parents =
- <0>,
- <&cgu JZ4770_CLK_PLL0>,
- <&cgu JZ4770_CLK_OSC32K>,
- <&cgu JZ4770_CLK_PLL1>,
- <&cgu JZ4770_CLK_PLL1>,
- <&cgu JZ4770_CLK_PLL1>,
- <&cgu JZ4770_CLK_PLL1>;
- assigned-clock-rates =
- <432000000>,
- <600000000>;
- };
- &uhc {
- /* The WiFi module is connected to the UHC. */
- status = "okay";
- };
- &tcu {
- /*
- * 750 kHz for the system timer and clocksource, 12 MHz for the OST,
- * and use RTC as the parent for the watchdog clock
- */
- assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER2>,
- <&tcu TCU_CLK_OST>, <&tcu TCU_CLK_WDT>;
- assigned-clock-parents = <0>, <0>, <0>, <&cgu JZ4770_CLK_RTC>;
- assigned-clock-rates = <750000>, <750000>, <12000000>;
- /* PWM1 is in use, so use channel #2 for the clocksource */
- ingenic,pwm-channels-mask = <0xfa>;
- };
- &usb_otg {
- port {
- usb_otg_ep: endpoint {
- remote-endpoint = <&usb_ep>;
- };
- };
- };
- &otg_phy {
- vcc-supply = <&ldo5>;
- };
- &rtc {
- clocks = <&cgu JZ4770_CLK_RTC>;
- clock-names = "rtc";
- system-power-controller;
- };
- &mmc0 {
- status = "okay";
- bus-width = <4>;
- max-frequency = <48000000>;
- vmmc-supply = <&vcc>;
- non-removable;
- pinctrl-names = "default";
- pinctrl-0 = <&pins_mmc0>;
- };
- &mmc1 {
- status = "okay";
- bus-width = <4>;
- max-frequency = <48000000>;
- cd-gpios = <&gpb 2 GPIO_ACTIVE_LOW>;
- vmmc-supply = <&mmc1_power>;
- pinctrl-names = "default";
- pinctrl-0 = <&pins_mmc1>;
- };
- &lcd {
- pinctrl-names = "default";
- pinctrl-0 = <&pins_lcd>;
- port {
- panel_output: endpoint {
- remote-endpoint = <&panel_input>;
- };
- };
- };
|