// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Google Gru-Kevin Rev 6+ board device tree source
 *
 * Copyright 2016-2017 Google, Inc
 */

/dts-v1/;
#include "rk3399-gru-chromebook.dtsi"
#include <dt-bindings/input/linux-event-codes.h>

/*
 * Kevin-specific things
 *
 * Things in this section should use names from Kevin schematic since no
 * equivalent exists in Gru schematic.  If referring to signals that exist
 * in Gru we use the Gru names, though.  Confusing enough for you?
 */
/ {
	model = "Google Kevin";
	compatible = "google,kevin-rev15", "google,kevin-rev14",
		     "google,kevin-rev13", "google,kevin-rev12",
		     "google,kevin-rev11", "google,kevin-rev10",
		     "google,kevin-rev9", "google,kevin-rev8",
		     "google,kevin-rev7", "google,kevin-rev6",
		     "google,kevin", "google,gru", "rockchip,rk3399";

	/* Power tree */

	p3_3v_dig: p3-3v-dig {
		compatible = "regulator-fixed";
		regulator-name = "p3.3v_dig";
		pinctrl-names = "default";
		pinctrl-0 = <&cpu3_pen_pwr_en>;

		enable-active-high;
		gpio = <&gpio4 30 GPIO_ACTIVE_HIGH>;
		vin-supply = <&pp3300>;
	};

	edp_panel: edp-panel {
		compatible = "sharp,lq123p1jx31", "simple-panel";
		backlight = <&backlight>;
		power-supply = <&pp3300_disp>;

		ports {
			panel_in_edp: endpoint {
				remote-endpoint = <&edp_out_panel>;
			};
		};
	};

	thermistor_ppvar_bigcpu: thermistor-ppvar-bigcpu {
		compatible = "murata,ncp15wb473";
		pullup-uv = <1800000>;
		pullup-ohm = <25500>;
		pulldown-ohm = <0>;
		io-channels = <&saradc 2>;
		#thermal-sensor-cells = <0>;
	};

	thermistor_ppvar_litcpu: thermistor-ppvar-litcpu {
		compatible = "murata,ncp15wb473";
		pullup-uv = <1800000>;
		pullup-ohm = <25500>;
		pulldown-ohm = <0>;
		io-channels = <&saradc 3>;
		#thermal-sensor-cells = <0>;
	};
};

&backlight {
	pwms = <&cros_ec_pwm 1>;
};

&gpio_keys {
	pinctrl-names = "default";
	pinctrl-0 = <&bt_host_wake_l>, <&cpu1_pen_eject>;

	pen-insert {
		label = "Pen Insert";
		/* Insert = low, eject = high */
		gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
		linux,code = <SW_PEN_INSERTED>;
		linux,input-type = <EV_SW>;
		wakeup-source;
	};
};

&thermal_zones {
	bigcpu_reg_thermal: bigcpu-reg-thermal {
		polling-delay-passive = <100>; /* milliseconds */
		polling-delay = <1000>; /* milliseconds */
		thermal-sensors = <&thermistor_ppvar_bigcpu 0>;
		sustainable-power = <4000>;

		ppvar_bigcpu_trips: trips {
			ppvar_bigcpu_on: ppvar-bigcpu-on {
				temperature = <40000>;	/* millicelsius */
				hysteresis = <2000>;	/* millicelsius */
				type = "passive";
			};

			ppvar_bigcpu_alert: ppvar-bigcpu-alert {
				temperature = <50000>;	/* millicelsius */
				hysteresis = <2000>;	/* millicelsius */
				type = "passive";
			};

			ppvar_bigcpu_crit: ppvar-bigcpu-crit {
				temperature = <90000>;	/* millicelsius */
				hysteresis = <0>;	/* millicelsius */
				type = "critical";
			};
		};

		cooling-maps {
			map0 {
				trip = <&ppvar_bigcpu_alert>;
				cooling-device =
					<&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				contribution = <4096>;
			};
			map1 {
				trip = <&ppvar_bigcpu_alert>;
				cooling-device =
					<&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				contribution = <1024>;
			};
		};
	};

	litcpu_reg_thermal: litcpu-reg-thermal {
		polling-delay-passive = <100>; /* milliseconds */
		polling-delay = <1000>; /* milliseconds */
		thermal-sensors = <&thermistor_ppvar_litcpu 0>;
		sustainable-power = <4000>;

		ppvar_litcpu_trips: trips {
			ppvar_litcpu_on: ppvar-litcpu-on {
				temperature = <40000>;	/* millicelsius */
				hysteresis = <2000>;	/* millicelsius */
				type = "passive";
			};

			ppvar_litcpu_alert: ppvar-litcpu-alert {
				temperature = <50000>;	/* millicelsius */
				hysteresis = <2000>;	/* millicelsius */
				type = "passive";
			};

			ppvar_litcpu_crit: ppvar-litcpu-crit {
				temperature = <90000>;	/* millicelsius */
				hysteresis = <0>;	/* millicelsius */
				type = "critical";
			};
		};
	};
};

