Initial Contribution

msm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142

Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
diff --git a/arch/arm/mach-msm/gpiomux-8x60.c b/arch/arm/mach-msm/gpiomux-8x60.c
index 7b380b3..5cf0776 100644
--- a/arch/arm/mach-msm/gpiomux-8x60.c
+++ b/arch/arm/mach-msm/gpiomux-8x60.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -8,12 +8,1701 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
  */
+#include <linux/module.h>
+#include <mach/irqs.h>
+#include <asm/mach-types.h>
 #include "gpiomux.h"
+#include "gpiomux-8x60.h"
 
-struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {};
+static struct gpiomux_setting console_uart = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+/* The SPI configurations apply to GSBI1 and GSBI10 */
+static struct gpiomux_setting spi_active = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting spi_suspended_config = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting spi_suspended_cs_config = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+/* This I2C active configuration applies to GSBI3 and GSBI4 */
+static struct gpiomux_setting i2c_active = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting i2c_active_gsbi7 = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_12MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+/* This I2C suspended configuration applies to GSBI3, GSBI4 and GSBI7 */
+static struct gpiomux_setting i2c_suspended_config = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting gsbi8 = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting ps_hold = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_12MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting msm_snddev_active_config = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting msm_snddev_suspend_config = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting ebi2_a_d = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting ebi2_oe = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting ebi2_we = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting ebi2_cs2 = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting ebi2_cs3 = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+#if defined(CONFIG_USB_PEHCI_HCD) || defined(CONFIG_USB_PEHCI_HCD_MODULE)
+static struct gpiomux_setting ebi2_cs4 = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+#endif
+
+static struct gpiomux_setting ebi2_adv = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+#if defined(CONFIG_USB_PEHCI_HCD) || defined(CONFIG_USB_PEHCI_HCD_MODULE)
+static struct gpiomux_setting usb_isp1763_actv_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting usb_isp1763_susp_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+#endif
+
+static struct gpiomux_setting sdcc1_dat_0_3_cmd_actv_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_10MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting sdcc1_dat_4_7_cmd_actv_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_10MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting sdcc1_clk_actv_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting sdcc1_suspend_config = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting sdcc2_dat_0_3_cmd_actv_cfg = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_10MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting sdcc2_dat_4_7_cmd_actv_cfg = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_10MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting sdcc2_clk_actv_cfg = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting sdcc2_suspend_config = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting sdcc5_dat_0_3_cmd_actv_cfg = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_10MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting sdcc5_clk_actv_cfg = {
+	.func = GPIOMUX_FUNC_2,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting sdcc5_suspend_config = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting aux_pcm_active_config = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting aux_pcm_suspend_config = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting uart1dm_active = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting uart1dm_suspended = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mi2s_active_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting mi2s_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting lcdc_active_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting lcdc_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mdp_vsync_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting hdmi_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mdm2ap_status_active_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting mdm2ap_status_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting cam_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mdm2ap_sync_active_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting mdm2ap_sync_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting tm_active = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting tm_suspended = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting tma_active = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_6MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting ts_suspended = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mdp_vsync_active_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting hdmi_active_1_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting hdmi_active_2_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting hdmi_active_3_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting pmic_suspended_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting cam_active_1_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting cam_active_2_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting cam_active_3_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting cam_active_4_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting cam_active_5_cfg = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_4MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+#ifdef CONFIG_MSM_GSBI9_UART
+static struct gpiomux_setting uart9dm_active = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA ,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting gsbi9 = {
+	.func = GPIOMUX_FUNC_1,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+#endif
+
+static struct gpiomux_setting ap2mdm_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mdm2ap_status_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting mdm2ap_vfr_active_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_UP,
+};
+
+static struct gpiomux_setting mdm2ap_vfr_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_DOWN,
+};
+
+static struct gpiomux_setting mdm2ap_errfatal_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_16MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting ap2mdm_kpdpwr_n_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_8MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+
+static struct gpiomux_setting mdm2ap_vddmin_active_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct gpiomux_setting mdm2ap_vddmin_suspend_cfg = {
+	.func = GPIOMUX_FUNC_GPIO,
+	.drv = GPIOMUX_DRV_2MA,
+	.pull = GPIOMUX_PULL_NONE,
+};
+
+static struct msm_gpiomux_config msm8x60_gsbi_configs[] __initdata = {
+	{
+		.gpio      = 33,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+	{
+		.gpio      = 34,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+	{
+		.gpio      = 35,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_cs_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+	{
+		.gpio      = 36,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+	{
+		.gpio      = 43,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &i2c_suspended_config,
+			[GPIOMUX_ACTIVE]    = &i2c_active,
+		},
+	},
+	{
+		.gpio      = 44,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &i2c_suspended_config,
+			[GPIOMUX_ACTIVE]    = &i2c_active,
+		},
+	},
+	{
+		.gpio      = 47,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &i2c_suspended_config,
+			[GPIOMUX_ACTIVE]    = &i2c_active,
+		},
+	},
+	{
+		.gpio      = 48,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &i2c_suspended_config,
+			[GPIOMUX_ACTIVE]    = &i2c_active,
+		},
+	},
+	{
+		.gpio      = 59,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &i2c_suspended_config,
+			[GPIOMUX_ACTIVE]    = &i2c_active_gsbi7,
+		},
+	},
+	{
+		.gpio      = 60,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &i2c_suspended_config,
+			[GPIOMUX_ACTIVE]    = &i2c_active_gsbi7,
+		},
+	},
+	{
+		.gpio      = 64,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &gsbi8,
+		},
+	},
+	{
+		.gpio      = 65,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &gsbi8,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_fluid_gsbi_configs[] __initdata = {
+	{
+		.gpio      = 70,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+	{
+		.gpio      = 72,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_cs_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+	{
+		.gpio      = 73,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &spi_suspended_config,
+			[GPIOMUX_ACTIVE]    = &spi_active,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_ebi2_configs[] __initdata = {
+	{
+		.gpio      = 40,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_cs2,
+		},
+	},
+	{
+		.gpio      = 123,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 124,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 125,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 126,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 127,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 128,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 129,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 130,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+#if defined(CONFIG_USB_PEHCI_HCD) || defined(CONFIG_USB_PEHCI_HCD_MODULE)
+	/* ISP VDD_3V3_EN */
+	{
+		.gpio      = 132,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_cs4,
+		},
+	},
+#endif
+	{
+		.gpio      = 133,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_cs3,
+		},
+	},
+	{
+		.gpio      = 135,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 136,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 137,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 138,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 139,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 140,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 141,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 142,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 143,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 144,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 145,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 146,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 147,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 148,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 149,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 150,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_a_d,
+		},
+	},
+	{
+		.gpio      = 151,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_oe,
+		},
+	},
+	{
+		.gpio      = 153,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_adv,
+		},
+	},
+	{
+		.gpio      = 157,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ebi2_we,
+		},
+	},
+};
+
+#if defined(CONFIG_USB_PEHCI_HCD) || defined(CONFIG_USB_PEHCI_HCD_MODULE)
+static struct msm_gpiomux_config msm8x60_isp_usb_configs[] __initdata = {
+	{
+		.gpio      = 117,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &usb_isp1763_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &usb_isp1763_susp_cfg,
+		},
+	},
+	{
+		.gpio      = 152,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &usb_isp1763_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &usb_isp1763_susp_cfg,
+		},
+	},
+
+};
+#endif
+
+static struct msm_gpiomux_config msm8x60_uart_configs[] __initdata = {
+	{ /* UARTDM_TX */
+		.gpio      = 53,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &uart1dm_active,
+			[GPIOMUX_SUSPENDED] = &uart1dm_suspended,
+		},
+	},
+	{ /* UARTDM_RX */
+		.gpio      = 54,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &uart1dm_active,
+			[GPIOMUX_SUSPENDED] = &uart1dm_suspended,
+		},
+	},
+	{ /* UARTDM_CTS */
+		.gpio      = 55,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &uart1dm_active,
+			[GPIOMUX_SUSPENDED] = &uart1dm_suspended,
+		},
+	},
+	{ /* UARTDM_RFR */
+		.gpio      = 56,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &uart1dm_active,
+			[GPIOMUX_SUSPENDED] = &uart1dm_suspended,
+		},
+	},
+	{
+		.gpio      = 115,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &console_uart,
+		},
+	},
+	{
+		.gpio      = 116,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &console_uart,
+		},
+	},
+#if !defined(CONFIG_USB_PEHCI_HCD) && !defined(CONFIG_USB_PEHCI_HCD_MODULE)
+	/* USB ISP1763 may also use 117 GPIO */
+	{
+		.gpio      = 117,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &console_uart,
+		},
+	},
+#endif
+	{
+		.gpio      = 118,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &console_uart,
+		},
+	},
+};
+
+#ifdef CONFIG_MSM_GSBI9_UART
+static struct msm_gpiomux_config msm8x60_charm_uart_configs[] __initdata = {
+	{ /* UART9DM  RX */
+		.gpio	   = 66,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &uart9dm_active,
+			[GPIOMUX_SUSPENDED] = &gsbi9,
+		},
+	},
+	{ /* UART9DM TX */
+		.gpio	   = 67,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &uart9dm_active,
+			[GPIOMUX_SUSPENDED] = &gsbi9,
+		},
+	},
+};
+#endif
+
+static struct msm_gpiomux_config msm8x60_ts_configs[] __initdata = {
+	{
+		/* TS_ATTN */
+		.gpio = 58,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ts_suspended,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_tmg200_configs[] __initdata = {
+	{
+		.gpio = 61,
+		.settings = {
+			[GPIOMUX_ACTIVE] = &tm_active,
+			[GPIOMUX_SUSPENDED] = &tm_suspended,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_tma300_configs[] __initdata = {
+	{
+		.gpio = 61,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &tma_active,
+			[GPIOMUX_SUSPENDED] = &tm_suspended,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_aux_pcm_configs[] __initdata = {
+	{
+		.gpio = 111,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &aux_pcm_active_config,
+			[GPIOMUX_SUSPENDED] = &aux_pcm_suspend_config,
+		},
+	},
+	{
+		.gpio = 112,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &aux_pcm_active_config,
+			[GPIOMUX_SUSPENDED] = &aux_pcm_suspend_config,
+		},
+	},
+	{
+		.gpio = 113,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &aux_pcm_active_config,
+			[GPIOMUX_SUSPENDED] = &aux_pcm_suspend_config,
+		},
+	},
+	{
+		.gpio = 114,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &aux_pcm_active_config,
+			[GPIOMUX_SUSPENDED] = &aux_pcm_suspend_config,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_sdc_configs[] __initdata = {
+	/* SDCC1 data[0] */
+	{
+		.gpio = 159,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[1] */
+	{
+		.gpio = 160,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[2] */
+	{
+		.gpio = 161,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[3] */
+	{
+		.gpio = 162,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[4] */
+	{
+		.gpio = 163,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[5] */
+	{
+		.gpio = 164,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[6] */
+	{
+		.gpio = 165,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 data[7] */
+	{
+		.gpio = 166,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 CLK */
+	{
+		.gpio = 167,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_clk_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+	/* SDCC1 CMD */
+	{
+		.gpio = 168,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc1_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc1_suspend_config,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_charm_sdc_configs[] __initdata = {
+	/* SDCC5 cmd */
+	{
+		.gpio = 95,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc5_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc5_suspend_config,
+		},
+	},
+	/* SDCC5 data[3]*/
+	{
+		.gpio = 96,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc5_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc5_suspend_config,
+		},
+	},
+	/* SDCC5 clk */
+	{
+		.gpio = 97,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc5_clk_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc5_suspend_config,
+		},
+	},
+	/* SDCC5 data[2]*/
+	{
+		.gpio = 98,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc5_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc5_suspend_config,
+		},
+	},
+	/* SDCC5 data[1]*/
+	{
+		.gpio = 99,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc5_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc5_suspend_config,
+		},
+	},
+	/* SDCC5 data[0]*/
+	{
+		.gpio = 100,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc5_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc5_suspend_config,
+		},
+	},
+	/* MDM2AP_SYNC */
+	{
+		.gpio = 129,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mdm2ap_sync_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mdm2ap_sync_suspend_cfg,
+		},
+	},
+
+	/* MDM2AP_VDDMIN */
+	{
+		.gpio = 140,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mdm2ap_vddmin_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mdm2ap_vddmin_suspend_cfg,
+		},
+	},
+	/* SDCC2 data[0] */
+	{
+		.gpio = 143,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[1] */
+	{
+		.gpio = 144,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[2] */
+	{
+		.gpio = 145,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[3] */
+	{
+		.gpio = 146,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[4] */
+	{
+		.gpio = 147,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[5] */
+	{
+		.gpio = 148,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[6] */
+	{
+		.gpio = 149,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 data[7] */
+	{
+		.gpio = 150,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_4_7_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+	/* SDCC2 CMD */
+	{
+		.gpio = 151,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_dat_0_3_cmd_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+
+	/* SDCC2 CLK */
+	{
+		.gpio = 152,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &sdcc2_clk_actv_cfg,
+			[GPIOMUX_SUSPENDED] = &sdcc2_suspend_config,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_snd_configs[] __initdata = {
+	{
+		.gpio = 108,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &msm_snddev_active_config,
+			[GPIOMUX_SUSPENDED] = &msm_snddev_suspend_config,
+		},
+	},
+	{
+		.gpio = 109,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &msm_snddev_active_config,
+			[GPIOMUX_SUSPENDED] = &msm_snddev_suspend_config,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_mi2s_configs[] __initdata = {
+	/* MI2S WS */
+	{
+		.gpio = 101,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mi2s_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mi2s_suspend_cfg,
+		},
+	},
+	/* MI2S SCLK */
+	{
+		.gpio = 102,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mi2s_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mi2s_suspend_cfg,
+		},
+	},
+	/* MI2S MCLK */
+	{
+		.gpio = 103,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mi2s_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mi2s_suspend_cfg,
+		},
+	},
+	/* MI2S SD3 */
+	{
+		.gpio = 107,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mi2s_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mi2s_suspend_cfg,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_lcdc_configs[] __initdata = {
+	/* lcdc_pclk */
+	{
+		.gpio = 0,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_hsync */
+	{
+		.gpio = 1,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_vsync */
+	{
+		.gpio = 2,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_den */
+	{
+		.gpio = 3,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red7 */
+	{
+		.gpio = 4,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red6 */
+	{
+		.gpio = 5,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red5 */
+	{
+		.gpio = 6,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red4 */
+	{
+		.gpio = 7,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red3 */
+	{
+		.gpio = 8,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red2 */
+	{
+		.gpio = 9,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red1 */
+	{
+		.gpio = 10,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_red0 */
+	{
+		.gpio = 11,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn7 */
+	{
+		.gpio = 12,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn6 */
+	{
+		.gpio = 13,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn5 */
+	{
+		.gpio = 14,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn4 */
+	{
+		.gpio = 15,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn3 */
+	{
+		.gpio = 16,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn2 */
+	{
+		.gpio = 17,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn1 */
+	{
+		.gpio = 18,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_grn0 */
+	{
+		.gpio = 19,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu7 */
+	{
+		.gpio = 20,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu6 */
+	{
+		.gpio = 21,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu5 */
+	{
+		.gpio = 22,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu4 */
+	{
+		.gpio = 23,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu3 */
+	{
+		.gpio = 24,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu2 */
+	{
+		.gpio = 25,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu1 */
+	{
+		.gpio = 26,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+	/* lcdc_blu0 */
+	{
+		.gpio = 27,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &lcdc_active_cfg,
+			[GPIOMUX_SUSPENDED] = &lcdc_suspend_cfg,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_mdp_vsync_configs[] __initdata = {
+	{
+		.gpio = 28,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mdp_vsync_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mdp_vsync_suspend_cfg,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_hdmi_configs[] __initdata = {
+	{
+		.gpio = 169,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &hdmi_active_1_cfg,
+			[GPIOMUX_SUSPENDED] = &hdmi_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 170,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &hdmi_active_2_cfg,
+			[GPIOMUX_SUSPENDED] = &hdmi_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 171,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &hdmi_active_2_cfg,
+			[GPIOMUX_SUSPENDED] = &hdmi_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 172,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &hdmi_active_3_cfg,
+			[GPIOMUX_SUSPENDED] = &hdmi_suspend_cfg,
+		},
+	},
+};
+
+/* Because PMIC drivers do not use gpio-management routines and PMIC
+ * gpios must never sleep, a "good enough" config is obtained by placing
+ * the active config in the 'suspended' slot and leaving the active
+ * config invalid: the suspended config will be installed at boot
+ * and never replaced.
+ */
+
+static struct msm_gpiomux_config msm8x60_pmic_configs[] __initdata = {
+	{
+		.gpio = 88,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &pmic_suspended_cfg,
+		},
+	},
+	{
+		.gpio = 91,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &pmic_suspended_cfg,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_common_configs[] __initdata = {
+	/* MDM2AP_STATUS */
+	{
+		.gpio = 77,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &mdm2ap_status_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mdm2ap_status_suspend_cfg,
+		},
+	},
+	/* PS_HOLD */
+	{
+		.gpio      = 92,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ps_hold,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_cam_configs[] __initdata = {
+	{
+		.gpio = 29,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_2_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 30,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_1_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 31,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_2_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 32,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_5_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 42,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_2_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 47,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_3_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 48,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_3_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 105,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_4_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+	{
+		.gpio = 106,
+		.settings = {
+			[GPIOMUX_ACTIVE]    = &cam_active_4_cfg,
+			[GPIOMUX_SUSPENDED] = &cam_suspend_cfg,
+		},
+	},
+};
+
+static struct msm_gpiomux_config msm8x60_charm_configs[] __initdata = {
+	/* AP2MDM_WAKEUP */
+	{
+		.gpio = 135,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ap2mdm_cfg,
+		}
+	},
+	/* MDM2AP_VFR */
+	{
+		.gpio = 94,
+		.settings = {
+			[GPIOMUX_ACTIVE] = &mdm2ap_vfr_active_cfg,
+			[GPIOMUX_SUSPENDED] = &mdm2ap_vfr_suspend_cfg,
+		}
+	},
+	/* AP2MDM_STATUS */
+	{
+		.gpio = 136,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ap2mdm_cfg,
+		}
+	},
+	/* MDM2AP_STATUS */
+	{
+		.gpio = 134,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &mdm2ap_status_cfg,
+		}
+	},
+	/* MDM2AP_WAKEUP */
+	{
+		.gpio = 40,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ap2mdm_cfg,
+		}
+	},
+	/* MDM2AP_ERRFATAL */
+	{
+		.gpio = 133,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &mdm2ap_errfatal_cfg,
+		}
+	},
+	/* AP2MDM_ERRFATAL */
+	{
+		.gpio = 93,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ap2mdm_cfg,
+		}
+	},
+	/* AP2MDM_KPDPWR_N */
+	{
+		.gpio = 132,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ap2mdm_kpdpwr_n_cfg,
+		}
+	},
+	/* AP2MDM_PMIC_RESET_N */
+	{
+		.gpio = 131,
+		.settings = {
+			[GPIOMUX_SUSPENDED] = &ap2mdm_kpdpwr_n_cfg,
+		}
+	}
+};
+
+struct msm_gpiomux_configs
+msm8x60_surf_ffa_gpiomux_cfgs[] __initdata = {
+	{msm8x60_gsbi_configs, ARRAY_SIZE(msm8x60_gsbi_configs)},
+	{msm8x60_ebi2_configs, ARRAY_SIZE(msm8x60_ebi2_configs)},
+	{msm8x60_uart_configs, ARRAY_SIZE(msm8x60_uart_configs)},
+#if defined(CONFIG_USB_PEHCI_HCD) || defined(CONFIG_USB_PEHCI_HCD_MODULE)
+	{msm8x60_isp_usb_configs, ARRAY_SIZE(msm8x60_isp_usb_configs)},
+#endif
+	{msm8x60_ts_configs, ARRAY_SIZE(msm8x60_ts_configs)},
+	{msm8x60_aux_pcm_configs, ARRAY_SIZE(msm8x60_aux_pcm_configs)},
+	{msm8x60_sdc_configs, ARRAY_SIZE(msm8x60_sdc_configs)},
+	{msm8x60_snd_configs, ARRAY_SIZE(msm8x60_snd_configs)},
+	{msm8x60_mi2s_configs, ARRAY_SIZE(msm8x60_mi2s_configs)},
+	{msm8x60_lcdc_configs, ARRAY_SIZE(msm8x60_lcdc_configs)},
+	{msm8x60_mdp_vsync_configs, ARRAY_SIZE(msm8x60_mdp_vsync_configs)},
+	{msm8x60_hdmi_configs, ARRAY_SIZE(msm8x60_hdmi_configs)},
+	{msm8x60_pmic_configs, ARRAY_SIZE(msm8x60_pmic_configs)},
+	{msm8x60_common_configs, ARRAY_SIZE(msm8x60_common_configs)},
+	{msm8x60_cam_configs, ARRAY_SIZE(msm8x60_cam_configs)},
+	{msm8x60_tmg200_configs, ARRAY_SIZE(msm8x60_tmg200_configs)},
+	{NULL, 0},
+};
+
+struct msm_gpiomux_configs
+msm8x60_fluid_gpiomux_cfgs[] __initdata = {
+	{msm8x60_gsbi_configs, ARRAY_SIZE(msm8x60_gsbi_configs)},
+	{msm8x60_fluid_gsbi_configs, ARRAY_SIZE(msm8x60_fluid_gsbi_configs)},
+	{msm8x60_ebi2_configs, ARRAY_SIZE(msm8x60_ebi2_configs)},
+	{msm8x60_uart_configs, ARRAY_SIZE(msm8x60_uart_configs)},
+	{msm8x60_ts_configs, ARRAY_SIZE(msm8x60_ts_configs)},
+	{msm8x60_aux_pcm_configs, ARRAY_SIZE(msm8x60_aux_pcm_configs)},
+	{msm8x60_sdc_configs, ARRAY_SIZE(msm8x60_sdc_configs)},
+	{msm8x60_snd_configs, ARRAY_SIZE(msm8x60_snd_configs)},
+	{msm8x60_mi2s_configs, ARRAY_SIZE(msm8x60_mi2s_configs)},
+	{msm8x60_lcdc_configs, ARRAY_SIZE(msm8x60_lcdc_configs)},
+	{msm8x60_mdp_vsync_configs, ARRAY_SIZE(msm8x60_mdp_vsync_configs)},
+	{msm8x60_hdmi_configs, ARRAY_SIZE(msm8x60_hdmi_configs)},
+	{msm8x60_pmic_configs, ARRAY_SIZE(msm8x60_pmic_configs)},
+	{msm8x60_common_configs, ARRAY_SIZE(msm8x60_common_configs)},
+	{msm8x60_cam_configs, ARRAY_SIZE(msm8x60_cam_configs)},
+	{msm8x60_tma300_configs, ARRAY_SIZE(msm8x60_tma300_configs)},
+	{NULL, 0},
+};
+
+struct msm_gpiomux_configs
+msm8x60_charm_gpiomux_cfgs[] __initdata = {
+	{msm8x60_gsbi_configs, ARRAY_SIZE(msm8x60_gsbi_configs)},
+	{msm8x60_uart_configs, ARRAY_SIZE(msm8x60_uart_configs)},
+#ifdef CONFIG_MSM_GSBI9_UART
+	{msm8x60_charm_uart_configs, ARRAY_SIZE(msm8x60_charm_uart_configs)},
+#endif
+	{msm8x60_ts_configs, ARRAY_SIZE(msm8x60_ts_configs)},
+	{msm8x60_aux_pcm_configs, ARRAY_SIZE(msm8x60_aux_pcm_configs)},
+	{msm8x60_sdc_configs, ARRAY_SIZE(msm8x60_sdc_configs)},
+	{msm8x60_snd_configs, ARRAY_SIZE(msm8x60_snd_configs)},
+	{msm8x60_mi2s_configs, ARRAY_SIZE(msm8x60_mi2s_configs)},
+	{msm8x60_lcdc_configs, ARRAY_SIZE(msm8x60_lcdc_configs)},
+	{msm8x60_mdp_vsync_configs, ARRAY_SIZE(msm8x60_mdp_vsync_configs)},
+	{msm8x60_hdmi_configs, ARRAY_SIZE(msm8x60_hdmi_configs)},
+	{msm8x60_pmic_configs, ARRAY_SIZE(msm8x60_pmic_configs)},
+	{msm8x60_common_configs, ARRAY_SIZE(msm8x60_common_configs)},
+	{msm8x60_cam_configs, ARRAY_SIZE(msm8x60_cam_configs)},
+	{msm8x60_tmg200_configs, ARRAY_SIZE(msm8x60_tmg200_configs)},
+	{msm8x60_charm_sdc_configs, ARRAY_SIZE(msm8x60_charm_sdc_configs)},
+	{msm8x60_charm_configs, ARRAY_SIZE(msm8x60_charm_configs)},
+	{NULL, 0},
+};
+
+void __init msm8x60_init_gpiomux(struct msm_gpiomux_configs *cfgs)
+{
+	int rc;
+
+	rc = msm_gpiomux_init(NR_GPIO_IRQS);
+	if (rc) {
+		pr_err("%s failure: %d\n", __func__, rc);
+		return;
+	}
+
+	while (cfgs->cfg) {
+		msm_gpiomux_install(cfgs->cfg, cfgs->ncfg);
+		++cfgs;
+	}
+}