// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright 2021 Andreas Kemnade
 * based on works
 * Copyright 2016 Freescale Semiconductor, Inc.
 * and
 * Copyright (C) 2014 Ricoh Electronic Devices Co., Ltd
 *
 * Netronix E70K02 board common.
 * This board is equipped with different SoCs and
 * found in ebook-readers like the Kobo Clara HD (with i.MX6SLL) and
 * the Tolino Shine 3 (with i.MX6SL)
 */
#include <dt-bindings/input/input.h>

/ {
	aliases {
		mmc0 = &usdhc1;
		mmc1 = &usdhc3;
	};

	chosen {
		stdout-path = &uart1;
	};

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

		key-power {
			label = "Power";
			gpios = <&gpio4 25 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			wakeup-source;
		};

		key-cover {
			label = "Cover";
			gpios = <&gpio4 23 GPIO_ACTIVE_LOW>;
			linux,code = <SW_LID>;
			linux,input-type = <EV_SW>;
			wakeup-source;
		};

		key-pageup {
			label = "PageUp";
			gpios = <&gpio4 0 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_PAGEUP>;
		};

		key-pagedown {
			label = "PageDown";
			gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_PAGEDOWN>;
		};
	};

	leds: leds {
		compatible = "gpio-leds";

		led {
			label = "e70k02:white:on";
			gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "timer";
		};
	};

	memory@80000000 {
		device_type = "memory";
		reg = <0x80000000 0x20000000>;
	};

	reg_wifi: regulator-wifi {
		compatible = "regulator-fixed";
		regulator-name = "SD3_SPWR";
		regulator-min-microvolt = <3000000>;
		regulator-max-microvolt = <3000000>;
		gpio = <&gpio4 29 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	wifi_pwrseq: wifi-pwrseq {
		compatible = "mmc-pwrseq-simple";
		post-power-on-delay-ms = <20>;
		reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>;
	};
};

&i2c1 {
	clock-frequency = <100000>;
	status = "okay";

	lm3630a: backlight@36 {
		reg = <0x36>;
		compatible = "ti,lm3630a";
		enable-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;

		#address-cells = <1>;
		#size-cells = <0>;

		led@0 {
			reg = <0>;
			led-sources = <0>;
			label = "backlight_warm";
			default-brightness = <0>;
			max-brightness = <255>;
		};

		led@1 {
			reg = <1>;
			led-sources = <1>;
			label = "backlight_cold";
			default-brightness = <0>;
			max-brightness = <255>;
		};
	};

	/* TODO: KX122 acceleration sensor a 0x1e */

};

&i2c2 {
	clock-frequency = <100000>;
	status = "okay";

	/* TODO: CYTTSP5 touch controller at 0x24 */

	/* TODO: SY7636 PMIC for E Ink at 0x62 */

};

&i2c3 {
	clock-frequency = <100000>;
	status = "okay";

	ricoh619: pmic@32 {
		compatible = "ricoh,rc5t619";
		reg = <0x32>;
		interrupt-parent = <&gpio4>;
		interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
		system-power-controller;

		regulators {
			dcdc1_reg: DCDC1 {
				regulator-name = "DCDC1";
				regulator-min-microvolt = <300000>;
				regulator-max-microvolt = <1875000>;
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-max-microvolt = <900000>;
					regulator-suspend-min-microvolt = <900000>;
				};
			};

			/* Core3_3V3 */
			dcdc2_reg: DCDC2 {
				regulator-name = "DCDC2";
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-max-microvolt = <3300000>;
					regulator-suspend-min-microvolt = <3300000>;
				};
			};

			dcdc3_reg: DCDC3 {
				regulator-name = "DCDC3";
				regulator-min-microvolt = <300000>;
				regulator-max-microvolt = <1875000>;
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-max-microvolt = <1140000>;
					regulator-suspend-min-microvolt = <1140000>;
				};
			};

			/* Core4_1V2 */
			dcdc4_reg: DCDC4 {
				regulator-name = "DCDC4";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <1200000>;
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-max-microvolt = <1140000>;
					regulator-suspend-min-microvolt = <1140000>;
				};
			};

			/* Core4_1V8 */
			dcdc5_reg: DCDC5 {
				regulator-name = "DCDC5";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-max-microvolt = <1700000>;
					regulator-suspend-min-microvolt = <1700000>;
				};
			};

			ldo1_reg: LDO1  {
				regulator-name = "LDO1";
				regulator-boot-on;
			};

			/* Core1_3V3 */
			ldo2_reg: LDO2  {
				regulator-name = "LDO2";
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-max-microvolt = <3000000>;
					regulator-suspend-min-microvolt = <3000000>;
				};
			};

			/* Core5_1V2 */
			ldo3_reg: LDO3  {
				regulator-name = "LDO3";
				regulator-always-on;
				regulator-boot-on;
			};

			ldo4_reg: LDO4 {
				regulator-name = "LDO4";
				regulator-boot-on;
			};

			/* SPD_3V3 */
			ldo5_reg: LDO5 {
				regulator-name = "LDO5";
				regulator-always-on;
				regulator-boot-on;
			};

			/* DDR_0V6 */
			ldo6_reg: LDO6 {
				regulator-name = "LDO6";
				regulator-always-on;
				regulator-boot-on;
			};

			/* VDD_PWM */
			ldo7_reg: LDO7 {
				regulator-name = "LDO7";
				regulator-boot-on;
			};

			/* ldo_1v8 */
			ldo8_reg: LDO8 {
				regulator-name = "LDO8";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-boot-on;
			};

			ldo9_reg: LDO9 {
				regulator-name = "LDO9";
				regulator-boot-on;
			};

			ldo10_reg: LDO10 {
				regulator-name = "LDO10";
				regulator-boot-on;
			};

			ldortc1_reg: LDORTC1  {
				regulator-name = "LDORTC1";
				regulator-boot-on;
			};
		};
	};
};

&snvs_rtc {
	/* we are using the rtc in the pmic, not disabled in imx6sll.dtsi */
	status = "disabled";
};

&uart1 {
	status = "okay";
};

&usdhc1 {
	non-removable;
	no-1-8-v;
	status = "okay";
};

&usdhc3 {
	vmmc-supply = <&reg_wifi>;
	mmc-pwrseq = <&wifi_pwrseq>;
	cap-power-off-card;
	non-removable;
	status = "okay";
};

&usbotg1 {
	pinctrl-names = "default";
	disable-over-current;
	srp-disable;
	hnp-disable;
	adp-disable;
	status = "okay";
};
