546 lines
11 KiB
Plaintext
546 lines
11 KiB
Plaintext
// 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";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
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>;
|
|
};
|
|
};
|
|
};
|