// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (C) 2022 Luca Weiss <luca.weiss@fairphone.com>
 */

#include <dt-bindings/iio/qcom,spmi-vadc.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/spmi/spmi.h>

/ {
	thermal-zones {
		pm7250b-thermal {
			polling-delay-passive = <100>;

			thermal-sensors = <&pm7250b_temp>;

			trips {
				trip0 {
					temperature = <95000>;
					hysteresis = <0>;
					type = "passive";
				};

				trip1 {
					temperature = <115000>;
					hysteresis = <0>;
					type = "hot";
				};

				trip2 {
					temperature = <145000>;
					hysteresis = <0>;
					type = "critical";
				};
			};
		};
	};
};

&spmi_bus {
	pmic@PM7250B_SID {
		compatible = "qcom,pm7250b", "qcom,spmi-pmic";
		reg = <PM7250B_SID SPMI_USID>;
		#address-cells = <1>;
		#size-cells = <0>;

		pm7250b_vbus: usb-vbus-regulator@1100 {
			compatible = "qcom,pm7250b-vbus-reg", "qcom,pm8150b-vbus-reg";
			reg = <0x1100>;
			status = "disabled";
		};

		pm7250b_typec: typec@1500 {
			compatible = "qcom,pm7250b-typec", "qcom,pm8150b-typec";
			reg = <0x1500>,
			      <0x1700>;
			interrupts = <PM7250B_SID 0x15 0x00 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x15 0x01 IRQ_TYPE_EDGE_BOTH>,
				     <PM7250B_SID 0x15 0x02 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x15 0x03 IRQ_TYPE_EDGE_BOTH>,
				     <PM7250B_SID 0x15 0x04 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x15 0x05 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x15 0x06 IRQ_TYPE_EDGE_BOTH>,
				     <PM7250B_SID 0x15 0x07 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x00 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x01 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x02 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x03 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x04 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x05 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x06 IRQ_TYPE_EDGE_RISING>,
				     <PM7250B_SID 0x17 0x07 IRQ_TYPE_EDGE_RISING>;
			interrupt-names = "or-rid-detect-change",
					  "vpd-detect",
					  "cc-state-change",
					  "vconn-oc",
					  "vbus-change",
					  "attach-detach",
					  "legacy-cable-detect",
					  "try-snk-src-detect",
					  "sig-tx",
					  "sig-rx",
					  "msg-tx",
					  "msg-rx",
					  "msg-tx-failed",
					  "msg-tx-discarded",
					  "msg-rx-discarded",
					  "fr-swap";
			vdd-vbus-supply = <&pm7250b_vbus>;
			status = "disabled";
		};

		pm7250b_temp: temp-alarm@2400 {
			compatible = "qcom,spmi-temp-alarm";
			reg = <0x2400>;
			interrupts = <PM7250B_SID 0x24 0x0 IRQ_TYPE_EDGE_BOTH>;
			io-channels = <&pm7250b_adc ADC5_DIE_TEMP>;
			io-channel-names = "thermal";
			#thermal-sensor-cells = <0>;
		};

		pm7250b_adc: adc@3100 {
			compatible = "qcom,spmi-adc5";
			reg = <0x3100>;
			#address-cells = <1>;
			#size-cells = <0>;
			#io-channel-cells = <1>;
			interrupts = <PM7250B_SID 0x31 0x0 IRQ_TYPE_EDGE_RISING>;

			channel@0 {
				reg = <ADC5_REF_GND>;
				qcom,pre-scaling = <1 1>;
				label = "ref_gnd";
			};

			channel@1 {
				reg = <ADC5_1P25VREF>;
				qcom,pre-scaling = <1 1>;
				label = "vref_1p25";
			};

			channel@2 {
				reg = <ADC5_DIE_TEMP>;
				qcom,pre-scaling = <1 1>;
				label = "die_temp";
			};

			channel@7 {
				reg = <ADC5_USB_IN_I>;
				qcom,pre-scaling = <1 1>;
				label = "usb_in_i_uv";
			};

			channel@8 {
				reg = <ADC5_USB_IN_V_16>;
				qcom,pre-scaling = <1 16>;
				label = "usb_in_v_div_16";
			};

			channel@9 {
				reg = <ADC5_CHG_TEMP>;
				qcom,pre-scaling = <1 1>;
				label = "chg_temp";
			};

			channel@e {
				reg = <ADC5_AMUX_THM2>;
				qcom,hw-settle-time = <200>;
				qcom,pre-scaling = <1 1>;
				label = "smb1390_therm";
			};

			channel@1e {
				reg = <ADC5_MID_CHG_DIV6>;
				qcom,pre-scaling = <1 6>;
				label = "chg_mid";
			};

			channel@4b {
				reg = <ADC5_BAT_ID_100K_PU>;
				qcom,hw-settle-time = <200>;
				qcom,pre-scaling = <1 1>;
				qcom,ratiometric;
				label = "bat_id";
			};

			channel@83 {
				reg = <ADC5_VPH_PWR>;
				qcom,pre-scaling = <1 3>;
				label = "vph_pwr";
			};

			channel@84 {
				reg = <ADC5_VBAT_SNS>;
				qcom,pre-scaling = <1 3>;
				label = "vbat_sns";
			};

			channel@99 {
				reg = <ADC5_SBUx>;
				qcom,pre-scaling = <1 3>;
				label = "chg_sbux";
			};
		};

		pm7250b_adc_tm: adc-tm@3500 {
			compatible = "qcom,spmi-adc-tm5";
			reg = <0x3500>;
			interrupts = <PM7250B_SID 0x35 0x0 IRQ_TYPE_EDGE_RISING>;
			#thermal-sensor-cells = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";
		};

		pm7250b_gpios: gpio@c000 {
			compatible = "qcom,pm7250b-gpio", "qcom,spmi-gpio";
			reg = <0xc000>;
			gpio-controller;
			gpio-ranges = <&pm7250b_gpios 0 0 12>;
			#gpio-cells = <2>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};
	};

	pmic@PM7250B_SID1 {
		compatible = "qcom,pm7250b", "qcom,spmi-pmic";
		reg = <PM7250B_SID1 SPMI_USID>;
		#address-cells = <1>;
		#size-cells = <0>;
	};
};
