// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Google Trogdor device tree source (common between revisions)
 *
 * Copyright 2019 Google LLC.
 */

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include <dt-bindings/sound/sc7180-lpass.h>

#include "sc7180.dtsi"
/* PMICs depend on spmi_bus label and so must come after sc7180.dtsi */
#include "pm6150.dtsi"
#include "pm6150l.dtsi"

/ {
	thermal-zones {
		charger_thermal: charger-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;

			thermal-sensors = <&pm6150_adc_tm 0>;

			trips {
				charger-crit {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "critical";
				};
			};
		};
	};
};

/*
 * Reserved memory changes
 *
 * Delete all unused memory nodes and define the peripheral memory regions
 * required by the board dts.
 */

/delete-node/ &hyp_mem;
/delete-node/ &ipa_fw_mem;
/delete-node/ &xbl_mem;
/delete-node/ &aop_mem;
/delete-node/ &sec_apps_mem;
/delete-node/ &tz_mem;

/* Increase the size from 2MB to 8MB */
&rmtfs_mem {
	reg = <0x0 0x94600000 0x0 0x800000>;
};

/ {
	reserved-memory {
		atf_mem: memory@80b00000 {
			reg = <0x0 0x80b00000 0x0 0x100000>;
			no-map;
		};

		mpss_mem: memory@86000000 {
			reg = <0x0 0x86000000 0x0 0x2000000>;
			no-map;
		};

		venus_mem: memory@8f600000 {
			reg = <0 0x8f600000 0 0x500000>;
			no-map;
		};

		wlan_mem: memory@94100000 {
			reg = <0x0 0x94100000 0x0 0x200000>;
			no-map;
		};

		mba_mem: memory@94400000 {
			reg = <0x0 0x94400000 0x0 0x200000>;
			no-map;
		};
	};

	aliases {
		bluetooth0 = &bluetooth;
		hsuart0 = &uart3;
		serial0 = &uart8;
		wifi0 = &wifi;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	/* FIXED REGULATORS - parents above children */

	/* This is the top level supply and variable voltage */
	ppvar_sys: ppvar-sys-regulator {
		compatible = "regulator-fixed";
		regulator-name = "ppvar_sys";
		regulator-always-on;
		regulator-boot-on;
	};

	/* This divides ppvar_sys by 2, so voltage is variable */
	src_vph_pwr: src-vph-pwr-regulator {
		compatible = "regulator-fixed";
		regulator-name = "src_vph_pwr";

		/* EC turns on with switchcap_on; always on for AP */
		regulator-always-on;
		regulator-boot-on;

		vin-supply = <&ppvar_sys>;
	};

	pp5000_a: pp5000-a-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp5000_a";

		/* EC turns on with en_pp5000_a; always on for AP */
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;

		vin-supply = <&ppvar_sys>;
	};

	pp3300_a: pp3300-a-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp3300_a";

		/* EC turns on with en_pp3300_a; always on for AP */
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		/*
		 * Actually should be pp3300 but that's practically an alias for
		 * pp3300_a so we use pp3300's vin-supply here to avoid one more
		 * node.
		 */
		vin-supply = <&ppvar_sys>;
	};

	pp1800_ec:
	pp1800_sensors:
	pp1800_ldo: pp1800-ldo-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp1800_ldo";

		/* EC turns on with hibernate_l; always on for AP */
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;

		/*
		 * Actually should be pp1800_h1 but we don't have any need to
		 * model that so we use the parent of pp1800_h1.
		 */
		vin-supply = <&pp3300_a>;
	};

	pp1800_uf_cam: pp1800-uf-cam-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp1800_uf_cam";
		status = "disabled";

		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;

		gpio = <&tlmm 6 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		pinctrl-names = "default";
		pinctrl-0 = <&uf_cam_en>;

		vin-supply = <&pp1800_ldo>;
		regulator-enable-ramp-delay = <1000>;
	};

	pp1800_wf_cam: pp1800-wf-cam-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp1800_wf_cam";
		status = "disabled";

		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;

		gpio = <&tlmm 7 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		pinctrl-names = "default";
		pinctrl-0 = <&wf_cam_en>;

		vin-supply = <&pp1800_ldo>;
		regulator-enable-ramp-delay = <1000>;
	};

	pp2800_uf_cam: pp2800-uf-cam-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp2800_uf_cam";
		status = "disabled";

		regulator-min-microvolt = <2850000>;
		regulator-max-microvolt = <2850000>;

		gpio = <&tlmm 6 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		/*
		 * The pinconf can only be referenced once so we put it on the
		 * first regulator and comment it out here.
		 * pinctrl-names = "default";
		 * pinctrl-0 = <&uf_cam_en>;
		 */

		vin-supply = <&pp3300_a>;
	};

	pp2800_vcm_wf_cam:
	pp2800_wf_cam: pp2800-wf-cam-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp2800_wf_cam";
		status = "disabled";

		regulator-min-microvolt = <2850000>;
		regulator-max-microvolt = <2850000>;

		gpio = <&tlmm 7 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		/*
		 * The pinconf can only be referenced once so we put it on the
		 * first regulator and comment it out here.
		 * pinctrl-names = "default";
		 * pinctrl-0 = <&wf_cam_en>;
		 */

		vin-supply = <&pp3300_a>;
	};

	pp3300_audio:
	pp3300_codec: pp3300-codec-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp3300_codec";

		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&tlmm 83 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		pinctrl-names = "default";
		pinctrl-0 = <&en_pp3300_codec>;

		vin-supply = <&pp3300_a>;
	};

	pp3300_dx_edp:
	pp3300_ts: pp3300-dx-edp-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp3300_dx_edp";

		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&tlmm 30 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		pinctrl-names = "default";
		pinctrl-0 = <&en_pp3300_dx_edp>;

		vin-supply = <&pp3300_a>;
	};

	pp3300_fp_tp: pp3300-fp-tp-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp3300_fp_tp";

		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		/* AP turns on with PP1800_VIO_OUT; always on for AP */
		regulator-always-on;
		regulator-boot-on;

		vin-supply = <&pp3300_a>;
	};

	pp3300_hub: pp3300-hub-regulator {
		compatible = "regulator-fixed";
		regulator-name = "pp3300_hub";

		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&tlmm 84 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		pinctrl-names = "default";
		pinctrl-0 = <&en_pp3300_hub>;

		regulator-always-on;
		regulator-boot-on;

		vin-supply = <&pp3300_a>;
	};

	/* BOARD-SPECIFIC TOP LEVEL NODES */

	backlight: backlight {
		compatible = "pwm-backlight";

		/* The panels don't seem to like anything below ~ 5% */
		brightness-levels = <
			196 256 324 400 484 576 676 784 900 1024 1156 1296
			1444 1600 1764 1936 2116 2304 2500 2704 2916 3136
			3364 3600 3844 4096
		>;
		num-interpolated-steps = <64>;
		default-brightness-level = <951>;

		pwms = <&cros_ec_pwm 1>;
		enable-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>;
		power-supply = <&ppvar_sys>;
		pinctrl-names = "default";
		pinctrl-0 = <&ap_edp_bklten>;
	};

	gpio_keys: gpio-keys {
		compatible = "gpio-keys";
		status = "disabled";
		pinctrl-names = "default";
		pinctrl-0 = <&pen_pdct_l>;

		pen_insert: switch-pen-insert {
			label = "Pen Insert";

			/* Insert = low, eject = high */
			gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
			linux,code = <SW_PEN_INSERTED>;
			linux,input-type = <EV_SW>;
			wakeup-event-action = <EV_ACT_DEASSERTED>;
			wakeup-source;
		};
	};

	max98360a: audio-codec-0 {
		compatible = "maxim,max98360a";
		pinctrl-names = "default";
		pinctrl-0 = <&amp_en>;
		sdmode-gpios = <&tlmm 23 GPIO_ACTIVE_HIGH>;
		#sound-dai-cells = <0>;
	};

	pwmleds {
		compatible = "pwm-leds";
		keyboard_backlight: keyboard-backlight {
			status = "disabled";
			label = "cros_ec::kbd_backlight";
			function = LED_FUNCTION_KBD_BACKLIGHT;
			pwms = <&cros_ec_pwm 0>;
			max-brightness = <1023>;
		};
	};

	sound: sound {
		compatible = "google,sc7180-trogdor";
		model = "sc7180-rt5682-max98357a-1mic";

		audio-routing =
			"Headphone Jack", "HPOL",
			"Headphone Jack", "HPOR";

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

		dai-link@0 {
			link-name = "MultiMedia0";
			reg = <MI2S_PRIMARY>;
			cpu {
				sound-dai = <&lpass_cpu MI2S_PRIMARY>;
			};

			sound_multimedia0_codec: codec {
				sound-dai = <&alc5682 0 /* aif1 */>;
			};
		};

		dai-link@1 {
			link-name = "MultiMedia1";
			reg = <MI2S_SECONDARY>;
			cpu {
				sound-dai = <&lpass_cpu MI2S_SECONDARY>;
			};

			sound_multimedia1_codec: codec {
				sound-dai = <&max98360a>;
			};
		};

		dai-link@5 {
			link-name = "MultiMedia2";
			reg = <LPASS_DP_RX>;
			cpu {
				sound-dai = <&lpass_cpu LPASS_DP_RX>;
			};

			codec {
				sound-dai = <&mdss_dp>;
			};
		};
	};
};

