msm: footswitch: Specify footswitch device struct for clk_get()

Use the device names to distinguish between clocks of the same
type rather than the clock name alone.

Signed-off-by: Matt Wagantall <mattw@codeaurora.org>
diff --git a/arch/arm/mach-msm/clock-7x30.c b/arch/arm/mach-msm/clock-7x30.c
index 344b354..3e50077 100644
--- a/arch/arm/mach-msm/clock-7x30.c
+++ b/arch/arm/mach-msm/clock-7x30.c
@@ -2760,7 +2760,9 @@
 	 * register (usually the ns register).
 	 */
 	OWN(APPS1,  6, "grp_2d_clk",	grp_2d_clk,	NULL),
+	OWN(APPS1,  6, "core_clk",	grp_2d_clk,	"footswitch-pcom.0"),
 	OWN(APPS1,  6, "grp_2d_pclk",	grp_2d_p_clk,	NULL),
+	OWN(APPS1,  6, "iface_clk",	grp_2d_p_clk,	"footswitch-pcom.0"),
 	OWN(APPS1, 31, "hdmi_clk",	hdmi_clk,	NULL),
 	OWN(APPS1,  0, "jpeg_clk",	jpeg_clk,	NULL),
 	OWN(APPS1,  0, "jpeg_pclk",	jpeg_p_clk,	NULL),
@@ -2778,18 +2780,25 @@
 	OWN(APPS1, 26, "sdac_clk",	sdac_clk,	NULL),
 	OWN(APPS1, 26, "sdac_m_clk",	sdac_m_clk,	NULL),
 	OWN(APPS1,  8, "vfe_clk",	vfe_clk,	NULL),
+	OWN(APPS1,  8, "core_clk",	vfe_clk,	"footswitch-pcom.8"),
 	OWN(APPS1,  8, "vfe_camif_clk", vfe_camif_clk,	NULL),
 	OWN(APPS1,  8, "vfe_mdc_clk",	vfe_mdc_clk,	NULL),
 	OWN(APPS1,  8, "vfe_pclk",	vfe_p_clk,	NULL),
+	OWN(APPS1,  8, "iface_clk",	vfe_p_clk,	"footswitch-pcom.8"),
 
 	OWN(APPS2,  0, "grp_clk",	grp_3d_clk,	NULL),
+	OWN(APPS2,  0, "core_clk",	grp_3d_clk,	"footswitch-pcom.2"),
 	OWN(APPS2,  0, "grp_pclk",	grp_3d_p_clk,	NULL),
+	OWN(APPS2,  0, "iface_clk",	grp_3d_p_clk,	"footswitch-pcom.2"),
 	{ CLK_LOOKUP("grp_src_clk",     grp_3d_src_clk.c, NULL),
 		O(APPS2), BIT(0), &p_grp_3d_clk.c },
+	{ CLK_LOOKUP("src_clk",     grp_3d_src_clk.c, "footswitch-pcom.2"),
+		O(APPS2), BIT(0), &p_grp_3d_clk.c },
 	OWN(APPS2,  0, "imem_clk",	imem_clk,	NULL),
 	OWN(APPS2,  4, "mdp_lcdc_pad_pclk_clk", mdp_lcdc_pad_pclk_clk, NULL),
 	OWN(APPS2,  4, "mdp_lcdc_pclk_clk", mdp_lcdc_pclk_clk, NULL),
 	OWN(APPS2,  4, "mdp_pclk",	mdp_p_clk,	NULL),
+	OWN(APPS2,  4, "iface_clk",	mdp_p_clk,	"footswitch-pcom.4"),
 	OWN(APPS2, 28, "mdp_vsync_clk", mdp_vsync_clk,	NULL),
 	OWN(APPS2,  5, "ref_clk",	tsif_ref_clk,	"msm_tsif.0"),
 	OWN(APPS2,  5, "iface_clk",	tsif_p_clk,	"msm_tsif.0"),
@@ -2838,18 +2847,24 @@
 	OWN(APPS3, 11, "csi_vfe_clk",	csi0_vfe_clk,	NULL),
 	OWN(APPS3, 11, "csi_pclk",	csi0_p_clk,	NULL),
 	OWN(APPS3,  0, "mdp_clk",	mdp_clk,	NULL),
+	OWN(APPS3,  0, "core_clk",	mdp_clk,	"footswitch-pcom.4"),
 	OWN(APPS3,  2, "mfc_clk",	mfc_clk,	NULL),
+	OWN(APPS3,  2, "core_clk",	mfc_clk,	"footswitch-pcom.5"),
 	OWN(APPS3,  2, "mfc_div2_clk",	mfc_div2_clk,	NULL),
 	OWN(APPS3,  2, "mfc_pclk",	mfc_p_clk,	NULL),
+	OWN(APPS3,  2, "iface_clk",	mfc_p_clk,	"footswitch-pcom.5"),
 	OWN(APPS3,  4, "vpe_clk",	vpe_clk,	NULL),
+	OWN(APPS3,  4, "core_clk",	vpe_clk,	"footswitch-pcom.9"),
 
 	OWN(GLBL,  8, "core_clk",	adm_clk,	"msm_dmov"),
 	{ CLK_LOOKUP("iface_clk",		adm_p_clk.c,	"msm_dmov"),
 		O(GLBL), BIT(13), &dummy_clk },
 	OWN(GLBL,  8, "core_clk",	ce_clk,		"qce.0"),
 	OWN(GLBL, 13, "rotator_clk",	axi_rotator_clk, NULL),
+	OWN(GLBL, 13, "core_clk",	axi_rotator_clk, "footswitch-pcom.6"),
 	OWN(GLBL, 13, "rotator_imem_clk", rotator_imem_clk, NULL),
 	OWN(GLBL, 13, "rotator_pclk",	rotator_p_clk,	NULL),
