// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2022, Konrad Dybcio <konrad.dybcio@somainline.org>
 */

/dts-v1/;

/* PMK8350 is configured to use SID6 instead of 0 */
#define PMK8350_SID 6

#include <dt-bindings/gpio/gpio.h>
#include "sm6375.dtsi"
#include "pm6125.dtsi"
#include "pmk8350.dtsi"
#include "pmr735a.dtsi"

/* PM6125 PON is used and we can't have duplicate labels */
/delete-node/ &pmk8350_pon;

/ {
	model = "Sony Xperia 10 IV";
	compatible = "sony,pdx225", "qcom,sm6375";
	chassis-type = "handset";

	chosen {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		framebuffer: framebuffer@85200000 {
			compatible = "simple-framebuffer";
			reg = <0 0x85200000 0 0xc00000>;

			width = <1080>;
			height = <2520>;
			stride = <(1080 * 4)>;
			format = "a8r8g8b8";
			/*
			 * That's (going to be) a lot of clocks, but it's necessary due
			 * to unused clk cleanup & no panel driver yet
			 */
			clocks = <&gcc GCC_DISP_AHB_CLK>,
				 <&gcc GCC_DISP_HF_AXI_CLK>,
				 <&gcc GCC_DISP_THROTTLE_CORE_CLK>,
				 <&gcc GCC_DISP_GPLL0_DIV_CLK_SRC>;
		};
	};

	reserved-memory {
		cont_splash_mem: memory@85200000 {
			reg = <0 0x85200000 0 0xc00000>;
			no-map;
		};

		ramoops@ffc40000 {
			compatible = "ramoops";
			reg = <0 0xffc40000 0 0xb0000>;
			record-size = <0x10000>;
			console-size = <0x60000>;
			ftrace-size = <0x10000>;
			pmsg-size = <0x20000>;
			ecc-size = <16>;
		};
	};

	vph_pwr: vph-pwr-regulator {
		compatible = "regulator-fixed";
		regulator-name = "vph_pwr";
		regulator-min-microvolt = <3700000>;
		regulator-max-microvolt = <3700000>;
		regulator-always-on;
		regulator-boot-on;
	};
};

&sdc2_off_state {
	sd-cd-pins {
		pins = "gpio94";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};
};

&sdc2_on_state {
	sd-cd-pins {
		pins = "gpio94";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};
};

&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm6125_l22>;
	vqmmc-supply = <&pm6125_l5>;

	cd-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
};

&gpi_dma0 {
	status = "okay";
};

&gpi_dma1 {
	status = "okay";
};

