// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright 2019 Andreas Kemnade
 * based on works
 * Copyright 2016 Freescale Semiconductor, Inc.
 * and
 * Copyright (C) 2014 Ricoh Electronic Devices Co., Ltd
 *
 * Netronix E60K02 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>

/ {

	chosen {
		stdout-path = &uart1;
	};

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

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

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

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

		on {
			label = "e60k02:white:on";
			gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "timer";
		};
	};

	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>;
		};
	};
};

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

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

	/* TODO: TPS65185 PMIC for E Ink at 0x68 */

};

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

	ricoh619: pmic@32 {
		compatible = "ricoh,rc5t619";
		reg = <0x32>;
		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>;
				};
			};

			/* IR_3V3 */
			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-always-on;
				regulator-boot-on;
			};

			/* ldo_1v8 */
			ldo8_reg: LDO8 {
				regulator-name = "LDO8";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				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";
};

&usdhc2 {
	non-removable;
	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";
};
