/*
 * Copyright 2012 ST-Ericsson AB
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

#include "ste-dbx5x0.dtsi"
#include "ste-href-ab8500.dtsi"
#include "ste-href.dtsi"

/ {
	model = "ST-Ericsson HREF (v60+) platform with Device Tree";
	compatible = "st-ericsson,hrefv60+", "st-ericsson,u8500";

	soc {
		/* Name the GPIO muxed rails on the HREF boards */
		gpio@8012e000 {
			/* GPIOs 0 - 31 */
			gpio-line-names =
				     /* GPIO0,1 used for UART0 BT RX/TX */
				     "", "",
				     "UART_WAKE",
				     "BT_WAKE",
				     "",
				     "SDMMC_1V8_3V_SEL",
				     "FLASH_LED_SYNC (FLASH_CTRL_0)",
				     "XENON_READY (FLASH_CTRL_1)",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "",
				     "",
				     "FLASH_LED_EN (FLASH_CTRL_3)",
				     "", "",
				     "", "", "", "", "",
				     /* Used by UART2 (console) */
				     "", "",
				     "MAGNETOMETER_INT";
		};

		gpio@8012e080 {
			/* GPIOs 32 - 63 */
			gpio-line-names =
				     "MAGNETOMETER_DRDY",
				     "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "";
		};

		gpio@8000e000 {
			/* GPIOs 64 - 95 */
			gpio-line-names = "XENON_EN2 (FLASH_CTRL_4)",
				     "DISP1_RST",
				     "DISP2_RST",
				     "TOUCH_INT2",
				     "LCD_VSI0_A",
				     "LCD_VSI1_A",
				     /* GPIO 70-77 used for ETM */
				     "", "", "", "", "", "", "", "",
				     /* GPIO 78-81 used for YCBCR */
				     "", "", "", "",
				     "ACCELEROMETER_INT1_RDY",
				     "ACCELEROMETER_INT2",
				     "TOUCH_INT",
				     "WLAN_ENA",
				     "", "", "", "", "",
				     "FORCE_SENSING_INT",
				     "FORCE_SENSING_RESET",
				     "", "",
				     "SDMMC_CD";
		};

		gpio@8000e080 {
			/* GPIOs 96 - 127 */
			gpio-line-names = "",
				     "FORCE_SENSING_WU",
				     "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "";
		};

		gpio@8000e100 {
			/* GPIOs 128 - 159 */
			gpio-line-names = "", "", "", "", "", "", "", "",
				     "", "", "",
				     "DIPRO_INT", /* GPIO139 */
				     "XSHUTDOWN_SECONDARY_SENSOR",
				     "XSHUTDOWN_PRIMARY_SENSOR",
				     "NFC_RST (NFC_CTRL_",
				     "TOUCH_RST",
				     "NFC_IRQ (NFC_CTRL_1)",
				     "HAL_SW",
				     "TOUCH_RST2",
				     "", "",
				     "VAUDIO_HF_EN", /* GPIO149 */
				     "", "", "", "", "", "", "", "", "", "";
		};

		gpio@8000e180 {
			/* GPIOs 160 - 191 */
			gpio-line-names = "", "", "", "", "", "", "", "",
				     "",
				     "SDMMC_EN",
				     "XENON_CHARGE (FLASH_CONTROL_5)",
				     "GBF_ENA_RESET",
				     "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "";
		};

		gpio@8011e000 {
			/* GPIOs 192 - 223 */
			gpio-line-names = "HDTV_INTN",
				     "", "", "",
				     "HDTV_RSTN",
				     "", "", "",
				     "", /* GPIO200 */
				     "", "", "", "", "", "", "",
				     /* GPIO208-216 used for WGBF_MC1 */
				     "", "", "", "", "", "", "", "", "",
				     "SW_FRONT_PROXIMITY", /* GPIO217 */
				     "KPD_CTRL_INT", /* Keypad controller */
				     "", "", "", "", "";
		};

		gpio@8011e080 {
			/* GPIOs 224 - 255 */
			gpio-line-names = "", "",
				     "HSIT_ACWAKE0",
				     "", "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "",
				     "", "", "", "", "", "", "", "";
		};

		// External Micro SD slot
		sdi0_per1@80126000 {
			cd-gpios  = <&gpio2 31 GPIO_ACTIVE_HIGH>; // 95
		};

		vmmci: regulator-gpio {
			gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
			enable-gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};

		pinctrl {
			/*
			 * Set this up using hogs, as time goes by and as seems fit, these
			 * can be moved over to being controlled by respective device.
			 */
			pinctrl-names = "default";
			pinctrl-0 = <&ipgpio_hrefv60_mode>,
				  <&etm_hrefv60_mode>,
				  <&nahj_hrefv60_mode>,
				  <&nfc_hrefv60_mode>,
				  <&force_hrefv60_mode>,
				  <&dipro_hrefv60_mode>,
				  <&vaudio_hf_hrefv60_mode>,
				  <&gbf_hrefv60_mode>,
				  <&hdtv_hrefv60_mode>,
				  <&gpios_hrefv60_mode>;

			sdi0 {
				sdi0_default_mode: sdi0_default {
					/* SD card detect GPIO pin, extend default state */
					default_hrefv60_cfg1 {
						pins = "GPIO95_E8";
						ste,config = <&gpio_in_pu>;
					};
					/* VMMCI level-shifter enable */
					default_hrefv60_cfg2 {
						pins = "GPIO169_D22";
						ste,config = <&gpio_out_hi>;
					};
					/* VMMCI level-shifter voltage select */
					default_hrefv60_cfg3 {
						pins = "GPIO5_AG6";
						ste,config = <&gpio_out_hi>;
					};
				};
			};
			ipgpio {
				/*
				 * XENON Flashgun on image processor GPIO (controlled from image
				 * processor firmware), mux in these image processor GPIO lines 0
				 * (XENON_FLASH_ID), 1 (XENON_READY) and there is an assistant
				 * LED on IP GPIO 4 (XENON_EN2) on altfunction C, that need bias
				 * from GPIO21 so pull up 0, 1 and drive 4 and GPIO21 low as output.
				 */
				ipgpio_hrefv60_mode: ipgpio_hrefv60 {
					hrefv60_mux {
						function = "ipgpio";
						groups = "ipgpio0_c_1", "ipgpio1_c_1", "ipgpio4_c_1";
					};
					hrefv60_cfg1 {
						pins = "GPIO6_AF6", "GPIO7_AG5";
						ste,config = <&in_pu>;
					};
					hrefv60_cfg2 {
						pins = "GPIO21_AB3";
						ste,config = <&gpio_out_lo>;
					};
					hrefv60_cfg3 {
						pins = "GPIO64_F3";
						ste,config = <&out_lo>;
					};
				};
			};
			etm {
				/*
				 * Drive D19-D23 for the ETM PTM trace interface low,
				 * (presumably pins are unconnected therefore grounded here,
				 * the "other alt C1" setting enables these pins)
				 */
				etm_hrefv60_mode: etm_hrefv60 {
					hrefv60_cfg1 {
						pins =
						"GPIO70_G5",
						"GPIO71_G4",
						"GPIO72_H4",
						"GPIO73_H3",
						"GPIO74_J3";
						ste,config = <&gpio_out_lo>;
					};
				 };
			};
			nahj {
				nahj_hrefv60_mode: nahj_hrefv60 {
					/* NAHJ CTRL on GPIO76 to low, CTRL_INV on GPIO216 to high */
					hrefv60_cfg1 {
						pins = "GPIO76_J2";
						ste,config = <&gpio_out_lo>;
					};
					hrefv60_cfg2 {
						pins = "GPIO216_AG12";
						ste,config = <&gpio_out_hi>;
					};
				 };
			};
			nfc {
				nfc_hrefv60_mode: nfc_hrefv60 {
					/* NFC ENA and RESET to low, pulldown IRQ line */
					hrefv60_cfg1 {
						pins =
						"GPIO77_H1", /* NFC_ENA */
						"GPIO142_C11"; /* NFC_RESET */
						ste,config = <&gpio_out_lo>;
					};
					hrefv60_cfg2 {
						pins = "GPIO144_B13"; /* NFC_IRQ */
						ste,config = <&gpio_in_pd>;
					};
				 };
			};
			force {
				force_hrefv60_mode: force_hrefv60 {
					hrefv60_cfg1 {
						pins = "GPIO91_B6"; /* FORCE_SENSING_INT */
						ste,config = <&gpio_in_pu>;
					};
					hrefv60_cfg2 {
						pins =
						"GPIO92_D6", /* FORCE_SENSING_RST */
						"GPIO97_D9"; /* FORCE_SENSING_WU */
						ste,config = <&gpio_out_lo>;
					};
				 };
			};
			dipro {
				dipro_hrefv60_mode: dipro_hrefv60 {
					hrefv60_cfg1 {
						pins = "GPIO139_C9"; /* DIPRO_INT */
						ste,config = <&gpio_in_pu>;
					};
				 };
			};
			vaudio_hf {
				vaudio_hf_hrefv60_mode: vaudio_hf_hrefv60 {
					/* Audio Amplifier HF enable GPIO */
					hrefv60_cfg1 {
						pins = "GPIO149_B14"; /* VAUDIO_HF_EN, enable MAX8968 */
						ste,config = <&gpio_out_hi>;
					};
				 };
			};
			gbf {
				gbf_hrefv60_mode: gbf_hrefv60 {
					/*
					 * GBF (GPS, Bluetooth, FM-radio) interface,
					 * pull low to reset state
					 */
					hrefv60_cfg1 {
						pins = "GPIO171_D23"; /* GBF_ENA_RESET */
						ste,config = <&gpio_out_lo>;
					};
				 };
			};
			hdtv {
				hdtv_hrefv60_mode: hdtv_hrefv60 {
					/* MSP : HDTV INTERFACE GPIO line */
					hrefv60_cfg1 {
						pins = "GPIO192_AJ27";
						ste,config = <&gpio_in_pd>;
					};
				 };
			};
			mcde {
				lcd_hrefv60_mode: lcd_hrefv60 {
					/*
					 * Display Interface 1 uses GPIO 65 for RST (reset).
					 * Display Interface 2 uses GPIO 66 for RST (reset).
					 * Drive DISP1 reset high (not reset), driver DISP2 reset low (reset)
					 */
					hrefv60_cfg1 {
						pins ="GPIO65_F1";
						ste,config = <&gpio_out_hi>;
					};
					hrefv60_cfg2 {
						pins ="GPIO66_G3";
						ste,config = <&gpio_out_lo>;
					};
				};
			};
			gpios {
				/* Dangling GPIO pins */
				gpios_hrefv60_mode: gpios_hrefv60 {
					default_cfg1 {
						/* Normally UART1 RXD, now dangling */
						pins = "GPIO4_AH6";
						ste,config = <&in_pu>;
					};
				};
			};
		};
	};
};
