1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0-or-later OR MIT 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * OLPC XO 1.75 Laptop. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2018,2019 Lubomir Rintel <lkundrak@v3.sk> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun/dts-v1/; 9*4882a593Smuzhiyun#include "mmp2.dtsi" 10*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h> 11*4882a593Smuzhiyun#include <dt-bindings/input/linux-event-codes.h> 12*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/irq.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun/ { 15*4882a593Smuzhiyun model = "OLPC XO-1.75"; 16*4882a593Smuzhiyun compatible = "olpc,xo-1.75", "mrvl,mmp2"; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun chosen { 19*4882a593Smuzhiyun #address-cells = <1>; 20*4882a593Smuzhiyun #size-cells = <1>; 21*4882a593Smuzhiyun ranges; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun framebuffer@1fc00000 { 24*4882a593Smuzhiyun compatible = "simple-framebuffer"; 25*4882a593Smuzhiyun reg = <0x1fc00000 (1200 * 900 * 2)>; 26*4882a593Smuzhiyun width = <1200>; 27*4882a593Smuzhiyun height = <900>; 28*4882a593Smuzhiyun stride = <(1200 * 2)>; 29*4882a593Smuzhiyun format = "r5g6b5"; 30*4882a593Smuzhiyun clocks = <&soc_clocks MMP2_CLK_DISP0_LCDC>, 31*4882a593Smuzhiyun <&soc_clocks MMP2_CLK_DISP0>; 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun memory { 36*4882a593Smuzhiyun linux,usable-memory = <0x0 0x1f800000>; 37*4882a593Smuzhiyun available = <0xcf000 0x1ef31000 0x1000 0xbf000>; 38*4882a593Smuzhiyun reg = <0x0 0x20000000>; 39*4882a593Smuzhiyun device_type = "memory"; 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun gpio-keys { 43*4882a593Smuzhiyun compatible = "gpio-keys"; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun lid { 46*4882a593Smuzhiyun label = "Lid"; 47*4882a593Smuzhiyun gpios = <&gpio 129 GPIO_ACTIVE_LOW>; 48*4882a593Smuzhiyun linux,input-type = <EV_SW>; 49*4882a593Smuzhiyun linux,code = <SW_LID>; 50*4882a593Smuzhiyun wakeup-source; 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun tablet_mode { 54*4882a593Smuzhiyun label = "E-Book Mode"; 55*4882a593Smuzhiyun gpios = <&gpio 128 GPIO_ACTIVE_LOW>; 56*4882a593Smuzhiyun linux,input-type = <EV_SW>; 57*4882a593Smuzhiyun linux,code = <SW_TABLET_MODE>; 58*4882a593Smuzhiyun wakeup-source; 59*4882a593Smuzhiyun }; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun i2c { 63*4882a593Smuzhiyun compatible = "i2c-gpio"; 64*4882a593Smuzhiyun sda-gpios = <&gpio 109 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; 65*4882a593Smuzhiyun scl-gpios = <&gpio 108 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; 66*4882a593Smuzhiyun #address-cells = <1>; 67*4882a593Smuzhiyun #size-cells = <0>; 68*4882a593Smuzhiyun i2c-gpio,timeout-ms = <1000>; 69*4882a593Smuzhiyun status = "okay"; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun camera@21 { 72*4882a593Smuzhiyun compatible = "ovti,ov7670"; 73*4882a593Smuzhiyun reg = <0x21>; 74*4882a593Smuzhiyun reset-gpios = <&gpio 102 GPIO_ACTIVE_LOW>; 75*4882a593Smuzhiyun powerdown-gpios = <&gpio 150 GPIO_ACTIVE_LOW>; 76*4882a593Smuzhiyun clocks = <&camera0>; 77*4882a593Smuzhiyun clock-names = "xclk"; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun port { 80*4882a593Smuzhiyun ov7670_0: endpoint { 81*4882a593Smuzhiyun hsync-active = <1>; 82*4882a593Smuzhiyun vsync-active = <1>; 83*4882a593Smuzhiyun remote-endpoint = <&camera0_0>; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun }; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun battery { 90*4882a593Smuzhiyun compatible = "olpc,xo1.5-battery", "olpc,xo1-battery"; 91*4882a593Smuzhiyun }; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun wlan_reg: fixedregulator0 { 94*4882a593Smuzhiyun compatible = "regulator-fixed"; 95*4882a593Smuzhiyun regulator-name = "wlan"; 96*4882a593Smuzhiyun regulator-min-microvolt = <3300000>; 97*4882a593Smuzhiyun regulator-max-microvolt = <3300000>; 98*4882a593Smuzhiyun gpio = <&gpio 34 GPIO_ACTIVE_HIGH>; 99*4882a593Smuzhiyun enable-active-high; 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun wlan_pwrseq: pwrseq0 { 103*4882a593Smuzhiyun compatible = "mmc-pwrseq-sd8787"; 104*4882a593Smuzhiyun powerdown-gpios = <&gpio 57 GPIO_ACTIVE_HIGH>; 105*4882a593Smuzhiyun reset-gpios = <&gpio 58 GPIO_ACTIVE_HIGH>; 106*4882a593Smuzhiyun }; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun sound-card { 109*4882a593Smuzhiyun compatible = "audio-graph-card"; 110*4882a593Smuzhiyun label = "OLPC XO"; 111*4882a593Smuzhiyun dais = <&sspa0_dai>; 112*4882a593Smuzhiyun routing = "Headphones", "HPOL", 113*4882a593Smuzhiyun "Headphones", "HPOR", 114*4882a593Smuzhiyun "MIC2", "Mic Jack"; 115*4882a593Smuzhiyun widgets = "Headphone", "Headphones", "Microphone", "Mic Jack"; 116*4882a593Smuzhiyun hp-det-gpio = <&gpio 97 GPIO_ACTIVE_HIGH>; 117*4882a593Smuzhiyun mic-det-gpio = <&gpio 96 GPIO_ACTIVE_HIGH>; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun soc { 121*4882a593Smuzhiyun axi@d4200000 { 122*4882a593Smuzhiyun ap-sp@d4290000 { 123*4882a593Smuzhiyun #address-cells = <1>; 124*4882a593Smuzhiyun #size-cells = <0>; 125*4882a593Smuzhiyun compatible = "olpc,ap-sp"; 126*4882a593Smuzhiyun interrupts = <40>; 127*4882a593Smuzhiyun reg = <0xd4290000 0x1000>; 128*4882a593Smuzhiyun data-gpios = <&gpio 72 GPIO_ACTIVE_HIGH>; 129*4882a593Smuzhiyun clk-gpios = <&gpio 71 GPIO_ACTIVE_HIGH>; 130*4882a593Smuzhiyun status = "okay"; 131*4882a593Smuzhiyun }; 132*4882a593Smuzhiyun }; 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun}; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun&uart3 { 137*4882a593Smuzhiyun status = "okay"; 138*4882a593Smuzhiyun}; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun&uart4 { 141*4882a593Smuzhiyun status = "okay"; 142*4882a593Smuzhiyun}; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun&rtc { 145*4882a593Smuzhiyun status = "okay"; 146*4882a593Smuzhiyun}; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun&usb_phy0 { 149*4882a593Smuzhiyun status = "okay"; 150*4882a593Smuzhiyun}; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun&usb_otg0 { 153*4882a593Smuzhiyun status = "okay"; 154*4882a593Smuzhiyun}; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun&mmc1 { 157*4882a593Smuzhiyun clock-frequency = <50000000>; 158*4882a593Smuzhiyun no-1-8-v; 159*4882a593Smuzhiyun mrvl,clk-delay-cycles = <31>; 160*4882a593Smuzhiyun broken-cd; 161*4882a593Smuzhiyun status = "okay"; 162*4882a593Smuzhiyun}; 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun&mmc2 { 165*4882a593Smuzhiyun clock-frequency = <50000000>; 166*4882a593Smuzhiyun no-1-8-v; 167*4882a593Smuzhiyun bus-width = <4>; 168*4882a593Smuzhiyun non-removable; 169*4882a593Smuzhiyun broken-cd; 170*4882a593Smuzhiyun wakeup-source; 171*4882a593Smuzhiyun keep-power-in-suspend; 172*4882a593Smuzhiyun mmc-pwrseq = <&wlan_pwrseq>; 173*4882a593Smuzhiyun vmmc-supply = <&wlan_reg>; 174*4882a593Smuzhiyun status = "okay"; 175*4882a593Smuzhiyun}; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun&mmc3 { 178*4882a593Smuzhiyun clock-frequency = <50000000>; 179*4882a593Smuzhiyun no-1-8-v; 180*4882a593Smuzhiyun bus-width = <8>; 181*4882a593Smuzhiyun non-removable; 182*4882a593Smuzhiyun broken-cd; 183*4882a593Smuzhiyun mrvl,clk-delay-cycles = <31>; 184*4882a593Smuzhiyun status = "okay"; 185*4882a593Smuzhiyun}; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun&twsi1 { 188*4882a593Smuzhiyun status = "okay"; 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun audio-codec@1a { 191*4882a593Smuzhiyun compatible = "realtek,alc5631"; 192*4882a593Smuzhiyun reg = <0x1a>; 193*4882a593Smuzhiyun status = "okay"; 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun port { 196*4882a593Smuzhiyun rt5631_0: endpoint { 197*4882a593Smuzhiyun mclk-fs = <256>; 198*4882a593Smuzhiyun clocks = <&audio_clk 0>; 199*4882a593Smuzhiyun remote-endpoint = <&sspa0_0>; 200*4882a593Smuzhiyun }; 201*4882a593Smuzhiyun }; 202*4882a593Smuzhiyun }; 203*4882a593Smuzhiyun}; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun&twsi2 { 206*4882a593Smuzhiyun status = "okay"; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun rtc@68 { 209*4882a593Smuzhiyun compatible = "dallas,ds1338"; 210*4882a593Smuzhiyun reg = <0x68>; 211*4882a593Smuzhiyun status = "okay"; 212*4882a593Smuzhiyun }; 213*4882a593Smuzhiyun}; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun&twsi6 { 216*4882a593Smuzhiyun status = "okay"; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun accelerometer@1d { 219*4882a593Smuzhiyun compatible = "st,lis331dlh", "st,lis3lv02d"; 220*4882a593Smuzhiyun reg = <0x1d>; 221*4882a593Smuzhiyun status = "okay"; 222*4882a593Smuzhiyun }; 223*4882a593Smuzhiyun}; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun&ssp3 { 226*4882a593Smuzhiyun #address-cells = <0>; 227*4882a593Smuzhiyun spi-slave; 228*4882a593Smuzhiyun status = "okay"; 229*4882a593Smuzhiyun ready-gpios = <&gpio 125 GPIO_ACTIVE_HIGH>; 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun slave { 232*4882a593Smuzhiyun compatible = "olpc,xo1.75-ec"; 233*4882a593Smuzhiyun spi-cpha; 234*4882a593Smuzhiyun cmd-gpios = <&gpio 155 GPIO_ACTIVE_HIGH>; 235*4882a593Smuzhiyun }; 236*4882a593Smuzhiyun}; 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun&camera0 { 239*4882a593Smuzhiyun status = "okay"; 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun port { 242*4882a593Smuzhiyun camera0_0: endpoint { 243*4882a593Smuzhiyun remote-endpoint = <&ov7670_0>; 244*4882a593Smuzhiyun }; 245*4882a593Smuzhiyun }; 246*4882a593Smuzhiyun}; 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun&asram { 249*4882a593Smuzhiyun status = "okay"; 250*4882a593Smuzhiyun}; 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun&adma0 { 253*4882a593Smuzhiyun status = "okay"; 254*4882a593Smuzhiyun}; 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun&audio_clk { 257*4882a593Smuzhiyun status = "okay"; 258*4882a593Smuzhiyun}; 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun&sspa0 { 261*4882a593Smuzhiyun status = "okay"; 262*4882a593Smuzhiyun dmas = <&adma0 0>, <&adma0 1>; 263*4882a593Smuzhiyun dma-names = "tx", "rx"; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun sspa0_dai: port { 266*4882a593Smuzhiyun sspa0_0: endpoint { 267*4882a593Smuzhiyun remote-endpoint = <&rt5631_0>; 268*4882a593Smuzhiyun frame-master; 269*4882a593Smuzhiyun bitclock-master; 270*4882a593Smuzhiyun dai-format = "i2s"; 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun }; 273*4882a593Smuzhiyun}; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun&gpu { 276*4882a593Smuzhiyun status = "okay"; 277*4882a593Smuzhiyun}; 278