// 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>;
		};
	};

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

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

		key-volume-down {
			label = "Volume Down";
			linux,code = <KEY_VOLUMEDOWN>;
			gpios = <&pmr735a_gpios 1 GPIO_ACTIVE_LOW>;
			debounce-interval = <15>;
			linux,can-disable;
			wakeup-source;
		};
	};

	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";
};

&pmr735a_gpios {
	vol_down_n: vol-down-n-state {
		pins = "gpio1";
		function = "normal";
		power-source = <1>;
		bias-pull-up;
		input-enable;
	};
};

&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/sm6375/Sony/murray/adsp.mbn";
	status = "okay";
};

&remoteproc_cdsp {
	firmware-name = "qcom/sm6375/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>;
};
