// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Copyright 2023 Linus Walleij <linus.walleij@linaro.org>
 */

#include "ste-ab8505.dtsi"

/ {
	soc {
		prcmu@80157000 {
			ab8505 {
				phy {
					pinctrl-names = "default", "sleep";
					pinctrl-0 = <&usb_a_1_default>;
					pinctrl-1 = <&usb_a_1_sleep>;
				};

				regulator {
					ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
						regulator-name = "V-DISPLAY";
					};

					ab8500_ldo_aux2_reg: ab8500_ldo_aux2 {
						regulator-name = "V-eMMC1";
					};

					ab8500_ldo_aux3_reg: ab8500_ldo_aux3 {
						regulator-name = "V-MMC-SD";
					};

					ab8500_ldo_intcore_reg: ab8500_ldo_intcore {
						regulator-name = "V-INTCORE";
					};

					ab8500_ldo_tvout_reg: ab8500_ldo_tvout {
						regulator-name = "V-TVOUT";
					};

					ab8500_ldo_audio_reg: ab8500_ldo_audio {
						regulator-name = "V-AUD";
					};

					ab8500_ldo_anamic1_reg: ab8500_ldo_anamic1 {
						regulator-name = "V-AMIC1";
					};

					ab8500_ldo_anamic2_reg: ab8500_ldo_anamic2 {
						regulator-name = "V-AMIC2";
					};

					ab8500_ldo_dmic_reg: ab8500_ldo_dmic {
						regulator-name = "V-DMIC";
					};

					ab8500_ldo_ana_reg: ab8500_ldo_ana {
						regulator-name = "V-CSI/DSI";
					};
				};

				gpio {
					/* Hog a few default settings */
					pinctrl-names = "default";
					pinctrl-0 = <&gpio2_default_mode>,
						    <&gpio4_default_mode>,
						    <&gpio10_default_mode>,
						    <&gpio11_default_mode>,
						    <&gpio12_default_mode>,
						    <&gpio13_default_mode>,
						    <&gpio16_default_mode>,
						    <&gpio24_default_mode>,
						    <&gpio25_default_mode>,
						    <&gpio36_default_mode>,
						    <&gpio37_default_mode>,
						    <&gpio38_default_mode>,
						    <&gpio39_default_mode>,
						    <&gpio42_default_mode>,
						    <&gpio26_default_mode>,
						    <&gpio35_default_mode>,
						    <&ycbcr_default_mode>,
						    <&pwm_default_mode>,
						    <&adi1_default_mode>,
						    <&usbuicc_default_mode>,
						    <&dmic_default_mode>,
						    <&extcpena_default_mode>,
						    <&modsclsda_default_mode>;

					/*
					 * Pins 2, 4, 10, 11, 12, 13, 16, 24, 25, 36, 37, 38, 39 and 42
					 * are muxed in as GPIO, and configured as INPUT PULL DOWN
					 */
					gpio2 {
						gpio2_default_mode: gpio2_default {
							default_mux {
								function = "gpio";
								groups = "gpio2_a_1";
							};
							default_cfg {
								pins = "GPIO2_T9";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio4 {
						gpio4_default_mode: gpio4_default {
							default_mux {
								function = "gpio";
								groups = "gpio4_a_1";
							};
							default_cfg {
								pins = "GPIO4_W2";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio10 {
						gpio10_default_mode: gpio10_default {
							default_mux {
								function = "gpio";
								groups = "gpio10_d_1";
							};
							default_cfg {
								pins = "GPIO10_U17";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio11 {
						gpio11_default_mode: gpio11_default {
							default_mux {
								function = "gpio";
								groups = "gpio11_d_1";
							};
							default_cfg {
								pins = "GPIO11_AA18";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio12 {
						gpio12_default_mode: gpio12_default {
							default_mux {
								function = "gpio";
								groups = "gpio12_d_1";
							};
							default_cfg {
								pins = "GPIO12_U16";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio13 {
						gpio13_default_mode: gpio13_default {
							default_mux {
								function = "gpio";
								groups = "gpio13_d_1";
							};
							default_cfg {
								pins = "GPIO13_W17";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio16 {
						gpio16_default_mode: gpio16_default {
							default_mux {
								function = "gpio";
								groups = "gpio16_a_1";
							};
							default_cfg {
								pins = "GPIO16_F15";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio24 {
						gpio24_default_mode: gpio24_default {
							default_mux {
								function = "gpio";
								groups = "gpio24_a_1";
							};
							default_cfg {
								pins = "GPIO24_T14";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio25 {
						gpio25_default_mode: gpio25_default {
							default_mux {
								function = "gpio";
								groups = "gpio25_a_1";
							};
							default_cfg {
								pins = "GPIO25_R16";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio36 {
						gpio36_default_mode: gpio36_default {
							default_mux {
								function = "gpio";
								groups = "gpio36_a_1";
							};
							default_cfg {
								pins = "GPIO36_A17";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio37 {
						gpio37_default_mode: gpio37_default {
							default_mux {
								function = "gpio";
								groups = "gpio37_a_1";
							};
							default_cfg {
								pins = "GPIO37_E15";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio38 {
						gpio38_default_mode: gpio38_default {
							default_mux {
								function = "gpio";
								groups = "gpio38_a_1";
							};
							default_cfg {
								pins = "GPIO38_C17";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio39 {
						gpio39_default_mode: gpio39_default {
							default_mux {
								function = "gpio";
								groups = "gpio39_a_1";
							};
							default_cfg {
								pins = "GPIO39_E16";
								input-enable;
								bias-pull-down;
							};
						};
					};
					gpio42 {
						gpio42_default_mode: gpio42_default {
							default_mux {
								function = "gpio";
								groups = "gpio42_a_1";
							};
							default_cfg {
								pins = "GPIO42_U2";
								input-enable;
								bias-pull-down;
							};
						};
					};
					/*
					 * Pins 26 and 35 muxed in as GPIO, and configured as OUTPUT LOW
					 */
					gpio26 {
						gpio26_default_mode: gpio26_default {
							default_mux {
								function = "gpio";
								groups = "gpio26_d_1";
							};
							default_cfg {
								pins = "GPIO26_M16";
								output-low;
							};
						};
					};
					gpio35 {
						gpio35_default_mode: gpio35_default {
							default_mux {
								function = "gpio";
								groups = "gpio35_d_1";
							};
							default_cfg {
								pins = "GPIO35_W15";
								output-low;
							};
						};
					};
					/*
					 * This sets up the YCBCR connector pins, i.e. analog video out.
					 * Set as input with no bias.
					 */
					ycbcr {
						ycbcr_default_mode: ycbcr_default {
							default_mux {
								function = "ycbcr";
								groups = "ycbcr0123_d_1";
							};
							default_cfg {
								pins = "GPIO6_Y18",
									 "GPIO7_AA20",
									 "GPIO8_W18",
									 "GPIO9_AA19";
								input-enable;
								bias-disable;
							};
						};
					};
					/* This sets up the PWM pins 14 and 15 */
					pwm {
						pwm_default_mode: pwm_default {
							default_mux {
								function = "pwmout";
								groups = "pwmout1_d_1", "pwmout2_d_1";
							};
							default_cfg {
								pins = "GPIO14_F14",
									 "GPIO15_B17";
								input-enable;
								bias-pull-down;
							};
						};
					};
					/* This sets up audio interface 1 */
					adi1 {
						adi1_default_mode: adi1_default {
							default_mux {
								function = "adi1";
								groups = "adi1_d_1";
							};
							default_cfg {
								pins = "GPIO17_P5",
									 "GPIO18_R5",
									 "GPIO19_U5",
									 "GPIO20_T5";
								input-enable;
								bias-pull-down;
							};
						};
					};
					/* This sets up the USB UICC pins */
					usbuicc {
						usbuicc_default_mode: usbuicc_default {
							default_mux {
								function = "usbuicc";
								groups = "usbuicc_d_1";
							};
							default_cfg {
								pins = "GPIO21_H19",
									 "GPIO22_G20",
									 "GPIO23_G19";
								input-enable;
								bias-pull-down;
							};
						};
					};
					/* This sets up the microphone pins */
					dmic {
						dmic_default_mode: dmic_default {
							default_mux {
								function = "dmic";
								groups = "dmic12_d_1",
									 "dmic34_d_1",
									 "dmic56_d_1";
							};
							default_cfg {
								pins = "GPIO27_J6",
									 "GPIO28_K6",
									 "GPIO29_G6",
									 "GPIO30_H6",
									 "GPIO31_F5",
									 "GPIO32_G5";
								input-enable;
								bias-pull-down;
							};
						};
					};
					extcpena {
						extcpena_default_mode: extcpena_default {
							default_mux {
								function = "extcpena";
								groups = "extcpena_d_1";
							};
							default_cfg {
								pins = "GPIO34_R17";
								input-enable;
								bias-pull-down;
							};
						};
					};
					/* Modem I2C setup (SCL and SDA pins) */
					modsclsda {
						modsclsda_default_mode: modsclsda_default {
							default_mux {
								function = "modsclsda";
								groups = "modsclsda_d_1";
							};
							default_cfg {
								pins = "GPIO40_T19",
									"GPIO41_U19";
								input-enable;
								bias-pull-down;
							};
						};
					};
					/*
					 * Clock output pins associated with regulators.
					 */
					sysclkreq2 {
						sysclkreq2_default_mode: sysclkreq2_default {
							default_mux {
								function = "sysclkreq";
								groups = "sysclkreq2_d_1";
							};
							default_cfg {
								pins = "GPIO1_T10";
								input-enable;
								bias-disable;
							};
						};
						sysclkreq2_sleep_mode: sysclkreq2_sleep {
							default_mux {
								function = "gpio";
								groups = "gpio1_a_1";
							};
							default_cfg {
								pins = "GPIO1_T10";
								input-enable;
								bias-pull-down;
							};
						};
					};
					sysclkreq4 {
						sysclkreq4_default_mode: sysclkreq4_default {
							default_mux {
								function = "sysclkreq";
								groups = "sysclkreq4_d_1";
							};
							default_cfg {
								pins = "GPIO3_U9";
								input-enable;
								bias-disable;
							};
						};
						sysclkreq4_sleep_mode: sysclkreq4_sleep {
							default_mux {
								function = "gpio";
								groups = "gpio3_a_1";
							};
							default_cfg {
								pins = "GPIO3_U9";
								input-enable;
								bias-pull-down;
							};
						};
					};
				};
				/*
				 * Charging is not working on the HREF unless an actual battery is
				 * mounted, most HREFs have a DC cable in to the "battery power"
				 * which means this will only be cofusing. So do not enable charging
				 * of the HREFs.
				 */
				ab8500_fg {
					status = "disabled";
				};
				ab8500_btemp {
					status = "disabled";
				};
				ab8500_charger {
					status = "disabled";
				};
				ab8500_chargalg {
					status = "disabled";
				};
			};
		};
	};
};
