// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * OLPC XO 1.75 Laptop.
 *
 * Copyright (C) 2018,2019,2020 Lubomir Rintel <lkundrak@v3.sk>
 */

/dts-v1/;
#include "mmp2.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/linux-event-codes.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/clock/marvell,mmp2-audio.h>

/ {
	model = "OLPC XO-1.75";
	compatible = "olpc,xo-1.75", "mrvl,mmp2";

	chosen {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		framebuffer@1fc00000 {
			compatible = "simple-framebuffer";
			reg = <0x1fc00000 (1200 * 900 * 2)>;
			width = <1200>;
			height = <900>;
			stride = <(1200 * 2)>;
			format = "r5g6b5";
			clocks = <&soc_clocks MMP2_CLK_DISP0_LCDC>,
				 <&soc_clocks MMP2_CLK_DISP0>;
		};
	};

	memory@0 {
		available = <0xcf000 0x1ef31000 0x1000 0xbf000>;
		reg = <0x0 0x20000000>;
		device_type = "memory";
	};

	gpio-keys {
		compatible = "gpio-keys";

		lid {
			label = "Lid";
			gpios = <&gpio 129 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_LID>;
			wakeup-source;
		};

		tablet_mode {
			label = "E-Book Mode";
			gpios = <&gpio 128 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_TABLET_MODE>;
			wakeup-source;
		};
	};

	i2c {
		compatible = "i2c-gpio";
		sda-gpios = <&gpio 109 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		scl-gpios = <&gpio 108 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		#address-cells = <1>;
		#size-cells = <0>;
		i2c-gpio,timeout-ms = <1000>;
		status = "okay";

		camera@21 {
			compatible = "ovti,ov7670";
			reg = <0x21>;
			reset-gpios = <&gpio 102 GPIO_ACTIVE_LOW>;
			powerdown-gpios = <&gpio 150 GPIO_ACTIVE_LOW>;
			clocks = <&camera0>;
			clock-names = "xclk";

			port {
				ov7670_0: endpoint {
					hsync-active = <1>;
					vsync-active = <1>;
					remote-endpoint = <&camera0_0>;
				};
			};
		};
	};

	battery {
		compatible = "olpc,xo1.5-battery", "olpc,xo1-battery";
	};

	wlan_reg: fixedregulator0 {
		compatible = "regulator-fixed";
		regulator-name = "wlan";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpio 34 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	wlan_pwrseq: pwrseq0 {
		compatible = "mmc-pwrseq-sd8787";
		powerdown-gpios = <&gpio 57 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpio 58 GPIO_ACTIVE_HIGH>;
	};

	sound-card {
		compatible = "audio-graph-card";
		label = "OLPC XO";
		dais = <&sspa0_dai>;
		routing = "Headphones", "HPOL",
			  "Headphones", "HPOR",
			  "MIC2", "Mic Jack";
		widgets = "Headphone", "Headphones", "Microphone", "Mic Jack";
		hp-det-gpio = <&gpio 97 GPIO_ACTIVE_HIGH>;
		mic-det-gpio = <&gpio 96 GPIO_ACTIVE_HIGH>;
	};

	soc {
		axi@d4200000 {
			ap-sp@d4290000 {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "olpc,ap-sp";
				interrupts = <40>;
				reg = <0xd4290000 0x1000>;
				data-gpios = <&gpio 72 GPIO_ACTIVE_HIGH>;
				clk-gpios = <&gpio 71 GPIO_ACTIVE_HIGH>;
				status = "okay";
			};
		};
	};
};

&uart3 {
	status = "okay";
};

&uart4 {
	status = "okay";
};

&rtc {
	status = "okay";
};

&usb_phy0 {
	status = "okay";
};

&usb_otg0 {
	status = "okay";
};

&mmc1 {
	clock-frequency = <50000000>;
	no-1-8-v;
	mrvl,clk-delay-cycles = <31>;
	broken-cd;
	status = "okay";
};

&mmc2 {
	clock-frequency = <50000000>;
	no-1-8-v;
	bus-width = <4>;
	non-removable;
	broken-cd;
	wakeup-source;
	keep-power-in-suspend;
	mmc-pwrseq = <&wlan_pwrseq>;
	vmmc-supply = <&wlan_reg>;
	status = "okay";
};

&mmc3 {
	clock-frequency = <50000000>;
	no-1-8-v;
	bus-width = <8>;
	non-removable;
	broken-cd;
	mrvl,clk-delay-cycles = <31>;
	status = "okay";
};

&twsi1 {
	status = "okay";

	audio-codec@1a {
		compatible = "realtek,alc5631";
		reg = <0x1a>;
		status = "okay";

		port {
			rt5631_0: endpoint {
				mclk-fs = <256>;
				clocks = <&audio_clk MMP2_CLK_AUDIO_SYSCLK>;
				remote-endpoint = <&sspa0_0>;
			};
		};
	};
};

&twsi2 {
	status = "okay";

	rtc@68 {
		compatible = "dallas,ds1338";
		reg = <0x68>;
		status = "okay";
	};
};

&twsi6 {
	status = "okay";

	accelerometer@1d {
		compatible = "st,lis331dlh", "st,lis3lv02d";
		reg = <0x1d>;
		status = "okay";
	};
};

&ssp3 {
	#address-cells = <0>;
	spi-slave;
	status = "okay";
	ready-gpios = <&gpio 125 GPIO_ACTIVE_HIGH>;

	slave {
		compatible = "olpc,xo1.75-ec";
		spi-cpha;
		cmd-gpios = <&gpio 155 GPIO_ACTIVE_HIGH>;
	};
};

&camera0 {
	status = "okay";

	port {
		camera0_0: endpoint {
			remote-endpoint = <&ov7670_0>;
		};
	};
};

&asram {
	status = "okay";
};

&adma0 {
	status = "okay";
};

&audio_clk {
	status = "okay";
};

&sspa0 {
	status = "okay";
	dmas = <&adma0 0>, <&adma0 1>;
	dma-names = "tx", "rx";

	sspa0_dai: port {
		sspa0_0: endpoint {
			remote-endpoint = <&rt5631_0>;
			frame-master;
			bitclock-master;
			dai-format = "i2s";
		};
	};
};

&gpu {
	status = "okay";
};