&i2c8 {
	clock-frequency = <400000>;
	status = "okay";

	touchscreen@48 {
		compatible = "samsung,s6sy761";
		reg = <0x48>;
		interrupt-parent = <&tlmm>;
		interrupts = <22 0x2008>;

		vdd-supply = <&pm6125_l13>;

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

&pmk8350_adc_tm {
	status = "okay";
};

&pmk8350_rtc {
	status = "okay";
};

&pon_pwrkey {
	status = "okay";
};

&pon_resin {
	linux,code = <KEY_VOLUMEUP>;
	status = "okay";
};

&qupv3_id_0 {
	status = "okay";
};

&qupv3_id_1 {
	status = "okay";
};

&remoteproc_adsp {
	firmware-name = "qcom/Sony/murray/adsp.mbn";
	status = "okay";
};

&remoteproc_cdsp {
	firmware-name = "qcom/Sony/murray/cdsp.mbn";
	status = "okay";
};

&rpm_requests {
	regulators-0 {
		compatible = "qcom,rpm-pm6125-regulators";

		pm6125_s5: s5 {
			regulator-min-microvolt = <382000>;
			regulator-max-microvolt = <1120000>;
		};

		pm6125_s6: s6 {
			regulator-min-microvolt = <320000>;
			regulator-max-microvolt = <1374000>;
		};

		pm6125_s7: s7 {
			regulator-min-microvolt = <1574000>;
			regulator-max-microvolt = <2040000>;
		};

		/*
		 * S8 is VDD_GFX
		 * L1 is VDD_LPI_CX
		 */

		pm6125_l2: l2 {
			regulator-min-microvolt = <1170000>;
			regulator-max-microvolt = <1304000>;
		};

		pm6125_l3: l3 {
			regulator-min-microvolt = <1100000>;
			regulator-max-microvolt = <1300000>;
		};

		pm6125_l4: l4 {
			regulator-min-microvolt = <1100000>;
			regulator-max-microvolt = <1300000>;
		};

		pm6125_l5: l5 {
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <2960000>;
			regulator-allow-set-load;
		};

		pm6125_l6: l6 {
			regulator-min-microvolt = <1080000>;
			regulator-max-microvolt = <1304000>;
		};

		pm6125_l7: l7 {
			regulator-min-microvolt = <720000>;
			regulator-max-microvolt = <1050000>;
		};

		pm6125_l8: l8 {
			regulator-min-microvolt = <1100000>;
			regulator-max-microvolt = <1304000>;
		};

		pm6125_l9: l9 {
			regulator-min-microvolt = <1504000>;
			regulator-max-microvolt = <2000000>;
		};

		pm6125_l10: l10 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <1980000>;
		};

		pm6125_l11: l11 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <1980000>;
		};

		pm6125_l12: l12 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <2000000>;
		};

		pm6125_l13: l13 {
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <1980000>;
		};

		pm6125_l14: l14 {
			regulator-min-microvolt = <1700000>;
			regulator-max-microvolt = <1900000>;
		};

		pm6125_l15: l15 {
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <3544000>;
		};

		pm6125_l16: l16 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <1980000>;
		};

		/* L17 is VDD_LPI_MX */

		pm6125_l18: l18 {
			regulator-min-microvolt = <830000>;
			regulator-max-microvolt = <920000>;
		};

		pm6125_l19: l19 {
			regulator-min-microvolt = <1624000>;
			regulator-max-microvolt = <3304000>;
		};

		pm6125_l20: l20 {
			regulator-min-microvolt = <1624000>;
			regulator-max-microvolt = <3304000>;
		};

		pm6125_l21: l21 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3400000>;
		};

		pm6125_l22: l22 {
			regulator-min-microvolt = <2704000>;
			regulator-max-microvolt = <2960000>;
			regulator-allow-set-load;
		};

		pm6125_l23: l23 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3400000>;
		};

		pm6125_l24: l24 {
			regulator-min-microvolt = <2704000>;
			regulator-max-microvolt = <3544000>;
		};
	};

	regulators-1 {
		compatible = "qcom,rpm-pmr735a-regulators";

		/*
		 * S1 is VDD_MX
		 * S2 is VDD_CX
		 */

		pmr735a_l1: l1 {
			regulator-min-microvolt = <570000>;
			regulator-max-microvolt = <650000>;
		};

		pmr735a_l2: l2 {
			regulator-min-microvolt = <352000>;
			regulator-max-microvolt = <796000>;
		};

		pmr735a_l3: l3 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1200000>;
		};

		pmr735a_l4: l4 {
			regulator-min-microvolt = <1504000>;
			regulator-max-microvolt = <2000000>;
		};

		pmr735a_l5: l5 {
			regulator-min-microvolt = <751000>;
			regulator-max-microvolt = <824000>;
		};

		pmr735a_l6: l6 {
			regulator-min-microvolt = <504000>;
			regulator-max-microvolt = <868000>;
		};

		pmr735a_l7: l7 {
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <3544000>;
		};
	};
};

&sdc2_off_state {
	sd-cd-pins {
		pins = "gpio94";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};
};

&sdc2_on_state {
	sd-cd-pins {
		pins = "gpio94";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};
};

&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm6125_l22>;
	vqmmc-supply = <&pm6125_l5>;

	cd-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
};

&tlmm {
	gpio-reserved-ranges = <13 4>;

	ts_int_default: ts-int-default-state {
		pins = "gpio22";
		function = "gpio";
		drive-strength = <8>;
		bias-pull-up;
	};

	ts_avdd_default: ts-avdd-default-state {
		pins = "gpio59";
		function = "gpio";
		drive-strength = <8>;
		output-high;
	};
};

&usb_1 {
	status = "okay";
};

&usb_1_dwc3 {
	dr_mode = "peripheral";
};

&usb_1_hsphy {
	status = "okay";
};

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