// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
 * Copyright (c) 2022, Linaro Limited
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
#include <dt-bindings/iio/qcom,spmi-adc7-pmk8350.h>
#include <dt-bindings/iio/qcom,spmi-adc7-pmr735a.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 "sc8280xp.dtsi"
#include "sc8280xp-pmics.dtsi"

/ {
	model = "Lenovo ThinkPad X13s";
	compatible = "lenovo,thinkpad-x13s", "qcom,sc8280xp";

	aliases {
		i2c4 = &i2c4;
		i2c21 = &i2c21;
		serial1 = &uart2;
	};

	wcd938x: audio-codec {
		compatible = "qcom,wcd9380-codec";

		pinctrl-names = "default";
		pinctrl-0 = <&wcd_default>;

		reset-gpios = <&tlmm 106 GPIO_ACTIVE_LOW>;

		vdd-buck-supply = <&vreg_s10b>;
		vdd-rxtx-supply = <&vreg_s10b>;
		vdd-io-supply = <&vreg_s10b>;
		vdd-mic-bias-supply = <&vreg_bob>;

		qcom,micbias1-microvolt = <1800000>;
		qcom,micbias2-microvolt = <1800000>;
		qcom,micbias3-microvolt = <1800000>;
		qcom,micbias4-microvolt = <1800000>;
		qcom,mbhc-buttons-vthreshold-microvolt = <75000 150000 237000 500000 500000 500000 500000 500000>;
		qcom,mbhc-headset-vthreshold-microvolt = <1700000>;
		qcom,mbhc-headphone-vthreshold-microvolt = <50000>;
		qcom,rx-device = <&wcd_rx>;
		qcom,tx-device = <&wcd_tx>;

		#sound-dai-cells = <1>;
	};

	backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pmc8280c_lpg 3 1000000>;
		enable-gpios = <&pmc8280_1_gpios 8 GPIO_ACTIVE_HIGH>;
		power-supply = <&vreg_edp_bl>;

		pinctrl-names = "default";
		pinctrl-0 = <&edp_bl_en>, <&edp_bl_pwm>;
	};

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

		pinctrl-names = "default";
		pinctrl-0 = <&hall_int_n_default>;

		switch-lid {
			gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_LID>;
			wakeup-source;
			wakeup-event-action = <EV_ACT_DEASSERTED>;
		};
	};

	leds {
		compatible = "gpio-leds";

		led-camera-indicator {
			label = "white:camera-indicator";
			function = LED_FUNCTION_INDICATOR;
			color = <LED_COLOR_ID_WHITE>;
			gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "none";
			default-state = "off";
			/* Reuse as a panic indicator until we get a "camera on" trigger */
			panic-indicator;
		};
	};

	pmic-glink {
		compatible = "qcom,sc8280xp-pmic-glink", "qcom,pmic-glink";

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

		connector@0 {
			compatible = "usb-c-connector";
			reg = <0>;
			power-role = "dual";
			data-role = "dual";

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

				port@0 {
					reg = <0>;

					pmic_glink_con0_hs: endpoint {
						remote-endpoint = <&usb_0_role_switch>;
					};
				};

				port@1 {
					reg = <1>;

					pmic_glink_con0_ss: endpoint {
						remote-endpoint = <&usb_0_qmpphy_out>;
					};
				};

				port@2 {
					reg = <2>;

					pmic_glink_con0_sbu: endpoint {
						remote-endpoint = <&usb0_sbu_mux>;
					};
				};
			};
		};

		connector@1 {
			compatible = "usb-c-connector";
			reg = <1>;
			power-role = "dual";
			data-role = "dual";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;

					pmic_glink_con1_hs: endpoint {
						remote-endpoint = <&usb_1_role_switch>;
					};
				};

				port@1 {
					reg = <1>;

					pmic_glink_con1_ss: endpoint {
						remote-endpoint = <&usb_1_qmpphy_out>;
					};
				};

				port@2 {
					reg = <2>;

					pmic_glink_con1_sbu: endpoint {
						remote-endpoint = <&usb1_sbu_mux>;
					};
				};
			};
		};
	};

	vreg_edp_3p3: regulator-edp-3p3 {
		compatible = "regulator-fixed";

		regulator-name = "VCC3LCD";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&tlmm 25 GPIO_ACTIVE_HIGH>;
		enable-active-high;

		pinctrl-names = "default";
		pinctrl-0 = <&edp_reg_en>;

		regulator-boot-on;
	};

	vreg_edp_bl: regulator-edp-bl {
		compatible = "regulator-fixed";

		regulator-name = "VBL9";
		regulator-min-microvolt = <3600000>;
		regulator-max-microvolt = <3600000>;

		gpio = <&pmc8280_1_gpios 9 GPIO_ACTIVE_HIGH>;
		enable-active-high;

		pinctrl-names = "default";
		pinctrl-0 = <&edp_bl_reg_en>;

		regulator-boot-on;
	};

	vreg_misc_3p3: regulator-misc-3p3 {
		compatible = "regulator-fixed";

		regulator-name = "VCC3B";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&pmc8280_1_gpios 1 GPIO_ACTIVE_HIGH>;
		enable-active-high;

		pinctrl-names = "default";
		pinctrl-0 = <&misc_3p3_reg_en>;

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

	vreg_nvme: regulator-nvme {
		compatible = "regulator-fixed";

		regulator-name = "VCC3_SSD";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&tlmm 135 GPIO_ACTIVE_HIGH>;
		enable-active-high;

		pinctrl-names = "default";
		pinctrl-0 = <&nvme_reg_en>;

		regulator-boot-on;
	};

	vreg_vph_pwr: regulator-vph-pwr {
		compatible = "regulator-fixed";

		regulator-name = "VPH_VCC3R9";
		regulator-min-microvolt = <3900000>;
		regulator-max-microvolt = <3900000>;

		regulator-always-on;
	};

	vreg_wlan: regulator-wlan {
		compatible = "regulator-fixed";

		regulator-name = "VCC_WLAN_3R9";
		regulator-min-microvolt = <3900000>;
		regulator-max-microvolt = <3900000>;

		gpio = <&pmr735a_gpios 1 GPIO_ACTIVE_HIGH>;
		enable-active-high;

		pinctrl-names = "default";
		pinctrl-0 = <&hastings_reg_en>;

		regulator-boot-on;
	};

	vreg_wwan: regulator-wwan {
		compatible = "regulator-fixed";

		regulator-name = "VCC3B_WAN";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&pmc8280_2_gpios 1 GPIO_ACTIVE_HIGH>;
		enable-active-high;

		pinctrl-names = "default";
		pinctrl-0 = <&wwan_sw_en>;

		regulator-boot-on;
	};

	reserved-memory {
		gpu_mem: gpu-mem@8bf00000 {
			reg = <0 0x8bf00000 0 0x2000>;
			no-map;
		};

		linux,cma {
			compatible = "shared-dma-pool";
			size = <0x0 0x8000000>;
			reusable;
			linux,cma-default;
		};
	};

	thermal-zones {
		skin-temp-thermal {
			polling-delay-passive = <250>;
			polling-delay = <0>;
			thermal-sensors = <&pmk8280_adc_tm 5>;

			trips {
				skin_temp_alert0: trip-point0 {
					temperature = <55000>;
					hysteresis = <1000>;
					type = "passive";
				};

				skin_temp_alert1: trip-point1 {
					temperature = <58000>;
					hysteresis = <1000>;
					type = "passive";
				};

				skin-temp-crit {
					temperature = <73000>;
					hysteresis = <1000>;
					type = "critical";
				};
			};

			cooling-maps {
				map0 {
					trip = <&skin_temp_alert0>;
					cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							 <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							 <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							 <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};

				map1 {
					trip = <&skin_temp_alert1>;
					cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							 <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							 <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							 <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};
			};
		};
	};

	usb0-sbu-mux {
		compatible = "pericom,pi3usb102", "gpio-sbu-mux";

		enable-gpios = <&tlmm 101 GPIO_ACTIVE_LOW>;
		select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>;

		pinctrl-names = "default";
		pinctrl-0 = <&usb0_sbu_default>;

		mode-switch;
		orientation-switch;

		port {
			usb0_sbu_mux: endpoint {
				remote-endpoint = <&pmic_glink_con0_sbu>;
			};
		};
	};

	usb1-sbu-mux {
		compatible = "pericom,pi3usb102", "gpio-sbu-mux";

		enable-gpios = <&tlmm 48 GPIO_ACTIVE_LOW>;
		select-gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;

		pinctrl-names = "default";
		pinctrl-0 = <&usb1_sbu_default>;

		mode-switch;
		orientation-switch;

		port {
			usb1_sbu_mux: endpoint {
				remote-endpoint = <&pmic_glink_con1_sbu>;
			};
		};
	};
};

