1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun/dts-v1/; 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun#include "jz4740.dtsi" 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h> 7*4882a593Smuzhiyun#include <dt-bindings/iio/adc/ingenic,adc.h> 8*4882a593Smuzhiyun#include <dt-bindings/clock/ingenic,tcu.h> 9*4882a593Smuzhiyun#include <dt-bindings/input/input.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun#define KEY_QI_QI KEY_F13 12*4882a593Smuzhiyun#define KEY_QI_UPRED KEY_RIGHTALT 13*4882a593Smuzhiyun#define KEY_QI_VOLUP KEY_VOLUMEUP 14*4882a593Smuzhiyun#define KEY_QI_VOLDOWN KEY_VOLUMEDOWN 15*4882a593Smuzhiyun#define KEY_QI_FN KEY_LEFTCTRL 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun/ { 18*4882a593Smuzhiyun compatible = "qi,lb60", "ingenic,jz4740"; 19*4882a593Smuzhiyun model = "Ben Nanonote"; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun memory { 22*4882a593Smuzhiyun device_type = "memory"; 23*4882a593Smuzhiyun reg = <0x0 0x2000000>; 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun chosen { 27*4882a593Smuzhiyun stdout-path = &uart0; 28*4882a593Smuzhiyun }; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun vcc: regulator@0 { 31*4882a593Smuzhiyun compatible = "regulator-fixed"; 32*4882a593Smuzhiyun regulator-name = "vcc"; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun regulator-min-microvolt = <3300000>; 35*4882a593Smuzhiyun regulator-max-microvolt = <3300000>; 36*4882a593Smuzhiyun regulator-always-on; 37*4882a593Smuzhiyun }; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun mmc_power: regulator@1 { 40*4882a593Smuzhiyun compatible = "regulator-fixed"; 41*4882a593Smuzhiyun regulator-name = "mmc_vcc"; 42*4882a593Smuzhiyun gpio = <&gpd 2 0>; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun regulator-min-microvolt = <3300000>; 45*4882a593Smuzhiyun regulator-max-microvolt = <3300000>; 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun amp_supply: regulator@2 { 49*4882a593Smuzhiyun compatible = "regulator-fixed"; 50*4882a593Smuzhiyun regulator-name = "amp_supply"; 51*4882a593Smuzhiyun gpio = <&gpd 4 0>; 52*4882a593Smuzhiyun enable-active-high; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun regulator-min-microvolt = <3300000>; 55*4882a593Smuzhiyun regulator-max-microvolt = <3300000>; 56*4882a593Smuzhiyun }; 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun amp: analog-amplifier { 59*4882a593Smuzhiyun compatible = "simple-audio-amplifier"; 60*4882a593Smuzhiyun enable-gpios = <&gpb 29 GPIO_ACTIVE_HIGH>; 61*4882a593Smuzhiyun VCC-supply = <&_supply>; 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun sound { 65*4882a593Smuzhiyun compatible = "simple-audio-card"; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun simple-audio-card,name = "QI LB60"; 68*4882a593Smuzhiyun simple-audio-card,format = "i2s"; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun simple-audio-card,widgets = 71*4882a593Smuzhiyun "Speaker", "Speaker", 72*4882a593Smuzhiyun "Microphone", "Mic"; 73*4882a593Smuzhiyun simple-audio-card,routing = 74*4882a593Smuzhiyun "MIC", "Mic", 75*4882a593Smuzhiyun "Speaker", "OUTL", 76*4882a593Smuzhiyun "Speaker", "OUTR", 77*4882a593Smuzhiyun "INL", "LOUT", 78*4882a593Smuzhiyun "INR", "ROUT"; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun simple-audio-card,aux-devs = <&>; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun simple-audio-card,bitclock-master = <&dai_codec>; 83*4882a593Smuzhiyun simple-audio-card,frame-master = <&dai_codec>; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun dai_cpu: simple-audio-card,cpu { 86*4882a593Smuzhiyun sound-dai = <&aic>; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun dai_codec: simple-audio-card,codec { 90*4882a593Smuzhiyun sound-dai = <&codec>; 91*4882a593Smuzhiyun }; 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun keys { 95*4882a593Smuzhiyun compatible = "gpio-keys"; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun key { 98*4882a593Smuzhiyun label = "Power"; 99*4882a593Smuzhiyun wakeup-source; 100*4882a593Smuzhiyun linux,code = <KEY_POWER>; 101*4882a593Smuzhiyun gpios = <&gpd 29 GPIO_ACTIVE_LOW>; 102*4882a593Smuzhiyun }; 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun keyboard { 106*4882a593Smuzhiyun compatible = "gpio-matrix-keypad"; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun col-scan-delay-us = <10>; 109*4882a593Smuzhiyun debounce-delay-ms = <10>; 110*4882a593Smuzhiyun wakeup-source; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun row-gpios = <&gpd 18 0>, <&gpd 19 0>, <&gpd 20 0>, <&gpd 21 0>, 113*4882a593Smuzhiyun <&gpd 22 0>, <&gpd 23 0>, <&gpd 24 0>, <&gpd 26 0>; 114*4882a593Smuzhiyun col-gpios = <&gpc 10 0>, <&gpc 11 0>, <&gpc 12 0>, <&gpc 13 0>, 115*4882a593Smuzhiyun <&gpc 14 0>, <&gpc 15 0>, <&gpc 16 0>, <&gpc 17 0>; 116*4882a593Smuzhiyun gpio-activelow; 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun linux,keymap = 119*4882a593Smuzhiyun <MATRIX_KEY(0, 0, KEY_F1)>, /* S2 */ 120*4882a593Smuzhiyun <MATRIX_KEY(0, 1, KEY_F2)>, /* S3 */ 121*4882a593Smuzhiyun <MATRIX_KEY(0, 2, KEY_F3)>, /* S4 */ 122*4882a593Smuzhiyun <MATRIX_KEY(0, 3, KEY_F4)>, /* S5 */ 123*4882a593Smuzhiyun <MATRIX_KEY(0, 4, KEY_F5)>, /* S6 */ 124*4882a593Smuzhiyun <MATRIX_KEY(0, 5, KEY_F6)>, /* S7 */ 125*4882a593Smuzhiyun <MATRIX_KEY(0, 6, KEY_F7)>, /* S8 */ 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun <MATRIX_KEY(1, 0, KEY_Q)>, /* S10 */ 128*4882a593Smuzhiyun <MATRIX_KEY(1, 1, KEY_W)>, /* S11 */ 129*4882a593Smuzhiyun <MATRIX_KEY(1, 2, KEY_E)>, /* S12 */ 130*4882a593Smuzhiyun <MATRIX_KEY(1, 3, KEY_R)>, /* S13 */ 131*4882a593Smuzhiyun <MATRIX_KEY(1, 4, KEY_T)>, /* S14 */ 132*4882a593Smuzhiyun <MATRIX_KEY(1, 5, KEY_Y)>, /* S15 */ 133*4882a593Smuzhiyun <MATRIX_KEY(1, 6, KEY_U)>, /* S16 */ 134*4882a593Smuzhiyun <MATRIX_KEY(1, 7, KEY_I)>, /* S17 */ 135*4882a593Smuzhiyun <MATRIX_KEY(2, 0, KEY_A)>, /* S18 */ 136*4882a593Smuzhiyun <MATRIX_KEY(2, 1, KEY_S)>, /* S19 */ 137*4882a593Smuzhiyun <MATRIX_KEY(2, 2, KEY_D)>, /* S20 */ 138*4882a593Smuzhiyun <MATRIX_KEY(2, 3, KEY_F)>, /* S21 */ 139*4882a593Smuzhiyun <MATRIX_KEY(2, 4, KEY_G)>, /* S22 */ 140*4882a593Smuzhiyun <MATRIX_KEY(2, 5, KEY_H)>, /* S23 */ 141*4882a593Smuzhiyun <MATRIX_KEY(2, 6, KEY_J)>, /* S24 */ 142*4882a593Smuzhiyun <MATRIX_KEY(2, 7, KEY_K)>, /* S25 */ 143*4882a593Smuzhiyun <MATRIX_KEY(3, 0, KEY_ESC)>, /* S26 */ 144*4882a593Smuzhiyun <MATRIX_KEY(3, 1, KEY_Z)>, /* S27 */ 145*4882a593Smuzhiyun <MATRIX_KEY(3, 2, KEY_X)>, /* S28 */ 146*4882a593Smuzhiyun <MATRIX_KEY(3, 3, KEY_C)>, /* S29 */ 147*4882a593Smuzhiyun <MATRIX_KEY(3, 4, KEY_V)>, /* S30 */ 148*4882a593Smuzhiyun <MATRIX_KEY(3, 5, KEY_B)>, /* S31 */ 149*4882a593Smuzhiyun <MATRIX_KEY(3, 6, KEY_N)>, /* S32 */ 150*4882a593Smuzhiyun <MATRIX_KEY(3, 7, KEY_M)>, /* S33 */ 151*4882a593Smuzhiyun <MATRIX_KEY(4, 0, KEY_TAB)>, /* S34 */ 152*4882a593Smuzhiyun <MATRIX_KEY(4, 1, KEY_CAPSLOCK)>, /* S35 */ 153*4882a593Smuzhiyun <MATRIX_KEY(4, 2, KEY_BACKSLASH)>, /* S36 */ 154*4882a593Smuzhiyun <MATRIX_KEY(4, 3, KEY_APOSTROPHE)>, /* S37 */ 155*4882a593Smuzhiyun <MATRIX_KEY(4, 4, KEY_COMMA)>, /* S38 */ 156*4882a593Smuzhiyun <MATRIX_KEY(4, 5, KEY_DOT)>, /* S39 */ 157*4882a593Smuzhiyun <MATRIX_KEY(4, 6, KEY_SLASH)>, /* S40 */ 158*4882a593Smuzhiyun <MATRIX_KEY(4, 7, KEY_UP)>, /* S41 */ 159*4882a593Smuzhiyun <MATRIX_KEY(5, 0, KEY_O)>, /* S42 */ 160*4882a593Smuzhiyun <MATRIX_KEY(5, 1, KEY_L)>, /* S43 */ 161*4882a593Smuzhiyun <MATRIX_KEY(5, 2, KEY_EQUAL)>, /* S44 */ 162*4882a593Smuzhiyun <MATRIX_KEY(5, 3, KEY_QI_UPRED)>, /* S45 */ 163*4882a593Smuzhiyun <MATRIX_KEY(5, 4, KEY_SPACE)>, /* S46 */ 164*4882a593Smuzhiyun <MATRIX_KEY(5, 5, KEY_QI_QI)>, /* S47 */ 165*4882a593Smuzhiyun <MATRIX_KEY(5, 6, KEY_RIGHTCTRL)>, /* S48 */ 166*4882a593Smuzhiyun <MATRIX_KEY(5, 7, KEY_LEFT)>, /* S49 */ 167*4882a593Smuzhiyun <MATRIX_KEY(6, 0, KEY_F8)>, /* S50 */ 168*4882a593Smuzhiyun <MATRIX_KEY(6, 1, KEY_P)>, /* S51 */ 169*4882a593Smuzhiyun <MATRIX_KEY(6, 2, KEY_BACKSPACE)>,/* S52 */ 170*4882a593Smuzhiyun <MATRIX_KEY(6, 3, KEY_ENTER)>, /* S53 */ 171*4882a593Smuzhiyun <MATRIX_KEY(6, 4, KEY_QI_VOLUP)>, /* S54 */ 172*4882a593Smuzhiyun <MATRIX_KEY(6, 5, KEY_QI_VOLDOWN)>, /* S55 */ 173*4882a593Smuzhiyun <MATRIX_KEY(6, 6, KEY_DOWN)>, /* S56 */ 174*4882a593Smuzhiyun <MATRIX_KEY(6, 7, KEY_RIGHT)>, /* S57 */ 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun <MATRIX_KEY(7, 0, KEY_LEFTSHIFT)>, /* S58 */ 177*4882a593Smuzhiyun <MATRIX_KEY(7, 1, KEY_LEFTALT)>, /* S59 */ 178*4882a593Smuzhiyun <MATRIX_KEY(7, 2, KEY_QI_FN)>; /* S60 */ 179*4882a593Smuzhiyun }; 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun spi { 182*4882a593Smuzhiyun compatible = "spi-gpio"; 183*4882a593Smuzhiyun #address-cells = <1>; 184*4882a593Smuzhiyun #size-cells = <0>; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun sck-gpios = <&gpc 23 GPIO_ACTIVE_HIGH>; 187*4882a593Smuzhiyun mosi-gpios = <&gpc 22 GPIO_ACTIVE_HIGH>; 188*4882a593Smuzhiyun cs-gpios = <&gpc 21 GPIO_ACTIVE_LOW>; 189*4882a593Smuzhiyun num-chipselects = <1>; 190*4882a593Smuzhiyun }; 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun usb_charger: charger { 193*4882a593Smuzhiyun compatible = "gpio-charger"; 194*4882a593Smuzhiyun charger-type = "usb-sdp"; 195*4882a593Smuzhiyun gpios = <&gpd 28 GPIO_ACTIVE_LOW>; 196*4882a593Smuzhiyun status-gpios = <&gpc 27 GPIO_ACTIVE_LOW>; 197*4882a593Smuzhiyun }; 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun simple_battery: battery { 200*4882a593Smuzhiyun compatible = "simple-battery"; 201*4882a593Smuzhiyun voltage-min-design-microvolt = <3600000>; 202*4882a593Smuzhiyun voltage-max-design-microvolt = <4200000>; 203*4882a593Smuzhiyun }; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun pmu { 206*4882a593Smuzhiyun compatible = "ingenic,jz4740-battery"; 207*4882a593Smuzhiyun io-channels = <&adc INGENIC_ADC_BATTERY>; 208*4882a593Smuzhiyun io-channel-names = "battery"; 209*4882a593Smuzhiyun power-supplies = <&usb_charger>; 210*4882a593Smuzhiyun monitored-battery = <&simple_battery>; 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun hwmon { 214*4882a593Smuzhiyun compatible = "iio-hwmon"; 215*4882a593Smuzhiyun io-channels = <&adc INGENIC_ADC_AUX>; 216*4882a593Smuzhiyun }; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun panel: panel { 219*4882a593Smuzhiyun compatible = "giantplus,gpm940b0"; 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun power-supply = <&vcc>; 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun port { 224*4882a593Smuzhiyun panel_input: endpoint { 225*4882a593Smuzhiyun remote-endpoint = <&panel_output>; 226*4882a593Smuzhiyun }; 227*4882a593Smuzhiyun }; 228*4882a593Smuzhiyun }; 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun usb_phy: usb-phy { 231*4882a593Smuzhiyun compatible = "usb-nop-xceiv"; 232*4882a593Smuzhiyun #phy-cells = <0>; 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun vcc-supply = <&vcc>; 235*4882a593Smuzhiyun }; 236*4882a593Smuzhiyun}; 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun&ext { 239*4882a593Smuzhiyun clock-frequency = <12000000>; 240*4882a593Smuzhiyun}; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun&rtc_dev { 243*4882a593Smuzhiyun system-power-controller; 244*4882a593Smuzhiyun}; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun&uart0 { 247*4882a593Smuzhiyun pinctrl-names = "default"; 248*4882a593Smuzhiyun pinctrl-0 = <&pins_uart0>; 249*4882a593Smuzhiyun}; 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun&uart1 { 252*4882a593Smuzhiyun status = "disabled"; 253*4882a593Smuzhiyun}; 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun&nemc { 256*4882a593Smuzhiyun nandc: nand-controller@1 { 257*4882a593Smuzhiyun compatible = "ingenic,jz4740-nand"; 258*4882a593Smuzhiyun reg = <1 0 0x4000000>; 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun #address-cells = <1>; 261*4882a593Smuzhiyun #size-cells = <0>; 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun ecc-engine = <&ecc>; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun pinctrl-names = "default"; 266*4882a593Smuzhiyun pinctrl-0 = <&pins_nemc>; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun rb-gpios = <&gpc 30 GPIO_ACTIVE_HIGH>; 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun nand@1 { 271*4882a593Smuzhiyun reg = <1>; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun nand-ecc-step-size = <512>; 274*4882a593Smuzhiyun nand-ecc-strength = <4>; 275*4882a593Smuzhiyun nand-ecc-mode = "hw"; 276*4882a593Smuzhiyun nand-is-boot-medium; 277*4882a593Smuzhiyun nand-on-flash-bbt; 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun partitions { 280*4882a593Smuzhiyun compatible = "fixed-partitions"; 281*4882a593Smuzhiyun #address-cells = <1>; 282*4882a593Smuzhiyun #size-cells = <1>; 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun partition@0 { 285*4882a593Smuzhiyun label = "boot"; 286*4882a593Smuzhiyun reg = <0x0 0x400000>; 287*4882a593Smuzhiyun }; 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun partition@400000 { 290*4882a593Smuzhiyun label = "kernel"; 291*4882a593Smuzhiyun reg = <0x400000 0x400000>; 292*4882a593Smuzhiyun }; 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun partition@800000 { 295*4882a593Smuzhiyun label = "rootfs"; 296*4882a593Smuzhiyun reg = <0x800000 0x0>; 297*4882a593Smuzhiyun }; 298*4882a593Smuzhiyun }; 299*4882a593Smuzhiyun }; 300*4882a593Smuzhiyun }; 301*4882a593Smuzhiyun}; 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun&lcd { 304*4882a593Smuzhiyun pinctrl-names = "default"; 305*4882a593Smuzhiyun pinctrl-0 = <&pins_lcd>; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun port { 308*4882a593Smuzhiyun panel_output: endpoint { 309*4882a593Smuzhiyun remote-endpoint = <&panel_input>; 310*4882a593Smuzhiyun }; 311*4882a593Smuzhiyun }; 312*4882a593Smuzhiyun}; 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun&udc { 315*4882a593Smuzhiyun phys = <&usb_phy>; 316*4882a593Smuzhiyun}; 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun&pinctrl { 319*4882a593Smuzhiyun pins_lcd: lcd { 320*4882a593Smuzhiyun function = "lcd"; 321*4882a593Smuzhiyun groups = "lcd-8bit"; 322*4882a593Smuzhiyun }; 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun pins_nemc: nemc { 325*4882a593Smuzhiyun function = "nand"; 326*4882a593Smuzhiyun groups = "nand-fre-fwe", "nand-cs1"; 327*4882a593Smuzhiyun }; 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun pins_uart0: uart0 { 330*4882a593Smuzhiyun function = "uart0"; 331*4882a593Smuzhiyun groups = "uart0-data"; 332*4882a593Smuzhiyun bias-disable; 333*4882a593Smuzhiyun }; 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun pins_mmc: mmc { 336*4882a593Smuzhiyun mmc { 337*4882a593Smuzhiyun function = "mmc"; 338*4882a593Smuzhiyun groups = "mmc-1bit", "mmc-4bit"; 339*4882a593Smuzhiyun bias-disable; 340*4882a593Smuzhiyun }; 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun mmc-gpios { 343*4882a593Smuzhiyun pins = "PD0", "PD2"; 344*4882a593Smuzhiyun bias-disable; 345*4882a593Smuzhiyun }; 346*4882a593Smuzhiyun }; 347*4882a593Smuzhiyun}; 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun&mmc { 350*4882a593Smuzhiyun bus-width = <4>; 351*4882a593Smuzhiyun max-frequency = <24000000>; 352*4882a593Smuzhiyun cd-gpios = <&gpd 0 GPIO_ACTIVE_HIGH>; 353*4882a593Smuzhiyun vmmc-supply = <&mmc_power>; 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun pinctrl-names = "default"; 356*4882a593Smuzhiyun pinctrl-0 = <&pins_mmc>; 357*4882a593Smuzhiyun}; 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun&tcu { 360*4882a593Smuzhiyun /* 750 kHz for the system timer and clocksource */ 361*4882a593Smuzhiyun assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER1>; 362*4882a593Smuzhiyun assigned-clock-rates = <750000>, <750000>; 363*4882a593Smuzhiyun}; 364