+	OWN(GLBL, 13, "iface_clk",	rotator_p_clk,	"footswitch-pcom.6"),
 	{ CLK_LOOKUP("iface_clk",     uart1dm_p_clk.c, "msm_serial_hs.0"),
 		O(GLBL), BIT(8), &dummy_clk },
 	{ CLK_LOOKUP("iface_clk",     uart2dm_p_clk.c, "msm_serial_hs.1"),
diff --git a/arch/arm/mach-msm/clock-8960.c b/arch/arm/mach-msm/clock-8960.c
index a574875..8cf34cc 100644
--- a/arch/arm/mach-msm/clock-8960.c
+++ b/arch/arm/mach-msm/clock-8960.c
@@ -4626,13 +4626,18 @@
 	CLK_LOOKUP("dsi_esc_clk",	dsi1_esc_clk.c,		NULL),
 	CLK_LOOKUP("dsi_esc_clk",	dsi2_esc_clk.c,		NULL),
 	CLK_LOOKUP("gfx2d0_clk",	gfx2d0_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		gfx2d0_clk.c,	"footswitch-8x60.0"),
 	CLK_LOOKUP("gfx2d1_clk",	gfx2d1_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		gfx2d1_clk.c,	"footswitch-8x60.1"),
 	CLK_LOOKUP("gfx3d_clk",		gfx3d_clk.c,		NULL),
-	CLK_LOOKUP("ijpeg_axi_clk",	ijpeg_axi_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		gfx3d_clk.c,	"footswitch-8x60.2"),
+	CLK_LOOKUP("bus_clk",		ijpeg_axi_clk.c, "footswitch-8x60.3"),
 	CLK_LOOKUP("imem_axi_clk",	imem_axi_clk.c,		NULL),
 	CLK_LOOKUP("ijpeg_clk",         ijpeg_clk.c,            NULL),
+	CLK_LOOKUP("core_clk",		ijpeg_clk.c,	"footswitch-8x60.3"),
 	CLK_LOOKUP("jpegd_clk",		jpegd_clk.c,		NULL),
 	CLK_LOOKUP("mdp_clk",		mdp_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		mdp_clk.c,	"footswitch-8x60.4"),
 	CLK_LOOKUP("mdp_vsync_clk",	mdp_vsync_clk.c,	NULL),
 	CLK_LOOKUP("lut_mdp",		lut_mdp_clk.c,		NULL),
 	CLK_LOOKUP("qdss_pclk",		qdss_p_clk.c,		NULL),
@@ -4642,23 +4647,27 @@
 	CLK_LOOKUP("qdss_tsctr_clk",	qdss_tsctr_clk.c,	NULL),
 	CLK_LOOKUP("qdss_stm_clk",	qdss_stm_clk.c,		NULL),
 	CLK_LOOKUP("rot_clk",		rot_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		rot_clk.c,	"footswitch-8x60.6"),
 	CLK_LOOKUP("tv_src_clk",	tv_src_clk.c,		NULL),
 	CLK_LOOKUP("tv_enc_clk",	tv_enc_clk.c,		NULL),
 	CLK_LOOKUP("tv_dac_clk",	tv_dac_clk.c,		NULL),
 	CLK_LOOKUP("vcodec_clk",	vcodec_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		vcodec_clk.c,	"footswitch-8x60.7"),
 	CLK_LOOKUP("mdp_tv_clk",	mdp_tv_clk.c,		NULL),
 	CLK_LOOKUP("hdmi_clk",		hdmi_tv_clk.c,		NULL),
 	CLK_LOOKUP("hdmi_app_clk",	hdmi_app_clk.c,		NULL),
 	CLK_LOOKUP("vpe_clk",		vpe_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		vpe_clk.c,	"footswitch-8x60.9"),
 	CLK_LOOKUP("vfe_clk",		vfe_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		vfe_clk.c,	"footswitch-8x60.8"),
 	CLK_LOOKUP("csi_vfe_clk",	csi_vfe_clk.c,		NULL),
-	CLK_LOOKUP("vfe_axi_clk",	vfe_axi_clk.c,		NULL),
-	CLK_LOOKUP("mdp_axi_clk",	mdp_axi_clk.c,		NULL),
-	CLK_LOOKUP("rot_axi_clk",	rot_axi_clk.c,		NULL),
-	CLK_LOOKUP("vcodec_axi_clk",	vcodec_axi_clk.c,	NULL),
-	CLK_LOOKUP("vcodec_axi_a_clk",	vcodec_axi_a_clk.c,	NULL),
-	CLK_LOOKUP("vcodec_axi_b_clk",	vcodec_axi_b_clk.c,	NULL),
-	CLK_LOOKUP("vpe_axi_clk",	vpe_axi_clk.c,		NULL),
+	CLK_LOOKUP("bus_clk",		vfe_axi_clk.c,	"footswitch-8x60.8"),
+	CLK_LOOKUP("bus_clk",		mdp_axi_clk.c,	"footswitch-8x60.4"),
+	CLK_LOOKUP("bus_clk",		rot_axi_clk.c,	"footswitch-8x60.6"),
+	CLK_LOOKUP("bus_clk",		vcodec_axi_clk.c, "footswitch-8x60.7"),
+	CLK_LOOKUP("bus_a_clk",	       vcodec_axi_a_clk.c, "footswitch-8x60.7"),
+	CLK_LOOKUP("bus_b_clk",        vcodec_axi_b_clk.c, "footswitch-8x60.7"),
+	CLK_LOOKUP("bus_clk",		vpe_axi_clk.c,	"footswitch-8x60.9"),
 	CLK_LOOKUP("amp_pclk",		amp_p_clk.c,		NULL),
 	CLK_LOOKUP("csi_pclk",		csi_p_clk.c,		NULL),
 	CLK_LOOKUP("dsi_m_pclk",	dsi1_m_p_clk.c,		NULL),
@@ -4666,20 +4675,29 @@
 	CLK_LOOKUP("dsi_m_pclk",	dsi2_m_p_clk.c,		NULL),
 	CLK_LOOKUP("dsi_s_pclk",	dsi2_s_p_clk.c,		NULL),
 	CLK_LOOKUP("gfx2d0_pclk",	gfx2d0_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		gfx2d0_p_clk.c,	"footswitch-8x60.0"),
 	CLK_LOOKUP("gfx2d1_pclk",	gfx2d1_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		gfx2d1_p_clk.c,	"footswitch-8x60.1"),
 	CLK_LOOKUP("gfx3d_pclk",	gfx3d_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		gfx3d_p_clk.c,	"footswitch-8x60.2"),
 	CLK_LOOKUP("hdmi_m_pclk",	hdmi_m_p_clk.c,		NULL),
 	CLK_LOOKUP("hdmi_s_pclk",	hdmi_s_p_clk.c,		NULL),
 	CLK_LOOKUP("ijpeg_pclk",	ijpeg_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		ijpeg_p_clk.c,	"footswitch-8x60.3"),
 	CLK_LOOKUP("jpegd_pclk",	jpegd_p_clk.c,		NULL),
 	CLK_LOOKUP("imem_pclk",		imem_p_clk.c,		NULL),
 	CLK_LOOKUP("mdp_pclk",		mdp_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		mdp_p_clk.c,	"footswitch-8x60.4"),
 	CLK_LOOKUP("smmu_pclk",		smmu_p_clk.c,		NULL),
 	CLK_LOOKUP("rotator_pclk",	rot_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		rot_p_clk.c,	"footswitch-8x60.6"),
 	CLK_LOOKUP("tv_enc_pclk",	tv_enc_p_clk.c,		NULL),
 	CLK_LOOKUP("vcodec_pclk",	vcodec_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		vcodec_p_clk.c,	"footswitch-8x60.7"),
 	CLK_LOOKUP("vfe_pclk",		vfe_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		vfe_p_clk.c,	"footswitch-8x60.8"),
 	CLK_LOOKUP("vpe_pclk",		vpe_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		vpe_p_clk.c,	"footswitch-8x60.9"),
 	CLK_LOOKUP("mi2s_bit_clk",	mi2s_bit_clk.c,		NULL),
 	CLK_LOOKUP("mi2s_osr_clk",	mi2s_osr_clk.c,		NULL),
 	CLK_LOOKUP("i2s_mic_bit_clk",	codec_i2s_mic_bit_clk.c,	NULL),
diff --git a/arch/arm/mach-msm/clock-8x60.c b/arch/arm/mach-msm/clock-8x60.c
index e85d72a..fbefc47 100644
--- a/arch/arm/mach-msm/clock-8x60.c
+++ b/arch/arm/mach-msm/clock-8x60.c
@@ -3619,36 +3619,45 @@
 	CLK_LOOKUP("dsi_byte_div_clk",	dsi_byte_clk.c,		NULL),
 	CLK_LOOKUP("dsi_esc_clk",	dsi_esc_clk.c,		NULL),
 	CLK_LOOKUP("gfx2d0_clk",	gfx2d0_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		gfx2d0_clk.c,	"footswitch-8x60.0"),
 	CLK_LOOKUP("gfx2d1_clk",	gfx2d1_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		gfx2d1_clk.c,	"footswitch-8x60.1"),
 	CLK_LOOKUP("gfx3d_clk",		gfx3d_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		gfx3d_clk.c,	"footswitch-8x60.2"),
 	CLK_LOOKUP("ijpeg_clk",		ijpeg_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		ijpeg_clk.c,	"footswitch-8x60.3"),
 	CLK_LOOKUP("jpegd_clk",		jpegd_clk.c,		NULL),
 	CLK_LOOKUP("mdp_clk",		mdp_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		mdp_clk.c,	"footswitch-8x60.4"),
 	CLK_LOOKUP("mdp_vsync_clk",	mdp_vsync_clk.c,		NULL),
 	CLK_LOOKUP("pixel_lcdc_clk",	pixel_lcdc_clk.c,		NULL),
 	CLK_LOOKUP("pixel_mdp_clk",	pixel_mdp_clk.c,		NULL),
 	CLK_LOOKUP("rot_clk",		rot_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		rot_clk.c,	"footswitch-8x60.6"),
 	CLK_LOOKUP("tv_enc_clk",	tv_enc_clk.c,		NULL),
 	CLK_LOOKUP("tv_dac_clk",	tv_dac_clk.c,		NULL),
 	CLK_LOOKUP("vcodec_clk",	vcodec_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		vcodec_clk.c,	"footswitch-8x60.7"),
 	CLK_LOOKUP("mdp_tv_clk",	mdp_tv_clk.c,		NULL),
 	CLK_LOOKUP("hdmi_clk",		hdmi_tv_clk.c,		NULL),
 	CLK_LOOKUP("tv_src_clk",	tv_src_clk.c,		NULL),
 	CLK_LOOKUP("hdmi_app_clk",	hdmi_app_clk.c,		NULL),
 	CLK_LOOKUP("vpe_clk",		vpe_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		vpe_clk.c,	"footswitch-8x60.9"),
 	CLK_LOOKUP("csi_vfe_clk",	csi0_vfe_clk.c,		NULL),
 	CLK_LOOKUP("csi_vfe_clk",	csi1_vfe_clk.c, "msm_camera_ov7692.0"),
 	CLK_LOOKUP("csi_vfe_clk",	csi1_vfe_clk.c, "msm_camera_ov9726.0"),
 	CLK_LOOKUP("vfe_clk",		vfe_clk.c,		NULL),
+	CLK_LOOKUP("core_clk",		vfe_clk.c,	"footswitch-8x60.8"),
 	CLK_LOOKUP("smmu_jpegd_clk",	jpegd_axi_clk.c,		NULL),
 	CLK_LOOKUP("smmu_vfe_clk",	vfe_axi_clk.c,		NULL),
-	CLK_LOOKUP("vfe_axi_clk",	vfe_axi_clk.c,		NULL),
-	CLK_LOOKUP("ijpeg_axi_clk",	ijpeg_axi_clk.c,		NULL),
+	CLK_LOOKUP("bus_clk",		vfe_axi_clk.c,	"footswitch-8x60.8"),
+	CLK_LOOKUP("bus_clk",		ijpeg_axi_clk.c, "footswitch-8x60.3"),
 	CLK_LOOKUP("imem_axi_clk",	imem_axi_clk.c,		NULL),
-	CLK_LOOKUP("mdp_axi_clk",	mdp_axi_clk.c,		NULL),
-	CLK_LOOKUP("rot_axi_clk",	rot_axi_clk.c,		NULL),
-	CLK_LOOKUP("vcodec_axi_clk",	vcodec_axi_clk.c,		NULL),
-	CLK_LOOKUP("vpe_axi_clk",	vpe_axi_clk.c,		NULL),
+	CLK_LOOKUP("bus_clk",		mdp_axi_clk.c,	 "footswitch-8x60.4"),
+	CLK_LOOKUP("bus_clk",		rot_axi_clk.c,	 "footswitch-8x60.6"),
+	CLK_LOOKUP("bus_clk",		vcodec_axi_clk.c, "footswitch-8x60.7"),
+	CLK_LOOKUP("bus_clk",		vpe_axi_clk.c,	 "footswitch-8x60.9"),
 	CLK_LOOKUP("amp_pclk",		amp_p_clk.c,		NULL),
 	CLK_LOOKUP("csi_pclk",		csi0_p_clk.c,		NULL),
 	CLK_LOOKUP("csi_pclk",		csi1_p_clk.c, "msm_camera_ov7692.0"),
@@ -3656,20 +3665,29 @@
 	CLK_LOOKUP("dsi_m_pclk",	dsi_m_p_clk.c,		NULL),
 	CLK_LOOKUP("dsi_s_pclk",	dsi_s_p_clk.c,		NULL),
 	CLK_LOOKUP("gfx2d0_pclk",	gfx2d0_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		gfx2d0_p_clk.c,	"footswitch-8x60.0"),
 	CLK_LOOKUP("gfx2d1_pclk",	gfx2d1_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		gfx2d1_p_clk.c,	"footswitch-8x60.1"),
 	CLK_LOOKUP("gfx3d_pclk",	gfx3d_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		gfx3d_p_clk.c,	"footswitch-8x60.2"),
 	CLK_LOOKUP("hdmi_m_pclk",	hdmi_m_p_clk.c,		NULL),
 	CLK_LOOKUP("hdmi_s_pclk",	hdmi_s_p_clk.c,		NULL),
 	CLK_LOOKUP("ijpeg_pclk",	ijpeg_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		ijpeg_p_clk.c,	"footswitch-8x60.3"),
 	CLK_LOOKUP("jpegd_pclk",	jpegd_p_clk.c,		NULL),
 	CLK_LOOKUP("imem_pclk",		imem_p_clk.c,		NULL),
 	CLK_LOOKUP("mdp_pclk",		mdp_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		mdp_p_clk.c,	"footswitch-8x60.4"),
 	CLK_LOOKUP("smmu_pclk",		smmu_p_clk.c,		NULL),
 	CLK_LOOKUP("rotator_pclk",	rot_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		rot_p_clk.c,	"footswitch-8x60.6"),
 	CLK_LOOKUP("tv_enc_pclk",	tv_enc_p_clk.c,		NULL),
 	CLK_LOOKUP("vcodec_pclk",	vcodec_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		vcodec_p_clk.c, "footswitch-8x60.7"),
 	CLK_LOOKUP("vfe_pclk",		vfe_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		vfe_p_clk.c,	"footswitch-8x60.8"),
 	CLK_LOOKUP("vpe_pclk",		vpe_p_clk.c,		NULL),
+	CLK_LOOKUP("iface_clk",		vpe_p_clk.c,	"footswitch-8x60.9"),
 	CLK_LOOKUP("mi2s_osr_clk",	mi2s_osr_clk.c,		NULL),
 	CLK_LOOKUP("mi2s_bit_clk",	mi2s_bit_clk.c,		NULL),
 	CLK_LOOKUP("i2s_mic_osr_clk",	codec_i2s_mic_osr_clk.c,	NULL),
diff --git a/arch/arm/mach-msm/clock-pcom-lookup.c b/arch/arm/mach-msm/clock-pcom-lookup.c
index 9e48508..1c378df 100644
--- a/arch/arm/mach-msm/clock-pcom-lookup.c
+++ b/arch/arm/mach-msm/clock-pcom-lookup.c
@@ -198,8 +198,10 @@
 	CLK_LOOKUP("ecodec_clk",	ecodec_clk.c,	NULL),
 	CLK_LOOKUP("gp_clk",		gp_clk.c,		NULL),
 	CLK_LOOKUP("grp_clk",		grp_3d_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		grp_3d_clk.c,	"footswitch-pcom.2"),
 	CLK_LOOKUP("grp_pclk",		grp_3d_p_clk.c,	NULL),
 	CLK_LOOKUP("core_clk",		i2c_clk.c,	"msm_i2c.0"),
+	CLK_LOOKUP("iface_clk",		grp_3d_p_clk.c,	"footswitch-pcom.2"),
 	CLK_LOOKUP("icodec_rx_clk",	icodec_rx_clk.c,	NULL),
 	CLK_LOOKUP("icodec_tx_clk",	icodec_tx_clk.c,	NULL),
 	CLK_LOOKUP("imem_clk",		imem_clk.c,	NULL),
@@ -232,7 +234,9 @@
 	CLK_LOOKUP("usb_otg_clk",	usb_otg_clk.c,	NULL),
 	CLK_LOOKUP("usb_phy_clk",	usb_phy_clk.c,	NULL),
 	CLK_LOOKUP("vdc_clk",		vdc_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		vdc_clk.c,	"footswitch-pcom.7"),
 	CLK_LOOKUP("vfe_clk",		vfe_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		vfe_clk.c,	"footswitch-pcom.8"),
 	CLK_LOOKUP("vfe_mdc_clk",	vfe_mdc_clk.c,	NULL),
 
 	CLK_LOOKUP("ebi1_acpu_clk",	ebi_acpu_clk.c,	NULL),
@@ -271,7 +275,9 @@
 	CLK_LOOKUP("ecodec_clk",	ecodec_clk.c,	NULL),
 	CLK_LOOKUP("gp_clk",		gp_clk.c,	NULL),
 	CLK_LOOKUP("grp_clk",		grp_3d_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		grp_3d_clk.c,	"footswitch-pcom.2"),
 	CLK_LOOKUP("grp_pclk",		grp_3d_p_clk.c,	NULL),
+	CLK_LOOKUP("iface_clk",		grp_3d_p_clk.c,	"footswitch-pcom.2"),
 	CLK_LOOKUP("core_clk",		gsbi1_qup_clk.c, "qup_i2c.0"),
 	CLK_LOOKUP("core_clk",		gsbi2_qup_clk.c, "qup_i2c.1"),
 	CLK_LOOKUP("iface_clk",		gsbi1_qup_p_clk.c, "qup_i2c.0"),
@@ -308,7 +314,9 @@
 	CLK_LOOKUP("usb_hs_pclk",	usb_hs_p_clk.c,	NULL),
 	CLK_LOOKUP("usb_phy_clk",	usb_phy_clk.c,	NULL),
 	CLK_LOOKUP("vdc_clk",		vdc_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		vdc_clk.c,	"footswitch-pcom.7"),
 	CLK_LOOKUP("vfe_clk",		vfe_clk.c,	NULL),
+	CLK_LOOKUP("core_clk",		vfe_clk.c,	"footswitch-pcom.8"),
 	CLK_LOOKUP("vfe_mdc_clk",	vfe_mdc_clk.c,	NULL),
 
 	CLK_LOOKUP("ebi1_acpu_clk",	ebi_acpu_clk.c,	NULL),
diff --git a/arch/arm/mach-msm/footswitch-8x60.c b/arch/arm/mach-msm/footswitch-8x60.c
index 8bb2576..6ece538 100644
--- a/arch/arm/mach-msm/footswitch-8x60.c
+++ b/arch/arm/mach-msm/footswitch-8x60.c
@@ -70,9 +70,7 @@
 	int			bus_port1, bus_port2;
 	bool			is_enabled;
 	bool			is_claimed;
-	const char		*core_clk_name;
-	const char		*ahb_clk_name;
-	const char		*axi_clk_name;
+	const bool		has_axi_clk;
 	struct clk		*core_clk;
 	struct clk		*ahb_clk;
 	struct clk		*axi_clk;
@@ -94,9 +92,8 @@
 		int rate = fs->reset_rate ? fs->reset_rate : DEFAULT_CLK_RATE;
 		rc = clk_set_rate(fs->core_clk, rate);
 		if (rc) {
-			pr_err("%s: Failed to set %s rate to %d Hz.\n",
-				__func__, fs->core_clk_name,
-				fs->reset_rate);
+			pr_err("%s: Failed to set core_clk rate to %d Hz.\n",
+				__func__, fs->reset_rate);
 			return rc;
 		}
 	}
