mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Commit08384e80a7
("MIPS: DTS: CI20: Fix ACT8600 regulator node names") caused the VDDCORE power supply (regulated by the ACT8600's DCDC1 output) to drop from a voltage of 1.2V configured by the bootloader, to the 1.1V set in the Device Tree. According to the documentation, the VDDCORE supply should be between 0.99V and 1.21V; both values are therefore within the supported range. However, VDDCORE being 1.1V results in the CI20 being very unstable, with corrupted memory, failures to boot, or reboots at random. The reason might be succint drops of the voltage below the minimum required. Raising the minimum voltage to 1.125 volts seems to be enough to address this issue, while still keeping a relatively low core voltage which helps for power consumption and thermals. Fixes:08384e80a7
("MIPS: DTS: CI20: Fix ACT8600 regulator node names") Signed-off-by: Paul Cercueil <paul@crapouillou.net> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
650 lines
12 KiB
Text
650 lines
12 KiB
Text
// SPDX-License-Identifier: GPL-2.0
|
|
/dts-v1/;
|
|
|
|
#include "jz4780.dtsi"
|
|
#include <dt-bindings/clock/ingenic,tcu.h>
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/interrupt-controller/irq.h>
|
|
#include <dt-bindings/regulator/active-semi,8865-regulator.h>
|
|
|
|
/ {
|
|
compatible = "img,ci20", "ingenic,jz4780";
|
|
|
|
aliases {
|
|
serial0 = &uart0;
|
|
serial1 = &uart1;
|
|
serial3 = &uart3;
|
|
serial4 = &uart4;
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = &uart4;
|
|
};
|
|
|
|
memory {
|
|
device_type = "memory";
|
|
reg = <0x0 0x10000000
|
|
0x30000000 0x30000000>;
|
|
};
|
|
|
|
gpio-keys {
|
|
compatible = "gpio-keys";
|
|
|
|
switch {
|
|
label = "ci20:sw1";
|
|
linux,code = <KEY_F13>;
|
|
gpios = <&gpd 17 GPIO_ACTIVE_HIGH>;
|
|
wakeup-source;
|
|
};
|
|
};
|
|
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
|
|
led-0 {
|
|
label = "ci20:red:led0";
|
|
gpios = <&gpc 3 GPIO_ACTIVE_HIGH>;
|
|
linux,default-trigger = "none";
|
|
};
|
|
|
|
led-1 {
|
|
label = "ci20:red:led1";
|
|
gpios = <&gpc 2 GPIO_ACTIVE_HIGH>;
|
|
linux,default-trigger = "nand-disk";
|
|
};
|
|
|
|
led-2 {
|
|
label = "ci20:red:led2";
|
|
gpios = <&gpc 1 GPIO_ACTIVE_HIGH>;
|
|
linux,default-trigger = "cpu1";
|
|
};
|
|
|
|
led-3 {
|
|
label = "ci20:red:led3";
|
|
gpios = <&gpc 0 GPIO_ACTIVE_HIGH>;
|
|
linux,default-trigger = "cpu0";
|
|
};
|
|
};
|
|
|
|
eth0_power: fixedregulator-0 {
|
|
compatible = "regulator-fixed";
|
|
|
|
regulator-name = "eth0_power";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
|
|
gpio = <&gpb 25 0>;
|
|
enable-active-high;
|
|
};
|
|
|
|
hdmi_out: connector {
|
|
compatible = "hdmi-connector";
|
|
label = "HDMI OUT";
|
|
type = "a";
|
|
|
|
ddc-en-gpios = <&gpa 25 GPIO_ACTIVE_HIGH>;
|
|
|
|
port {
|
|
hdmi_con: endpoint {
|
|
remote-endpoint = <&dw_hdmi_out>;
|
|
};
|
|
};
|
|
};
|
|
|
|
ir: ir {
|
|
compatible = "gpio-ir-receiver";
|
|
gpios = <&gpe 3 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
bt_power: fixedregulator-1 {
|
|
compatible = "regulator-fixed";
|
|
|
|
regulator-name = "bt_power";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
regulator-settling-time-us = <1400>;
|
|
|
|
vin-supply = <&vcc_50>;
|
|
|
|
gpio = <&gpb 19 0>;
|
|
enable-active-high;
|
|
};
|
|
|
|
otg_power: fixedregulator-2 {
|
|
compatible = "regulator-fixed";
|
|
|
|
regulator-name = "otg_power";
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
|
|
gpio = <&gpf 15 0>;
|
|
enable-active-high;
|
|
};
|
|
|
|
wifi_power: fixedregulator-4 {
|
|
compatible = "regulator-fixed";
|
|
|
|
regulator-name = "wifi_power";
|
|
|
|
/*
|
|
* Technically it's 5V, the WiFi chip has its own internal
|
|
* regulators; but the MMC/SD subsystem won't accept such a
|
|
* value.
|
|
*/
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
regulator-settling-time-us = <150000>;
|
|
|
|
vin-supply = <&bt_power>;
|
|
};
|
|
|
|
vcc_33v: fixedregulator-5 {
|
|
compatible = "regulator-fixed";
|
|
|
|
regulator-name = "vcc_33v";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
wifi_pwrseq: pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
reset-gpios = <&gpf 7 GPIO_ACTIVE_LOW>;
|
|
|
|
clocks = <&rtc_dev>;
|
|
clock-names = "ext_clock";
|
|
};
|
|
};
|
|
|
|
&ext {
|
|
clock-frequency = <48000000>;
|
|
};
|
|
|
|
&cgu {
|
|
/*
|
|
* Use the 32.768 kHz oscillator as the parent of the RTC for a higher
|
|
* precision.
|
|
*/
|
|
assigned-clocks = <&cgu JZ4780_CLK_OTGPHY>, <&cgu JZ4780_CLK_RTC>,
|
|
<&cgu JZ4780_CLK_SSIPLL>, <&cgu JZ4780_CLK_SSI>,
|
|
<&cgu JZ4780_CLK_HDMI>, <&cgu JZ4780_CLK_MSCMUX>;
|
|
assigned-clock-parents = <0>, <&cgu JZ4780_CLK_RTCLK>,
|
|
<&cgu JZ4780_CLK_MPLL>,
|
|
<&cgu JZ4780_CLK_SSIPLL>,
|
|
<0>, <&cgu JZ4780_CLK_MPLL>;
|
|
assigned-clock-rates = <48000000>, <0>, <54000000>, <0>, <27000000>;
|
|
};
|
|
|
|
&tcu {
|
|
/*
|
|
* 750 kHz for the system timers and clocksource,
|
|
* use channel #0 and #1 for the per cpu system timers,
|
|
* and use channel #2 for the clocksource.
|
|
*
|
|
* 3000 kHz for the OST timer to provide a higher
|
|
* precision clocksource.
|
|
*/
|
|
assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER1>,
|
|
<&tcu TCU_CLK_TIMER2>, <&tcu TCU_CLK_OST>;
|
|
assigned-clock-rates = <750000>, <750000>, <750000>, <3000000>;
|
|
};
|
|
|
|
&mmc0 {
|
|
status = "okay";
|
|
|
|
bus-width = <4>;
|
|
max-frequency = <50000000>;
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_mmc0>;
|
|
|
|
cd-gpios = <&gpf 20 GPIO_ACTIVE_LOW>;
|
|
vmmc-supply = <&vcc_33v>;
|
|
vqmmc-supply = <&vcc_33v>;
|
|
};
|
|
|
|
&mmc1 {
|
|
status = "okay";
|
|
|
|
bus-width = <4>;
|
|
max-frequency = <25000000>;
|
|
mmc-pwrseq = <&wifi_pwrseq>;
|
|
vmmc-supply = <&wifi_power>;
|
|
vqmmc-supply = <&wifi_io>;
|
|
non-removable;
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_mmc1>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
wifi@1 {
|
|
compatible = "brcm,bcm4329-fmac";
|
|
reg = <1>;
|
|
|
|
interrupt-parent = <&gpd>;
|
|
interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
|
|
interrupt-names = "host-wake";
|
|
};
|
|
};
|
|
|
|
&uart0 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_uart0>;
|
|
};
|
|
|
|
&uart1 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_uart1>;
|
|
};
|
|
|
|
&uart2 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_uart2>;
|
|
uart-has-rtscts;
|
|
|
|
bluetooth {
|
|
compatible = "brcm,bcm4330-bt";
|
|
|
|
vbat-supply = <&bt_power>;
|
|
vddio-supply = <&wifi_io>;
|
|
|
|
interrupt-parent = <&gpf>;
|
|
interrupts = <6 IRQ_TYPE_EDGE_RISING>;
|
|
interrupt-names = "host-wakeup";
|
|
|
|
clocks = <&rtc_dev>;
|
|
clock-names = "lpo";
|
|
|
|
reset-gpios = <&gpf 8 GPIO_ACTIVE_LOW>;
|
|
device-wakeup-gpios = <&gpf 5 GPIO_ACTIVE_HIGH>;
|
|
shutdown-gpios = <&gpf 4 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
};
|
|
|
|
&uart3 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_uart3>;
|
|
};
|
|
|
|
&uart4 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_uart4>;
|
|
};
|
|
|
|
&i2c0 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_i2c0>;
|
|
|
|
clock-frequency = <400000>;
|
|
|
|
act8600: act8600@5a {
|
|
compatible = "active-semi,act8600";
|
|
reg = <0x5a>;
|
|
|
|
regulators {
|
|
vddcore: DCDC1 {
|
|
regulator-min-microvolt = <1125000>;
|
|
regulator-max-microvolt = <1125000>;
|
|
vp1-supply = <&vcc_33v>;
|
|
regulator-always-on;
|
|
};
|
|
vddmem: DCDC2 {
|
|
regulator-min-microvolt = <1500000>;
|
|
regulator-max-microvolt = <1500000>;
|
|
vp2-supply = <&vcc_33v>;
|
|
regulator-always-on;
|
|
};
|
|
vcc_33: DCDC3 {
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
vp3-supply = <&vcc_33v>;
|
|
regulator-always-on;
|
|
};
|
|
vcc_50: SUDCDC_REG4 {
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
regulator-always-on;
|
|
};
|
|
vcc_25: LDO5 {
|
|
regulator-min-microvolt = <2500000>;
|
|
regulator-max-microvolt = <2500000>;
|
|
inl-supply = <&vcc_33v>;
|
|
regulator-always-on;
|
|
};
|
|
wifi_io: LDO6 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-settling-time-us = <150000>;
|
|
inl-supply = <&vcc_33v>;
|
|
};
|
|
cim_io_28: LDO7 {
|
|
regulator-min-microvolt = <2800000>;
|
|
regulator-max-microvolt = <2800000>;
|
|
inl-supply = <&vcc_33v>;
|
|
};
|
|
cim_io_15: LDO8 {
|
|
regulator-min-microvolt = <1500000>;
|
|
regulator-max-microvolt = <1500000>;
|
|
inl-supply = <&vcc_33v>;
|
|
};
|
|
vrtc_18: LDO_REG9 {
|
|
/* Despite the datasheet stating 3.3V
|
|
* for REG9 and the driver expecting that,
|
|
* REG9 outputs 1.8V.
|
|
* Likely the CI20 uses a proprietary
|
|
* factory programmed chip variant.
|
|
* Since this is a simple on/off LDO the
|
|
* exact values do not matter.
|
|
*/
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
regulator-always-on;
|
|
};
|
|
vcc_11: LDO_REG10 {
|
|
regulator-min-microvolt = <1200000>;
|
|
regulator-max-microvolt = <1200000>;
|
|
regulator-always-on;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&i2c1 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_i2c1>;
|
|
|
|
};
|
|
|
|
&i2c2 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_i2c2>;
|
|
|
|
};
|
|
|
|
&i2c3 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_i2c3>;
|
|
|
|
};
|
|
|
|
&i2c4 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_i2c4>;
|
|
|
|
clock-frequency = <400000>;
|
|
|
|
rtc@51 {
|
|
compatible = "nxp,pcf8563";
|
|
reg = <0x51>;
|
|
|
|
interrupt-parent = <&gpf>;
|
|
interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
|
|
};
|
|
};
|
|
|
|
&nemc {
|
|
status = "okay";
|
|
|
|
nandc: nand-controller@1 {
|
|
compatible = "ingenic,jz4780-nand";
|
|
reg = <1 0 0x1000000>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
ecc-engine = <&bch>;
|
|
|
|
ingenic,nemc-tAS = <10>;
|
|
ingenic,nemc-tAH = <5>;
|
|
ingenic,nemc-tBP = <10>;
|
|
ingenic,nemc-tAW = <15>;
|
|
ingenic,nemc-tSTRV = <100>;
|
|
|
|
/*
|
|
* Only CLE/ALE are needed for the devices that are connected, rather
|
|
* than the full address line set.
|
|
*/
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_nemc>;
|
|
|
|
nand@1 {
|
|
reg = <1>;
|
|
|
|
nand-ecc-step-size = <1024>;
|
|
nand-ecc-strength = <24>;
|
|
nand-ecc-mode = "hw";
|
|
nand-on-flash-bbt;
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_nemc_cs1>;
|
|
|
|
partitions {
|
|
compatible = "fixed-partitions";
|
|
#address-cells = <2>;
|
|
#size-cells = <2>;
|
|
|
|
partition@0 {
|
|
label = "u-boot-spl";
|
|
reg = <0x0 0x0 0x0 0x800000>;
|
|
};
|
|
|
|
partition@800000 {
|
|
label = "u-boot";
|
|
reg = <0x0 0x800000 0x0 0x200000>;
|
|
};
|
|
|
|
partition@a00000 {
|
|
label = "u-boot-env";
|
|
reg = <0x0 0xa00000 0x0 0x200000>;
|
|
};
|
|
|
|
partition@c00000 {
|
|
label = "boot";
|
|
reg = <0x0 0xc00000 0x0 0x4000000>;
|
|
};
|
|
|
|
partition@4c00000 {
|
|
label = "system";
|
|
reg = <0x0 0x4c00000 0x1 0xfb400000>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
dm9000@6 {
|
|
compatible = "davicom,dm9000";
|
|
davicom,no-eeprom;
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_nemc_cs6>;
|
|
|
|
reg = <6 0 1>, /* addr */
|
|
<6 2 1>; /* data */
|
|
|
|
ingenic,nemc-tAS = <15>;
|
|
ingenic,nemc-tAH = <10>;
|
|
ingenic,nemc-tBP = <20>;
|
|
ingenic,nemc-tAW = <50>;
|
|
ingenic,nemc-tSTRV = <100>;
|
|
|
|
reset-gpios = <&gpf 12 GPIO_ACTIVE_LOW>;
|
|
vcc-supply = <ð0_power>;
|
|
|
|
interrupt-parent = <&gpe>;
|
|
interrupts = <19 IRQ_TYPE_EDGE_RISING>;
|
|
|
|
nvmem-cells = <ð0_addr>;
|
|
nvmem-cell-names = "mac-address";
|
|
};
|
|
};
|
|
|
|
&bch {
|
|
status = "okay";
|
|
};
|
|
|
|
&otg_phy {
|
|
status = "okay";
|
|
|
|
vcc-supply = <&otg_power>;
|
|
};
|
|
|
|
&otg {
|
|
status = "okay";
|
|
};
|
|
|
|
&pinctrl {
|
|
pins_uart0: uart0 {
|
|
function = "uart0";
|
|
groups = "uart0-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_uart1: uart1 {
|
|
function = "uart1";
|
|
groups = "uart1-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_uart2: uart2 {
|
|
function = "uart2";
|
|
groups = "uart2-data", "uart2-hwflow";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_uart3: uart3 {
|
|
function = "uart3";
|
|
groups = "uart3-data", "uart3-hwflow";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_uart4: uart4 {
|
|
function = "uart4";
|
|
groups = "uart4-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_i2c0: i2c0 {
|
|
function = "i2c0";
|
|
groups = "i2c0-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_i2c1: i2c1 {
|
|
function = "i2c1";
|
|
groups = "i2c1-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_i2c2: i2c2 {
|
|
function = "i2c2";
|
|
groups = "i2c2-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_i2c3: i2c3 {
|
|
function = "i2c3";
|
|
groups = "i2c3-data";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_i2c4: i2c4 {
|
|
function = "i2c4";
|
|
groups = "i2c4-data-e";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_hdmi_ddc: hdmi_ddc {
|
|
function = "hdmi-ddc";
|
|
groups = "hdmi-ddc";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_nemc: nemc {
|
|
function = "nemc";
|
|
groups = "nemc-data", "nemc-cle-ale", "nemc-rd-we", "nemc-frd-fwe";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_nemc_cs1: nemc-cs1 {
|
|
function = "nemc-cs1";
|
|
groups = "nemc-cs1";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_nemc_cs6: nemc-cs6 {
|
|
function = "nemc-cs6";
|
|
groups = "nemc-cs6";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_mmc0: mmc0 {
|
|
function = "mmc0";
|
|
groups = "mmc0-1bit-e", "mmc0-4bit-e";
|
|
bias-disable;
|
|
};
|
|
|
|
pins_mmc1: mmc1 {
|
|
function = "mmc1";
|
|
groups = "mmc1-1bit-d", "mmc1-4bit-d";
|
|
bias-disable;
|
|
};
|
|
};
|
|
|
|
&hdmi {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pins_hdmi_ddc>;
|
|
|
|
ports {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
port@0 {
|
|
reg = <0>;
|
|
dw_hdmi_in: endpoint {
|
|
remote-endpoint = <&lcd_out>;
|
|
};
|
|
};
|
|
|
|
port@1 {
|
|
reg = <1>;
|
|
dw_hdmi_out: endpoint {
|
|
remote-endpoint = <&hdmi_con>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&lcdc0 {
|
|
status = "okay";
|
|
|
|
port {
|
|
lcd_out: endpoint {
|
|
remote-endpoint = <&dw_hdmi_in>;
|
|
};
|
|
};
|
|
};
|