&qfprom {
	vcc-supply = <&pp1800_l11a>;
};

&qspi {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&qspi_clk>, <&qspi_cs0>, <&qspi_data01>;

	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;

		spi-max-frequency = <37500000>;
		spi-tx-bus-width = <2>;
		spi-rx-bus-width = <2>;
	};
};

&apps_rsc {
	pm6150-rpmh-regulators {
		compatible = "qcom,pm6150-rpmh-regulators";
		qcom,pmic-id = "a";

		vddpx_1:
		vdd2:
		pp1125_s1a: smps1 {
			regulator-min-microvolt = <1128000>;
			regulator-max-microvolt = <1128000>;
		};

		vdd_qlink_lv:
		vdd_qlink_lv_ck:
		vdd_qusb_hs0_core:
		vdd_ufs1_core:
		vdda_mipi_csi0_0p9:
		vdda_mipi_csi1_0p9:
		vdda_mipi_csi2_0p9:
		vdda_mipi_csi3_0p9:
		vdda_mipi_dsi0_pll:
		vdda_pll_cc_ebi01:
		vdda_qrefs_0p9:
		vdda_usb_ss_dp_core:
		pp900_l4a: ldo4 {
			regulator-min-microvolt = <824000>;
			regulator-max-microvolt = <928000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vdd_cx_wlan:
		pp800_l9a: ldo9 {
			regulator-min-microvolt = <488000>;
			regulator-max-microvolt = <800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vdd1:
		vddpx_3:
		vddpx_7:
		vio_in:
		pp1800_l10a: ldo10 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vdd_qfprom:
		vdda_apc1_cs_1p8:
		vdda_qrefs_1p8:
		vdda_qusb_hs0_1p8:
		vddpx_11:
		vreg_bb_clk:
		pp1800_l11a: ldo11 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		mcp_vccq:
		pp1800_l12a_r: ldo12 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		/*
		 * On trogdor this needs to match l10a since we use it to
		 * give power to things like SPI flash which communicate back
		 * on lines powered by l10a.  Thus we force to 1.8V.
		 */
		pp1800_l13a: ldo13 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp1800_prox:
		pp1800_l14a: ldo14 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp1800_alc5682:
		pp1800_l15a: ldo15 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vdda_qusb_hs0_3p1:
		vdd_pdphy:
		pp3100_l17a: ldo17 {
			regulator-min-microvolt = <2920000>;
			regulator-max-microvolt = <3232000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp1800_pen:
		pp1800_l18a: ldo18 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		mcp_vcc:
		pp2850_l19a: ldo19 {
			regulator-min-microvolt = <2960000>;
			regulator-max-microvolt = <2960000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};
	};

	pm6150l-rpmh-regulators {
		compatible = "qcom,pm6150l-rpmh-regulators";
		qcom,pmic-id = "c";

		pp1300_s8c: smps8 {
			regulator-min-microvolt = <1120000>;
			regulator-max-microvolt = <1408000>;
		};

		pp1800_l1c: ldo1 {
			regulator-min-microvolt = <1616000>;
			regulator-max-microvolt = <1984000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vdd_wcss_adc_dac:
		pp1300_l2c: ldo2 {
			regulator-min-microvolt = <1168000>;
			regulator-max-microvolt = <1304000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp1200_brij:
		vdd_ufs1_1p2:
		vdda_csi0_1p25:
		vdda_csi1_1p25:
		vdda_csi2_1p25:
		vdda_csi3_1p25:
		vdda_hv_ebi0:
		vdda_mipi_dsi0_1p2:
		vdda_usb_ss_dp_1p2:
		vddpx_10:
		pp1200_l3c: ldo3 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vddpx_2:
		ppvar_l6c: ldo6 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2952000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp3300_l7c: ldo7 {
			regulator-min-microvolt = <3304000>;
			regulator-max-microvolt = <3304000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp1800_brij_vccio:
		pp1800_edp_vpll:
		pp1800_l8c: ldo8 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp2950_l9c: ldo9 {
			regulator-min-microvolt = <2952000>;
			regulator-max-microvolt = <2952000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp3300_l10c: ldo10 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3400000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		pp3300_l11c: ldo11 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3400000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		src_vreg_bob: bob {
			regulator-min-microvolt = <3008000>;
			regulator-max-microvolt = <3960000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
		};
	};
};

ap_ec_spi: &spi6 {
	status = "okay";
	cros_ec: ec@0 {
		compatible = "google,cros-ec-spi";
		reg = <0>;
		interrupt-parent = <&tlmm>;
		interrupts = <94 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&ap_ec_int_l>;
		spi-max-frequency = <3000000>;

		cros_ec_pwm: pwm {
			compatible = "google,cros-ec-pwm";
			#pwm-cells = <1>;
		};

		i2c_tunnel: i2c-tunnel {
			compatible = "google,cros-ec-i2c-tunnel";
			google,remote-bus = <0>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		typec {
			compatible = "google,cros-ec-typec";
			#address-cells = <1>;
			#size-cells = <0>;

			usb_c0: connector@0 {
				compatible = "usb-c-connector";
				reg = <0>;
				label = "left";
				power-role = "dual";
				data-role = "host";
				try-power-role = "source";
			};

			usb_c1: connector@1 {
				compatible = "usb-c-connector";
				reg = <1>;
				label = "right";
				power-role = "dual";
				data-role = "host";
				try-power-role = "source";
			};
		};
	};
};

ap_h1_spi: &spi0 {
	status = "okay";
	cr50: tpm@0 {
		compatible = "google,cr50";
		reg = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&h1_ap_int_odl>;
		spi-max-frequency = <800000>;
		interrupt-parent = <&tlmm>;
		interrupts = <42 IRQ_TYPE_EDGE_RISING>;
	};
};

&camcc {
	status = "disabled";
};

&dsi0 {
	status = "okay";
	vdda-supply = <&vdda_mipi_dsi0_1p2>;
};

&dsi0_out {
	data-lanes = <0 1 2 3>;
};

&dsi_phy {
	status = "okay";
	vdds-supply = <&vdda_mipi_dsi0_pll>;
};

ap_sar_sensor_i2c: &i2c5 {
	clock-frequency = <400000>;

	ap_sar_sensor: proximity@28 {
		compatible = "semtech,sx9310";
		reg = <0x28>;
		#io-channel-cells = <1>;
		pinctrl-names = "default";
		pinctrl-0 = <&p_sensor_int_l>;

		interrupt-parent = <&tlmm>;
		interrupts = <24 IRQ_TYPE_LEVEL_LOW>;

		vdd-supply = <&pp3300_a>;
		svdd-supply = <&pp1800_prox>;

		label = "proximity-wifi";
	};
};

ap_tp_i2c: &i2c7 {
	clock-frequency = <400000>;

	trackpad: trackpad@15 {
		compatible = "elan,ekth3000";
		reg = <0x15>;
		pinctrl-names = "default";
		pinctrl-0 = <&tp_int_odl>;

		interrupt-parent = <&tlmm>;
		interrupts = <0 IRQ_TYPE_EDGE_FALLING>;

		vcc-supply = <&pp3300_fp_tp>;

		wakeup-source;
	};
};

hp_i2c: &i2c9 {
	status = "okay";
	clock-frequency = <400000>;

	alc5682: codec@1a {
		compatible = "realtek,rt5682i";
		reg = <0x1a>;
		pinctrl-names = "default";
		pinctrl-0 = <&hp_irq>;

		#sound-dai-cells = <1>;

		interrupt-parent = <&tlmm>;
		/*
		 * This will get ignored because the interrupt type
		 * is set in rt5682.c.
		 */
		interrupts = <28 IRQ_TYPE_EDGE_BOTH>;

		AVDD-supply = <&pp1800_alc5682>;
		MICVDD-supply = <&pp3300_codec>;
		VBAT-supply = <&pp3300_audio>;

		realtek,dmic1-data-pin = <1>;
		realtek,dmic1-clk-pin = <1>;
		realtek,jd-src = <1>;
	};
};

&lpass_cpu {
	status = "okay";

	pinctrl-names = "default";
	pinctrl-0 = <&sec_mi2s_active>, <&pri_mi2s_active>, <&pri_mi2s_mclk_active>;

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

	mi2s@0 {
		reg = <MI2S_PRIMARY>;
		qcom,playback-sd-lines = <1>;
		qcom,capture-sd-lines = <0>;
	};

	secondary_mi2s: mi2s@1 {
		reg = <MI2S_SECONDARY>;
		qcom,playback-sd-lines = <0>;
	};

	hdmi@5 {
		reg = <LPASS_DP_RX>;
	};
};

&mdp {
	status = "okay";
};

&mdss {
	status = "okay";
};

&mdss_dp {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&dp_hot_plug_det>;
	data-lanes = <0 1>;
};

&pm6150_adc {
	charger-thermistor@4f {
		reg = <ADC5_AMUX_THM3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};
};

&pm6150_adc_tm {
	status = "okay";

	charger-thermistor@0 {
		reg = <0>;
		io-channels = <&pm6150_adc ADC5_AMUX_THM3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};
};

&pm6150_pon {
	status = "disabled";
};

&qupv3_id_0 {
	status = "okay";
};

&qupv3_id_1 {
	status = "okay";
};

&remoteproc_mpss {
	status = "okay";
	compatible = "qcom,sc7180-mss-pil";
	iommus = <&apps_smmu 0x461 0x0>, <&apps_smmu 0x444 0x3>;
	memory-region = <&mba_mem &mpss_mem>;

	/* This gets overridden for SKUs with LTE support. */
	firmware-name = "qcom/sc7180-trogdor/modem-nolte/mba.mbn",
			"qcom/sc7180-trogdor/modem-nolte/qdsp6sw.mbn";
};

&sdhc_1 {
	status = "okay";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_on>;
	pinctrl-1 = <&sdc1_off>;
	vmmc-supply = <&mcp_vcc>;
	vqmmc-supply = <&mcp_vccq>;
};

&sdhc_2 {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_on>;
	pinctrl-1 = <&sdc2_off>;
	vmmc-supply = <&pp2950_l9c>;
	vqmmc-supply = <&ppvar_l6c>;

	cd-gpios = <&tlmm 69 GPIO_ACTIVE_LOW>;
};

&spi0 {
	pinctrl-0 = <&qup_spi0_cs_gpio_init_high>, <&qup_spi0_cs_gpio>;
	cs-gpios = <&tlmm 37 GPIO_ACTIVE_LOW>;
};

&spi6 {
	pinctrl-0 = <&qup_spi6_cs_gpio_init_high>, <&qup_spi6_cs_gpio>;
	cs-gpios = <&tlmm 62 GPIO_ACTIVE_LOW>;
};

ap_spi_fp: &spi10 {
	pinctrl-0 = <&qup_spi10_cs_gpio_init_high>, <&qup_spi10_cs_gpio>;
	cs-gpios = <&tlmm 89 GPIO_ACTIVE_LOW>;

	cros_ec_fp: ec@0 {
		compatible = "google,cros-ec-spi";
		reg = <0>;
		interrupt-parent = <&tlmm>;
		interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&fp_to_ap_irq_l>;
		spi-max-frequency = <3000000>;
	};
};

#include <arm/cros-ec-sbs.dtsi>

&uart3 {
	status = "okay";

	/delete-property/interrupts;
	interrupts-extended = <&intc GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>,
				<&tlmm 41 IRQ_TYPE_EDGE_FALLING>;

	pinctrl-names = "default", "sleep";
	pinctrl-1 = <&qup_uart3_sleep>;

	bluetooth: bluetooth {
		compatible = "qcom,wcn3991-bt";
		vddio-supply = <&pp1800_l10a>;
		vddxo-supply = <&pp1800_l1c>;
		vddrf-supply = <&pp1300_l2c>;
		vddch0-supply = <&pp3300_l10c>;
		max-speed = <3200000>;
	};
};

&uart8 {
	status = "okay";
};

&usb_1 {
	status = "okay";
};

&usb_1_dwc3 {
	dr_mode = "host";
};

&usb_1_hsphy {
	status = "okay";
	vdd-supply = <&vdd_qusb_hs0_core>;
	vdda-pll-supply = <&vdda_qusb_hs0_1p8>;
	vdda-phy-dpdm-supply = <&vdda_qusb_hs0_3p1>;
	qcom,imp-res-offset-value = <8>;
	qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_15_PERCENT>;
	qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>;
	qcom,bias-ctrl-value = <0x22>;
	qcom,charge-ctrl-value = <3>;
	qcom,hsdisc-trim-value = <0>;
};

&usb_1_qmpphy {
	status = "okay";
	vdda-phy-supply = <&vdda_usb_ss_dp_1p2>;
	vdda-pll-supply = <&vdda_usb_ss_dp_core>;
};

&venus {
	video-firmware {
		iommus = <&apps_smmu 0x0c42 0x0>;
	};
};

&wifi {
	status = "okay";
	vdd-0.8-cx-mx-supply = <&vdd_cx_wlan>;
	vdd-1.8-xo-supply = <&pp1800_l1c>;
	vdd-1.3-rfa-supply = <&pp1300_l2c>;
	vdd-3.3-ch0-supply = <&pp3300_l10c>;
	vdd-3.3-ch1-supply = <&pp3300_l11c>;

	wifi-firmware {
		iommus = <&apps_smmu 0xc2 0x1>;
	};
};

/* PINCTRL - additions to nodes defined in sc7180.dtsi */

&dp_hot_plug_det {
	pinconf {
		pins = "gpio117";
		bias-disable;
	};
};

&pri_mi2s_active {
	pinconf {
		pins = "gpio53", "gpio54", "gpio55", "gpio56";
		drive-strength = <2>;
		bias-pull-down;
	};
};

&pri_mi2s_mclk_active {
	pinconf {
		pins = "gpio57";
		drive-strength = <2>;
		bias-pull-down;
	};
};

&qspi_cs0 {
	pinconf {
		pins = "gpio68";
		bias-disable;
	};
};

&qspi_clk {
	pinconf {
		pins = "gpio63";
		drive-strength = <8>;
		bias-disable;
	};
};

&qspi_data01 {
	pinconf {
		pins = "gpio64", "gpio65";

		/* High-Z when no transfers; nice to park the lines */
		bias-pull-up;
	};
};

&qup_i2c2_default {
	pinconf {
		pins = "gpio15", "gpio16";
		drive-strength = <2>;

		/* Has external pullup */
		bias-disable;
	};
};

&qup_i2c4_default {
	pinconf {
		pins = "gpio115", "gpio116";
		drive-strength = <2>;

		/* Has external pullup */
		bias-disable;
	};
};

&qup_i2c5_default {
	pinconf {
		pins = "gpio25", "gpio26";
		drive-strength = <2>;

		/* Has external pullup */
		bias-disable;
	};
};

&qup_i2c7_default {
	pinconf {
		pins = "gpio6", "gpio7";
		drive-strength = <2>;

		/* Has external pullup */
		bias-disable;
	};
};

&qup_i2c9_default {
	pinconf {
		pins = "gpio46", "gpio47";
		drive-strength = <2>;

		/* Has external pullup */
		bias-disable;
	};
};

&qup_spi0_cs_gpio {
	pinconf {
		pins = "gpio34", "gpio35", "gpio36", "gpio37";
		drive-strength = <2>;
		bias-disable;
	};
};

&qup_spi6_cs_gpio {
	pinconf {
		pins = "gpio59", "gpio60", "gpio61", "gpio62";
		drive-strength = <2>;
		bias-disable;
	};
};

&qup_spi10_cs_gpio {
	pinconf {
		pins = "gpio86", "gpio87", "gpio88", "gpio89";
		drive-strength = <2>;
		bias-disable;
	};
};

&qup_uart3_default {
	pinconf-cts {
		/*
		 * Configure a pull-down on CTS to match the pull of
		 * the Bluetooth module.
		 */
		pins = "gpio38";
		bias-pull-down;
	};

	pinconf-rts-tx {
		/* We'll drive RTS and TX, so no pull */
		pins = "gpio39", "gpio40";
		drive-strength = <2>;
		bias-disable;
	};

	pinconf-rx {
		/*
		 * Configure a pull-up on RX. This is needed to avoid
		 * garbage data when the TX pin of the Bluetooth module is
		 * in tri-state (module powered off or not driving the
		 * signal yet).
		 */
		pins = "gpio41";
		bias-pull-up;
	};
};

&qup_uart8_default {
	pinconf-tx {
		pins = "gpio44";
		drive-strength = <2>;
		bias-disable;
	};

	pinconf-rx {
		pins = "gpio45";
		drive-strength = <2>;
		bias-pull-up;
	};
};

&sec_mi2s_active {
	pinconf {
		pins = "gpio49", "gpio50", "gpio51";
		drive-strength = <2>;
		bias-pull-down;
	};
};

/* PINCTRL - board-specific pinctrl */

&pm6150_gpio {
	status = "disabled"; /* No GPIOs are connected */
};

&pm6150l_gpio {
	gpio-line-names = "AP_SUSPEND",
			  "",
			  "",
			  "",
			  "",
			  "",
			  "",
			  "",
			  "",
			  "",
			  "",
			  "";
};

&tlmm {
	/*
	 * pinctrl settings for pins that have no real owners.
	 */
	pinctrl-names = "default";
	pinctrl-0 = <&bios_flash_wp_l>, <&ap_suspend_l_neuter>;

	amp_en: amp-en {
		pinmux {
			pins = "gpio23";
			function = "gpio";
		};

		pinconf {
			pins = "gpio23";
			bias-pull-down;
		};
	};

	ap_ec_int_l: ap-ec-int-l {
		pinmux {
			pins = "gpio94";
			function = "gpio";
			input-enable;
		};

		pinconf {
			pins = "gpio94";
			bias-pull-up;
		};
	};

	ap_edp_bklten: ap-edp-bklten {
		pinmux {
			pins = "gpio12";
			function = "gpio";
		};

		pinconf {
			pins = "gpio12";
			drive-strength = <2>;
			bias-disable;

			/* Force backlight to be disabled to match state at boot. */
			output-low;
		};
	};

	ap_suspend_l_neuter: ap-suspend-l-neuter {
		pinmux  {
			pins = "gpio27";
			function = "gpio";
		};

		pinconf {
			pins = "gpio27";
			bias-disable;
		};
	};

	bios_flash_wp_l: bios-flash-wp-l {
		pinmux {
			pins = "gpio66";
			function = "gpio";
			input-enable;
		};

		pinconf {
			pins = "gpio66";
			bias-disable;
		};
	};

	edp_brij_en: edp-brij-en {
		pinmux {
			pins = "gpio104";
			function = "gpio";
		};

		pinconf {
			pins = "gpio104";
			drive-strength = <2>;
			bias-disable;
		};
	};

	en_pp3300_codec: en-pp3300-codec {
		pinmux {
			pins = "gpio83";
			function = "gpio";
		};

		pinconf {
			pins = "gpio83";
			drive-strength = <2>;
			bias-disable;
		};
	};

	en_pp3300_dx_edp: en-pp3300-dx-edp {
		pinmux {
			pins = "gpio30";
			function = "gpio";
		};

		pinconf {
			pins = "gpio30";
			drive-strength = <2>;
			bias-disable;
		};
	};

	en_pp3300_hub: en-pp3300-hub {
		pinmux {
			pins = "gpio84";
			function = "gpio";
		};

		pinconf {
			pins = "gpio84";
			drive-strength = <2>;
			bias-disable;
		};
	};

	fp_to_ap_irq_l: fp-to-ap-irq-l {
		pinmux {
			pins = "gpio4";
			function = "gpio";
			input-enable;
		};

		pinconf {
			pins = "gpio4";

			/* Has external pullup */
			bias-disable;
		};
	};

	h1_ap_int_odl: h1-ap-int-odl {
		pinmux {
			pins = "gpio42";
			function = "gpio";
			input-enable;
		};

		pinconf {
			pins = "gpio42";
			bias-pull-up;
		};
	};

	hp_irq: hp-irq {
		pinmux {
			pins = "gpio28";
			function = "gpio";
		};

		pinconf {
			pins = "gpio28";
			bias-pull-up;
		};
	};

	pen_irq_l: pen-irq-l {
		pinmux {
			pins = "gpio21";
			function = "gpio";
		};

		pinconf {
			pins = "gpio21";

			/* Has external pullup */
			bias-disable;
		};
	};

	pen_pdct_l: pen-pdct-l {
		pinmux {
			pins = "gpio52";
			function = "gpio";
		};

		pinconf {
			pins = "gpio52";

			/* Has external pullup */
			bias-disable;
		};
	};

	pen_rst_odl: pen-rst-odl {
		pinmux  {
			pins = "gpio18";
			function = "gpio";
		};

		pinconf {
			pins = "gpio18";
			bias-disable;
			drive-strength = <2>;

			/*
			 * The pen driver doesn't currently support
			 * driving this reset line.  By specifying
			 * output-high here we're relying on the fact
			 * that this pin has a default pulldown at boot
			 * (which makes sure the pen was in reset if it
			 * was powered) and then we set it high here to
			 * take it out of reset.  Better would be if the
			 * pen driver could control this and we could
			 * remove "output-high" here.
			 */
			output-high; /* TODO: Remove this? */
		};
	};

	p_sensor_int_l: p-sensor-int-l {
		pinmux {
			pins = "gpio24";
			function = "gpio";
			input-enable;
		};

		pinconf {
			pins = "gpio24";
			/* Has external pullup */
			bias-disable;
		};
	};

	qup_spi0_cs_gpio_init_high: qup-spi0-cs-gpio-init-high {
		pinconf {
			pins = "gpio37";
			output-high;
		};
	};

	qup_spi6_cs_gpio_init_high: qup-spi6-cs-gpio-init-high {
		pinconf {
			pins = "gpio62";
			output-high;
		};
	};

	qup_spi10_cs_gpio_init_high: qup-spi10-cs-gpio-init-high {
		pinconf {
			pins = "gpio89";
			output-high;
		};
	};

	qup_uart3_sleep: qup-uart3-sleep {
		pinmux {
			pins = "gpio38", "gpio39",
			       "gpio40", "gpio41";
			function = "gpio";
		};

		pinconf-cts {
			/*
			 * Configure a pull-down on CTS to match the pull of
			 * the Bluetooth module.
			 */
			pins = "gpio38";
			bias-pull-down;
		};

		pinconf-rts {
			/*
			 * Configure pull-down on RTS. As RTS is active low
			 * signal, pull it low to indicate the BT SoC that it
			 * can wakeup the system anytime from suspend state by
			 * pulling RX low (by sending wakeup bytes).
			 */
			 pins = "gpio39";
			 bias-pull-down;
		};

		pinconf-tx {
			/*
			 * Configure pull-up on TX when it isn't actively driven
			 * to prevent BT SoC from receiving garbage during sleep.
			 */
			pins = "gpio40";
			bias-pull-up;
		};

		pinconf-rx {
			/*
			 * Configure a pull-up on RX. This is needed to avoid
			 * garbage data when the TX pin of the Bluetooth module
			 * is floating which may cause spurious wakeups.
			 */
			pins = "gpio41";
			bias-pull-up;
		};
	};

	/* Named trackpad_int_1v8_odl on earlier revision schematics */
	trackpad_int_1v8_odl:
	tp_int_odl: tp-int-odl {
		pinmux {
			pins = "gpio0";
			function = "gpio";
		};

		pinconf {
			pins = "gpio0";

			/* Has external pullup */
			bias-disable;
		};
	};

	ts_int_l: ts-int-l {
		pinmux  {
			pins = "gpio9";
			function = "gpio";
		};

		pinconf {
			pins = "gpio9";
			bias-pull-up;
		};
	};

	ts_reset_l: ts-reset-l {
		pinmux  {
			pins = "gpio8";
			function = "gpio";
		};

		pinconf {
			pins = "gpio8";
			bias-disable;
			drive-strength = <2>;
		};
	};

	sdc1_on: sdc1-on {
		pinconf-clk {
			pins = "sdc1_clk";
			bias-disable;
			drive-strength = <16>;
		};

		pinconf-cmd {
			pins = "sdc1_cmd";
			bias-pull-up;
			drive-strength = <16>;
		};

		pinconf-data {
			pins = "sdc1_data";
			bias-pull-up;
			drive-strength = <16>;
		};

		pinconf-rclk {
			pins = "sdc1_rclk";
			bias-pull-down;
		};
	};

	sdc1_off: sdc1-off {
		pinconf-clk {
			pins = "sdc1_clk";
			bias-disable;
			drive-strength = <2>;
		};

		pinconf-cmd {
			pins = "sdc1_cmd";
			bias-pull-up;
			drive-strength = <2>;
		};

		pinconf-data {
			pins = "sdc1_data";
			bias-pull-up;
			drive-strength = <2>;
		};

		pinconf-rclk {
			pins = "sdc1_rclk";
			bias-pull-down;
		};
	};

	sdc2_on: sdc2-on {
		pinconf-clk {
			pins = "sdc2_clk";
			bias-disable;
			drive-strength = <16>;
		};

		pinconf-cmd {
			pins = "sdc2_cmd";
			bias-pull-up;
			drive-strength = <10>;
		};

		pinconf-data {
			pins = "sdc2_data";
			bias-pull-up;
			drive-strength = <10>;
		};

		pinconf-sd-cd {
			pins = "gpio69";
			bias-pull-up;
			drive-strength = <2>;
		};
	};

	sdc2_off: sdc2-off {
		pinconf-clk {
			pins = "sdc2_clk";
			bias-disable;
			drive-strength = <2>;
		};

		pinconf-cmd {
			pins = "sdc2_cmd";
			bias-pull-up;
			drive-strength = <2>;
		};

		pinconf-data {
			pins = "sdc2_data";
			bias-pull-up;
			drive-strength = <2>;
		};

		pinconf-sd-cd {
			pins = "gpio69";
			bias-pull-up;
			drive-strength = <2>;
		};
	};

	uf_cam_en: uf-cam-en {
		pinmux {
			pins = "gpio6";
			function = "gpio";
		};

		pinconf {
			pins = "gpio6";
			drive-strength = <2>;
			/* External pull down */
			bias-disable;
		};
	};

	wf_cam_en: wf-cam-en {
		pinmux {
			pins = "gpio7";
			function = "gpio";
		};

		pinconf {
			pins = "gpio7";
			drive-strength = <2>;
			/* External pull down */
			bias-disable;
		};
	};
};