diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 9ec3d01..485341f 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -401,151 +401,525 @@ static struct omap_device_pad port2_2pin_pads[] __initdata = {
 	},
 };
 
+/*
+ * OMAP3 pad confs
+ */
+static struct omap_device_pad omap3_port1_phy_pads[] __initdata = {
+	{
+		.name = "etk_clk.hsusb1_stp",
+		.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_ctl.hsusb1_clk",
+		.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d8.hsusb1_dir",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d9.hsusb1_nxt",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d0.hsusb1_data0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d1.hsusb1_data1",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d2.hsusb1_data2",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d7.hsusb1_data3",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d4.hsusb1_data4",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d5.hsusb1_data5",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d6.hsusb1_data6",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d3.hsusb1_data7",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+};
+
+static struct omap_device_pad omap3_port1_tll_pads[] __initdata = {
+	{
+		.name = "etk_clk.hsusb1_tll_stp",
+		.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_ctl.hsusb1_tll_clk",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d8.hsusb1_tll_dir",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d9.hsusb1_tll_nxt",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d0.hsusb1_tll_data0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d1.hsusb1_tll_data1",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d2.hsusb1_tll_data2",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d7.hsusb1_tll_data3",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d4.hsusb1_tll_data4",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d5.hsusb1_tll_data5",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d6.hsusb1_tll_data6",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d3.hsusb1_tll_data7",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+};
+
+static struct omap_device_pad omap3_port2_phy_pads[] __initdata = {
+	{
+		.name = "etk_d11.hsusb2_stp",
+		.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d10.hsusb2_clk",
+		.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d12.hsusb2_dir",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d13.hsusb2_nxt",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d14.hsusb2_data0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "etk_d15.hsusb2_data1",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "mcspi1_cs3.hsusb2_data2",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "mcspi2_cs1.hsusb2_data3",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "mcspi2_simo.hsusb2_data4",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "mcspi2_somi.hsusb2_data5",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "mcspi2_cs0.hsusb2_data6",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+	{
+		.name = "mcspi2_clk.hsusb2_data7",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3,
+	},
+};
+
+static struct omap_device_pad omap3_port2_tll_pads[] __initdata = {
+	{
+		.name = "etk_d11.hsusb2_tll_stp",
+		.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d10.hsusb2_tll_clk",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d12.hsusb2_tll_dir",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d13.hsusb2_tll_nxt",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d14.hsusb2_tll_data0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "etk_d15.hsusb2_tll_data1",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcspi1_cs3.hsusb2_tll_data2",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE2,
+	},
+	{
+		.name = "mcspi2_cs1.hsusb2_tll_data3",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE2,
+	},
+	{
+		.name = "mcspi2_simo.hsusb2_tll_data4",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE2,
+	},
+	{
+		.name = "mcspi2_somi.hsusb2_tll_data5",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE2,
+	},
+	{
+		.name = "mcspi2_cs0.hsusb2_tll_data6",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE2,
+	},
+	{
+		.name = "mcspi2_clk.hsusb2_tll_data7",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE2,
+	},
+};
+
+static struct omap_device_pad omap3_port3_tll_pads[] __initdata = {
+	{
+		.name = "sdmmc2_dat5.hsusb3_tll_stp",
+		.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "uart1_cts.hsusb3_tll_clk",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "sdmmc2_dat6.hsusb3_tll_dir",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "sdmmc2_dat7.hsusb3_tll_nxt",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp4_dr.hsusb3_tll_data0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp4_clkx.hsusb3_tll_data1",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp4_dx.hsusb3_tll_data2",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp4_fsx.hsusb3_tll_data3",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp3_dx.hsusb3_tll_data4",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp3_dr.hsusb3_tll_data5",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp3_clkx.hsusb3_tll_data6",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcbsp3_fsx.hsusb3_tll_data7",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port1_6pin_pads[] __initdata = {
+	{
+		.name = "etk_clk.mm1_rxdp",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d9.mm1_rxdm",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d0.mm1_rxrcv",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d7.mm1_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d2.mm1_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d1.mm1_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port1_4pin_pads[] __initdata = {
+	{
+		.name = "etk_d0.mm1_rxrcv",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d7.mm1_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d2.mm1_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d1.mm1_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port1_3pin_pads[] __initdata = {
+	{
+		.name = "etk_d7.mm1_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d2.mm1_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d1.mm1_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port1_2pin_pads[] __initdata = {
+	{
+		.name = "etk_d2.mm1_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d1.mm1_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port2_6pin_pads[] __initdata = {
+	{
+		.name = "etk_d11.mm2_rxdp",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d13.mm2_rxdm",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d14.mm2_rxrcv",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcspi2_cs1.mm2_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d15.mm2_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcspi1_cs3.mm2_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port2_4pin_pads[] __initdata = {
+	{
+		.name = "etk_d14.mm2_rxrcv",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcspi2_cs1.mm2_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d15.mm2_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcspi1_cs3.mm2_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port2_3pin_pads[] __initdata = {
+	{
+		.name = "mcspi2_cs1.mm2_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "etk_d15.mm2_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcspi1_cs3.mm2_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port2_2pin_pads[] __initdata = {
+	{
+		.name = "etk_d15.mm2_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+	{
+		.name = "mcspi1_cs3.mm2_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE5,
+	},
+};
+
+static struct omap_device_pad omap3_port3_6pin_pads[] __initdata = {
+	{
+		.name = "sdmmc2_dat5.mm3_rxdp",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "sdmmc2_dat7.mm3_rxdm",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_dr.mm3_rxrcv",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_fsx.mm3_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_clkx.mm3_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_dx.mm3_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+};
+
+static struct omap_device_pad omap3_port3_4pin_pads[] __initdata = {
+	{
+		.name = "mcbsp4_dr.mm3_rxrcv",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_fsx.mm3_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_clkx.mm3_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_dx.mm3_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+};
+
+static struct omap_device_pad omap3_port3_3pin_pads[] __initdata = {
+	{
+		.name = "mcbsp4_fsx.mm3_txen_n",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_clkx.mm3_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_dx.mm3_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+};
+
+static struct omap_device_pad omap3_port3_2pin_pads[] __initdata = {
+	{
+		.name = "mcbsp4_clkx.mm3_txse0",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+	{
+		.name = "mcbsp4_dx.mm3_txdat",
+		.enable = OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE6,
+	},
+};
+
 /* MUX settings for EHCI pins */
 /*
  * setup_ehci_io_mux - initialize IO pad mux for USBHOST
  */
-static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
+static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode,
+				struct omap_board_data *bdata)
 {
 	switch (port_mode[0]) {
 	case OMAP_EHCI_PORT_MODE_PHY:
-		omap_mux_init_signal("hsusb1_stp", OMAP_PIN_OUTPUT);
-		omap_mux_init_signal("hsusb1_clk", OMAP_PIN_OUTPUT);
-		omap_mux_init_signal("hsusb1_dir", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_nxt", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data0", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data1", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data2", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data3", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data4", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data5", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data6", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_data7", OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port1_phy_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port1_phy_pads);
 		break;
 	case OMAP_EHCI_PORT_MODE_TLL:
-		omap_mux_init_signal("hsusb1_tll_stp",
-			OMAP_PIN_INPUT_PULLUP);
-		omap_mux_init_signal("hsusb1_tll_clk",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_dir",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_nxt",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data1",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data2",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data3",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data4",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data5",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data6",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb1_tll_data7",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port1_tll_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port1_tll_pads);
 		break;
 	case OMAP_USBHS_PORT_MODE_UNUSED:
-		/* FALLTHROUGH */
 	default:
 		break;
 	}
-
 	switch (port_mode[1]) {
 	case OMAP_EHCI_PORT_MODE_PHY:
-		omap_mux_init_signal("hsusb2_stp", OMAP_PIN_OUTPUT);
-		omap_mux_init_signal("hsusb2_clk", OMAP_PIN_OUTPUT);
-		omap_mux_init_signal("hsusb2_dir", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_nxt", OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data1",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data2",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data3",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data4",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data5",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data6",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_data7",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port2_phy_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port2_phy_pads);
 		break;
 	case OMAP_EHCI_PORT_MODE_TLL:
-		omap_mux_init_signal("hsusb2_tll_stp",
-			OMAP_PIN_INPUT_PULLUP);
-		omap_mux_init_signal("hsusb2_tll_clk",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_dir",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_nxt",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data1",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data2",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data3",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data4",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data5",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data6",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb2_tll_data7",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port2_tll_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port2_tll_pads);
 		break;
 	case OMAP_USBHS_PORT_MODE_UNUSED:
-		/* FALLTHROUGH */
 	default:
 		break;
 	}
-
 	switch (port_mode[2]) {
 	case OMAP_EHCI_PORT_MODE_PHY:
 		printk(KERN_WARNING "Port3 can't be used in PHY mode\n");
 		break;
 	case OMAP_EHCI_PORT_MODE_TLL:
-		omap_mux_init_signal("hsusb3_tll_stp",
-			OMAP_PIN_INPUT_PULLUP);
-		omap_mux_init_signal("hsusb3_tll_clk",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_dir",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_nxt",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data1",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data2",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data3",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data4",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data5",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data6",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("hsusb3_tll_data7",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port3_tll_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port3_tll_pads);
 		break;
 	case OMAP_USBHS_PORT_MODE_UNUSED:
-		/* FALLTHROUGH */
 	default:
 		break;
 	}
-
-	return;
 }
 
 static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode,
@@ -579,98 +953,92 @@ static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode,
 	}
 }
 
-static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
+static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode,
+				struct omap_board_data *bdata)
 {
 	switch (port_mode[0]) {
 	case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
 	case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
-		omap_mux_init_signal("mm1_rxdp",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("mm1_rxdm",
-			OMAP_PIN_INPUT_PULLDOWN);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port1_6pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port1_6pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
 	case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
-		omap_mux_init_signal("mm1_rxrcv",
-			OMAP_PIN_INPUT_PULLDOWN);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port1_4pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port1_4pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
-		omap_mux_init_signal("mm1_txen_n", OMAP_PIN_OUTPUT);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port1_3pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port1_3pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
-		omap_mux_init_signal("mm1_txse0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("mm1_txdat",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port1_2pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port1_2pin_pads);
 		break;
+
 	case OMAP_USBHS_PORT_MODE_UNUSED:
-		/* FALLTHROUGH */
 	default:
 		break;
 	}
+
 	switch (port_mode[1]) {
 	case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
 	case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
-		omap_mux_init_signal("mm2_rxdp",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("mm2_rxdm",
-			OMAP_PIN_INPUT_PULLDOWN);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port2_6pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port2_6pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
 	case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
-		omap_mux_init_signal("mm2_rxrcv",
-			OMAP_PIN_INPUT_PULLDOWN);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port2_4pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port2_4pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
-		omap_mux_init_signal("mm2_txen_n", OMAP_PIN_OUTPUT);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port2_3pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port2_3pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
-		omap_mux_init_signal("mm2_txse0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("mm2_txdat",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port2_2pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port2_3pin_pads);
 		break;
+
 	case OMAP_USBHS_PORT_MODE_UNUSED:
-		/* FALLTHROUGH */
 	default:
 		break;
 	}
+
 	switch (port_mode[2]) {
 	case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
 	case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
-		omap_mux_init_signal("mm3_rxdp",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("mm3_rxdm",
-			OMAP_PIN_INPUT_PULLDOWN);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port3_6pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port3_6pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
 	case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
-		omap_mux_init_signal("mm3_rxrcv",
-			OMAP_PIN_INPUT_PULLDOWN);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port3_4pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port3_4pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
-		omap_mux_init_signal("mm3_txen_n", OMAP_PIN_OUTPUT);
-		/* FALLTHROUGH */
+		bdata->pads = omap3_port3_3pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port3_3pin_pads);
+		break;
 	case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
 	case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
-		omap_mux_init_signal("mm3_txse0",
-			OMAP_PIN_INPUT_PULLDOWN);
-		omap_mux_init_signal("mm3_txdat",
-			OMAP_PIN_INPUT_PULLDOWN);
+		bdata->pads = omap3_port3_2pin_pads;
+		bdata->pads_cnt = ARRAY_SIZE(omap3_port3_2pin_pads);
 		break;
+
 	case OMAP_USBHS_PORT_MODE_UNUSED:
-		/* FALLTHROUGH */
 	default:
 		break;
 	}
@@ -785,8 +1153,12 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
 	}
 
 	if (cpu_is_omap34xx()) {
-		setup_ehci_io_mux(pdata->port_mode);
-		setup_ohci_io_mux(pdata->port_mode);
+		setup_ehci_io_mux(pdata->port_mode, &bdata);
+		oh[2]->mux = omap_hwmod_mux_init((&bdata)->pads,
+						bdata.pads_cnt);
+		setup_ohci_io_mux(pdata->port_mode, &bdata);
+		oh[1]->mux = omap_hwmod_mux_init((&bdata)->pads,
+						bdata.pads_cnt);
 	} else if (cpu_is_omap44xx()) {
 		setup_4430ehci_io_mux(pdata->port_mode, &bdata);
 		oh[2]->mux = omap_hwmod_mux_init((&bdata)->pads,
