162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * OLPC XO 1.75 Laptop.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2018,2019,2020 Lubomir Rintel <lkundrak@v3.sk>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/dts-v1/;
962306a36Sopenharmony_ci#include "mmp2.dtsi"
1062306a36Sopenharmony_ci#include <dt-bindings/gpio/gpio.h>
1162306a36Sopenharmony_ci#include <dt-bindings/input/linux-event-codes.h>
1262306a36Sopenharmony_ci#include <dt-bindings/interrupt-controller/irq.h>
1362306a36Sopenharmony_ci#include <dt-bindings/clock/marvell,mmp2-audio.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/ {
1662306a36Sopenharmony_ci	model = "OLPC XO-1.75";
1762306a36Sopenharmony_ci	compatible = "olpc,xo-1.75", "mrvl,mmp2";
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci	chosen {
2062306a36Sopenharmony_ci		#address-cells = <1>;
2162306a36Sopenharmony_ci		#size-cells = <1>;
2262306a36Sopenharmony_ci		ranges;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci		framebuffer@1fc00000 {
2562306a36Sopenharmony_ci			compatible = "simple-framebuffer";
2662306a36Sopenharmony_ci			reg = <0x1fc00000 (1200 * 900 * 2)>;
2762306a36Sopenharmony_ci			width = <1200>;
2862306a36Sopenharmony_ci			height = <900>;
2962306a36Sopenharmony_ci			stride = <(1200 * 2)>;
3062306a36Sopenharmony_ci			format = "r5g6b5";
3162306a36Sopenharmony_ci			clocks = <&soc_clocks MMP2_CLK_DISP0_LCDC>,
3262306a36Sopenharmony_ci				 <&soc_clocks MMP2_CLK_DISP0>;
3362306a36Sopenharmony_ci		};
3462306a36Sopenharmony_ci	};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	memory@0 {
3762306a36Sopenharmony_ci		available = <0xcf000 0x1ef31000 0x1000 0xbf000>;
3862306a36Sopenharmony_ci		reg = <0x0 0x20000000>;
3962306a36Sopenharmony_ci		device_type = "memory";
4062306a36Sopenharmony_ci	};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	gpio-keys {
4362306a36Sopenharmony_ci		compatible = "gpio-keys";
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci		lid {
4662306a36Sopenharmony_ci			label = "Lid";
4762306a36Sopenharmony_ci			gpios = <&gpio 129 GPIO_ACTIVE_LOW>;
4862306a36Sopenharmony_ci			linux,input-type = <EV_SW>;
4962306a36Sopenharmony_ci			linux,code = <SW_LID>;
5062306a36Sopenharmony_ci			wakeup-source;
5162306a36Sopenharmony_ci		};
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci		tablet_mode {
5462306a36Sopenharmony_ci			label = "E-Book Mode";
5562306a36Sopenharmony_ci			gpios = <&gpio 128 GPIO_ACTIVE_LOW>;
5662306a36Sopenharmony_ci			linux,input-type = <EV_SW>;
5762306a36Sopenharmony_ci			linux,code = <SW_TABLET_MODE>;
5862306a36Sopenharmony_ci			wakeup-source;
5962306a36Sopenharmony_ci		};
6062306a36Sopenharmony_ci	};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci	i2c {
6362306a36Sopenharmony_ci		compatible = "i2c-gpio";
6462306a36Sopenharmony_ci		sda-gpios = <&gpio 109 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
6562306a36Sopenharmony_ci		scl-gpios = <&gpio 108 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
6662306a36Sopenharmony_ci		#address-cells = <1>;
6762306a36Sopenharmony_ci		#size-cells = <0>;
6862306a36Sopenharmony_ci		i2c-gpio,timeout-ms = <1000>;
6962306a36Sopenharmony_ci		status = "okay";
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci		camera@21 {
7262306a36Sopenharmony_ci			compatible = "ovti,ov7670";
7362306a36Sopenharmony_ci			reg = <0x21>;
7462306a36Sopenharmony_ci			reset-gpios = <&gpio 102 GPIO_ACTIVE_LOW>;
7562306a36Sopenharmony_ci			powerdown-gpios = <&gpio 150 GPIO_ACTIVE_LOW>;
7662306a36Sopenharmony_ci			clocks = <&camera0>;
7762306a36Sopenharmony_ci			clock-names = "xclk";
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci			port {
8062306a36Sopenharmony_ci				ov7670_0: endpoint {
8162306a36Sopenharmony_ci					hsync-active = <1>;
8262306a36Sopenharmony_ci					vsync-active = <1>;
8362306a36Sopenharmony_ci					remote-endpoint = <&camera0_0>;
8462306a36Sopenharmony_ci				};
8562306a36Sopenharmony_ci			};
8662306a36Sopenharmony_ci		};
8762306a36Sopenharmony_ci	};
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci	battery {
9062306a36Sopenharmony_ci		compatible = "olpc,xo1.5-battery", "olpc,xo1-battery";
9162306a36Sopenharmony_ci	};
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci	wlan_reg: fixedregulator0 {
9462306a36Sopenharmony_ci		compatible = "regulator-fixed";
9562306a36Sopenharmony_ci		regulator-name = "wlan";
9662306a36Sopenharmony_ci		regulator-min-microvolt = <3300000>;
9762306a36Sopenharmony_ci		regulator-max-microvolt = <3300000>;
9862306a36Sopenharmony_ci		gpio = <&gpio 34 GPIO_ACTIVE_HIGH>;
9962306a36Sopenharmony_ci		enable-active-high;
10062306a36Sopenharmony_ci	};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci	wlan_pwrseq: pwrseq0 {
10362306a36Sopenharmony_ci		compatible = "mmc-pwrseq-sd8787";
10462306a36Sopenharmony_ci		powerdown-gpios = <&gpio 57 GPIO_ACTIVE_HIGH>;
10562306a36Sopenharmony_ci		reset-gpios = <&gpio 58 GPIO_ACTIVE_HIGH>;
10662306a36Sopenharmony_ci	};
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci	sound-card {
10962306a36Sopenharmony_ci		compatible = "audio-graph-card";
11062306a36Sopenharmony_ci		label = "OLPC XO";
11162306a36Sopenharmony_ci		dais = <&sspa0_dai>;
11262306a36Sopenharmony_ci		routing = "Headphones", "HPOL",
11362306a36Sopenharmony_ci			  "Headphones", "HPOR",
11462306a36Sopenharmony_ci			  "MIC2", "Mic Jack";
11562306a36Sopenharmony_ci		widgets = "Headphone", "Headphones", "Microphone", "Mic Jack";
11662306a36Sopenharmony_ci		hp-det-gpio = <&gpio 97 GPIO_ACTIVE_HIGH>;
11762306a36Sopenharmony_ci		mic-det-gpio = <&gpio 96 GPIO_ACTIVE_HIGH>;
11862306a36Sopenharmony_ci	};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci	soc {
12162306a36Sopenharmony_ci		axi@d4200000 {
12262306a36Sopenharmony_ci			ap-sp@d4290000 {
12362306a36Sopenharmony_ci				#address-cells = <1>;
12462306a36Sopenharmony_ci				#size-cells = <0>;
12562306a36Sopenharmony_ci				compatible = "olpc,ap-sp";
12662306a36Sopenharmony_ci				interrupts = <40>;
12762306a36Sopenharmony_ci				reg = <0xd4290000 0x1000>;
12862306a36Sopenharmony_ci				data-gpios = <&gpio 72 GPIO_ACTIVE_HIGH>;
12962306a36Sopenharmony_ci				clk-gpios = <&gpio 71 GPIO_ACTIVE_HIGH>;
13062306a36Sopenharmony_ci				status = "okay";
13162306a36Sopenharmony_ci			};
13262306a36Sopenharmony_ci		};
13362306a36Sopenharmony_ci	};
13462306a36Sopenharmony_ci};
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci&uart3 {
13762306a36Sopenharmony_ci	status = "okay";
13862306a36Sopenharmony_ci};
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci&uart4 {
14162306a36Sopenharmony_ci	status = "okay";
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci&rtc {
14562306a36Sopenharmony_ci	status = "okay";
14662306a36Sopenharmony_ci};
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci&usb_phy0 {
14962306a36Sopenharmony_ci	status = "okay";
15062306a36Sopenharmony_ci};
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci&usb_otg0 {
15362306a36Sopenharmony_ci	status = "okay";
15462306a36Sopenharmony_ci};
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci&mmc1 {
15762306a36Sopenharmony_ci	clock-frequency = <50000000>;
15862306a36Sopenharmony_ci	no-1-8-v;
15962306a36Sopenharmony_ci	mrvl,clk-delay-cycles = <31>;
16062306a36Sopenharmony_ci	broken-cd;
16162306a36Sopenharmony_ci	status = "okay";
16262306a36Sopenharmony_ci};
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci&mmc2 {
16562306a36Sopenharmony_ci	clock-frequency = <50000000>;
16662306a36Sopenharmony_ci	no-1-8-v;
16762306a36Sopenharmony_ci	bus-width = <4>;
16862306a36Sopenharmony_ci	non-removable;
16962306a36Sopenharmony_ci	broken-cd;
17062306a36Sopenharmony_ci	wakeup-source;
17162306a36Sopenharmony_ci	keep-power-in-suspend;
17262306a36Sopenharmony_ci	mmc-pwrseq = <&wlan_pwrseq>;
17362306a36Sopenharmony_ci	vmmc-supply = <&wlan_reg>;
17462306a36Sopenharmony_ci	status = "okay";
17562306a36Sopenharmony_ci};
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci&mmc3 {
17862306a36Sopenharmony_ci	clock-frequency = <50000000>;
17962306a36Sopenharmony_ci	no-1-8-v;
18062306a36Sopenharmony_ci	bus-width = <8>;
18162306a36Sopenharmony_ci	non-removable;
18262306a36Sopenharmony_ci	broken-cd;
18362306a36Sopenharmony_ci	mrvl,clk-delay-cycles = <31>;
18462306a36Sopenharmony_ci	status = "okay";
18562306a36Sopenharmony_ci};
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci&twsi1 {
18862306a36Sopenharmony_ci	status = "okay";
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci	audio-codec@1a {
19162306a36Sopenharmony_ci		compatible = "realtek,alc5631";
19262306a36Sopenharmony_ci		reg = <0x1a>;
19362306a36Sopenharmony_ci		status = "okay";
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci		port {
19662306a36Sopenharmony_ci			rt5631_0: endpoint {
19762306a36Sopenharmony_ci				mclk-fs = <256>;
19862306a36Sopenharmony_ci				clocks = <&audio_clk MMP2_CLK_AUDIO_SYSCLK>;
19962306a36Sopenharmony_ci				remote-endpoint = <&sspa0_0>;
20062306a36Sopenharmony_ci			};
20162306a36Sopenharmony_ci		};
20262306a36Sopenharmony_ci	};
20362306a36Sopenharmony_ci};
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci&twsi2 {
20662306a36Sopenharmony_ci	status = "okay";
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci	rtc@68 {
20962306a36Sopenharmony_ci		compatible = "dallas,ds1338";
21062306a36Sopenharmony_ci		reg = <0x68>;
21162306a36Sopenharmony_ci		status = "okay";
21262306a36Sopenharmony_ci	};
21362306a36Sopenharmony_ci};
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci&twsi6 {
21662306a36Sopenharmony_ci	status = "okay";
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci	accelerometer@1d {
21962306a36Sopenharmony_ci		compatible = "st,lis331dlh", "st,lis3lv02d";
22062306a36Sopenharmony_ci		reg = <0x1d>;
22162306a36Sopenharmony_ci		status = "okay";
22262306a36Sopenharmony_ci	};
22362306a36Sopenharmony_ci};
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci&ssp3 {
22662306a36Sopenharmony_ci	#address-cells = <0>;
22762306a36Sopenharmony_ci	spi-slave;
22862306a36Sopenharmony_ci	status = "okay";
22962306a36Sopenharmony_ci	ready-gpios = <&gpio 125 GPIO_ACTIVE_HIGH>;
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci	slave {
23262306a36Sopenharmony_ci		compatible = "olpc,xo1.75-ec";
23362306a36Sopenharmony_ci		spi-cpha;
23462306a36Sopenharmony_ci		cmd-gpios = <&gpio 155 GPIO_ACTIVE_HIGH>;
23562306a36Sopenharmony_ci	};
23662306a36Sopenharmony_ci};
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ci&camera0 {
23962306a36Sopenharmony_ci	status = "okay";
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci	port {
24262306a36Sopenharmony_ci		camera0_0: endpoint {
24362306a36Sopenharmony_ci			remote-endpoint = <&ov7670_0>;
24462306a36Sopenharmony_ci		};
24562306a36Sopenharmony_ci	};
24662306a36Sopenharmony_ci};
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ci&asram {
24962306a36Sopenharmony_ci	status = "okay";
25062306a36Sopenharmony_ci};
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci&adma0 {
25362306a36Sopenharmony_ci	status = "okay";
25462306a36Sopenharmony_ci};
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci&audio_clk {
25762306a36Sopenharmony_ci	status = "okay";
25862306a36Sopenharmony_ci};
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci&sspa0 {
26162306a36Sopenharmony_ci	status = "okay";
26262306a36Sopenharmony_ci	dmas = <&adma0 0>, <&adma0 1>;
26362306a36Sopenharmony_ci	dma-names = "tx", "rx";
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci	sspa0_dai: port {
26662306a36Sopenharmony_ci		sspa0_0: endpoint {
26762306a36Sopenharmony_ci			remote-endpoint = <&rt5631_0>;
26862306a36Sopenharmony_ci			frame-master;
26962306a36Sopenharmony_ci			bitclock-master;
27062306a36Sopenharmony_ci			dai-format = "i2s";
27162306a36Sopenharmony_ci		};
27262306a36Sopenharmony_ci	};
27362306a36Sopenharmony_ci};
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci&gpu {
27662306a36Sopenharmony_ci	status = "okay";
27762306a36Sopenharmony_ci};
278