@@ -124,8 +121,8 @@
 	clk_disable(fs->core_clk);
 	if (fs->clk_state.core_clk_rate) {
 		if (clk_set_rate(fs->core_clk, fs->clk_state.core_clk_rate))
-			pr_err("%s: Failed to restore %s rate.\n",
-					__func__, fs->core_clk_name);
+			pr_err("%s: Failed to restore core_clk rate.\n",
+				__func__);
 	}
 }
 
@@ -425,8 +422,8 @@
 	.disable = gfx2d_footswitch_disable,
 };
 
-#define FOOTSWITCH(_id, _name, _ops, _gfs_ctl_reg, _dc, _bp1, _bp2, \
-		   _core_clk, _ahb_clk, _axi_clk, _reset_rate) \
+#define FOOTSWITCH(_id, _name, _ops, _gfs_ctl_reg, _dc, _axi_clk, \
+		   _reset_rate, _bp1, _bp2) \
 	[(_id)] = { \
 		.desc = { \
 			.id = (_id), \
@@ -439,50 +436,39 @@
 		.gfs_delay_cnt = (_dc), \
 		.bus_port1 = (_bp1), \
 		.bus_port2 = (_bp2), \
-		.core_clk_name = (_core_clk), \
-		.ahb_clk_name = (_ahb_clk), \
-		.axi_clk_name = (_axi_clk), \
+		.has_axi_clk = (_axi_clk), \
 		.reset_rate = (_reset_rate), \
 	}
 static struct footswitch footswitches[] = {
 	FOOTSWITCH(FS_GFX2D0, "fs_gfx2d0", &gfx2d_fs_ops,
-		GFX2D0_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_GRAPHICS_2D_CORE0, 0,
-		"gfx2d0_clk", "gfx2d0_pclk", NULL, 0),
+		GFX2D0_GFS_CTL_REG, 31, false, 0,
+		MSM_BUS_MASTER_GRAPHICS_2D_CORE0, 0),
 	FOOTSWITCH(FS_GFX2D1, "fs_gfx2d1", &gfx2d_fs_ops,
-		GFX2D1_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_GRAPHICS_2D_CORE1, 0,
-		"gfx2d1_clk", "gfx2d1_pclk", NULL, 0),
+		GFX2D1_GFS_CTL_REG, 31, false, 0,
+		MSM_BUS_MASTER_GRAPHICS_2D_CORE1, 0),
 	FOOTSWITCH(FS_GFX3D, "fs_gfx3d", &standard_fs_ops,
-		GFX3D_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_GRAPHICS_3D, 0,
-		"gfx3d_clk", "gfx3d_pclk", NULL, 27000000),
+		GFX3D_GFS_CTL_REG, 31, false, 27000000,
+		MSM_BUS_MASTER_GRAPHICS_3D, 0),
 	FOOTSWITCH(FS_IJPEG, "fs_ijpeg", &standard_fs_ops,
-		GEMINI_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_JPEG_ENC, 0,
-		"ijpeg_clk", "ijpeg_pclk", "ijpeg_axi_clk", 0),
+		GEMINI_GFS_CTL_REG, 31, true, 0,
+		MSM_BUS_MASTER_JPEG_ENC, 0),
 	FOOTSWITCH(FS_MDP, "fs_mdp", &standard_fs_ops,
-		MDP_GFS_CTL_REG, 31,
+		MDP_GFS_CTL_REG, 31, true, 0,
 		MSM_BUS_MASTER_MDP_PORT0,
-		MSM_BUS_MASTER_MDP_PORT1,
-		"mdp_clk", "mdp_pclk", "mdp_axi_clk", 0),
+		MSM_BUS_MASTER_MDP_PORT1),
 	FOOTSWITCH(FS_ROT, "fs_rot", &standard_fs_ops,
-		ROT_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_ROTATOR, 0,
-		"rot_clk", "rotator_pclk", "rot_axi_clk", 0),
+		ROT_GFS_CTL_REG, 31, true, 0,
+		MSM_BUS_MASTER_ROTATOR, 0),
 	FOOTSWITCH(FS_VED, "fs_ved", &standard_fs_ops,
-		VED_GFS_CTL_REG, 31,
+		VED_GFS_CTL_REG, 31, true, 0,
 		MSM_BUS_MASTER_HD_CODEC_PORT0,
-		MSM_BUS_MASTER_HD_CODEC_PORT1,
-		"vcodec_clk", "vcodec_pclk", "vcodec_axi_clk", 0),
+		MSM_BUS_MASTER_HD_CODEC_PORT1),
 	FOOTSWITCH(FS_VFE, "fs_vfe", &standard_fs_ops,
-		VFE_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_VFE, 0,
-		"vfe_clk", "vfe_pclk", "vfe_axi_clk", 0),
+		VFE_GFS_CTL_REG, 31, true, 0,
+		MSM_BUS_MASTER_VFE, 0),
 	FOOTSWITCH(FS_VPE, "fs_vpe", &standard_fs_ops,
-		VPE_GFS_CTL_REG, 31,
-		MSM_BUS_MASTER_VPE, 0,
-		"vpe_clk", "vpe_pclk", "vpe_axi_clk", 0),
+		VPE_GFS_CTL_REG, 31, true, 0,
+		MSM_BUS_MASTER_VPE, 0),
 };
 
 static int footswitch_probe(struct platform_device *pdev)