ap_i2c_tpm: &i2c0 {
	status = "okay";

	clock-frequency = <400000>;

	/* These are relatively safe rise/fall times. */
	i2c-scl-falling-time-ns = <50>;
	i2c-scl-rising-time-ns = <300>;

	tpm: tpm@20 {
		compatible = "infineon,slb9645tt";
		reg = <0x20>;
		powered-while-suspended;
	};
};

ap_i2c_dig: &i2c2 {
	status = "okay";

	clock-frequency = <400000>;

	/* These are relatively safe rise/fall times. */
	i2c-scl-falling-time-ns = <50>;
	i2c-scl-rising-time-ns = <300>;

	digitizer: digitizer@9 {
		/* wacom,w9013 */
		compatible = "hid-over-i2c";
		reg = <0x9>;
		pinctrl-names = "default";
		pinctrl-0 = <&cpu1_dig_irq_l &cpu1_dig_pdct_l>;

		vdd-supply = <&p3_3v_dig>;
		post-power-on-delay-ms = <100>;

		interrupt-parent = <&gpio2>;
		interrupts = <4 IRQ_TYPE_LEVEL_LOW>;

		hid-descr-addr = <0x1>;
	};
};

/* Adjustments to things in the gru baseboard */

&ap_i2c_tp {
	trackpad@4a {
		compatible = "atmel,maxtouch";
		reg = <0x4a>;
		pinctrl-names = "default";
		pinctrl-0 = <&trackpad_int_l>;
		interrupt-parent = <&gpio1>;
		interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
		linux,gpio-keymap = <KEY_RESERVED
				     KEY_RESERVED
				     KEY_RESERVED
				     BTN_LEFT>;
		wakeup-source;
	};
};

&ap_i2c_ts {
	touchscreen@4b {
		compatible = "atmel,maxtouch";
		reg = <0x4b>;
		pinctrl-names = "default";
		pinctrl-0 = <&touch_int_l>;
		interrupt-parent = <&gpio3>;
		interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
	};
};

&ppvar_bigcpu_pwm {
	regulator-min-microvolt = <798674>;
	regulator-max-microvolt = <1302172>;
};

&ppvar_bigcpu {
	regulator-min-microvolt = <798674>;
	regulator-max-microvolt = <1302172>;
	ctrl-voltage-range = <798674 1302172>;
};

&ppvar_litcpu_pwm {
	regulator-min-microvolt = <799065>;
	regulator-max-microvolt = <1303738>;
};

&ppvar_litcpu {
	regulator-min-microvolt = <799065>;
	regulator-max-microvolt = <1303738>;
	ctrl-voltage-range = <799065 1303738>;
};

&ppvar_gpu_pwm {
	regulator-min-microvolt = <785782>;
	regulator-max-microvolt = <1217729>;
};

&ppvar_gpu {
	regulator-min-microvolt = <785782>;
	regulator-max-microvolt = <1217729>;
	ctrl-voltage-range = <785782 1217729>;
};

&ppvar_centerlogic_pwm {
	regulator-min-microvolt = <800069>;
	regulator-max-microvolt = <1049692>;
};

&ppvar_centerlogic {
	regulator-min-microvolt = <800069>;
	regulator-max-microvolt = <1049692>;
	ctrl-voltage-range = <800069 1049692>;
};

&saradc {
	status = "okay";
	vref-supply = <&pp1800_ap_io>;
};

&mvl_wifi {
	marvell,wakeup-pin = <14>; /* GPIO_14 on Marvell */
};

&pinctrl {
	digitizer {
		/* Has external pullup */
		cpu1_dig_irq_l: cpu1-dig-irq-l {
			rockchip,pins = <2 4 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		/* Has external pullup */
		cpu1_dig_pdct_l: cpu1-dig-pdct-l {
			rockchip,pins = <2 5 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	discrete-regulators {
		cpu3_pen_pwr_en: cpu3-pen-pwr-en {
			rockchip,pins = <4 30 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	pen {
		cpu1_pen_eject: cpu1-pen-eject {
			rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};
};
