
This generally comes from a mipsbook400 Letux git repository [1], not mainline. It seems to be the work of Paul Boddie and H. Nikolaus Schaller.
[1] https://git.goldelico.com/?p=letux-kernel.git;a=shortlog;h=refs/heads/letux/...
Some more things need to be addressed here:
1.) Linux upstream review of the bindings. The tree is generally very nice and complete and bindings look good, but an upstream review could still cut off some rough edges. In particular I think the gpio/pinctrl bindings don't seem to describe the hardware in a very useful way (GPIO split into multiple nodes for ports slaves to the pinctrl node).
2.) Missing copyright/license notices. Probably an oversignt.
3.) I've made some changes that I need to split out into separate patches for upstream and document.
Cc: Paul Boddie paul@boddie.org.uk Cc: H. Nikolaus Schaller hns@goldelico.com Signed-off-by: Lubomir Rintel lkundrak@v3.sk --- arch/mips/dts/Makefile | 1 + arch/mips/dts/alpha400.dts | 542 +++++++++++++++++++++++++++++++++++++ 2 files changed, 543 insertions(+) create mode 100644 arch/mips/dts/alpha400.dts
diff --git a/arch/mips/dts/Makefile b/arch/mips/dts/Makefile index dc85901dcaa..62ee25ff341 100644 --- a/arch/mips/dts/Makefile +++ b/arch/mips/dts/Makefile @@ -25,6 +25,7 @@ dtb-$(CONFIG_BOARD_SAGEM_FAST1704) += sagem,f@st1704.dtb dtb-$(CONFIG_BOARD_SFR_NB4_SER) += sfr,nb4-ser.dtb dtb-$(CONFIG_BOARD_TPLINK_WDR4300) += tplink_wdr4300.dtb dtb-$(CONFIG_BOARD_VOCORE2) += vocore_vocore2.dtb +dtb-$(CONFIG_TARGET_JZ4730_ALPHA400) += alpha400.dtb dtb-$(CONFIG_TARGET_JZ4780_CI20) += ci20.dtb dtb-$(CONFIG_SOC_LUTON) += luton_pcb090.dtb luton_pcb091.dtb dtb-$(CONFIG_SOC_OCELOT) += ocelot_pcb120.dtb ocelot_pcb123.dtb diff --git a/arch/mips/dts/alpha400.dts b/arch/mips/dts/alpha400.dts new file mode 100644 index 00000000000..fa02f841d1a --- /dev/null +++ b/arch/mips/dts/alpha400.dts @@ -0,0 +1,542 @@ +/dts-v1/; + +#include "jz4730.dtsi" +#include <dt-bindings/input/input.h> +#include <dt-bindings/gpio/gpio.h> + +/ { + compatible = "letux400,minipc", "ingenic,jz4730"; + + aliases { + serial0 = &uart0; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + wdt-reboot { + compatible = "wdt-reboot"; + wdt = <&watchdog>; + }; + + vcc: regulator@0 { + compatible = "regulator-fixed"; + regulator-name = "vcc"; + + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + vmmc_reg: regulator@1 { + compatible = "regulator-fixed"; + regulator-name = "vmmc"; + + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + gpio = <&gpa 21 GPIO_ACTIVE_LOW>; + }; + + clk_usb: clk-usb { + compatible = "gpio-gate-clock"; + clocks = <&cgu JZ4730_CLK_UHC>; + #clock-cells = <0>; + enable-gpios = <&gpa 29 GPIO_ACTIVE_HIGH>; + }; + + keyboard { + linux,wakeup; + + compatible = "gpio-matrix-keypad"; + debounce-delay-ms = <10>; + col-scan-delay-us = <10>; + + row-gpios = <&gpa 0 0 &gpa 1 0 &gpa 2 0 &gpa 3 0 + &gpa 4 0 &gpa 5 0 &gpa 6 0 &gpa 7 0>; + + col-gpios = <&gpd 0 0 &gpd 1 0 &gpd 2 0 &gpd 3 0 + &gpd 4 0 &gpd 5 0 &gpd 6 0 &gpd 7 0 + &gpd 8 0 &gpd 9 0 &gpd 10 0 &gpd 11 0 + &gpd 12 0 &gpd 13 0 &gpd 14 0 &gpd 15 0 + &gpd 29 0>; + gpio-activelow; + + /* + * Keymap column-by-column, based on... + * https://web.archive.org/web/20120214204001/http://projects.kwaak.net/twiki/b... + * ...and subsequently verified. + */ + + linux,keymap = < + MATRIX_KEY(0, 0, KEY_PAUSE) + MATRIX_KEY(1, 0, 0) + MATRIX_KEY(2, 0, 0) + MATRIX_KEY(3, 0, 0) + MATRIX_KEY(4, 0, 0) + MATRIX_KEY(5, 0, 0) + MATRIX_KEY(6, 0, KEY_LEFTCTRL) + MATRIX_KEY(7, 0, KEY_F5) + + MATRIX_KEY(0, 1, KEY_Q) + MATRIX_KEY(1, 1, KEY_TAB) + MATRIX_KEY(2, 1, KEY_A) + MATRIX_KEY(3, 1, KEY_ESC) + MATRIX_KEY(4, 1, KEY_Z) + MATRIX_KEY(5, 1, 0) + MATRIX_KEY(6, 1, KEY_GRAVE) + MATRIX_KEY(7, 1, KEY_1) + + MATRIX_KEY(0, 2, KEY_W) + MATRIX_KEY(1, 2, KEY_CAPSLOCK) + MATRIX_KEY(2, 2, KEY_S) + MATRIX_KEY(3, 2, KEY_102ND) + MATRIX_KEY(4, 2, KEY_X) + MATRIX_KEY(5, 2, 0) + MATRIX_KEY(6, 2, 0) + MATRIX_KEY(7, 2, KEY_2) + + MATRIX_KEY(0, 3, KEY_E) + MATRIX_KEY(1, 3, KEY_F3) + MATRIX_KEY(2, 3, KEY_D) + MATRIX_KEY(3, 3, KEY_F4) + MATRIX_KEY(4, 3, KEY_C) + MATRIX_KEY(5, 3, 0) + MATRIX_KEY(6, 3, 0) + MATRIX_KEY(7, 3, KEY_3) + + MATRIX_KEY(0, 4, KEY_R) + MATRIX_KEY(1, 4, KEY_T) + MATRIX_KEY(2, 4, KEY_F) + MATRIX_KEY(3, 4, KEY_G) + MATRIX_KEY(4, 4, KEY_V) + MATRIX_KEY(5, 4, KEY_B) + MATRIX_KEY(6, 4, KEY_5) + MATRIX_KEY(7, 4, KEY_4) + + MATRIX_KEY(0, 5, KEY_U) + MATRIX_KEY(1, 5, KEY_Y) + MATRIX_KEY(2, 5, KEY_J) + MATRIX_KEY(3, 5, KEY_H) + MATRIX_KEY(4, 5, KEY_M) + MATRIX_KEY(5, 5, KEY_N) + MATRIX_KEY(6, 5, KEY_6) + MATRIX_KEY(7, 5, KEY_7) + + MATRIX_KEY(0, 6, KEY_I) + MATRIX_KEY(1, 6, KEY_RIGHTBRACE) + MATRIX_KEY(2, 6, KEY_K) + MATRIX_KEY(3, 6, KEY_F6) + MATRIX_KEY(4, 6, KEY_COMMA) + MATRIX_KEY(5, 6, 0) + MATRIX_KEY(6, 6, KEY_EQUAL) + MATRIX_KEY(7, 6, KEY_8) + + MATRIX_KEY(0, 7, KEY_O) + MATRIX_KEY(1, 7, KEY_F7) + MATRIX_KEY(2, 7, KEY_L) + MATRIX_KEY(3, 7, 0) + MATRIX_KEY(4, 7, KEY_DOT) + MATRIX_KEY(5, 7, KEY_F19) + MATRIX_KEY(6, 7, KEY_F8) + MATRIX_KEY(7, 7, KEY_9) + + MATRIX_KEY(0, 8, 0) + MATRIX_KEY(1, 8, 0) + MATRIX_KEY(2, 8, 0) + MATRIX_KEY(3, 8, KEY_SPACE) + MATRIX_KEY(4, 8, KEY_NUMLOCK) + MATRIX_KEY(5, 8, 0) + MATRIX_KEY(6, 8, KEY_DELETE) + MATRIX_KEY(7, 8, 0) + + MATRIX_KEY(0, 9, 0) + MATRIX_KEY(1, 9, KEY_BACKSPACE) + MATRIX_KEY(2, 9, 0) + MATRIX_KEY(3, 9, 0) + MATRIX_KEY(4, 9, KEY_ENTER) + MATRIX_KEY(5, 9, 0) + MATRIX_KEY(6, 9, KEY_F9) + MATRIX_KEY(7, 9, 0) + + MATRIX_KEY(0, 10, 0) + MATRIX_KEY(1, 10, 0) + MATRIX_KEY(2, 10, 0) + MATRIX_KEY(3, 10, KEY_LEFTALT) + MATRIX_KEY(4, 10, 0) + MATRIX_KEY(5, 10, 0) + MATRIX_KEY(6, 10, 0) + MATRIX_KEY(7, 10, KEY_SYSRQ) + + MATRIX_KEY(0, 11, KEY_P) + MATRIX_KEY(1, 11, KEY_LEFTBRACE) + MATRIX_KEY(2, 11, KEY_SEMICOLON) + MATRIX_KEY(3, 11, KEY_APOSTROPHE) + MATRIX_KEY(4, 11, KEY_BACKSLASH) + MATRIX_KEY(5, 11, KEY_SLASH) + MATRIX_KEY(6, 11, KEY_MINUS) + MATRIX_KEY(7, 11, KEY_0) + + MATRIX_KEY(0, 12, 0) + MATRIX_KEY(1, 12, KEY_F20) + MATRIX_KEY(2, 12, 0) + MATRIX_KEY(3, 12, 0) + MATRIX_KEY(4, 12, 0) + MATRIX_KEY(5, 12, 0) + MATRIX_KEY(6, 12, 0) + MATRIX_KEY(7, 12, KEY_F10) + + MATRIX_KEY(0, 13, 0) + MATRIX_KEY(1, 13, 0) + MATRIX_KEY(2, 13, 0) + MATRIX_KEY(3, 13, 0) + MATRIX_KEY(4, 13, 0) + MATRIX_KEY(5, 13, 0) + MATRIX_KEY(6, 13, KEY_F2) + MATRIX_KEY(7, 13, 0) + + MATRIX_KEY(0, 14, 0) + MATRIX_KEY(1, 14, 0) + MATRIX_KEY(2, 14, 0) + MATRIX_KEY(3, 14, 0) + MATRIX_KEY(4, 14, 0) + MATRIX_KEY(5, 14, 0) + MATRIX_KEY(6, 14, KEY_INSERT) + MATRIX_KEY(7, 14, 0) + + MATRIX_KEY(0, 15, 0) + MATRIX_KEY(1, 15, 0) + MATRIX_KEY(2, 15, KEY_UP) + MATRIX_KEY(3, 15, KEY_DOWN) + MATRIX_KEY(4, 15, KEY_LEFT) + MATRIX_KEY(5, 15, KEY_RIGHT) + MATRIX_KEY(6, 15, 0) + MATRIX_KEY(7, 15, 0) + + MATRIX_KEY(0, 16, 0) + MATRIX_KEY(1, 16, KEY_LEFTSHIFT) + MATRIX_KEY(2, 16, KEY_RIGHTSHIFT) + MATRIX_KEY(3, 16, 0) + MATRIX_KEY(4, 16, 0) + MATRIX_KEY(5, 16, 0) + MATRIX_KEY(6, 16, KEY_F1) + MATRIX_KEY(7, 16, KEY_FN) + >; + }; + + buttons { + compatible = "gpio-keys"; + + #address-cells = <7>; + #size-cells = <0>; + + left_touchpad { + label = "Touchpad Left"; + linux,code = <0x110>; /* BTN_LEFT */ + gpios = <&gpa 16 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; + + right_touchpad { + label = "Touchpad Right"; + linux,code = <0x111>; /* BTN_RIGHT */ + gpios = <&gpa 9 GPIO_ACTIVE_LOW>; + gpio-key,wakeup; + }; + }; + + leds { + compatible = "gpio-leds"; + + scroll_lock { + label = "scroll_lock"; + gpios = <&gpa 9 GPIO_ACTIVE_LOW>; + linux,default-trigger = "scroll_lock"; + default-state = "off"; + }; + + caps_lock { + label = "caps_lock"; + gpios = <&gpa 27 GPIO_ACTIVE_LOW>; + linux,default-trigger = "caps_lock"; + default-state = "off"; + }; + + num_lock { + label = "num_lock"; + gpios = <&gpc 22 GPIO_ACTIVE_LOW>; + linux,default-trigger = "num_lock"; + default-state = "off"; + }; + }; + + sound: sound { + compatible = "simple-scu-audio-card"; + + simple-audio-card,name = "sound"; + simple-audio-card,format = "left_j"; + simple-audio-card,bitclock-master = <&sndcodec>; + simple-audio-card,frame-master = <&sndcodec>; + + simple-audio-card,convert-rate = <48000>; + + simple-audio-card,prefix = "ak4642"; + simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback", + "DAI0 Capture", "ak4642 Capture"; + + sndcpu: simple-audio-card,cpu { + sound-dai = <&i2s>; + }; + + sndcodec: simple-audio-card,codec { + sound-dai = <&ak4642>; + system-clock-frequency = <11289600>; + }; + }; + + backlight: backlight { + compatible = "pwm-backlight"; + + pwms = <&pwm 0 3906250>; + power-supply = <&vcc>; + + brightness-levels = <150 200 250 300>; + default-brightness-level = <2>; + + default-on; + + pinctrl-names = "default"; + pinctrl-0 = <&pins_pwm0>; + }; + + panel: claa070vc01 { + compatible = "chunghwa,claa070vc01", "panel-dpi"; + + width-mm = <150>; + height-mm = <90>; + + backlight = <&backlight>; + + panel-timing { + clock-frequency = <26400000>; + hactive = <800>; + vactive = <480>; + hfront-porch = <0>; + hback-porch = <0>; + hsync-len = <80>; + vfront-porch = <0>; + vback-porch = <0>; + vsync-len = <20>; + hsync-active = <0>; + vsync-active = <0>; + de-active = <1>; + pixelclk-active = <0>; + }; + + port { + panel_input: endpoint { + remote-endpoint = <&lcd_output>; + }; + }; + }; +}; + +&ext { + clock-frequency = <3686400>; +}; + +&rtc_dev { + system-power-controller; +}; + +&lcd { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&pins_lcd0>; + pinctrl-1 = <&pins_lcd1>; + + port { + lcd_output: endpoint { + remote-endpoint = <&panel_input>; + }; + }; +}; + +&mmc { + status = "okay"; + + bus-width = <4>; + cd-gpios = <&gpc 0 GPIO_ACTIVE_LOW>; + wp-gpios = <&gpc 2 GPIO_ACTIVE_LOW>; + vmmc-supply = <&vmmc_reg>; + + pinctrl-names = "default"; + pinctrl-0 = <&pins_mmc>; +}; + +&nand { + pinctrl-names = "default"; + pinctrl-0 = <&pins_nand>; + + nand0: nand@0 { + #address-cells = <0>; + #size-cells = <0>; + reg = <0>; + wp-gpios = <&gpc 23 GPIO_ACTIVE_LOW>; + + nand-on-flash-bbt; + nand-bus-width = <8>; + + nand-ecc-mode = "none"; + + partitions { + #address-cells = <1>; + #size-cells = <1>; + compatible = "fixed-partitions"; + + bootloader@0 { + label = "bootloader"; + reg = <0x00000000 0x00100000>; + }; + + kernel@100000 { + label = "kernel"; + reg = <0x00100000 0x00300000>; + }; + + mac@400000 { + label = "mac"; + reg = <0x00400000 0x00100000>; + }; + + recovery@500000 { + label = "mini rootfs"; + reg = <0x00500000 0x00500000>; + }; + + root@a00000 { + label = "yaffs2 rootfs"; + reg = <0x00a00000 0x3f600000>; + }; + + extend@40000000 { + label = "extend 1G flash"; + reg = <0x40000000 0x40000000>; + }; + }; + }; +}; + +&uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&pins_uart0>; +}; + +&pinctrl { + pins_lcd0: lcd0 { + function = "lcd"; + groups = "lcd-8bit", "lcd-16bit", "lcd-16bit-tft"; + }; + + pins_lcd1: lcd1 { + function = "sleep"; + groups = "lcd-no-pins"; + }; + + pins_mmc: mmc { + mmc { + function = "mmc"; + groups = "mmc-1bit", "mmc-4bit"; + }; + + mmc_ctrl { + function = "mmc"; + pins = "PC0", "PC2", "PA21"; + bias-disable; + }; + }; + + pins_nand: pins_nand { + function = "nand"; + groups = "nand-cs3"; + }; + + pins_pwm0: pwm0 { + function = "pwm0"; + groups = "pwm0"; + }; + + pins_pwm1: pwm1 { + function = "pwm1"; + groups = "pwm1"; + }; + + pins_uart0: uart0 { + function = "uart0"; + groups = "uart0-data"; + bias-disable; + }; + + pins_usb_clk: usb { + pins = "PA29"; + bias-disable; + }; + + pins_mac: pins_mac { + function = "mac"; + groups = "mac"; + }; +}; + +&i2c { + power_controller@28 { + compatible = "minipc,mcu"; + reg = <0x28>; + }; + + ak4642: codec@12 { + compatible = "asahi-kasei,ak4642"; + reg = <0x12>; + #clock-cells = <0>; + clock-frequency = <12000000>; + clock-output-names = "ak4643_mcko"; + }; + + rtc@51 { + compatible = "nxp,pcf8563"; + reg = <0x51>; + #clock-cells = <0>; + }; + +}; + +&uhc { + clocks = <&clk_usb>; + + pinctrl-names = "default"; + pinctrl-0 = <&pins_usb_clk>; +}; + +ðernet { + phy-handle = <ðphy>; + phy-mode = "mii"; + + pinctrl-names = "default"; + pinctrl-0 = <&pins_mac>; +}; + +&mdio { + ethphy: ethernet-phy@16 { + device_type = "ethernet-phy"; + compatible = "realtek,rtl8201cl", "ethernet-phy-ieee802.3-c22"; + reg = <16>; + }; +}; + +/* + * TODO: + * add LCD + * add proper Pinmux + * finalize sound / codec setup + * add i2c and i2s drivers to the SoC + * add special driver to probe two gpios to detect battery charging and AC present + */