@@ -501,29 +487,26 @@
 	init_data = pdev->dev.platform_data;
 
 	/* Setup core clock. */
-	fs->core_clk = clk_get(NULL, fs->core_clk_name);
+	fs->core_clk = clk_get(&pdev->dev, "core_clk");
 	if (IS_ERR(fs->core_clk)) {
-		pr_err("%s: clk_get(\"%s\") failed\n", __func__,
-						fs->core_clk_name);
+		pr_err("%s: clk_get(core_clk) failed\n", __func__);
 		rc = PTR_ERR(fs->core_clk);
 		goto err_core_clk;
 	}
 
 	/* Setup AHB clock. */
-	fs->ahb_clk = clk_get(NULL, fs->ahb_clk_name);
+	fs->ahb_clk = clk_get(&pdev->dev, "iface_clk");
 	if (IS_ERR(fs->ahb_clk)) {
-		pr_err("%s: clk_get(\"%s\") failed\n", __func__,
-						fs->ahb_clk_name);
+		pr_err("%s: clk_get(iface_clk) failed\n", __func__);
 		rc = PTR_ERR(fs->ahb_clk);
 		goto err_ahb_clk;
 	}
 
 	/* Setup AXI clock. */
-	if (fs->axi_clk_name) {
-		fs->axi_clk = clk_get(NULL, fs->axi_clk_name);
+	if (fs->has_axi_clk) {
+		fs->axi_clk = clk_get(&pdev->dev, "bus_clk");
 		if (IS_ERR(fs->axi_clk)) {
-			pr_err("%s: clk_get(\"%s\") failed\n", __func__,
-						fs->axi_clk_name);
+			pr_err("%s: clk_get(bus_clk) failed\n", __func__);
 			rc = PTR_ERR(fs->axi_clk);
 			goto err_axi_clk;
 		}
@@ -550,7 +533,7 @@
 	return 0;
 
 err_register:
-	if (fs->axi_clk_name)
+	if (fs->has_axi_clk)
 		clk_put(fs->axi_clk);
 err_axi_clk:
 	clk_put(fs->ahb_clk);
@@ -578,7 +561,7 @@
 	.probe		= footswitch_probe,
 	.remove		= __devexit_p(footswitch_remove),
 	.driver		= {
-		.name		= "footswitch-msm8x60",
+		.name		= "footswitch-8x60",
 		.owner		= THIS_MODULE,
 	},
 };
diff --git a/arch/arm/mach-msm/footswitch-pcom.c b/arch/arm/mach-msm/footswitch-pcom.c
index 2fffedc..8eec807 100644
--- a/arch/arm/mach-msm/footswitch-pcom.c
+++ b/arch/arm/mach-msm/footswitch-pcom.c
@@ -41,14 +41,13 @@
  * @pcom_id: Proc-comm ID of the footswitch
  * @is_enabled: Flag set when footswitch is enabled
  * @is_manual: Flag set when footswitch is in manual proc-comm mode
- * @core_clk_name: String name of core clock for footswitch power domain
- * @set_clk_name: String name of clock used to set the core clocks's rate
- * @ahb_clk_name: String name of AHB clock for footswitch power domain
- * @core_clk: Clock with name core_clk_name
- * @set_clk: Clock with name set_clk_name
- * @abh_clk: Clock with name ahb_clk_name
- * @set_clk_init_rate: Rate to use for set_clk to if one has not yet been set
- * @is_rate_set: Flag set if the core clock's rate has been set
+ * @has_ahb_clk: Flag set if footswitched core has an ahb_clk
+ * @has_src_clk: Flag set if footswitched core has a src_clk
+ * @src_clk: Controls the core clock's rate
+ * @core_clk: Clocks the core
+ * @ahb_clk: Clocks the core's register interface
+ * @src_clk_init_rate: Rate to use for src_clk if it has not been set yet
+ * @is_rate_set: Flag set if core_clk's rate has been set
  */
 struct footswitch {
 	struct regulator_dev			*rdev;
@@ -57,13 +56,12 @@
 	unsigned				pcom_id;
 	bool					is_enabled;
 	bool					is_manual;
-	const char				*core_clk_name;
-	const char				*set_clk_name;
-	const char				*ahb_clk_name;
+	struct clk				*src_clk;
 	struct clk				*core_clk;
-	struct clk				*set_clk;
 	struct clk				*ahb_clk;
-	const int				set_clk_init_rate;
+	const bool				has_ahb_clk;
+	const bool				has_src_clk;
+	const int				src_clk_init_rate;
 	bool					is_rate_set;
 };
 
@@ -91,9 +89,9 @@
 
 static int enable_clocks(struct footswitch *fs)
 {
-	fs->is_rate_set = !!(clk_get_rate(fs->set_clk));
+	fs->is_rate_set = !!(clk_get_rate(fs->src_clk));
 	if (!fs->is_rate_set)
-		clk_set_rate(fs->set_clk, fs->set_clk_init_rate);
+		clk_set_rate(fs->src_clk, fs->src_clk_init_rate);
 	clk_enable(fs->core_clk);
 
 	if (fs->ahb_clk)
@@ -158,7 +156,7 @@
 	.disable = footswitch_disable,
 };
 
-#define FOOTSWITCH(_id, _pcom_id, _name, _core_clk, _set_clk, _rate, _ahb_clk) \
+#define FOOTSWITCH(_id, _pcom_id, _name, _src_clk, _rate, _ahb_clk) \
 	[_id] = { \
 		.desc = { \
 			.id = _id, \
@@ -168,29 +166,28 @@
 			.owner = THIS_MODULE, \
 		}, \
 		.pcom_id = _pcom_id, \
-		.core_clk_name = _core_clk, \
-		.set_clk_name = _set_clk, \
-		.set_clk_init_rate = _rate, \
-		.ahb_clk_name = _ahb_clk, \
+		.has_src_clk = _src_clk, \
+		.src_clk_init_rate = _rate, \
+		.has_ahb_clk = _ahb_clk, \
 	}
 static struct footswitch footswitches[] = {
-	FOOTSWITCH(FS_GFX3D,  PCOM_FS_GRP,     "fs_gfx3d",
-		   "grp_clk", "grp_src_clk", 24576000, "grp_pclk"),
-	FOOTSWITCH(FS_GFX2D0, PCOM_FS_GRP_2D,  "fs_gfx2d0",
-		   "grp_2d_clk",       NULL, 24576000, "grp_2d_pclk"),
-	FOOTSWITCH(FS_MDP,    PCOM_FS_MDP,     "fs_mdp",
-		   "mdp_clk",          NULL, 24576000, "mdp_pclk"),
-	FOOTSWITCH(FS_MFC,    PCOM_FS_MFC,     "fs_mfc",
-		   "mfc_clk",          NULL, 24576000, "mfc_pclk"),
-	FOOTSWITCH(FS_ROT,    PCOM_FS_ROTATOR, "fs_rot",
-		   "rotator_clk",      NULL,        0, "rotator_pclk"),
-	FOOTSWITCH(FS_VFE,    PCOM_FS_VFE,     "fs_vfe",
-		   "vfe_clk",          NULL, 24576000, "vfe_pclk"),
-	FOOTSWITCH(FS_VPE,    PCOM_FS_VPE,     "fs_vpe",
-		   "vpe_clk",          NULL, 24576000, NULL),
+	FOOTSWITCH(FS_GFX3D,  PCOM_FS_GRP,
+		"fs_gfx3d",   true, 24576000, true),
+	FOOTSWITCH(FS_GFX2D0, PCOM_FS_GRP_2D,
+		"fs_gfx2d0", false, 24576000, true),
+	FOOTSWITCH(FS_MDP,    PCOM_FS_MDP,
+		"fs_mdp",    false, 24576000, true),
+	FOOTSWITCH(FS_MFC,    PCOM_FS_MFC,
+		"fs_mfc",    false, 24576000, true),
+	FOOTSWITCH(FS_ROT,    PCOM_FS_ROTATOR,
+		"fs_rot",    false,        0, true),
+	FOOTSWITCH(FS_VFE,    PCOM_FS_VFE,
+		"fs_vfe",    false, 24576000, true),
+	FOOTSWITCH(FS_VPE,    PCOM_FS_VPE,
+		"fs_vpe",    false, 24576000, false),
 };
 
-static int get_clocks(struct footswitch *fs)
+static int get_clocks(struct device *dev, struct footswitch *fs)
 {
 	int rc;
 
@@ -199,33 +196,30 @@
 	 * If one can't be found, try to use the core clock for
 	 * rate-setting instead.
 	 */
-	if (fs->set_clk_name) {
-		fs->set_clk = clk_get(NULL, fs->set_clk_name);
-		if (IS_ERR(fs->set_clk)) {
-			fs->set_clk = clk_get(NULL, fs->core_clk_name);
-			fs->set_clk_name = fs->core_clk_name;
-		}
+	if (fs->has_src_clk) {
+		fs->src_clk = clk_get(dev, "src_clk");
+		if (IS_ERR(fs->src_clk))
+			fs->src_clk = clk_get(dev, "core_clk");
 	} else {
-		fs->set_clk = clk_get(NULL, fs->core_clk_name);
-		fs->set_clk_name = fs->core_clk_name;
+		fs->src_clk = clk_get(dev, "core_clk");
 	}
-	if (IS_ERR(fs->set_clk)) {
-		pr_err("clk_get(%s) failed\n", fs->set_clk_name);
-		rc = PTR_ERR(fs->set_clk);
-		goto err_set_clk;
+	if (IS_ERR(fs->src_clk)) {
+		pr_err("clk_get(src_clk) failed\n");
+		rc = PTR_ERR(fs->src_clk);
+		goto err_src_clk;
 	}
 
-	fs->core_clk = clk_get(NULL, fs->core_clk_name);
+	fs->core_clk = clk_get(dev, "core_clk");
 	if (IS_ERR(fs->core_clk)) {
-		pr_err("clk_get(%s) failed\n", fs->core_clk_name);
+		pr_err("clk_get(core_clk) failed\n");
 		rc = PTR_ERR(fs->core_clk);
 		goto err_core_clk;
 	}
 
-	if (fs->ahb_clk_name) {
-		fs->ahb_clk = clk_get(NULL, fs->ahb_clk_name);
+	if (fs->has_ahb_clk) {
+		fs->ahb_clk = clk_get(dev, "iface_clk");
 		if (IS_ERR(fs->ahb_clk)) {
-			pr_err("clk_get(%s) failed\n", fs->ahb_clk_name);
+			pr_err("clk_get(iface_clk) failed\n");
 			rc = PTR_ERR(fs->ahb_clk);
 			goto err_ahb_clk;
 		}
@@ -236,14 +230,14 @@
 err_ahb_clk:
 	clk_put(fs->core_clk);
 err_core_clk:
-	clk_put(fs->set_clk);
-err_set_clk:
+	clk_put(fs->src_clk);
+err_src_clk:
 	return rc;
 }
 
 static void put_clocks(struct footswitch *fs)
 {
-	clk_put(fs->set_clk);
+	clk_put(fs->src_clk);
 	clk_put(fs->core_clk);
 	clk_put(fs->ahb_clk);
 }
@@ -267,7 +261,7 @@
 	}
 	init_data = pdev->dev.platform_data;
 
-	rc = get_clocks(fs);
+	rc = get_clocks(&pdev->dev, fs);
 	if (rc)
 		return rc;
 
diff --git a/arch/arm/mach-msm/footswitch.h b/arch/arm/mach-msm/footswitch.h
index 0780ca4..06b7c79 100644
--- a/arch/arm/mach-msm/footswitch.h
+++ b/arch/arm/mach-msm/footswitch.h
@@ -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
@@ -16,21 +16,18 @@
 
 #include <linux/regulator/machine.h>
 
-enum fs_ids {
-	FS_GFX2D0 = 0,
-	FS_GFX2D1,
-	FS_GFX3D,
-	FS_IJPEG,
-	FS_MDP,
-	FS_MFC,
-	FS_ROT,
-	FS_VED,
-	FS_VFE,
-	FS_VPE,
-	MAX_FS
-};
-
-#endif
+/* Device IDs */
+#define FS_GFX2D0	0
+#define FS_GFX2D1	1
+#define FS_GFX3D	2
+#define FS_IJPEG	3
+#define FS_MDP		4
+#define FS_MFC		5
+#define FS_ROT		6
+#define FS_VED		7
+#define FS_VFE		8
+#define FS_VPE		9
+#define MAX_FS		10
 
 #define FS_GENERIC(_drv_name, _id, _name) (&(struct platform_device){ \
 	.name	= (_drv_name), \
@@ -48,5 +45,7 @@
 		} \
 	}, \
 })
-#define FS_PCOM(_id, _name) FS_GENERIC("footswitch-pcom",    (_id), (_name))
-#define FS_8X60(_id, _name) FS_GENERIC("footswitch-msm8x60", (_id), (_name))
+#define FS_PCOM(_id, _name) FS_GENERIC("footswitch-pcom", (_id), (_name))
+#define FS_8X60(_id, _name) FS_GENERIC("footswitch-8x60", (_id), (_name))
+
+#endif