&apps_rsc {
	regulators-0 {
		compatible = "qcom,pm8350-rpmh-regulators";
		qcom,pmic-id = "b";

		vdd-l1-l4-supply = <&vreg_s12b>;
		vdd-l2-l7-supply = <&vreg_bob>;
		vdd-l3-l5-supply = <&vreg_s11b>;
		vdd-l6-l9-l10-supply = <&vreg_s12b>;
		vdd-l8-supply = <&vreg_s12b>;

		vreg_s10b: smps10 {
			regulator-name = "vreg_s10b";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-always-on;
		};

		vreg_s11b: smps11 {
			regulator-name = "vreg_s11b";
			regulator-min-microvolt = <1272000>;
			regulator-max-microvolt = <1272000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-always-on;
		};

		vreg_s12b: smps12 {
			regulator-name = "vreg_s12b";
			regulator-min-microvolt = <984000>;
			regulator-max-microvolt = <984000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-always-on;
		};

		vreg_l3b: ldo3 {
			regulator-name = "vreg_l3b";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-boot-on;
		};

		vreg_l4b: ldo4 {
			regulator-name = "vreg_l4b";
			regulator-min-microvolt = <912000>;
			regulator-max-microvolt = <912000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l6b: ldo6 {
			regulator-name = "vreg_l6b";
			regulator-min-microvolt = <880000>;
			regulator-max-microvolt = <880000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-boot-on;
		};
	};

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

		vdd-bob-supply = <&vreg_vph_pwr>;
		vdd-l1-l12-supply = <&vreg_s1c>;
		vdd-l2-l8-supply = <&vreg_s1c>;
		vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob>;
		vdd-l6-l9-l11-supply = <&vreg_bob>;
		vdd-l10-supply = <&vreg_s11b>;

		vreg_s1c: smps1 {
			regulator-name = "vreg_s1c";
			regulator-min-microvolt = <1880000>;
			regulator-max-microvolt = <1900000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-always-on;
		};

		vreg_l1c: ldo1 {
			regulator-name = "vreg_l1c";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l12c: ldo12 {
			regulator-name = "vreg_l12c";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l13c: ldo13 {
			regulator-name = "vreg_l13c";
			regulator-min-microvolt = <3072000>;
			regulator-max-microvolt = <3072000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_bob: bob {
			regulator-name = "vreg_bob";
			regulator-min-microvolt = <3008000>;
			regulator-max-microvolt = <3960000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
			regulator-always-on;
		};
	};

	regulators-2 {
		compatible = "qcom,pm8350-rpmh-regulators";
		qcom,pmic-id = "d";

		vdd-l1-l4-supply = <&vreg_s11b>;
		vdd-l2-l7-supply = <&vreg_bob>;
		vdd-l3-l5-supply = <&vreg_s11b>;
		vdd-l6-l9-l10-supply = <&vreg_s12b>;
		vdd-l8-supply = <&vreg_s12b>;

		vreg_l3d: ldo3 {
			regulator-name = "vreg_l3d";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l4d: ldo4 {
			regulator-name = "vreg_l4d";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l6d: ldo6 {
			regulator-name = "vreg_l6d";
			regulator-min-microvolt = <880000>;
			regulator-max-microvolt = <880000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l7d: ldo7 {
			regulator-name = "vreg_l7d";
			regulator-min-microvolt = <3072000>;
			regulator-max-microvolt = <3072000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l9d: ldo9 {
			regulator-name = "vreg_l9d";
			regulator-min-microvolt = <912000>;
			regulator-max-microvolt = <912000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};
	};
};

&dispcc0 {
	status = "okay";
};

&gpu {
	status = "okay";

	zap-shader {
		memory-region = <&gpu_mem>;
		firmware-name = "qcom/sc8280xp/LENOVO/21BX/qcdxkmsuc8280.mbn";
	};
};

&mdss0 {
	status = "okay";
};

&mdss0_dp0 {
	status = "okay";
};

&mdss0_dp0_out {
	data-lanes = <0 1>;
	remote-endpoint = <&usb_0_qmpphy_dp_in>;
};

&mdss0_dp1 {
	status = "okay";
};

&mdss0_dp1_out {
	data-lanes = <0 1>;
	remote-endpoint = <&usb_1_qmpphy_dp_in>;
};

&mdss0_dp3 {
	compatible = "qcom,sc8280xp-edp";

	data-lanes = <0 1 2 3>;

	status = "okay";

	aux-bus {
		panel {
			compatible = "edp-panel";

			backlight = <&backlight>;
			power-supply = <&vreg_edp_3p3>;

			port {
				edp_panel_in: endpoint {
					remote-endpoint = <&mdss0_dp3_out>;
				};
			};
		};
	};

	ports {
		port@1 {
			reg = <1>;
			mdss0_dp3_out: endpoint {
				remote-endpoint = <&edp_panel_in>;
			};
		};
	};
};

&mdss0_dp3_phy {
	vdda-phy-supply = <&vreg_l6b>;
	vdda-pll-supply = <&vreg_l3b>;

	status = "okay";
};

&i2c4 {
	clock-frequency = <400000>;

	pinctrl-names = "default";
	pinctrl-0 = <&i2c4_default>;

	status = "okay";

	/* FIXME: verify */
	touchscreen@10 {
		compatible = "hid-over-i2c";
		reg = <0x10>;

		hid-descr-addr = <0x1>;
		interrupts-extended = <&tlmm 175 IRQ_TYPE_LEVEL_LOW>;
		vdd-supply = <&vreg_misc_3p3>;
		vddl-supply = <&vreg_s10b>;

		pinctrl-names = "default";
		pinctrl-0 = <&ts0_default>;
	};
};

&i2c21 {
	clock-frequency = <400000>;

	pinctrl-names = "default";
	pinctrl-0 = <&i2c21_default>, <&tpad_default>;

	status = "okay";

	touchpad@15 {
		compatible = "hid-over-i2c";
		reg = <0x15>;

		hid-descr-addr = <0x1>;
		interrupts-extended = <&tlmm 182 IRQ_TYPE_LEVEL_LOW>;
		vdd-supply = <&vreg_misc_3p3>;
		vddl-supply = <&vreg_s10b>;

		wakeup-source;
	};

	touchpad@2c {
		compatible = "hid-over-i2c";
		reg = <0x2c>;

		hid-descr-addr = <0x20>;
		interrupts-extended = <&tlmm 182 IRQ_TYPE_LEVEL_LOW>;
		vdd-supply = <&vreg_misc_3p3>;
		vddl-supply = <&vreg_s10b>;

		wakeup-source;
	};

	keyboard@68 {
		compatible = "hid-over-i2c";
		reg = <0x68>;

		hid-descr-addr = <0x1>;
		interrupts-extended = <&tlmm 104 IRQ_TYPE_LEVEL_LOW>;
		vdd-supply = <&vreg_misc_3p3>;
		vddl-supply = <&vreg_s10b>;

		pinctrl-names = "default";
		pinctrl-0 = <&kybd_default>;

		wakeup-source;
	};
};

&pcie2a {
	perst-gpios = <&tlmm 143 GPIO_ACTIVE_LOW>;
	wake-gpios = <&tlmm 145 GPIO_ACTIVE_LOW>;

	vddpe-3v3-supply = <&vreg_nvme>;

	pinctrl-names = "default";
	pinctrl-0 = <&pcie2a_default>;

	status = "okay";
};

&pcie2a_phy {
	vdda-phy-supply = <&vreg_l6d>;
	vdda-pll-supply = <&vreg_l4d>;

	status = "okay";
};

&pcie3a {
	perst-gpios = <&tlmm 151 GPIO_ACTIVE_LOW>;
	wake-gpios = <&tlmm 148 GPIO_ACTIVE_LOW>;

	vddpe-3v3-supply = <&vreg_wwan>;

	pinctrl-names = "default";
	pinctrl-0 = <&pcie3a_default>;

	status = "okay";
};

&pcie3a_phy {
	vdda-phy-supply = <&vreg_l6d>;
	vdda-pll-supply = <&vreg_l4d>;

	status = "okay";
};

&pcie4 {
	perst-gpios = <&tlmm 141 GPIO_ACTIVE_LOW>;
	wake-gpios = <&tlmm 139 GPIO_ACTIVE_LOW>;

	vddpe-3v3-supply = <&vreg_wlan>;

	pinctrl-names = "default";
	pinctrl-0 = <&pcie4_default>;

	status = "okay";

	pcie@0 {
		device_type = "pci";
		reg = <0x0 0x0 0x0 0x0 0x0>;
		#address-cells = <3>;
		#size-cells = <2>;
		ranges;

		bus-range = <0x01 0xff>;

		wifi@0 {
			compatible = "pci17cb,1103";
			reg = <0x10000 0x0 0x0 0x0 0x0>;

			qcom,ath11k-calibration-variant = "LE_X13S";
		};
	};
};

&pcie4_phy {
	vdda-phy-supply = <&vreg_l6d>;
	vdda-pll-supply = <&vreg_l4d>;

	status = "okay";
};

&pmc8280c_lpg {
	status = "okay";
};

&pmk8280_adc_tm {
	status = "okay";

	sys-therm@0 {
		reg = <0>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@1 {
		reg = <1>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@2 {
		reg = <2>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@3 {
		reg = <3>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@4 {
		reg = <4>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM1_100K_PU(3)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@5 {
		reg = <5>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM2_100K_PU(3)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@6 {
		reg = <6>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM3_100K_PU(3)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};

	sys-therm@7 {
		reg = <7>;
		io-channels = <&pmk8280_vadc PM8350_ADC7_AMUX_THM4_100K_PU(3)>;
		qcom,hw-settle-time-us = <200>;
		qcom,avg-samples = <2>;
		qcom,ratiometric;
	};
};

&pmk8280_pon_pwrkey {
	status = "okay";
};

&pmk8280_pon_resin {
	status = "okay";
};

&pmk8280_rtc {
	nvmem-cells = <&rtc_offset>;
	nvmem-cell-names = "offset";

	status = "okay";
};

&pmk8280_sdam_6 {
	status = "okay";

	rtc_offset: rtc-offset@bc {
		reg = <0xbc 0x4>;
	};
};

&pmk8280_vadc {
	status = "okay";

	channel@3 {
		reg = <PMK8350_ADC7_DIE_TEMP>;
		qcom,pre-scaling = <1 1>;
		label = "pmk8350_die_temp";
	};

	channel@44 {
		reg = <PMK8350_ADC7_AMUX_THM1_100K_PU>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "pmk8350_xo_therm";
	};

	channel@103 {
		reg = <PM8350_ADC7_DIE_TEMP(1)>;
		qcom,pre-scaling = <1 1>;
		label = "pmc8280_1_die_temp";
	};

	channel@144 {
		reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm1";
	};

	channel@145 {
		reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm2";
	};

	channel@146 {
		reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm3";
	};

	channel@147 {
		reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm4";
	};

	channel@303 {
		reg = <PM8350_ADC7_DIE_TEMP(3)>;
		qcom,pre-scaling = <1 1>;
		label = "pmc8280_2_die_temp";
	};

	channel@344 {
		reg = <PM8350_ADC7_AMUX_THM1_100K_PU(3)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm5";
	};

	channel@345 {
		reg = <PM8350_ADC7_AMUX_THM2_100K_PU(3)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm6";
	};

	channel@346 {
		reg = <PM8350_ADC7_AMUX_THM3_100K_PU(3)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm7";
	};

	channel@347 {
		reg = <PM8350_ADC7_AMUX_THM4_100K_PU(3)>;
		qcom,hw-settle-time = <200>;
		qcom,ratiometric;
		label = "sys_therm8";
	};

	channel@403 {
		reg = <PMR735A_ADC7_DIE_TEMP>;
		qcom,pre-scaling = <1 1>;
		label = "pmr735a_die_temp";
	};
};

&qup0 {
	status = "okay";
};

&qup1 {
	status = "okay";
};

&qup2 {
	status = "okay";
};

&remoteproc_adsp {
	firmware-name = "qcom/sc8280xp/LENOVO/21BX/qcadsp8280.mbn";

	status = "okay";
};

&remoteproc_nsp0 {
	firmware-name = "qcom/sc8280xp/LENOVO/21BX/qccdsp8280.mbn";

	status = "okay";
};

&rxmacro {
	status = "okay";
};

&sound {
	compatible = "qcom,sc8280xp-sndcard";
	model = "SC8280XP-LENOVO-X13S";
	audio-routing =
		"SpkrLeft IN", "WSA_SPK1 OUT",
		"SpkrRight IN", "WSA_SPK2 OUT",
		"IN1_HPHL", "HPHL_OUT",
		"IN2_HPHR", "HPHR_OUT",
		"AMIC2", "MIC BIAS2",
		"VA DMIC0", "MIC BIAS1",
		"VA DMIC1", "MIC BIAS1",
		"VA DMIC2", "MIC BIAS3",
		"VA DMIC0", "VA MIC BIAS1",
		"VA DMIC1", "VA MIC BIAS1",
		"VA DMIC2", "VA MIC BIAS3",
		"TX SWR_ADC1", "ADC2_OUTPUT";

	wcd-playback-dai-link {
		link-name = "WCD Playback";
		cpu {
			sound-dai = <&q6apmbedai RX_CODEC_DMA_RX_0>;
		};

		codec {
			sound-dai = <&wcd938x 0>, <&swr1 0>, <&rxmacro 0>;
		};

		platform {
			sound-dai = <&q6apm>;
		};
	};

	wcd-capture-dai-link {
		link-name = "WCD Capture";
		cpu {
			sound-dai = <&q6apmbedai TX_CODEC_DMA_TX_3>;
		};

		codec {
			sound-dai = <&wcd938x 1>, <&swr2 0>, <&txmacro 0>;
		};

		platform {
			sound-dai = <&q6apm>;
		};
	};

	wsa-dai-link {
		link-name = "WSA Playback";
		cpu {
			sound-dai = <&q6apmbedai WSA_CODEC_DMA_RX_0>;
		};

		codec {
			sound-dai = <&left_spkr>, <&right_spkr>, <&swr0 0>, <&wsamacro 0>;
		};

		platform {
			sound-dai = <&q6apm>;
		};
	};

	va-dai-link {
		link-name = "VA Capture";
		cpu {
			sound-dai = <&q6apmbedai VA_CODEC_DMA_TX_0>;
		};

		platform {
			sound-dai = <&q6apm>;
		};

		codec {
			sound-dai = <&vamacro 0>;
		};
	};
};

&swr0 {
	status = "okay";

	left_spkr: wsa8830-left@0,1 {
		compatible = "sdw10217020200";
		reg = <0 1>;
		pinctrl-names = "default";
		pinctrl-0 = <&spkr_1_sd_n_default>;
		powerdown-gpios = <&tlmm 178 GPIO_ACTIVE_LOW>;
		#thermal-sensor-cells = <0>;
		sound-name-prefix = "SpkrLeft";
		#sound-dai-cells = <0>;
		vdd-supply = <&vreg_s10b>;
	};

	right_spkr: wsa8830-right@0,2 {
		compatible = "sdw10217020200";
		reg = <0 2>;
		pinctrl-names = "default";
		pinctrl-0 = <&spkr_2_sd_n_default>;
		powerdown-gpios = <&tlmm 179 GPIO_ACTIVE_LOW>;
		#thermal-sensor-cells = <0>;
		sound-name-prefix = "SpkrRight";
		#sound-dai-cells = <0>;
		vdd-supply = <&vreg_s10b>;
	};
};

&swr1 {
	status = "okay";

	wcd_rx: wcd9380-rx@0,4 {
		compatible = "sdw20217010d00";
		reg = <0 4>;
		qcom,rx-port-mapping = <1 2 3 4 5>;
	};
};

&swr2 {
	status = "okay";

	wcd_tx: wcd9380-tx@0,3 {
		compatible = "sdw20217010d00";
		reg = <0 3>;
		qcom,tx-port-mapping = <1 1 2 3>;
	};
};

&txmacro {
	status = "okay";
};

&uart2 {
	pinctrl-0 = <&uart2_default>;
	pinctrl-names = "default";

	status = "okay";

	bluetooth {
		compatible = "qcom,wcn6855-bt";

		vddio-supply = <&vreg_s10b>;
		vddbtcxmx-supply = <&vreg_s12b>;
		vddrfacmn-supply = <&vreg_s12b>;
		vddrfa0p8-supply = <&vreg_s12b>;
		vddrfa1p2-supply = <&vreg_s11b>;
		vddrfa1p7-supply = <&vreg_s1c>;

		max-speed = <3200000>;

		enable-gpios = <&tlmm 133 GPIO_ACTIVE_HIGH>;
		swctrl-gpios = <&tlmm 132 GPIO_ACTIVE_HIGH>;

		pinctrl-0 = <&bt_default>;
		pinctrl-names = "default";
	};
};

&usb_0 {
	status = "okay";
};

&usb_0_dwc3 {
	dr_mode = "host";
};

&usb_0_hsphy {
	vdda-pll-supply = <&vreg_l9d>;
	vdda18-supply = <&vreg_l1c>;
	vdda33-supply = <&vreg_l7d>;

	status = "okay";
};

&usb_0_qmpphy {
	vdda-phy-supply = <&vreg_l9d>;
	vdda-pll-supply = <&vreg_l4d>;

	orientation-switch;

	status = "okay";
};

&usb_0_qmpphy_dp_in {
	remote-endpoint = <&mdss0_dp0_out>;
};

&usb_0_qmpphy_out {
	remote-endpoint = <&pmic_glink_con0_ss>;
};

&usb_0_role_switch {
	remote-endpoint = <&pmic_glink_con0_hs>;
};

&usb_1 {
	status = "okay";
};

&usb_1_dwc3 {
	dr_mode = "host";
};

&usb_1_hsphy {
	vdda-pll-supply = <&vreg_l4b>;
	vdda18-supply = <&vreg_l1c>;
	vdda33-supply = <&vreg_l13c>;

	status = "okay";
};

&usb_1_qmpphy {
	vdda-phy-supply = <&vreg_l4b>;
	vdda-pll-supply = <&vreg_l3b>;

	orientation-switch;

	status = "okay";
};

&usb_1_qmpphy_dp_in {
	remote-endpoint = <&mdss0_dp1_out>;
};

&usb_1_qmpphy_out {
	remote-endpoint = <&pmic_glink_con1_ss>;
};

&usb_1_role_switch {
	remote-endpoint = <&pmic_glink_con1_hs>;
};

&vamacro {
	pinctrl-0 = <&dmic01_default>, <&dmic02_default>;
	pinctrl-names = "default";

	vdd-micb-supply = <&vreg_s10b>;

	qcom,dmic-sample-rate = <4800000>;

	status = "okay";
};

&wsamacro {
	status = "okay";
};

&xo_board_clk {
	clock-frequency = <38400000>;
};

/* PINCTRL */

&lpass_tlmm {
	status = "okay";
};

&pmc8280_1_gpios {
	edp_bl_en: edp-bl-en-state {
		pins = "gpio8";
		function = "normal";
	};

	edp_bl_reg_en: edp-bl-reg-en-state {
		pins = "gpio9";
		function = "normal";
	};

	misc_3p3_reg_en: misc-3p3-reg-en-state {
		pins = "gpio1";
		function = "normal";
	};
};

&pmc8280_2_gpios {
	wwan_sw_en: wwan-sw-en-state {
		pins = "gpio1";
		function = "normal";
	};
};

&pmc8280c_gpios {
	edp_bl_pwm: edp-bl-pwm-state {
		pins = "gpio8";
		function = "func1";
	};
};

&pmr735a_gpios {
	hastings_reg_en: hastings-reg-en-state {
		pins = "gpio1";
		function = "normal";
	};
};

&tlmm {
	gpio-reserved-ranges = <70 2>, <74 6>, <125 2>, <128 2>, <154 4>;

	bt_default: bt-default-state {
		hstp-bt-en-pins {
			pins = "gpio133";
			function = "gpio";
			drive-strength = <16>;
			bias-disable;
		};

		hstp-sw-ctrl-pins {
			pins = "gpio132";
			function = "gpio";
			bias-pull-down;
		};
	};

	edp_reg_en: edp-reg-en-state {
		pins = "gpio25";
		function = "gpio";
		drive-strength = <16>;
		bias-disable;
	};

	hall_int_n_default: hall-int-n-state {
		pins = "gpio107";
		function = "gpio";
		bias-disable;
	};

	i2c4_default: i2c4-default-state {
		pins = "gpio171", "gpio172";
		function = "qup4";
		drive-strength = <16>;
		bias-disable;
	};

	i2c21_default: i2c21-default-state {
		pins = "gpio81", "gpio82";
		function = "qup21";
		drive-strength = <16>;
		bias-disable;
	};

	kybd_default: kybd-default-state {
		disable-pins {
			pins = "gpio102";
			function = "gpio";
			output-low;
		};

		int-n-pins {
			pins = "gpio104";
			function = "gpio";
			bias-disable;
		};

		reset-pins {
			pins = "gpio105";
			function = "gpio";
			bias-disable;
		};
	};

	nvme_reg_en: nvme-reg-en-state {
		pins = "gpio135";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	pcie2a_default: pcie2a-default-state {
		clkreq-n-pins {
			pins = "gpio142";
			function = "pcie2a_clkreq";
			drive-strength = <2>;
			bias-pull-up;
		};

		perst-n-pins {
			pins = "gpio143";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-down;
		};

		wake-n-pins {
		       pins = "gpio145";
		       function = "gpio";
		       drive-strength = <2>;
		       bias-pull-up;
	       };
	};

	pcie3a_default: pcie3a-default-state {
		clkreq-n-pins {
			pins = "gpio150";
			function = "pcie3a_clkreq";
			drive-strength = <2>;
			bias-pull-up;
		};

		perst-n-pins {
			pins = "gpio151";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-down;
		};

		wake-n-pins {
			pins = "gpio148";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-up;
		};
	};

	pcie4_default: pcie4-default-state {
		clkreq-n-pins {
			pins = "gpio140";
			function = "pcie4_clkreq";
			drive-strength = <2>;
			bias-pull-up;
		};

		perst-n-pins {
			pins = "gpio141";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-down;
		};

		wake-n-pins {
			pins = "gpio139";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-up;
		};
	};

	spkr_1_sd_n_default: spkr-1-sd-n-default-state {
		perst-n-pins {
			pins = "gpio178";
			function = "gpio";
			drive-strength = <16>;
			bias-disable;
			output-high;
		};
	};

	spkr_2_sd_n_default: spkr-2-sd-n-default-state {
		perst-n-pins {
			pins = "gpio179";
			function = "gpio";
			drive-strength = <16>;
			bias-disable;
			output-high;
		};
	};

	tpad_default: tpad-default-state {
		int-n-pins {
			pins = "gpio182";
			function = "gpio";
			bias-disable;
		};
	};

	ts0_default: ts0-default-state {
		int-n-pins {
			pins = "gpio175";
			function = "gpio";
			bias-disable;
		};

		reset-n-pins {
			pins = "gpio99";
			function = "gpio";
			output-high;
			drive-strength = <16>;
		};
	};

	uart2_default: uart2-default-state {
		cts-pins {
			pins = "gpio121";
			function = "qup2";
			bias-bus-hold;
		};

		rts-pins {
			pins = "gpio122";
			function = "qup2";
			drive-strength = <2>;
			bias-disable;
		};

		rx-pins {
			pins = "gpio124";
			function = "qup2";
			bias-pull-up;
		};

		tx-pins {
			pins = "gpio123";
			function = "qup2";
			drive-strength = <2>;
			bias-disable;
		};
	};

	usb0_sbu_default: usb0-sbu-state {
		oe-n-pins {
			pins = "gpio101";
			function = "gpio";
			bias-disable;
			drive-strength = <16>;
			output-high;
		};

		sel-pins {
			pins = "gpio164";
			function = "gpio";
			bias-disable;
			drive-strength = <16>;
		};
	};

	usb1_sbu_default: usb1-sbu-state {
		oe-n-pins {
			pins = "gpio48";
			function = "gpio";
			bias-disable;
			drive-strength = <16>;
			output-high;
		};

		sel-pins {
			pins = "gpio47";
			function = "gpio";
			bias-disable;
			drive-strength = <16>;
		};
	};

	wcd_default: wcd-default-state {
		reset-pins {
			pins = "gpio106";
			function = "gpio";
			bias-disable;
		};
	};
};