| // 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 GPIO_ACTIVE_LOW>; |
| 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>; |
| }; |
| |
| wlan0_power: fixedregulator@1 { |
| compatible = "regulator-fixed"; |
| |
| regulator-name = "wlan0_power"; |
| |
| gpio = <&gpb 19 GPIO_ACTIVE_LOW>; |
| 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 GPIO_ACTIVE_LOW>; |
| enable-active-high; |
| }; |
| }; |
| |
| &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>; |
| assigned-clock-parents = <0>, <&cgu JZ4780_CLK_RTCLK>, |
| <&cgu JZ4780_CLK_MPLL>, |
| <&cgu JZ4780_CLK_SSIPLL>; |
| 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>; |
| }; |
| |
| &mmc1 { |
| status = "okay"; |
| |
| bus-width = <4>; |
| max-frequency = <50000000>; |
| non-removable; |
| |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pins_mmc1>; |
| |
| brcmf: wifi@1 { |
| /* reg = <4>;*/ |
| compatible = "brcm,bcm4330-fmac"; |
| vcc-supply = <&wlan0_power>; |
| device-wakeup-gpios = <&gpd 9 GPIO_ACTIVE_HIGH>; |
| shutdown-gpios = <&gpf 7 GPIO_ACTIVE_LOW>; |
| }; |
| }; |
| |
| &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"; |
| reset-gpios = <&gpf 8 GPIO_ACTIVE_HIGH>; |
| vcc-supply = <&wlan0_power>; |
| device-wakeup-gpios = <&gpf 5 GPIO_ACTIVE_HIGH>; |
| host-wakeup-gpios = <&gpf 6 GPIO_ACTIVE_HIGH>; |
| shutdown-gpios = <&gpf 4 GPIO_ACTIVE_LOW>; |
| }; |
| }; |
| |
| &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>; |
| status = "okay"; |
| |
| regulators { |
| vddcore: SUDCDC1 { |
| regulator-name = "DCDC_REG1"; |
| regulator-min-microvolt = <1100000>; |
| regulator-max-microvolt = <1100000>; |
| regulator-always-on; |
| }; |
| vddmem: SUDCDC2 { |
| regulator-name = "DCDC_REG2"; |
| regulator-min-microvolt = <1500000>; |
| regulator-max-microvolt = <1500000>; |
| regulator-always-on; |
| }; |
| vcc_33: SUDCDC3 { |
| regulator-name = "DCDC_REG3"; |
| regulator-min-microvolt = <3300000>; |
| regulator-max-microvolt = <3300000>; |
| regulator-always-on; |
| }; |
| vcc_50: SUDCDC4 { |
| regulator-name = "SUDCDC_REG4"; |
| regulator-min-microvolt = <5000000>; |
| regulator-max-microvolt = <5000000>; |
| regulator-always-on; |
| }; |
| vcc_25: LDO_REG5 { |
| regulator-name = "LDO_REG5"; |
| regulator-min-microvolt = <2500000>; |
| regulator-max-microvolt = <2500000>; |
| regulator-always-on; |
| }; |
| wifi_io: LDO_REG6 { |
| regulator-name = "LDO_REG6"; |
| regulator-min-microvolt = <2500000>; |
| regulator-max-microvolt = <2500000>; |
| regulator-always-on; |
| }; |
| vcc_28: LDO_REG7 { |
| regulator-name = "LDO_REG7"; |
| regulator-min-microvolt = <2800000>; |
| regulator-max-microvolt = <2800000>; |
| regulator-always-on; |
| }; |
| vcc_15: LDO_REG8 { |
| regulator-name = "LDO_REG8"; |
| regulator-min-microvolt = <1500000>; |
| regulator-max-microvolt = <1500000>; |
| regulator-always-on; |
| }; |
| vrtc_18: LDO_REG9 { |
| regulator-name = "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-name = "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>; |
| |
| ingenic,bch-controller = <&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 4>; |
| |
| 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>; |
| }; |
| }; |
| }; |