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