All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 00/13] usb: musb: adding multi instance support
@ 2012-08-31 11:09 Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue Ravi Babu
                   ` (8 more replies)
  0 siblings, 9 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

This series of patches adds,
a) Multi instances support in musb driver
b) DT support for musb_dsps glue layer
c) DT support for NOP transceiver

AM33xx and TI81xx has dual musb controller and has two usb PHY of same type.
This patch series uses 'phandle' based API devm_usb_get_phy_by_phandle() to
get the PHY of same type. This API support is being added by Kishon's patch
discussed at [1]

The series applies to felipe/master [1] branch
	+ Vaibhav baseport patches on his tree at [4]
	+ Kishon's multi phy patches on Felipe's branch 'xceiv'
	+ Kishon's patch on phandle at [2]
	+ Damodar's recent patch at [3] 
	+ Ajay's & Damodar's patches at [5] and [6] included in this series

1. http://git.kernel.org/?p=linux/kernel/git/balbi/usb.git;a=summary
2. http://marc.info/?l=linux-usb&m=134070369306112&w=2
3. http://marc.info/?l=linux-usb&m=134200284230689&w=2
4. https://github.com/hvaibhav/am335x-linux/commits/am335x-upstream-staging
5. http://marc.info/?l=linux-usb&m=134200285530701&w=2
6. http://marc.info/?l=linux-usb&m=134208820028625&w=2

Changes from v8:
	- included Sergei's comment, removing underscore in device tree file
	- removed duplicated signoff from patches
Changes from v7:
	- patches rebased on felipe/master branch & verified
	- included additional two patches 0001 & 0002 as part of this series
	  which are already submitted [5] & [6] 
Changes from v6:
	- Removed parent_pdev to get glue and used dev_get_getdrv() as per
	  Felipe's comment
	- use pr_debug() instead of pr_info() as per Felipe's comment
Changes from v5:
	- Removed musb->id as per Felipe's comment
	- used nop_ida as per Felipe's comment
Changes from v4:
	- Fixed Felipe's comment for adding EXPORT_SYMBOL_GPL()
	- Fixed Felipe's comment on using dev_set_mask()
Changes from v3:
	- Fixed Kishon's comment on removing "id" from phy struct and
	  removing unneeded "#else" part.
Changes from v2:
	- Fixed Sergei's comment on not using address prefix in musb_dsps
	  glue and nop transceiver dt dats.
	- Also removed the "ti" string in compatible property for nop data.
Changes from v1:
	- Defined musb_ida to manage core ids based on Felipe's comment
	  in [PATCH 01/11]

Ajay Kumar Gupta (7):
  usb: musb: dsps: enable phy control for am335x
  usb: musb: kill global and static for multi instance
  usb: musb: dsps: add dt support
  arm/dts: am33xx: Add dt data for usbss
  arm/dts: am33xx: add dt data for usb nop phy
  usb: musb: dsps: remove explicit NOP device creation
  arm/dts: am33xx: add phy phandle to usbss

Ravi Babu (3):
  usb: musb: add musb_ida for multi instance support
  usb: musb: am335x: add support for dual instance
  usb: otg: nop: add dt support

Santhapuri, Damodar (3):
  usb: musb: dsps: add phy control logic to glue
  usb: otg: nop: add support for multiple tranceiver
  usb: musb: dsps: get the PHY using phandle api

 .../devicetree/bindings/usb/am33xx-usb.txt         |   19 ++
 arch/arm/boot/dts/am33xx.dtsi                      |   21 ++
 arch/arm/mach-omap2/board-ti8168evm.c              |    1 -
 arch/arm/mach-omap2/omap_phy_internal.c            |   35 ---
 arch/arm/plat-omap/include/plat/usb.h              |    6 +-
 drivers/usb/musb/am35x.c                           |   44 ++-
 drivers/usb/musb/blackfin.c                        |   28 ++-
 drivers/usb/musb/da8xx.c                           |   36 ++-
 drivers/usb/musb/davinci.c                         |   38 ++-
 drivers/usb/musb/musb_core.c                       |   53 +++-
 drivers/usb/musb/musb_core.h                       |    6 +
 drivers/usb/musb/musb_debugfs.c                    |    8 +-
 drivers/usb/musb/musb_dsps.c                       |  281 +++++++++++++++-----
 drivers/usb/musb/omap2430.c                        |   26 ++-
 drivers/usb/musb/tusb6010.c                        |   30 ++-
 drivers/usb/musb/ux500.c                           |   33 ++-
 drivers/usb/otg/nop-usb-xceiv.c                    |   64 ++++-
 include/linux/usb/nop-usb-xceiv.h                  |    4 +-
 18 files changed, 523 insertions(+), 210 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/usb/am33xx-usb.txt


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
       [not found]   ` <1346411399-23964-2-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
  2012-08-31 16:00   ` Tony Lindgren
  2012-08-31 11:09 ` [PATCH v9 02/13] usb: musb: dsps: enable phy control for am335x Ravi Babu
                   ` (7 subsequent siblings)
  8 siblings, 2 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Santhapuri, Damodar <damodar.santhapuri@ti.com>

AM335x uses NOP transceiver driver and need to enable builtin PHY
by writing into usb_ctrl register available in system control
module register space. This is being added at musb glue driver
layer untill a separate system control module driver is available.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 arch/arm/mach-omap2/board-ti8168evm.c   |    1 -
 arch/arm/mach-omap2/omap_phy_internal.c |   35 ------------
 arch/arm/plat-omap/include/plat/usb.h   |    5 +-
 drivers/usb/musb/musb_dsps.c            |   87 +++++++++++++++++++++++++------
 4 files changed, 73 insertions(+), 55 deletions(-)

diff --git a/arch/arm/mach-omap2/board-ti8168evm.c b/arch/arm/mach-omap2/board-ti8168evm.c
index d4c8392..0c7c098 100644
--- a/arch/arm/mach-omap2/board-ti8168evm.c
+++ b/arch/arm/mach-omap2/board-ti8168evm.c
@@ -26,7 +26,6 @@
 #include <plat/usb.h>
 
 static struct omap_musb_board_data musb_board_data = {
-	.set_phy_power	= ti81xx_musb_phy_power,
 	.interface_type	= MUSB_INTERFACE_ULPI,
 	.mode           = MUSB_OTG,
 	.power		= 500,
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c
index d52651a..d80bb16 100644
--- a/arch/arm/mach-omap2/omap_phy_internal.c
+++ b/arch/arm/mach-omap2/omap_phy_internal.c
@@ -254,38 +254,3 @@ void am35x_set_mode(u8 musb_mode)
 
 	omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
 }
-
-void ti81xx_musb_phy_power(u8 on)
-{
-	void __iomem *scm_base = NULL;
-	u32 usbphycfg;
-
-	scm_base = ioremap(TI81XX_SCM_BASE, SZ_2K);
-	if (!scm_base) {
-		pr_err("system control module ioremap failed\n");
-		return;
-	}
-
-	usbphycfg = __raw_readl(scm_base + USBCTRL0);
-
-	if (on) {
-		if (cpu_is_ti816x()) {
-			usbphycfg |= TI816X_USBPHY0_NORMAL_MODE;
-			usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC;
-		} else if (cpu_is_ti814x()) {
-			usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN
-				| USBPHY_DPINPUT | USBPHY_DMINPUT);
-			usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN
-				| USBPHY_DPOPBUFCTL | USBPHY_DMOPBUFCTL);
-		}
-	} else {
-		if (cpu_is_ti816x())
-			usbphycfg &= ~TI816X_USBPHY0_NORMAL_MODE;
-		else if (cpu_is_ti814x())
-			usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
-
-	}
-	__raw_writel(usbphycfg, scm_base + USBCTRL0);
-
-	iounmap(scm_base);
-}
diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h
index 548a4c8..c2aa4ae 100644
--- a/arch/arm/plat-omap/include/plat/usb.h
+++ b/arch/arm/plat-omap/include/plat/usb.h
@@ -95,7 +95,6 @@ extern void am35x_musb_reset(void);
 extern void am35x_musb_phy_power(u8 on);
 extern void am35x_musb_clear_irq(void);
 extern void am35x_set_mode(u8 musb_mode);
-extern void ti81xx_musb_phy_power(u8 on);
 
 /* AM35x */
 /* USB 2.0 PHY Control */
@@ -120,8 +119,8 @@ extern void ti81xx_musb_phy_power(u8 on);
 #define CONF2_DATPOL		(1 << 1)
 
 /* TI81XX specific definitions */
-#define USBCTRL0	0x620
-#define USBSTAT0	0x624
+#define MUSB_USBSS_REV_816X	0x9
+#define MUSB_USBSS_REV_814X	0xb
 
 /* TI816X PHY controls bits */
 #define TI816X_USBPHY0_NORMAL_MODE	(1 << 0)
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 84d8181..960258d 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -116,9 +116,46 @@ struct dsps_glue {
 	struct platform_device *musb;	/* child musb pdev */
 	const struct dsps_musb_wrapper *wrp; /* wrapper register offsets */
 	struct timer_list timer;	/* otg_workaround timer */
+	u32 __iomem *usb_ctrl;
+	u8      usbss_rev;
 };
 
 /**
+ * musb_dsps_phy_control - phy on/off
+ * @glue: struct dsps_glue *
+ * @on: flag for phy to be switched on or off
+ *
+ * This is to enable the PHY using usb_ctrl register in system control
+ * module space.
+ *
+ * XXX: This function will be removed once we have a seperate driver for
+ * control module
+ */
+static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
+{
+	u32 usbphycfg;
+
+	usbphycfg = __raw_readl(glue->usb_ctrl);
+
+	if (on) {
+		if (glue->usbss_rev == MUSB_USBSS_REV_816X) {
+			usbphycfg |= TI816X_USBPHY0_NORMAL_MODE;
+			usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC;
+		} else if (glue->usbss_rev == MUSB_USBSS_REV_814X) {
+			usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN
+				| USBPHY_DPINPUT | USBPHY_DMINPUT);
+			usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN
+				| USBPHY_DPOPBUFCTL | USBPHY_DMOPBUFCTL);
+		}
+	} else {
+		if (glue->usbss_rev == MUSB_USBSS_REV_816X)
+			usbphycfg &= ~TI816X_USBPHY0_NORMAL_MODE;
+		else if (glue->usbss_rev == MUSB_USBSS_REV_814X)
+			usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
+	}
+	__raw_writel(usbphycfg, glue->usb_ctrl);
+}
+/**
  * dsps_musb_enable - enable interrupts
  */
 static void dsps_musb_enable(struct musb *musb)
@@ -356,11 +393,9 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
 static int dsps_musb_init(struct musb *musb)
 {
 	struct device *dev = musb->controller;
-	struct musb_hdrc_platform_data *plat = dev->platform_data;
 	struct platform_device *pdev = to_platform_device(dev->parent);
 	struct dsps_glue *glue = platform_get_drvdata(pdev);
 	const struct dsps_musb_wrapper *wrp = glue->wrp;
-	struct omap_musb_board_data *data = plat->board_data;
 	void __iomem *reg_base = musb->ctrl_base;
 	u32 rev, val;
 	int status;
@@ -387,8 +422,7 @@ static int dsps_musb_init(struct musb *musb)
 	dsps_writel(reg_base, wrp->control, (1 << wrp->reset));
 
 	/* Start the on-chip PHY and its PLL. */
-	if (data->set_phy_power)
-		data->set_phy_power(1);
+	musb_dsps_phy_control(glue, 1);
 
 	musb->isr = dsps_interrupt;
 
@@ -410,16 +444,13 @@ err0:
 static int dsps_musb_exit(struct musb *musb)
 {
 	struct device *dev = musb->controller;
-	struct musb_hdrc_platform_data *plat = dev->platform_data;
-	struct omap_musb_board_data *data = plat->board_data;
 	struct platform_device *pdev = to_platform_device(dev->parent);
 	struct dsps_glue *glue = platform_get_drvdata(pdev);
 
 	del_timer_sync(&glue->timer);
 
 	/* Shutdown the on-chip PHY and its PLL. */
-	if (data->set_phy_power)
-		data->set_phy_power(0);
+	musb_dsps_phy_control(glue, 0);
 
 	/* NOP driver needs change if supporting dual instance */
 	usb_put_phy(musb->xceiv);
@@ -451,6 +482,21 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 	char res_name[10];
 	int ret;
 
+	/* get memory resource for usb control register */
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 2 * id + 2);
+	if (!res) {
+		dev_err(dev, "%s get mem resource failed\n", res_name);
+		ret = -ENODEV;
+		goto err0;
+	}
+
+	glue->usb_ctrl = devm_request_and_ioremap(&pdev->dev, res);
+	if (glue->usb_ctrl == NULL) {
+		dev_err(dev, "Failed to obtain usb_ctrl%d memory\n", id);
+		ret = -ENODEV;
+		goto err0;
+	}
+
 	/* get memory resource */
 	sprintf(res_name, "musb%d", id);
 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, res_name);
@@ -529,6 +575,7 @@ static int __devinit dsps_probe(struct platform_device *pdev)
 				(struct dsps_musb_wrapper *)id->driver_data;
 	struct dsps_glue *glue;
 	struct resource *iomem;
+	u32 __iomem *usbss;
 	int ret;
 
 	/* allocate glue */
@@ -547,6 +594,13 @@ static int __devinit dsps_probe(struct platform_device *pdev)
 		goto err1;
 	}
 
+	usbss = devm_request_and_ioremap(&pdev->dev, iomem);
+	if (usbss == NULL) {
+		dev_err(&pdev->dev, "Failed to obtain usbss memory\n");
+		ret = -ENODEV;
+		goto err1;
+	}
+
 	glue->dev = &pdev->dev;
 
 	glue->wrp = kmemdup(wrp, sizeof(*wrp), GFP_KERNEL);
@@ -573,6 +627,9 @@ static int __devinit dsps_probe(struct platform_device *pdev)
 		goto err3;
 	}
 
+	/* read the usbss revision register */
+	glue->usbss_rev = __raw_readl(usbss);
+
 	return 0;
 
 err3:
@@ -603,24 +660,22 @@ static int __devexit dsps_remove(struct platform_device *pdev)
 #ifdef CONFIG_PM_SLEEP
 static int dsps_suspend(struct device *dev)
 {
-	struct musb_hdrc_platform_data *plat = dev->platform_data;
-	struct omap_musb_board_data *data = plat->board_data;
+	struct platform_device *pdev = to_platform_device(dev->parent);
+	struct dsps_glue *glue = platform_get_drvdata(pdev);
 
 	/* Shutdown the on-chip PHY and its PLL. */
-	if (data->set_phy_power)
-		data->set_phy_power(0);
+	musb_dsps_phy_control(glue, 0);
 
 	return 0;
 }
 
 static int dsps_resume(struct device *dev)
 {
-	struct musb_hdrc_platform_data *plat = dev->platform_data;
-	struct omap_musb_board_data *data = plat->board_data;
+	struct platform_device *pdev = to_platform_device(dev->parent);
+	struct dsps_glue *glue = platform_get_drvdata(pdev);
 
 	/* Start the on-chip PHY and its PLL. */
-	if (data->set_phy_power)
-		data->set_phy_power(1);
+	musb_dsps_phy_control(glue, 1);
 
 	return 0;
 }
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 02/13] usb: musb: dsps: enable phy control for am335x
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 03/13] usb: musb: add musb_ida for multi instance support Ravi Babu
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Ajay Kumar Gupta <ajay.gupta@ti.com>

Enabled the phy control logic for am335x also based on usbss
revision register.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 arch/arm/plat-omap/include/plat/usb.h |    1 +
 drivers/usb/musb/musb_dsps.c          |   17 +++++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h
index c2aa4ae..6459b10 100644
--- a/arch/arm/plat-omap/include/plat/usb.h
+++ b/arch/arm/plat-omap/include/plat/usb.h
@@ -121,6 +121,7 @@ extern void am35x_set_mode(u8 musb_mode);
 /* TI81XX specific definitions */
 #define MUSB_USBSS_REV_816X	0x9
 #define MUSB_USBSS_REV_814X	0xb
+#define MUSB_USBSS_REV_33XX	0xd
 
 /* TI816X PHY controls bits */
 #define TI816X_USBPHY0_NORMAL_MODE	(1 << 0)
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 960258d..e62fa05 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -141,16 +141,21 @@ static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
 		if (glue->usbss_rev == MUSB_USBSS_REV_816X) {
 			usbphycfg |= TI816X_USBPHY0_NORMAL_MODE;
 			usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC;
-		} else if (glue->usbss_rev == MUSB_USBSS_REV_814X) {
-			usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN
-				| USBPHY_DPINPUT | USBPHY_DMINPUT);
-			usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN
-				| USBPHY_DPOPBUFCTL | USBPHY_DMOPBUFCTL);
+		} else if (glue->usbss_rev == MUSB_USBSS_REV_814X ||
+				glue->usbss_rev == MUSB_USBSS_REV_33XX) {
+			usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN);
+			usbphycfg |= USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN;
+			if (glue->usbss_rev == MUSB_USBSS_REV_814X) {
+				usbphycfg &= ~(USBPHY_DPINPUT | USBPHY_DMINPUT);
+				usbphycfg |= USBPHY_DPOPBUFCTL
+						| USBPHY_DMOPBUFCTL;
+			}
 		}
 	} else {
 		if (glue->usbss_rev == MUSB_USBSS_REV_816X)
 			usbphycfg &= ~TI816X_USBPHY0_NORMAL_MODE;
-		else if (glue->usbss_rev == MUSB_USBSS_REV_814X)
+		else if (glue->usbss_rev == MUSB_USBSS_REV_814X ||
+				glue->usbss_rev == MUSB_USBSS_REV_33XX)
 			usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
 	}
 	__raw_writel(usbphycfg, glue->usb_ctrl);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 03/13] usb: musb: add musb_ida for multi instance support
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 02/13] usb: musb: dsps: enable phy control for am335x Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 06/13] usb: otg: nop: add support for multiple tranceiver Ravi Babu
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

Added musb_ida in musb_core.c to manage the multi core ids.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 drivers/usb/musb/am35x.c     |   42 ++++++++++++++++++++++++++++--------------
 drivers/usb/musb/blackfin.c  |   26 ++++++++++++++++++++------
 drivers/usb/musb/da8xx.c     |   34 ++++++++++++++++++++++++----------
 drivers/usb/musb/davinci.c   |   34 ++++++++++++++++++++++++----------
 drivers/usb/musb/musb_core.c |   31 +++++++++++++++++++++++++++++++
 drivers/usb/musb/musb_core.h |    2 ++
 drivers/usb/musb/musb_dsps.c |   25 ++++++++++++++++++-------
 drivers/usb/musb/omap2430.c  |   26 ++++++++++++++++++++------
 drivers/usb/musb/tusb6010.c  |   26 ++++++++++++++++++++------
 drivers/usb/musb/ux500.c     |   33 +++++++++++++++++++++++----------
 10 files changed, 210 insertions(+), 69 deletions(-)

diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
index 29b1d60..457f25e 100644
--- a/drivers/usb/musb/am35x.c
+++ b/drivers/usb/musb/am35x.c
@@ -459,6 +459,7 @@ static int __devinit am35x_probe(struct platform_device *pdev)
 	struct clk			*clk;
 
 	int				ret = -ENOMEM;
+	int				musbid;
 
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -466,38 +467,47 @@ static int __devinit am35x_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err1;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err1;
+		goto err2;
 	}
 
 	phy_clk = clk_get(&pdev->dev, "fck");
 	if (IS_ERR(phy_clk)) {
 		dev_err(&pdev->dev, "failed to get PHY clock\n");
 		ret = PTR_ERR(phy_clk);
-		goto err2;
+		goto err3;
 	}
 
 	clk = clk_get(&pdev->dev, "ick");
 	if (IS_ERR(clk)) {
 		dev_err(&pdev->dev, "failed to get clock\n");
 		ret = PTR_ERR(clk);
-		goto err3;
+		goto err4;
 	}
 
 	ret = clk_enable(phy_clk);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to enable PHY clock\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = clk_enable(clk);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to enable clock\n");
-		goto err5;
+		goto err6;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &am35x_dmamask;
 	musb->dev.coherent_dma_mask	= am35x_dmamask;
@@ -515,38 +525,41 @@ static int __devinit am35x_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err6;
+		goto err7;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err6;
+		goto err7;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err6;
+		goto err7;
 	}
 
 	return 0;
 
-err6:
+err7:
 	clk_disable(clk);
 
-err5:
+err6:
 	clk_disable(phy_clk);
 
-err4:
+err5:
 	clk_put(clk);
 
-err3:
+err4:
 	clk_put(phy_clk);
 
-err2:
+err3:
 	platform_device_put(musb);
 
+err2:
+	musb_put_id(&pdev->dev, musbid);
+
 err1:
 	kfree(glue);
 
@@ -558,6 +571,7 @@ static int __devexit am35x_remove(struct platform_device *pdev)
 {
 	struct am35x_glue	*glue = platform_get_drvdata(pdev);
 
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 	clk_disable(glue->clk);
diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
index 2a80dec..e8cff9b 100644
--- a/drivers/usb/musb/blackfin.c
+++ b/drivers/usb/musb/blackfin.c
@@ -455,6 +455,7 @@ static int __devinit bfin_probe(struct platform_device *pdev)
 	struct bfin_glue		*glue;
 
 	int				ret = -ENOMEM;
+	int				musbid;
 
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -462,12 +463,21 @@ static int __devinit bfin_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err1;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err1;
+		goto err2;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &bfin_dmamask;
 	musb->dev.coherent_dma_mask	= bfin_dmamask;
@@ -483,26 +493,29 @@ static int __devinit bfin_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err2;
+		goto err3;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err2;
+		goto err3;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err2;
+		goto err3;
 	}
 
 	return 0;
 
-err2:
+err3:
 	platform_device_put(musb);
 
+err2:
+	musb_put_id(&pdev->dev, musbid);
+
 err1:
 	kfree(glue);
 
@@ -514,6 +527,7 @@ static int __devexit bfin_remove(struct platform_device *pdev)
 {
 	struct bfin_glue		*glue = platform_get_drvdata(pdev);
 
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 	kfree(glue);
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
index 04858bf..ce11d20 100644
--- a/drivers/usb/musb/da8xx.c
+++ b/drivers/usb/musb/da8xx.c
@@ -480,6 +480,7 @@ static int __devinit da8xx_probe(struct platform_device *pdev)
 	struct clk			*clk;
 
 	int				ret = -ENOMEM;
+	int				musbid;
 
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -487,25 +488,34 @@ static int __devinit da8xx_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err1;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err1;
+		goto err2;
 	}
 
 	clk = clk_get(&pdev->dev, "usb20");
 	if (IS_ERR(clk)) {
 		dev_err(&pdev->dev, "failed to get clock\n");
 		ret = PTR_ERR(clk);
-		goto err2;
+		goto err3;
 	}
 
 	ret = clk_enable(clk);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to enable clock\n");
-		goto err3;
+		goto err4;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &da8xx_dmamask;
 	musb->dev.coherent_dma_mask	= da8xx_dmamask;
@@ -522,32 +532,35 @@ static int __devinit da8xx_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err4;
+		goto err5;
 	}
 
 	return 0;
 
-err4:
+err5:
 	clk_disable(clk);
 
-err3:
+err4:
 	clk_put(clk);
 
-err2:
+err3:
 	platform_device_put(musb);
 
+err2:
+	musb_put_id(&pdev->dev, musbid);
+
 err1:
 	kfree(glue);
 
@@ -559,6 +572,7 @@ static int __devexit da8xx_remove(struct platform_device *pdev)
 {
 	struct da8xx_glue		*glue = platform_get_drvdata(pdev);
 
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 	clk_disable(glue->clk);
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
index 72d5b7b..606bfd0 100644
--- a/drivers/usb/musb/davinci.c
+++ b/drivers/usb/musb/davinci.c
@@ -512,6 +512,7 @@ static int __devinit davinci_probe(struct platform_device *pdev)
 	struct clk			*clk;
 
 	int				ret = -ENOMEM;
+	int				musbid;
 
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -519,25 +520,34 @@ static int __devinit davinci_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err1;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err1;
+		goto err2;
 	}
 
 	clk = clk_get(&pdev->dev, "usb");
 	if (IS_ERR(clk)) {
 		dev_err(&pdev->dev, "failed to get clock\n");
 		ret = PTR_ERR(clk);
-		goto err2;
+		goto err3;
 	}
 
 	ret = clk_enable(clk);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to enable clock\n");
-		goto err3;
+		goto err4;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &davinci_dmamask;
 	musb->dev.coherent_dma_mask	= davinci_dmamask;
@@ -554,32 +564,35 @@ static int __devinit davinci_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err4;
+		goto err5;
 	}
 
 	return 0;
 
-err4:
+err5:
 	clk_disable(clk);
 
-err3:
+err4:
 	clk_put(clk);
 
-err2:
+err3:
 	platform_device_put(musb);
 
+err2:
+	musb_put_id(&pdev->dev, musbid);
+
 err1:
 	kfree(glue);
 
@@ -591,6 +604,7 @@ static int __devexit davinci_remove(struct platform_device *pdev)
 {
 	struct davinci_glue		*glue = platform_get_drvdata(pdev);
 
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 	clk_disable(glue->clk);
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index dd24f96..7499fbb 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -99,6 +99,7 @@
 #include <linux/prefetch.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/idr.h>
 
 #include "musb_core.h"
 
@@ -114,6 +115,7 @@
 
 #define MUSB_DRIVER_NAME "musb-hdrc"
 const char musb_driver_name[] = MUSB_DRIVER_NAME;
+static DEFINE_IDA(musb_ida);
 
 MODULE_DESCRIPTION(DRIVER_INFO);
 MODULE_AUTHOR(DRIVER_AUTHOR);
@@ -130,6 +132,35 @@ static inline struct musb *dev_to_musb(struct device *dev)
 
 /*-------------------------------------------------------------------------*/
 
+int musb_get_id(struct device *dev, gfp_t gfp_mask)
+{
+	int ret;
+	int id;
+
+	ret = ida_pre_get(&musb_ida, gfp_mask);
+	if (!ret) {
+		dev_err(dev, "failed to reserve resource for id\n");
+		return -ENOMEM;
+	}
+
+	ret = ida_get_new(&musb_ida, &id);
+	if (ret < 0) {
+		dev_err(dev, "failed to allocate a new id\n");
+		return ret;
+	}
+
+	return id;
+}
+EXPORT_SYMBOL_GPL(musb_get_id);
+
+void musb_put_id(struct device *dev, int id)
+{
+
+	dev_dbg(dev, "removing id %d\n", id);
+	ida_remove(&musb_ida, id);
+}
+EXPORT_SYMBOL_GPL(musb_put_id);
+
 #ifndef CONFIG_BLACKFIN
 static int musb_ulpi_read(struct usb_phy *phy, u32 offset)
 {
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index a1a32c6..a69ffd6 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -517,6 +517,8 @@ extern const char musb_driver_name[];
 
 extern void musb_start(struct musb *musb);
 extern void musb_stop(struct musb *musb);
+extern int musb_get_id(struct device *dev, gfp_t gfp_mask);
+extern void musb_put_id(struct device *dev, int id);
 
 extern void musb_write_fifo(struct musb_hw_ep *ep, u16 len, const u8 *src);
 extern void musb_read_fifo(struct musb_hw_ep *ep, u16 len, u8 *dst);
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index e62fa05..36130ba 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -485,7 +485,7 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 	struct resource *res;
 	struct resource	resources[2];
 	char res_name[10];
-	int ret;
+	int ret, musbid;
 
 	/* get memory resource for usb control register */
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 2 * id + 2);
@@ -525,14 +525,22 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 	resources[1] = *res;
 	resources[1].name = "mc";
 
+	/* get the musb id */
+	musbid = musb_get_id(dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err0;
+	}
 	/* allocate the child platform device */
-	musb = platform_device_alloc("musb-hdrc", -1);
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(dev, "failed to allocate musb device\n");
 		ret = -ENOMEM;
-		goto err0;
+		goto err1;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= dev;
 	musb->dev.dma_mask		= &musb_dmamask;
 	musb->dev.coherent_dma_mask	= musb_dmamask;
@@ -544,31 +552,34 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 	ret = platform_device_add_resources(musb, resources, 2);
 	if (ret) {
 		dev_err(dev, "failed to add resources\n");
-		goto err1;
+		goto err2;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(dev, "failed to add platform_data\n");
-		goto err1;
+		goto err2;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(dev, "failed to register musb device\n");
-		goto err1;
+		goto err2;
 	}
 
 	return 0;
 
-err1:
+err2:
 	platform_device_put(musb);
+err1:
+	musb_put_id(dev, musbid);
 err0:
 	return ret;
 }
 
 static void __devexit dsps_delete_musb_pdev(struct dsps_glue *glue)
 {
+	musb_put_id(glue->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 }
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index 02c39a7..5fb35fe 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -442,6 +442,7 @@ static int __devinit omap2430_probe(struct platform_device *pdev)
 	struct platform_device		*musb;
 	struct omap2430_glue		*glue;
 	int				ret = -ENOMEM;
+	int				musbid;
 
 	glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -449,12 +450,21 @@ static int __devinit omap2430_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err0;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err0;
+		goto err1;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &omap2430_dmamask;
 	musb->dev.coherent_dma_mask	= omap2430_dmamask;
@@ -479,13 +489,13 @@ static int __devinit omap2430_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err1;
+		goto err2;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err1;
+		goto err2;
 	}
 
 	pm_runtime_enable(&pdev->dev);
@@ -493,14 +503,17 @@ static int __devinit omap2430_probe(struct platform_device *pdev)
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err1;
+		goto err2;
 	}
 
 	return 0;
 
-err1:
+err2:
 	platform_device_put(musb);
 
+err1:
+	musb_put_id(&pdev->dev, musbid);
+
 err0:
 	return ret;
 }
@@ -510,6 +523,7 @@ static int __devexit omap2430_remove(struct platform_device *pdev)
 	struct omap2430_glue		*glue = platform_get_drvdata(pdev);
 
 	cancel_work_sync(&glue->omap_musb_mailbox_work);
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_unregister(glue->musb);
 
 	return 0;
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index ab51f7c..dc4d75e 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -1160,6 +1160,7 @@ static int __devinit tusb_probe(struct platform_device *pdev)
 	struct tusb6010_glue		*glue;
 
 	int				ret = -ENOMEM;
+	int				musbid;
 
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -1167,12 +1168,21 @@ static int __devinit tusb_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err1;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err1;
+		goto err2;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= &tusb_dmamask;
 	musb->dev.coherent_dma_mask	= tusb_dmamask;
@@ -1188,26 +1198,29 @@ static int __devinit tusb_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err2;
+		goto err3;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err2;
+		goto err3;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err2;
+		goto err3;
 	}
 
 	return 0;
 
-err2:
+err3:
 	platform_device_put(musb);
 
+err2:
+	musb_put_id(&pdev->dev, musbid);
+
 err1:
 	kfree(glue);
 
@@ -1219,6 +1232,7 @@ static int __devexit tusb_remove(struct platform_device *pdev)
 {
 	struct tusb6010_glue		*glue = platform_get_drvdata(pdev);
 
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 	kfree(glue);
diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
index a8c0fad..d62a91f 100644
--- a/drivers/usb/musb/ux500.c
+++ b/drivers/usb/musb/ux500.c
@@ -74,25 +74,34 @@ static int __devinit ux500_probe(struct platform_device *pdev)
 		goto err0;
 	}
 
-	musb = platform_device_alloc("musb-hdrc", -1);
+	/* get the musb id */
+	musbid = musb_get_id(&pdev->dev, GFP_KERNEL);
+	if (musbid < 0) {
+		dev_err(&pdev->dev, "failed to allocate musb id\n");
+		ret = -ENOMEM;
+		goto err1;
+	}
+
+	musb = platform_device_alloc("musb-hdrc", musbid);
 	if (!musb) {
 		dev_err(&pdev->dev, "failed to allocate musb device\n");
-		goto err1;
+		goto err2;
 	}
 
 	clk = clk_get(&pdev->dev, "usb");
 	if (IS_ERR(clk)) {
 		dev_err(&pdev->dev, "failed to get clock\n");
 		ret = PTR_ERR(clk);
-		goto err2;
+		goto err3;
 	}
 
 	ret = clk_enable(clk);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to enable clock\n");
-		goto err3;
+		goto err4;
 	}
 
+	musb->id			= musbid;
 	musb->dev.parent		= &pdev->dev;
 	musb->dev.dma_mask		= pdev->dev.dma_mask;
 	musb->dev.coherent_dma_mask	= pdev->dev.coherent_dma_mask;
@@ -109,32 +118,35 @@ static int __devinit ux500_probe(struct platform_device *pdev)
 			pdev->num_resources);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add resources\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(&pdev->dev, "failed to add platform_data\n");
-		goto err4;
+		goto err5;
 	}
 
 	ret = platform_device_add(musb);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register musb device\n");
-		goto err4;
+		goto err5;
 	}
 
 	return 0;
 
-err4:
+err5:
 	clk_disable(clk);
 
-err3:
+err4:
 	clk_put(clk);
 
-err2:
+err3:
 	platform_device_put(musb);
 
+err2:
+	musb_put_id(&pdev->dev, musbid);
+
 err1:
 	kfree(glue);
 
@@ -146,6 +158,7 @@ static int __devexit ux500_remove(struct platform_device *pdev)
 {
 	struct ux500_glue	*glue = platform_get_drvdata(pdev);
 
+	musb_put_id(&pdev->dev, glue->musb->id);
 	platform_device_del(glue->musb);
 	platform_device_put(glue->musb);
 	clk_disable(glue->clk);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 04/13] usb: musb: kill global and static for multi instance
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
@ 2012-08-31 11:09   ` Ravi Babu
  2012-08-31 11:09   ` [PATCH v9 05/13] usb: musb: am335x: add support for dual instance Ravi Babu
                     ` (4 subsequent siblings)
  5 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

From: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>

Moved global variable "musb_debugfs_root" and static variable
"old_state" to 'struct musb' to help support multi instance of
musb controller as present on AM335x platform.

Also removed the global variable "orig_dma_mask" and filled the
dev->dma_mask with parent device's dma_mask.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/musb/musb_core.c    |   22 +++++++---------------
 drivers/usb/musb/musb_core.h    |    4 ++++
 drivers/usb/musb/musb_debugfs.c |    8 +++-----
 3 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 7499fbb..44c8caa 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -100,6 +100,7 @@
 #include <linux/platform_device.h>
 #include <linux/io.h>
 #include <linux/idr.h>
+#include <linux/dma-mapping.h>
 
 #include "musb_core.h"
 
@@ -1797,10 +1798,9 @@ static const struct attribute_group musb_attr_group = {
 static void musb_irq_work(struct work_struct *data)
 {
 	struct musb *musb = container_of(data, struct musb, irq_work);
-	static int old_state;
 
-	if (musb->xceiv->state != old_state) {
-		old_state = musb->xceiv->state;
+	if (musb->xceiv->state != musb->xceiv_old_state) {
+		musb->xceiv_old_state = musb->xceiv->state;
 		sysfs_notify(&musb->controller->kobj, NULL, "mode");
 	}
 }
@@ -2060,11 +2060,6 @@ fail0:
 /* all implementations (PCI bridge to FPGA, VLYNQ, etc) should just
  * bridge to a platform device; this driver then suffices.
  */
-
-#ifndef CONFIG_MUSB_PIO_ONLY
-static u64	*orig_dma_mask;
-#endif
-
 static int __devinit musb_probe(struct platform_device *pdev)
 {
 	struct device	*dev = &pdev->dev;
@@ -2083,10 +2078,6 @@ static int __devinit musb_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}
 
-#ifndef CONFIG_MUSB_PIO_ONLY
-	/* clobbered by use_dma=n */
-	orig_dma_mask = dev->dma_mask;
-#endif
 	status = musb_init_controller(dev, irq, base);
 	if (status < 0)
 		iounmap(base);
@@ -2096,7 +2087,8 @@ static int __devinit musb_probe(struct platform_device *pdev)
 
 static int __devexit musb_remove(struct platform_device *pdev)
 {
-	struct musb	*musb = dev_to_musb(&pdev->dev);
+	struct device	*dev = &pdev->dev;
+	struct musb	*musb = dev_to_musb(dev);
 	void __iomem	*ctrl_base = musb->ctrl_base;
 
 	/* this gets called on rmmod.
@@ -2109,9 +2101,9 @@ static int __devexit musb_remove(struct platform_device *pdev)
 
 	musb_free(musb);
 	iounmap(ctrl_base);
-	device_init_wakeup(&pdev->dev, 0);
+	device_init_wakeup(dev, 0);
 #ifndef CONFIG_MUSB_PIO_ONLY
-	pdev->dev.dma_mask = orig_dma_mask;
+	dma_set_mask(dev, *dev->parent->dma_mask);
 #endif
 	return 0;
 }
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index a69ffd6..c158aac 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -437,6 +437,10 @@ struct musb {
 #ifdef MUSB_CONFIG_PROC_FS
 	struct proc_dir_entry *proc_entry;
 #endif
+	int			xceiv_old_state;
+#ifdef CONFIG_DEBUG_FS
+	struct dentry		*debugfs_root;
+#endif
 };
 
 static inline struct musb *gadget_to_musb(struct usb_gadget *g)
diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
index 40a37c9..1d6e8af 100644
--- a/drivers/usb/musb/musb_debugfs.c
+++ b/drivers/usb/musb/musb_debugfs.c
@@ -103,8 +103,6 @@ static const struct musb_register_map musb_regmap[] = {
 	{  }	/* Terminating Entry */
 };
 
-static struct dentry *musb_debugfs_root;
-
 static int musb_regdump_show(struct seq_file *s, void *unused)
 {
 	struct musb		*musb = s->private;
@@ -241,7 +239,7 @@ int __devinit musb_init_debugfs(struct musb *musb)
 	struct dentry		*file;
 	int			ret;
 
-	root = debugfs_create_dir("musb", NULL);
+	root = debugfs_create_dir(dev_name(musb->controller), NULL);
 	if (!root) {
 		ret = -ENOMEM;
 		goto err0;
@@ -261,7 +259,7 @@ int __devinit musb_init_debugfs(struct musb *musb)
 		goto err1;
 	}
 
-	musb_debugfs_root = root;
+	musb->debugfs_root = root;
 
 	return 0;
 
@@ -274,5 +272,5 @@ err0:
 
 void /* __init_or_exit */ musb_exit_debugfs(struct musb *musb)
 {
-	debugfs_remove_recursive(musb_debugfs_root);
+	debugfs_remove_recursive(musb->debugfs_root);
 }
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 05/13] usb: musb: am335x: add support for dual instance
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
  2012-08-31 11:09   ` [PATCH v9 04/13] usb: musb: kill global and static for multi instance Ravi Babu
@ 2012-08-31 11:09   ` Ravi Babu
  2012-08-31 11:09   ` [PATCH v9 07/13] usb: musb: dsps: add dt support Ravi Babu
                     ` (3 subsequent siblings)
  5 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

AM335x and TI81xx platform has dual musb controller so updating the
musb_dspc.c to support the same.

Changes:
        - Moved otg_workaround timer to glue structure
        - Moved static local variable last_timer to glue structure
        - PHY on/off related cleanups

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/musb/musb_dsps.c |  112 +++++++++++++++++++++++++-----------------
 1 files changed, 66 insertions(+), 46 deletions(-)

diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 36130ba..f883c25 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -106,6 +106,8 @@ struct dsps_musb_wrapper {
 	/* miscellaneous stuff */
 	u32		musb_core_offset;
 	u8		poll_seconds;
+	/* number of musb instances */
+	u8		instances;
 };
 
 /**
@@ -113,16 +115,18 @@ struct dsps_musb_wrapper {
  */
 struct dsps_glue {
 	struct device *dev;
-	struct platform_device *musb;	/* child musb pdev */
+	struct platform_device *musb[2];	/* child musb pdev */
 	const struct dsps_musb_wrapper *wrp; /* wrapper register offsets */
-	struct timer_list timer;	/* otg_workaround timer */
-	u32 __iomem *usb_ctrl;
+	struct timer_list timer[2];	/* otg_workaround timer */
+	unsigned long last_timer[2];    /* last timer data for each instance */
+	u32 __iomem *usb_ctrl[2];
 	u8      usbss_rev;
 };
 
 /**
  * musb_dsps_phy_control - phy on/off
  * @glue: struct dsps_glue *
+ * @id: musb instance
  * @on: flag for phy to be switched on or off
  *
  * This is to enable the PHY using usb_ctrl register in system control
@@ -131,11 +135,11 @@ struct dsps_glue {
  * XXX: This function will be removed once we have a seperate driver for
  * control module
  */
-static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
+static void musb_dsps_phy_control(struct dsps_glue *glue, u8 id, u8 on)
 {
 	u32 usbphycfg;
 
-	usbphycfg = __raw_readl(glue->usb_ctrl);
+	usbphycfg = __raw_readl(glue->usb_ctrl[id]);
 
 	if (on) {
 		if (glue->usbss_rev == MUSB_USBSS_REV_816X) {
@@ -158,7 +162,7 @@ static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
 				glue->usbss_rev == MUSB_USBSS_REV_33XX)
 			usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
 	}
-	__raw_writel(usbphycfg, glue->usb_ctrl);
+	__raw_writel(usbphycfg, glue->usb_ctrl[id]);
 }
 /**
  * dsps_musb_enable - enable interrupts
@@ -207,8 +211,8 @@ static void otg_timer(unsigned long _musb)
 	struct musb *musb = (void *)_musb;
 	void __iomem *mregs = musb->mregs;
 	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev->parent);
-	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	struct platform_device *pdev = to_platform_device(dev);
+	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
 	const struct dsps_musb_wrapper *wrp = glue->wrp;
 	u8 devctl;
 	unsigned long flags;
@@ -244,7 +248,7 @@ static void otg_timer(unsigned long _musb)
 	case OTG_STATE_B_IDLE:
 		devctl = dsps_readb(mregs, MUSB_DEVCTL);
 		if (devctl & MUSB_DEVCTL_BDEVICE)
-			mod_timer(&glue->timer,
+			mod_timer(&glue->timer[pdev->id],
 					jiffies + wrp->poll_seconds * HZ);
 		else
 			musb->xceiv->state = OTG_STATE_A_IDLE;
@@ -258,9 +262,8 @@ static void otg_timer(unsigned long _musb)
 static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout)
 {
 	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev->parent);
-	struct dsps_glue *glue = platform_get_drvdata(pdev);
-	static unsigned long last_timer;
+	struct platform_device *pdev = to_platform_device(dev);
+	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
 
 	if (timeout == 0)
 		timeout = jiffies + msecs_to_jiffies(3);
@@ -270,22 +273,23 @@ static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout)
 				musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) {
 		dev_dbg(musb->controller, "%s active, deleting timer\n",
 				otg_state_string(musb->xceiv->state));
-		del_timer(&glue->timer);
-		last_timer = jiffies;
+		del_timer(&glue->timer[pdev->id]);
+		glue->last_timer[pdev->id] = jiffies;
 		return;
 	}
 
-	if (time_after(last_timer, timeout) && timer_pending(&glue->timer)) {
+	if (time_after(glue->last_timer[pdev->id], timeout) &&
+				timer_pending(&glue->timer[pdev->id])) {
 		dev_dbg(musb->controller,
 			"Longer idle timer already pending, ignoring...\n");
 		return;
 	}
-	last_timer = timeout;
+	glue->last_timer[pdev->id] = timeout;
 
 	dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n",
 		otg_state_string(musb->xceiv->state),
 			jiffies_to_msecs(timeout - jiffies));
-	mod_timer(&glue->timer, timeout);
+	mod_timer(&glue->timer[pdev->id], timeout);
 }
 
 static irqreturn_t dsps_interrupt(int irq, void *hci)
@@ -293,8 +297,8 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
 	struct musb  *musb = hci;
 	void __iomem *reg_base = musb->ctrl_base;
 	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev->parent);
-	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	struct platform_device *pdev = to_platform_device(dev);
+	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
 	const struct dsps_musb_wrapper *wrp = glue->wrp;
 	unsigned long flags;
 	irqreturn_t ret = IRQ_NONE;
@@ -353,7 +357,7 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
 			 */
 			musb->int_usb &= ~MUSB_INTR_VBUSERROR;
 			musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
-			mod_timer(&glue->timer,
+			mod_timer(&glue->timer[pdev->id],
 					jiffies + wrp->poll_seconds * HZ);
 			WARNING("VBUS error workaround (delay coming)\n");
 		} else if (drvvbus) {
@@ -361,7 +365,7 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
 			MUSB_HST_MODE(musb);
 			musb->xceiv->otg->default_a = 1;
 			musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
-			del_timer(&glue->timer);
+			del_timer(&glue->timer[pdev->id]);
 		} else {
 			musb->is_active = 0;
 			MUSB_DEV_MODE(musb);
@@ -388,7 +392,8 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
 
 	/* Poll for ID change */
 	if (musb->xceiv->state == OTG_STATE_B_IDLE)
-		mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ);
+		mod_timer(&glue->timer[pdev->id],
+			 jiffies + wrp->poll_seconds * HZ);
 
 	spin_unlock_irqrestore(&musb->lock, flags);
 
@@ -398,8 +403,8 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
 static int dsps_musb_init(struct musb *musb)
 {
 	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev->parent);
-	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	struct platform_device *pdev = to_platform_device(dev);
+	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
 	const struct dsps_musb_wrapper *wrp = glue->wrp;
 	void __iomem *reg_base = musb->ctrl_base;
 	u32 rev, val;
@@ -421,13 +426,13 @@ static int dsps_musb_init(struct musb *musb)
 		goto err0;
 	}
 
-	setup_timer(&glue->timer, otg_timer, (unsigned long) musb);
+	setup_timer(&glue->timer[pdev->id], otg_timer, (unsigned long) musb);
 
 	/* Reset the musb */
 	dsps_writel(reg_base, wrp->control, (1 << wrp->reset));
 
 	/* Start the on-chip PHY and its PLL. */
-	musb_dsps_phy_control(glue, 1);
+	musb_dsps_phy_control(glue, pdev->id, 1);
 
 	musb->isr = dsps_interrupt;
 
@@ -449,13 +454,13 @@ err0:
 static int dsps_musb_exit(struct musb *musb)
 {
 	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev->parent);
-	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	struct platform_device *pdev = to_platform_device(dev);
+	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
 
-	del_timer_sync(&glue->timer);
+	del_timer_sync(&glue->timer[pdev->id]);
 
 	/* Shutdown the on-chip PHY and its PLL. */
-	musb_dsps_phy_control(glue, 0);
+	musb_dsps_phy_control(glue, pdev->id, 0);
 
 	/* NOP driver needs change if supporting dual instance */
 	usb_put_phy(musb->xceiv);
@@ -495,8 +500,8 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 		goto err0;
 	}
 
-	glue->usb_ctrl = devm_request_and_ioremap(&pdev->dev, res);
-	if (glue->usb_ctrl == NULL) {
+	glue->usb_ctrl[id] = devm_request_and_ioremap(&pdev->dev, res);
+	if (glue->usb_ctrl[id] == NULL) {
 		dev_err(dev, "Failed to obtain usb_ctrl%d memory\n", id);
 		ret = -ENODEV;
 		goto err0;
@@ -545,7 +550,7 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 	musb->dev.dma_mask		= &musb_dmamask;
 	musb->dev.coherent_dma_mask	= musb_dmamask;
 
-	glue->musb			= musb;
+	glue->musb[id]			= musb;
 
 	pdata->platform_ops		= &dsps_ops;
 
@@ -577,11 +582,11 @@ err0:
 	return ret;
 }
 
-static void __devexit dsps_delete_musb_pdev(struct dsps_glue *glue)
+static void __devexit dsps_delete_musb_pdev(struct dsps_glue *glue, u8 id)
 {
-	musb_put_id(glue->dev, glue->musb->id);
-	platform_device_del(glue->musb);
-	platform_device_put(glue->musb);
+	musb_put_id(glue->dev, glue->musb[id]->id);
+	platform_device_del(glue->musb[id]);
+	platform_device_put(glue->musb[id]);
 }
 
 static int __devinit dsps_probe(struct platform_device *pdev)
@@ -592,7 +597,7 @@ static int __devinit dsps_probe(struct platform_device *pdev)
 	struct dsps_glue *glue;
 	struct resource *iomem;
 	u32 __iomem *usbss;
-	int ret;
+	int ret, i;
 
 	/* allocate glue */
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
@@ -636,11 +641,16 @@ static int __devinit dsps_probe(struct platform_device *pdev)
 		goto err2;
 	}
 
-	/* create the child platform device for first instances of musb */
-	ret = dsps_create_musb_pdev(glue, 0);
-	if (ret != 0) {
-		dev_err(&pdev->dev, "failed to create child pdev\n");
-		goto err3;
+	/* create the child platform device for all instances of musb */
+	for (i = 0; i < wrp->instances ; i++) {
+		ret = dsps_create_musb_pdev(glue, i);
+		if (ret != 0) {
+			dev_err(&pdev->dev, "failed to create child pdev\n");
+			/* release resources of previously created instances */
+			for (i--; i >= 0 ; i--)
+				dsps_delete_musb_pdev(glue, i);
+			goto err3;
+		}
 	}
 
 	/* read the usbss revision register */
@@ -661,9 +671,12 @@ err0:
 static int __devexit dsps_remove(struct platform_device *pdev)
 {
 	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	const struct dsps_musb_wrapper *wrp = glue->wrp;
+	int i;
 
 	/* delete the child platform device */
-	dsps_delete_musb_pdev(glue);
+	for (i = 0; i < wrp->instances ; i++)
+		dsps_delete_musb_pdev(glue, i);
 
 	/* disable usbss clocks */
 	pm_runtime_put(&pdev->dev);
@@ -678,9 +691,12 @@ static int dsps_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev->parent);
 	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	const struct dsps_musb_wrapper *wrp = glue->wrp;
+	int i;
 
 	/* Shutdown the on-chip PHY and its PLL. */
-	musb_dsps_phy_control(glue, 0);
+	for (i = 0 ; i < wrp->instances ; i++)
+		musb_dsps_phy_control(glue, i, 0);
 
 	return 0;
 }
@@ -689,9 +705,12 @@ static int dsps_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev->parent);
 	struct dsps_glue *glue = platform_get_drvdata(pdev);
+	const struct dsps_musb_wrapper *wrp = glue->wrp;
+	int i;
 
 	/* Start the on-chip PHY and its PLL. */
-	musb_dsps_phy_control(glue, 1);
+	for (i = 0 ; i < wrp->instances ; i++)
+		musb_dsps_phy_control(glue, i, 1);
 
 	return 0;
 }
@@ -727,6 +746,7 @@ static const struct dsps_musb_wrapper ti81xx_driver_data __devinitconst = {
 	.rxep_bitmap		= (0xfffe << 16),
 	.musb_core_offset	= 0x400,
 	.poll_seconds		= 2,
+	.instances		= 2,
 };
 
 static const struct platform_device_id musb_dsps_id_table[] __devinitconst = {
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 06/13] usb: otg: nop: add support for multiple tranceiver
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
                   ` (2 preceding siblings ...)
  2012-08-31 11:09 ` [PATCH v9 03/13] usb: musb: add musb_ida for multi instance support Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 08/13] arm/dts: am33xx: Add dt data for usbss Ravi Babu
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Santhapuri, Damodar <damodar.santhapuri@ti.com>

Currently we have one single nop transceiver support as same is
defined as a global variable in drivers/usb/otg/nop-usb-xceiv.c.
This need to be changed to support multiple otg controller each
using nop transceiver on a platform such as am335x.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 drivers/usb/musb/am35x.c          |    2 +-
 drivers/usb/musb/blackfin.c       |    2 +-
 drivers/usb/musb/da8xx.c          |    2 +-
 drivers/usb/musb/davinci.c        |    4 +-
 drivers/usb/musb/musb_dsps.c      |    8 +++---
 drivers/usb/musb/tusb6010.c       |    4 +-
 drivers/usb/otg/nop-usb-xceiv.c   |   54 ++++++++++++++++++++++++++++++++-----
 include/linux/usb/nop-usb-xceiv.h |    4 +-
 8 files changed, 60 insertions(+), 20 deletions(-)

diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
index 457f25e..e3099fc 100644
--- a/drivers/usb/musb/am35x.c
+++ b/drivers/usb/musb/am35x.c
@@ -399,7 +399,7 @@ static int am35x_musb_exit(struct musb *musb)
 		data->set_phy_power(0);
 
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 
 	return 0;
 }
diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
index e8cff9b..32b4fe4 100644
--- a/drivers/usb/musb/blackfin.c
+++ b/drivers/usb/musb/blackfin.c
@@ -427,7 +427,7 @@ static int bfin_musb_exit(struct musb *musb)
 	gpio_free(musb->config->gpio_vrsel);
 
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 	return 0;
 }
 
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
index ce11d20..f86a1c7 100644
--- a/drivers/usb/musb/da8xx.c
+++ b/drivers/usb/musb/da8xx.c
@@ -451,7 +451,7 @@ static int da8xx_musb_exit(struct musb *musb)
 	phy_off();
 
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 
 	return 0;
 }
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
index 606bfd0..e12d20a 100644
--- a/drivers/usb/musb/davinci.c
+++ b/drivers/usb/musb/davinci.c
@@ -437,7 +437,7 @@ static int davinci_musb_init(struct musb *musb)
 fail:
 	usb_put_phy(musb->xceiv);
 unregister:
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 	return -ENODEV;
 }
 
@@ -485,7 +485,7 @@ static int davinci_musb_exit(struct musb *musb)
 	phy_off();
 
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 
 	return 0;
 }
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index f883c25..25e395b 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -413,7 +413,7 @@ static int dsps_musb_init(struct musb *musb)
 	/* mentor core register starts at offset of 0x400 from musb base */
 	musb->mregs += wrp->musb_core_offset;
 
-	/* NOP driver needs change if supporting dual instance */
+	/* Register NOP driver */
 	usb_nop_xceiv_register();
 	musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 	if (IS_ERR_OR_NULL(musb->xceiv))
@@ -447,7 +447,7 @@ static int dsps_musb_init(struct musb *musb)
 	return 0;
 err0:
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 	return status;
 }
 
@@ -462,9 +462,9 @@ static int dsps_musb_exit(struct musb *musb)
 	/* Shutdown the on-chip PHY and its PLL. */
 	musb_dsps_phy_control(glue, pdev->id, 0);
 
-	/* NOP driver needs change if supporting dual instance */
+	/* Unregister NOP driver */
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 
 	return 0;
 }
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index dc4d75e..71c4778 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -1117,7 +1117,7 @@ done:
 			iounmap(sync);
 
 		usb_put_phy(musb->xceiv);
-		usb_nop_xceiv_unregister();
+		usb_nop_xceiv_unregister(musb->xceiv);
 	}
 	return ret;
 }
@@ -1133,7 +1133,7 @@ static int tusb_musb_exit(struct musb *musb)
 	iounmap(musb->sync_va);
 
 	usb_put_phy(musb->xceiv);
-	usb_nop_xceiv_unregister();
+	usb_nop_xceiv_unregister(musb->xceiv);
 	return 0;
 }
 
diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c
index e52e35e..7e0dba3 100644
--- a/drivers/usb/otg/nop-usb-xceiv.c
+++ b/drivers/usb/otg/nop-usb-xceiv.c
@@ -32,30 +32,69 @@
 #include <linux/usb/otg.h>
 #include <linux/usb/nop-usb-xceiv.h>
 #include <linux/slab.h>
+#include <linux/idr.h>
 
 struct nop_usb_xceiv {
 	struct usb_phy		phy;
 	struct device		*dev;
+	struct platform_device	*pd;
 };
 
-static struct platform_device *pd;
+static DEFINE_IDA(nop_ida);
 
-void usb_nop_xceiv_register(void)
+static int nop_get_id(gfp_t gfp_mask)
 {
-	if (pd)
+	int ret, id;
+
+	ret = ida_pre_get(&nop_ida, gfp_mask);
+	if (!ret) {
+		pr_err("failed to reserve resource for id\n");
+		return -ENOMEM;
+	}
+
+	ret = ida_get_new(&nop_ida, &id);
+	if (ret < 0) {
+		pr_err("failed to allocate a new id\n");
+		return ret;
+	}
+
+	return id;
+}
+
+static void nop_put_id(int id)
+{
+
+	pr_debug("removing id %d\n", id);
+	ida_remove(&nop_ida, id);
+}
+
+void usb_nop_xceiv_register()
+{
+	struct platform_device *pd;
+	int id;
+
+	id = nop_get_id(GFP_KERNEL);
+	if (id < 0) {
+		pr_err("failed to allocate a new id\n");
 		return;
-	pd = platform_device_register_simple("nop_usb_xceiv", -1, NULL, 0);
+	}
+
+	pd = platform_device_register_simple("nop_usb_xceiv", id, NULL, 0);
 	if (!pd) {
-		printk(KERN_ERR "Unable to register usb nop transceiver\n");
+		pr_err("Unable to register usb nop transceiver\n");
 		return;
 	}
 }
 EXPORT_SYMBOL(usb_nop_xceiv_register);
 
-void usb_nop_xceiv_unregister(void)
+void usb_nop_xceiv_unregister(struct usb_phy *phy)
 {
+	struct nop_usb_xceiv *nop = container_of(phy,
+			struct nop_usb_xceiv, phy);
+	struct platform_device *pd = nop->pd;
+
 	platform_device_unregister(pd);
-	pd = NULL;
+	nop_put_id(pd->id);
 }
 EXPORT_SYMBOL(usb_nop_xceiv_unregister);
 
@@ -113,6 +152,7 @@ static int __devinit nop_usb_xceiv_probe(struct platform_device *pdev)
 	if (pdata)
 		type = pdata->type;
 
+	nop->pd			= pdev;
 	nop->dev		= &pdev->dev;
 	nop->phy.dev		= nop->dev;
 	nop->phy.label		= "nop-xceiv";
diff --git a/include/linux/usb/nop-usb-xceiv.h b/include/linux/usb/nop-usb-xceiv.h
index 28884c7..c12fc10 100644
--- a/include/linux/usb/nop-usb-xceiv.h
+++ b/include/linux/usb/nop-usb-xceiv.h
@@ -10,13 +10,13 @@ struct nop_usb_xceiv_platform_data {
 #if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE))
 /* sometimes transceivers are accessed only through e.g. ULPI */
 extern void usb_nop_xceiv_register(void);
-extern void usb_nop_xceiv_unregister(void);
+extern void usb_nop_xceiv_unregister(struct usb_phy *);
 #else
 static inline void usb_nop_xceiv_register(void)
 {
 }
 
-static inline void usb_nop_xceiv_unregister(void)
+static inline void usb_nop_xceiv_unregister(struct usb_phy *phy)
 {
 }
 #endif
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 07/13] usb: musb: dsps: add dt support
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
  2012-08-31 11:09   ` [PATCH v9 04/13] usb: musb: kill global and static for multi instance Ravi Babu
  2012-08-31 11:09   ` [PATCH v9 05/13] usb: musb: am335x: add support for dual instance Ravi Babu
@ 2012-08-31 11:09   ` Ravi Babu
  2012-08-31 11:09   ` [PATCH v9 12/13] arm/dts: am33xx: add phy phandle to usbss Ravi Babu
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

From: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>

Added device tree support for dsps musb glue driver and updated the
Documentation with device tree binding information.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
---
 .../devicetree/bindings/usb/am33xx-usb.txt         |   14 +++++
 drivers/usb/musb/musb_dsps.c                       |   60 +++++++++++++++++---
 2 files changed, 65 insertions(+), 9 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/usb/am33xx-usb.txt

diff --git a/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
new file mode 100644
index 0000000..ca8fa56
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
@@ -0,0 +1,14 @@
+AM33XX MUSB GLUE
+ - compatible : Should be "ti,musb-am33xx"
+ - ti,hwmods : must be "usb_otg_hs"
+ - multipoint : Should be "1" indicating the musb controller supports
+   multipoint. This is a MUSB configuration-specific setting.
+ - num_eps : Specifies the number of endpoints. This is also a
+   MUSB configuration-specific setting. Should be set to "16"
+ - ram_bits : Specifies the ram address size. Should be set to "12"
+ - port0_mode : Should be "3" to represent OTG. "1" signifies HOST and "2"
+   represents PERIPHERAL.
+ - port1_mode : Should be "1" to represent HOST. "3" signifies OTG and "2"
+   represents PERIPHERAL.
+ - power : Should be "250". This signifies the controller can supply upto
+   500mA when operating in host mode.
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 25e395b..2c104bf 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -31,6 +31,7 @@
 
 #include <linux/init.h>
 #include <linux/io.h>
+#include <linux/of.h>
 #include <linux/err.h>
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
@@ -46,6 +47,10 @@
 
 #include "musb_core.h"
 
+#ifdef CONFIG_OF
+static const struct of_device_id musb_dsps_of_match[];
+#endif
+
 /**
  * avoid using musb_readx()/musb_writex() as glue layer should not be
  * dependent on musb core layer symbols.
@@ -486,6 +491,8 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 	struct device *dev = glue->dev;
 	struct platform_device *pdev = to_platform_device(dev);
 	struct musb_hdrc_platform_data  *pdata = dev->platform_data;
+	struct device_node *np = pdev->dev.of_node;
+	struct musb_hdrc_config	*config;
 	struct platform_device	*musb;
 	struct resource *res;
 	struct resource	resources[2];
@@ -552,14 +559,40 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 
 	glue->musb[id]			= musb;
 
-	pdata->platform_ops		= &dsps_ops;
-
 	ret = platform_device_add_resources(musb, resources, 2);
 	if (ret) {
 		dev_err(dev, "failed to add resources\n");
 		goto err2;
 	}
 
+	if (np) {
+		pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+		if (!pdata) {
+			dev_err(&pdev->dev,
+				"failed to allocate musb platfrom data\n");
+			ret = -ENOMEM;
+			goto err2;
+		}
+
+		config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL);
+		if (!config) {
+			dev_err(&pdev->dev,
+				"failed to allocate musb hdrc config\n");
+			goto err2;
+		}
+
+		of_property_read_u32(np, "num_eps", (u32 *)&config->num_eps);
+		of_property_read_u32(np, "ram_bits", (u32 *)&config->ram_bits);
+		sprintf(res_name, "port%d_mode", id);
+		of_property_read_u32(np, res_name, (u32 *)&pdata->mode);
+		of_property_read_u32(np, "power", (u32 *)&pdata->power);
+		config->multipoint = of_property_read_bool(np, "multipoint");
+
+		pdata->config		= config;
+	}
+
+	pdata->platform_ops		= &dsps_ops;
+
 	ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
 	if (ret) {
 		dev_err(dev, "failed to add platform_data\n");
@@ -591,14 +624,22 @@ static void __devexit dsps_delete_musb_pdev(struct dsps_glue *glue, u8 id)
 
 static int __devinit dsps_probe(struct platform_device *pdev)
 {
-	const struct platform_device_id *id = platform_get_device_id(pdev);
-	const struct dsps_musb_wrapper *wrp =
-				(struct dsps_musb_wrapper *)id->driver_data;
+	struct device_node *np = pdev->dev.of_node;
+	const struct of_device_id *match;
+	const struct dsps_musb_wrapper *wrp;
 	struct dsps_glue *glue;
 	struct resource *iomem;
 	u32 __iomem *usbss;
 	int ret, i;
 
+	match = of_match_node(musb_dsps_of_match, np);
+	if (!match) {
+		dev_err(&pdev->dev, "fail to get matching of_match struct\n");
+		ret = -EINVAL;
+		goto err0;
+	}
+	wrp = match->data;
+
 	/* allocate glue */
 	glue = kzalloc(sizeof(*glue), GFP_KERNEL);
 	if (!glue) {
@@ -758,13 +799,14 @@ static const struct platform_device_id musb_dsps_id_table[] __devinitconst = {
 };
 MODULE_DEVICE_TABLE(platform, musb_dsps_id_table);
 
+#ifdef CONFIG_OF
 static const struct of_device_id musb_dsps_of_match[] __devinitconst = {
-	{ .compatible = "musb-ti81xx", },
-	{ .compatible = "ti,ti81xx-musb", },
-	{ .compatible = "ti,am335x-musb", },
+	{ .compatible = "ti,musb-am33xx",
+		.data = (void *) &ti81xx_driver_data, },
 	{  },
 };
 MODULE_DEVICE_TABLE(of, musb_dsps_of_match);
+#endif
 
 static struct platform_driver dsps_usbss_driver = {
 	.probe		= dsps_probe,
@@ -772,7 +814,7 @@ static struct platform_driver dsps_usbss_driver = {
 	.driver         = {
 		.name   = "musb-dsps",
 		.pm	= &dsps_pm_ops,
-		.of_match_table	= musb_dsps_of_match,
+		.of_match_table	= of_match_ptr(musb_dsps_of_match),
 	},
 	.id_table	= musb_dsps_id_table,
 };
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 08/13] arm/dts: am33xx: Add dt data for usbss
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
                   ` (3 preceding siblings ...)
  2012-08-31 11:09 ` [PATCH v9 06/13] usb: otg: nop: add support for multiple tranceiver Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 09/13] arm/dts: am33xx: add dt data for usb nop phy Ravi Babu
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Ajay Kumar Gupta <ajay.gupta@ti.com>

Added device tree data for usbss on am33xx. There are two musb controllers
on am33xx platform so have port0_mode and port1_mode additional data.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 arch/arm/boot/dts/am33xx.dtsi |   11 +++++++++++
 drivers/usb/musb/musb_dsps.c  |    6 +++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index 59509c4..bdde9c9 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -154,5 +154,16 @@
 			#size-cells = <0>;
 			ti,hwmods = "i2c3";
 		};
+
+		usb_otg_hs: usb_otg_hs {
+			compatible = "ti,musb-am33xx";
+			ti,hwmods = "usb_otg_hs";
+			multipoint = <1>;
+			num-eps = <16>;
+			ram-bits = <12>;
+			port0-mode = <3>;
+			port1-mode = <3>;
+			power = <250>;
+		};
 	};
 };
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 2c104bf..32c8d68 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -581,9 +581,9 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
 			goto err2;
 		}
 
-		of_property_read_u32(np, "num_eps", (u32 *)&config->num_eps);
-		of_property_read_u32(np, "ram_bits", (u32 *)&config->ram_bits);
-		sprintf(res_name, "port%d_mode", id);
+		of_property_read_u32(np, "num-eps", (u32 *)&config->num_eps);
+		of_property_read_u32(np, "ram-bits", (u32 *)&config->ram_bits);
+		sprintf(res_name, "port%d-mode", id);
 		of_property_read_u32(np, res_name, (u32 *)&pdata->mode);
 		of_property_read_u32(np, "power", (u32 *)&pdata->power);
 		config->multipoint = of_property_read_bool(np, "multipoint");
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 09/13] arm/dts: am33xx: add dt data for usb nop phy
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
                   ` (4 preceding siblings ...)
  2012-08-31 11:09 ` [PATCH v9 08/13] arm/dts: am33xx: Add dt data for usbss Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 10/13] usb: musb: dsps: remove explicit NOP device creation Ravi Babu
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Ajay Kumar Gupta <ajay.gupta@ti.com>

AM33xx has two musb controller and they have one NOP PHY each.
Added the device tree data for NOP PHY.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 arch/arm/boot/dts/am33xx.dtsi |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index bdde9c9..4b3a2b7 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -155,6 +155,14 @@
 			ti,hwmods = "i2c3";
 		};
 
+		usb0_phy: phy0 {
+			compatible = "nop-xceiv-usb";
+		};
+
+		usb1_phy: phy1 {
+			compatible = "nop-xceiv-usb";
+		};
+
 		usb_otg_hs: usb_otg_hs {
 			compatible = "ti,musb-am33xx";
 			ti,hwmods = "usb_otg_hs";
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 10/13] usb: musb: dsps: remove explicit NOP device creation
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
                   ` (5 preceding siblings ...)
  2012-08-31 11:09 ` [PATCH v9 09/13] arm/dts: am33xx: add dt data for usb nop phy Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
  2012-08-31 11:09 ` [PATCH v9 11/13] usb: musb: dsps: get the PHY using phandle api Ravi Babu
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Ajay Kumar Gupta <ajay.gupta@ti.com>

As NOP device node is now added in am33xx tree so remove the call
which creates the NOP platform_device.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 drivers/usb/musb/musb_dsps.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 32c8d68..eb6bfec 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -418,8 +418,7 @@ static int dsps_musb_init(struct musb *musb)
 	/* mentor core register starts at offset of 0x400 from musb base */
 	musb->mregs += wrp->musb_core_offset;
 
-	/* Register NOP driver */
-	usb_nop_xceiv_register();
+	/* Get the NOP PHY */
 	musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 	if (IS_ERR_OR_NULL(musb->xceiv))
 		return -ENODEV;
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 11/13] usb: musb: dsps: get the PHY using phandle api
  2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
                   ` (6 preceding siblings ...)
  2012-08-31 11:09 ` [PATCH v9 10/13] usb: musb: dsps: remove explicit NOP device creation Ravi Babu
@ 2012-08-31 11:09 ` Ravi Babu
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
  8 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb; +Cc: linux-omap, balbi, grant.likely, devicetree-discuss, tony

From: Santhapuri, Damodar <damodar.santhapuri@ti.com>

AM33xx has two PHY of same type used by each musb controller so
use phandle of phy nodes to get the phy pointer.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 .../devicetree/bindings/usb/am33xx-usb.txt         |    2 ++
 drivers/usb/musb/musb_dsps.c                       |    5 ++++-
 2 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
index ca8fa56..b0caac3 100644
--- a/Documentation/devicetree/bindings/usb/am33xx-usb.txt
+++ b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
@@ -12,3 +12,5 @@ AM33XX MUSB GLUE
    represents PERIPHERAL.
  - power : Should be "250". This signifies the controller can supply upto
    500mA when operating in host mode.
+ - usb0-phy : phandle for usb0 NOP PHY
+ - usb1-phy : phandle for usb1 NOP PHY
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index eb6bfec..992cd50 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -409,9 +409,11 @@ static int dsps_musb_init(struct musb *musb)
 {
 	struct device *dev = musb->controller;
 	struct platform_device *pdev = to_platform_device(dev);
+	struct platform_device *parent_pdev = to_platform_device(dev->parent);
 	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
 	const struct dsps_musb_wrapper *wrp = glue->wrp;
 	void __iomem *reg_base = musb->ctrl_base;
+	char name[10];
 	u32 rev, val;
 	int status;
 
@@ -419,7 +421,8 @@ static int dsps_musb_init(struct musb *musb)
 	musb->mregs += wrp->musb_core_offset;
 
 	/* Get the NOP PHY */
-	musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
+	sprintf(name, "usb%d-phy", pdev->id);
+	musb->xceiv = devm_usb_get_phy_by_phandle(&parent_pdev->dev, name);
 	if (IS_ERR_OR_NULL(musb->xceiv))
 		return -ENODEV;
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 12/13] arm/dts: am33xx: add phy phandle to usbss
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
                     ` (2 preceding siblings ...)
  2012-08-31 11:09   ` [PATCH v9 07/13] usb: musb: dsps: add dt support Ravi Babu
@ 2012-08-31 11:09   ` Ravi Babu
  2012-08-31 11:09   ` [PATCH v9 13/13] usb: otg: nop: add dt support Ravi Babu
  2012-09-11  9:17   ` [PATCH v9 00/13] usb: musb: adding multi instance support Felipe Balbi
  5 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

From: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>

Added NOP PHY phandle to usbss device node as same will be used
to get the phy from otg framework.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
---
 arch/arm/boot/dts/am33xx.dtsi |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index 4b3a2b7..1e77b0b 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -172,6 +172,8 @@
 			port0-mode = <3>;
 			port1-mode = <3>;
 			power = <250>;
+			usb0-phy = <&usb0_phy>;
+			usb1-phy = <&usb1_phy>;
 		};
 	};
 };
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v9 13/13] usb: otg: nop: add dt support
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
                     ` (3 preceding siblings ...)
  2012-08-31 11:09   ` [PATCH v9 12/13] arm/dts: am33xx: add phy phandle to usbss Ravi Babu
@ 2012-08-31 11:09   ` Ravi Babu
  2012-09-11  9:17   ` [PATCH v9 00/13] usb: musb: adding multi instance support Felipe Balbi
  5 siblings, 0 replies; 26+ messages in thread
From: Ravi Babu @ 2012-08-31 11:09 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

Added device tree support for nop transceiver driver and updated the
Documentation with device tree binding information for am33xx platform.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
---
 .../devicetree/bindings/usb/am33xx-usb.txt         |    3 +++
 drivers/usb/otg/nop-usb-xceiv.c                    |   10 ++++++++++
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
index b0caac3..e2702df 100644
--- a/Documentation/devicetree/bindings/usb/am33xx-usb.txt
+++ b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
@@ -14,3 +14,6 @@ AM33XX MUSB GLUE
    500mA when operating in host mode.
  - usb0-phy : phandle for usb0 NOP PHY
  - usb1-phy : phandle for usb1 NOP PHY
+
+NOP USB PHY
+ - compatible : Should be "nop-xceiv-usb"
diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c
index 7e0dba3..fdbc285 100644
--- a/drivers/usb/otg/nop-usb-xceiv.c
+++ b/drivers/usb/otg/nop-usb-xceiv.c
@@ -27,6 +27,7 @@
  */
 
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 #include <linux/usb/otg.h>
@@ -194,12 +195,21 @@ static int __devexit nop_usb_xceiv_remove(struct platform_device *pdev)
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static const struct of_device_id nop_xceiv_id_table[] = {
+	{ .compatible = "nop-xceiv-usb" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, nop_xceiv_id_table);
+#endif
+
 static struct platform_driver nop_usb_xceiv_driver = {
 	.probe		= nop_usb_xceiv_probe,
 	.remove		= __devexit_p(nop_usb_xceiv_remove),
 	.driver		= {
 		.name	= "nop_usb_xceiv",
 		.owner	= THIS_MODULE,
+		.of_match_table = of_match_ptr(nop_xceiv_id_table),
 	},
 };
 
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
       [not found]   ` <1346411399-23964-2-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
@ 2012-08-31 12:23     ` Felipe Balbi
       [not found]       ` <20120831122342.GC24861-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
  0 siblings, 1 reply; 26+ messages in thread
From: Felipe Balbi @ 2012-08-31 12:23 UTC (permalink / raw)
  To: Ravi Babu
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ, Kishon Vijay Abraham I,
	Benoit Cousson

[-- Attachment #1: Type: text/plain, Size: 10146 bytes --]

Hi,

On Fri, Aug 31, 2012 at 04:39:47PM +0530, Ravi Babu wrote:
> From: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> 
> AM335x uses NOP transceiver driver and need to enable builtin PHY
> by writing into usb_ctrl register available in system control
> module register space. This is being added at musb glue driver
> layer untill a separate system control module driver is available.
> 
> Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>

Kishon, you were adding a real phy driver for OMAP's internal phy logic
on one of your patches and I believe this will conflict with your
changes, right ?

How does this look to you ? Is this at least correct ? I suppose the
correct way would be to actually have the system control module driver
which we have been waiting, right ?

> ---
>  arch/arm/mach-omap2/board-ti8168evm.c   |    1 -
>  arch/arm/mach-omap2/omap_phy_internal.c |   35 ------------
>  arch/arm/plat-omap/include/plat/usb.h   |    5 +-
>  drivers/usb/musb/musb_dsps.c            |   87 +++++++++++++++++++++++++------
>  4 files changed, 73 insertions(+), 55 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/board-ti8168evm.c b/arch/arm/mach-omap2/board-ti8168evm.c
> index d4c8392..0c7c098 100644
> --- a/arch/arm/mach-omap2/board-ti8168evm.c
> +++ b/arch/arm/mach-omap2/board-ti8168evm.c
> @@ -26,7 +26,6 @@
>  #include <plat/usb.h>
>  
>  static struct omap_musb_board_data musb_board_data = {
> -	.set_phy_power	= ti81xx_musb_phy_power,
>  	.interface_type	= MUSB_INTERFACE_ULPI,
>  	.mode           = MUSB_OTG,
>  	.power		= 500,
> diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c
> index d52651a..d80bb16 100644
> --- a/arch/arm/mach-omap2/omap_phy_internal.c
> +++ b/arch/arm/mach-omap2/omap_phy_internal.c
> @@ -254,38 +254,3 @@ void am35x_set_mode(u8 musb_mode)
>  
>  	omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
>  }
> -
> -void ti81xx_musb_phy_power(u8 on)
> -{
> -	void __iomem *scm_base = NULL;
> -	u32 usbphycfg;
> -
> -	scm_base = ioremap(TI81XX_SCM_BASE, SZ_2K);
> -	if (!scm_base) {
> -		pr_err("system control module ioremap failed\n");
> -		return;
> -	}
> -
> -	usbphycfg = __raw_readl(scm_base + USBCTRL0);
> -
> -	if (on) {
> -		if (cpu_is_ti816x()) {
> -			usbphycfg |= TI816X_USBPHY0_NORMAL_MODE;
> -			usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC;
> -		} else if (cpu_is_ti814x()) {
> -			usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN
> -				| USBPHY_DPINPUT | USBPHY_DMINPUT);
> -			usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN
> -				| USBPHY_DPOPBUFCTL | USBPHY_DMOPBUFCTL);
> -		}
> -	} else {
> -		if (cpu_is_ti816x())
> -			usbphycfg &= ~TI816X_USBPHY0_NORMAL_MODE;
> -		else if (cpu_is_ti814x())
> -			usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
> -
> -	}
> -	__raw_writel(usbphycfg, scm_base + USBCTRL0);
> -
> -	iounmap(scm_base);
> -}
> diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h
> index 548a4c8..c2aa4ae 100644
> --- a/arch/arm/plat-omap/include/plat/usb.h
> +++ b/arch/arm/plat-omap/include/plat/usb.h
> @@ -95,7 +95,6 @@ extern void am35x_musb_reset(void);
>  extern void am35x_musb_phy_power(u8 on);
>  extern void am35x_musb_clear_irq(void);
>  extern void am35x_set_mode(u8 musb_mode);
> -extern void ti81xx_musb_phy_power(u8 on);
>  
>  /* AM35x */
>  /* USB 2.0 PHY Control */
> @@ -120,8 +119,8 @@ extern void ti81xx_musb_phy_power(u8 on);
>  #define CONF2_DATPOL		(1 << 1)
>  
>  /* TI81XX specific definitions */
> -#define USBCTRL0	0x620
> -#define USBSTAT0	0x624
> +#define MUSB_USBSS_REV_816X	0x9
> +#define MUSB_USBSS_REV_814X	0xb
>  
>  /* TI816X PHY controls bits */
>  #define TI816X_USBPHY0_NORMAL_MODE	(1 << 0)
> diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
> index 84d8181..960258d 100644
> --- a/drivers/usb/musb/musb_dsps.c
> +++ b/drivers/usb/musb/musb_dsps.c
> @@ -116,9 +116,46 @@ struct dsps_glue {
>  	struct platform_device *musb;	/* child musb pdev */
>  	const struct dsps_musb_wrapper *wrp; /* wrapper register offsets */
>  	struct timer_list timer;	/* otg_workaround timer */
> +	u32 __iomem *usb_ctrl;
> +	u8      usbss_rev;
>  };
>  
>  /**
> + * musb_dsps_phy_control - phy on/off
> + * @glue: struct dsps_glue *
> + * @on: flag for phy to be switched on or off
> + *
> + * This is to enable the PHY using usb_ctrl register in system control
> + * module space.
> + *
> + * XXX: This function will be removed once we have a seperate driver for
> + * control module
> + */
> +static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
> +{
> +	u32 usbphycfg;
> +
> +	usbphycfg = __raw_readl(glue->usb_ctrl);
> +
> +	if (on) {
> +		if (glue->usbss_rev == MUSB_USBSS_REV_816X) {
> +			usbphycfg |= TI816X_USBPHY0_NORMAL_MODE;
> +			usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC;
> +		} else if (glue->usbss_rev == MUSB_USBSS_REV_814X) {
> +			usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN
> +				| USBPHY_DPINPUT | USBPHY_DMINPUT);
> +			usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN
> +				| USBPHY_DPOPBUFCTL | USBPHY_DMOPBUFCTL);
> +		}
> +	} else {
> +		if (glue->usbss_rev == MUSB_USBSS_REV_816X)
> +			usbphycfg &= ~TI816X_USBPHY0_NORMAL_MODE;
> +		else if (glue->usbss_rev == MUSB_USBSS_REV_814X)
> +			usbphycfg |= USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN;
> +	}
> +	__raw_writel(usbphycfg, glue->usb_ctrl);
> +}
> +/**
>   * dsps_musb_enable - enable interrupts
>   */
>  static void dsps_musb_enable(struct musb *musb)
> @@ -356,11 +393,9 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
>  static int dsps_musb_init(struct musb *musb)
>  {
>  	struct device *dev = musb->controller;
> -	struct musb_hdrc_platform_data *plat = dev->platform_data;
>  	struct platform_device *pdev = to_platform_device(dev->parent);
>  	struct dsps_glue *glue = platform_get_drvdata(pdev);
>  	const struct dsps_musb_wrapper *wrp = glue->wrp;
> -	struct omap_musb_board_data *data = plat->board_data;
>  	void __iomem *reg_base = musb->ctrl_base;
>  	u32 rev, val;
>  	int status;
> @@ -387,8 +422,7 @@ static int dsps_musb_init(struct musb *musb)
>  	dsps_writel(reg_base, wrp->control, (1 << wrp->reset));
>  
>  	/* Start the on-chip PHY and its PLL. */
> -	if (data->set_phy_power)
> -		data->set_phy_power(1);
> +	musb_dsps_phy_control(glue, 1);
>  
>  	musb->isr = dsps_interrupt;
>  
> @@ -410,16 +444,13 @@ err0:
>  static int dsps_musb_exit(struct musb *musb)
>  {
>  	struct device *dev = musb->controller;
> -	struct musb_hdrc_platform_data *plat = dev->platform_data;
> -	struct omap_musb_board_data *data = plat->board_data;
>  	struct platform_device *pdev = to_platform_device(dev->parent);
>  	struct dsps_glue *glue = platform_get_drvdata(pdev);
>  
>  	del_timer_sync(&glue->timer);
>  
>  	/* Shutdown the on-chip PHY and its PLL. */
> -	if (data->set_phy_power)
> -		data->set_phy_power(0);
> +	musb_dsps_phy_control(glue, 0);
>  
>  	/* NOP driver needs change if supporting dual instance */
>  	usb_put_phy(musb->xceiv);
> @@ -451,6 +482,21 @@ static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8 id)
>  	char res_name[10];
>  	int ret;
>  
> +	/* get memory resource for usb control register */
> +	res = platform_get_resource(pdev, IORESOURCE_MEM, 2 * id + 2);
> +	if (!res) {
> +		dev_err(dev, "%s get mem resource failed\n", res_name);
> +		ret = -ENODEV;
> +		goto err0;
> +	}
> +
> +	glue->usb_ctrl = devm_request_and_ioremap(&pdev->dev, res);
> +	if (glue->usb_ctrl == NULL) {
> +		dev_err(dev, "Failed to obtain usb_ctrl%d memory\n", id);
> +		ret = -ENODEV;
> +		goto err0;
> +	}
> +
>  	/* get memory resource */
>  	sprintf(res_name, "musb%d", id);
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, res_name);
> @@ -529,6 +575,7 @@ static int __devinit dsps_probe(struct platform_device *pdev)
>  				(struct dsps_musb_wrapper *)id->driver_data;
>  	struct dsps_glue *glue;
>  	struct resource *iomem;
> +	u32 __iomem *usbss;
>  	int ret;
>  
>  	/* allocate glue */
> @@ -547,6 +594,13 @@ static int __devinit dsps_probe(struct platform_device *pdev)
>  		goto err1;
>  	}
>  
> +	usbss = devm_request_and_ioremap(&pdev->dev, iomem);
> +	if (usbss == NULL) {
> +		dev_err(&pdev->dev, "Failed to obtain usbss memory\n");
> +		ret = -ENODEV;
> +		goto err1;
> +	}
> +
>  	glue->dev = &pdev->dev;
>  
>  	glue->wrp = kmemdup(wrp, sizeof(*wrp), GFP_KERNEL);
> @@ -573,6 +627,9 @@ static int __devinit dsps_probe(struct platform_device *pdev)
>  		goto err3;
>  	}
>  
> +	/* read the usbss revision register */
> +	glue->usbss_rev = __raw_readl(usbss);
> +
>  	return 0;
>  
>  err3:
> @@ -603,24 +660,22 @@ static int __devexit dsps_remove(struct platform_device *pdev)
>  #ifdef CONFIG_PM_SLEEP
>  static int dsps_suspend(struct device *dev)
>  {
> -	struct musb_hdrc_platform_data *plat = dev->platform_data;
> -	struct omap_musb_board_data *data = plat->board_data;
> +	struct platform_device *pdev = to_platform_device(dev->parent);
> +	struct dsps_glue *glue = platform_get_drvdata(pdev);
>  
>  	/* Shutdown the on-chip PHY and its PLL. */
> -	if (data->set_phy_power)
> -		data->set_phy_power(0);
> +	musb_dsps_phy_control(glue, 0);
>  
>  	return 0;
>  }
>  
>  static int dsps_resume(struct device *dev)
>  {
> -	struct musb_hdrc_platform_data *plat = dev->platform_data;
> -	struct omap_musb_board_data *data = plat->board_data;
> +	struct platform_device *pdev = to_platform_device(dev->parent);
> +	struct dsps_glue *glue = platform_get_drvdata(pdev);
>  
>  	/* Start the on-chip PHY and its PLL. */
> -	if (data->set_phy_power)
> -		data->set_phy_power(1);
> +	musb_dsps_phy_control(glue, 1);
>  
>  	return 0;
>  }
> -- 
> 1.7.0.4
> 

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
       [not found]           ` <CAAe_U6LaCiEPB9ET26j2xjLtumKzJGu+CtW=fK_02d30Z-3BgQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2012-08-31 13:19             ` Felipe Balbi
  2012-08-31 15:47               ` ABRAHAM, KISHON VIJAY
       [not found]               ` <20120831131915.GA25341-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
  0 siblings, 2 replies; 26+ messages in thread
From: Felipe Balbi @ 2012-08-31 13:19 UTC (permalink / raw)
  To: ABRAHAM, KISHON VIJAY
  Cc: balbi-l0cyMroinI0, Ravi Babu, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ, Benoit Cousson

[-- Attachment #1: Type: text/plain, Size: 1783 bytes --]

On Fri, Aug 31, 2012 at 06:51:04PM +0530, ABRAHAM, KISHON VIJAY wrote:
> Hi,
> 
> On Fri, Aug 31, 2012 at 5:53 PM, Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org> wrote:
> > Hi,
> >
> > On Fri, Aug 31, 2012 at 04:39:47PM +0530, Ravi Babu wrote:
> >> From: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> >>
> >> AM335x uses NOP transceiver driver and need to enable builtin PHY
> >> by writing into usb_ctrl register available in system control
> >> module register space. This is being added at musb glue driver
> >> layer untill a separate system control module driver is available.
> >>
> >> Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> >> Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> >> Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
> >
> > Kishon, you were adding a real phy driver for OMAP's internal phy logic
> > on one of your patches and I believe this will conflict with your
> > changes, right ?
> 
> Indeed. My final patch of that series removes some of the functions
> from omap_phy_internal.c (which was taken care in the phy driver).
> >
> > How does this look to you ? Is this at least correct ? I suppose the
> > correct way would be to actually have the system control module driver
> > which we have been waiting, right ?
> 
> Correct. I think once we have the system control module driver in
> place, we'll have everything wrt control module register writes
> implemented in correct way.

So $SUBJECT will pretty much be thrown away once we have SCM driver, in
that case it's best to wait a bit longer and apply this series once SCM
driver is available and after your series too... you agree ?

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
       [not found]       ` <20120831122342.GC24861-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
@ 2012-08-31 13:21         ` ABRAHAM, KISHON VIJAY
       [not found]           ` <CAAe_U6LaCiEPB9ET26j2xjLtumKzJGu+CtW=fK_02d30Z-3BgQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 26+ messages in thread
From: ABRAHAM, KISHON VIJAY @ 2012-08-31 13:21 UTC (permalink / raw)
  To: balbi-l0cyMroinI0
  Cc: Ravi Babu, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ, Benoit Cousson

Hi,

On Fri, Aug 31, 2012 at 5:53 PM, Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org> wrote:
> Hi,
>
> On Fri, Aug 31, 2012 at 04:39:47PM +0530, Ravi Babu wrote:
>> From: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
>>
>> AM335x uses NOP transceiver driver and need to enable builtin PHY
>> by writing into usb_ctrl register available in system control
>> module register space. This is being added at musb glue driver
>> layer untill a separate system control module driver is available.
>>
>> Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
>> Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
>> Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
>
> Kishon, you were adding a real phy driver for OMAP's internal phy logic
> on one of your patches and I believe this will conflict with your
> changes, right ?

Indeed. My final patch of that series removes some of the functions
from omap_phy_internal.c (which was taken care in the phy driver).
>
> How does this look to you ? Is this at least correct ? I suppose the
> correct way would be to actually have the system control module driver
> which we have been waiting, right ?

Correct. I think once we have the system control module driver in
place, we'll have everything wrt control module register writes
implemented in correct way.

Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
  2012-08-31 13:19             ` Felipe Balbi
@ 2012-08-31 15:47               ` ABRAHAM, KISHON VIJAY
       [not found]               ` <20120831131915.GA25341-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
  1 sibling, 0 replies; 26+ messages in thread
From: ABRAHAM, KISHON VIJAY @ 2012-08-31 15:47 UTC (permalink / raw)
  To: balbi
  Cc: Ravi Babu, linux-usb, linux-omap, grant.likely,
	devicetree-discuss, tony, Benoit Cousson

On Fri, Aug 31, 2012 at 6:49 PM, Felipe Balbi <balbi@ti.com> wrote:
> On Fri, Aug 31, 2012 at 06:51:04PM +0530, ABRAHAM, KISHON VIJAY wrote:
>> Hi,
>>
>> On Fri, Aug 31, 2012 at 5:53 PM, Felipe Balbi <balbi@ti.com> wrote:
>> > Hi,
>> >
>> > On Fri, Aug 31, 2012 at 04:39:47PM +0530, Ravi Babu wrote:
>> >> From: Santhapuri, Damodar <damodar.santhapuri@ti.com>
>> >>
>> >> AM335x uses NOP transceiver driver and need to enable builtin PHY
>> >> by writing into usb_ctrl register available in system control
>> >> module register space. This is being added at musb glue driver
>> >> layer untill a separate system control module driver is available.
>> >>
>> >> Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
>> >> Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
>> >> Signed-off-by: Ravi Babu <ravibabu@ti.com>
>> >
>> > Kishon, you were adding a real phy driver for OMAP's internal phy logic
>> > on one of your patches and I believe this will conflict with your
>> > changes, right ?
>>
>> Indeed. My final patch of that series removes some of the functions
>> from omap_phy_internal.c (which was taken care in the phy driver).
>> >
>> > How does this look to you ? Is this at least correct ? I suppose the
>> > correct way would be to actually have the system control module driver
>> > which we have been waiting, right ?
>>
>> Correct. I think once we have the system control module driver in
>> place, we'll have everything wrt control module register writes
>> implemented in correct way.
>
> So $SUBJECT will pretty much be thrown away once we have SCM driver, in
> that case it's best to wait a bit longer and apply this series once SCM
> driver is available and after your series too... you agree ?

Yes. That would be better.

Thanks
Kishon

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
  2012-08-31 11:09 ` [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue Ravi Babu
       [not found]   ` <1346411399-23964-2-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
@ 2012-08-31 16:00   ` Tony Lindgren
  1 sibling, 0 replies; 26+ messages in thread
From: Tony Lindgren @ 2012-08-31 16:00 UTC (permalink / raw)
  To: Ravi Babu; +Cc: linux-usb, linux-omap, balbi, grant.likely, devicetree-discuss

* Ravi Babu <ravibabu@ti.com> [120831 04:10]:
> --- a/arch/arm/plat-omap/include/plat/usb.h
> +++ b/arch/arm/plat-omap/include/plat/usb.h
> @@ -95,7 +95,6 @@ extern void am35x_musb_reset(void);
>  extern void am35x_musb_phy_power(u8 on);
>  extern void am35x_musb_clear_irq(void);
>  extern void am35x_set_mode(u8 musb_mode);
> -extern void ti81xx_musb_phy_power(u8 on);
>  
>  /* AM35x */
>  /* USB 2.0 PHY Control */
> @@ -120,8 +119,8 @@ extern void ti81xx_musb_phy_power(u8 on);
>  #define CONF2_DATPOL		(1 << 1)
>  
>  /* TI81XX specific definitions */
> -#define USBCTRL0	0x620
> -#define USBSTAT0	0x624
> +#define MUSB_USBSS_REV_816X	0x9
> +#define MUSB_USBSS_REV_814X	0xb
>  
>  /* TI816X PHY controls bits */
>  #define TI816X_USBPHY0_NORMAL_MODE	(1 << 0)

This file needs to move to include/linux/platform_data/usb-omap.h
as it's blocking the ARM single zImage changes so some coordination is
required here. Felipe, can you do a minimal immutable branch with just
one patch against v3.6-rc3 that move the header so I can pull in too?

Regards,

Tony

^ permalink raw reply	[flat|nested] 26+ messages in thread

* RE: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
       [not found]               ` <20120831131915.GA25341-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
@ 2012-09-04 14:04                 ` B, Ravi
  2012-09-04 14:35                   ` Felipe Balbi
  0 siblings, 1 reply; 26+ messages in thread
From: B, Ravi @ 2012-09-04 14:04 UTC (permalink / raw)
  To: Balbi, Felipe, ABRAHAM, KISHON VIJAY
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ, Cousson, Benoit

> On Fri, Aug 31, 2012 at 06:51:04PM +0530, ABRAHAM, KISHON VIJAY wrote:
> > Hi,
> > 
> > On Fri, Aug 31, 2012 at 5:53 PM, Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org> wrote:
> > > Hi,
> > >
> > > On Fri, Aug 31, 2012 at 04:39:47PM +0530, Ravi Babu wrote:
> > >> From: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> > >>
> > >> AM335x uses NOP transceiver driver and need to enable 
> builtin PHY 
> > >> by writing into usb_ctrl register available in system control 
> > >> module register space. This is being added at musb glue driver 
> > >> layer untill a separate system control module driver is 
> available.
> > >>
> > >> Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> > >> Signed-off-by: Santhapuri, Damodar <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> > >> Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
> > >
> > > Kishon, you were adding a real phy driver for OMAP's internal phy 
> > > logic on one of your patches and I believe this will 
> conflict with 
> > > your changes, right ?
> > 
> > Indeed. My final patch of that series removes some of the functions 
> > from omap_phy_internal.c (which was taken care in the phy driver).
> > >
> > > How does this look to you ? Is this at least correct ? I 
> suppose the 
> > > correct way would be to actually have the system control module 
> > > driver which we have been waiting, right ?
> > 
> > Correct. I think once we have the system control module driver in 
> > place, we'll have everything wrt control module register writes 
> > implemented in correct way.
> 
> So $SUBJECT will pretty much be thrown away once we have SCM 
> driver, in that case it's best to wait a bit longer and apply 
> this series once SCM driver is available and after your 
> series too... you agree ?
> 

Felipe, I am sure there are patches in this series[0/13], which are not dependent on this patch or control module,
Can we pull in those patches (all dual instances support patches)? So that I can re-work and submit again? 

> --
> balbi
> --
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
  2012-09-04 14:04                 ` B, Ravi
@ 2012-09-04 14:35                   ` Felipe Balbi
       [not found]                     ` <20120904143505.GH14348-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
  0 siblings, 1 reply; 26+ messages in thread
From: Felipe Balbi @ 2012-09-04 14:35 UTC (permalink / raw)
  To: B, Ravi
  Cc: Balbi, Felipe, ABRAHAM, KISHON VIJAY, linux-usb, linux-omap,
	grant.likely, devicetree-discuss, tony, Cousson, Benoit

[-- Attachment #1: Type: text/plain, Size: 2203 bytes --]

Hi,

On Tue, Sep 04, 2012 at 02:04:15PM +0000, B, Ravi wrote:
> > On Fri, Aug 31, 2012 at 06:51:04PM +0530, ABRAHAM, KISHON VIJAY wrote:
> > > Hi,
> > > 
> > > On Fri, Aug 31, 2012 at 5:53 PM, Felipe Balbi <balbi@ti.com> wrote:
> > > > Hi,
> > > >
> > > > On Fri, Aug 31, 2012 at 04:39:47PM +0530, Ravi Babu wrote:
> > > >> From: Santhapuri, Damodar <damodar.santhapuri@ti.com>
> > > >>
> > > >> AM335x uses NOP transceiver driver and need to enable 
> > builtin PHY 
> > > >> by writing into usb_ctrl register available in system control 
> > > >> module register space. This is being added at musb glue driver 
> > > >> layer untill a separate system control module driver is 
> > available.
> > > >>
> > > >> Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
> > > >> Signed-off-by: Santhapuri, Damodar <damodar.santhapuri@ti.com>
> > > >> Signed-off-by: Ravi Babu <ravibabu@ti.com>
> > > >
> > > > Kishon, you were adding a real phy driver for OMAP's internal phy 
> > > > logic on one of your patches and I believe this will 
> > conflict with 
> > > > your changes, right ?
> > > 
> > > Indeed. My final patch of that series removes some of the functions 
> > > from omap_phy_internal.c (which was taken care in the phy driver).
> > > >
> > > > How does this look to you ? Is this at least correct ? I 
> > suppose the 
> > > > correct way would be to actually have the system control module 
> > > > driver which we have been waiting, right ?
> > > 
> > > Correct. I think once we have the system control module driver in 
> > > place, we'll have everything wrt control module register writes 
> > > implemented in correct way.
> > 
> > So $SUBJECT will pretty much be thrown away once we have SCM 
> > driver, in that case it's best to wait a bit longer and apply 
> > this series once SCM driver is available and after your 
> > series too... you agree ?
> > 
> 
> Felipe, I am sure there are patches in this series[0/13], which are
> not dependent on this patch or control module, Can we pull in those
> patches (all dual instances support patches)? So that I can re-work
> and submit again? 

sure, will do, don't worry :-)

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* RE: [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue
       [not found]                     ` <20120904143505.GH14348-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
@ 2012-09-04 18:34                       ` B, Ravi
  0 siblings, 0 replies; 26+ messages in thread
From: B, Ravi @ 2012-09-04 18:34 UTC (permalink / raw)
  To: Balbi, Felipe
  Cc: ABRAHAM, KISHON VIJAY, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ, Cousson, Benoit

Hi

> > > > >> AM335x uses NOP transceiver driver and need to enable
> > > builtin PHY
> > > > >> by writing into usb_ctrl register available in 
> system control 
> > > > >> module register space. This is being added at musb 
> glue driver 
> > > > >> layer untill a separate system control module driver is
> > > available.
> > > > >>
> > > > >> Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> > > > >> Signed-off-by: Santhapuri, Damodar 
> <damodar.santhapuri-l0cyMroinI0@public.gmane.org>
> > > > >> Signed-off-by: Ravi Babu <ravibabu-l0cyMroinI0@public.gmane.org>
> > > > >
> > > > > Kishon, you were adding a real phy driver for OMAP's internal 
> > > > > phy logic on one of your patches and I believe this will
> > > conflict with
> > > > > your changes, right ?
> > > > 
> > > > Indeed. My final patch of that series removes some of the 
> > > > functions from omap_phy_internal.c (which was taken 
> care in the phy driver).
> > > > >
> > > > > How does this look to you ? Is this at least correct ? I
> > > suppose the
> > > > > correct way would be to actually have the system 
> control module 
> > > > > driver which we have been waiting, right ?
> > > > 
> > > > Correct. I think once we have the system control module 
> driver in 
> > > > place, we'll have everything wrt control module register writes 
> > > > implemented in correct way.
> > > 
> > > So $SUBJECT will pretty much be thrown away once we have 
> SCM driver, 
> > > in that case it's best to wait a bit longer and apply this series 
> > > once SCM driver is available and after your series too... 
> you agree 
> > > ?
> > > 
> > 
> > Felipe, I am sure there are patches in this series[0/13], which are 
> > not dependent on this patch or control module, Can we pull in those 
> > patches (all dual instances support patches)? So that I can re-work 
> > and submit again?
> 
> sure, will do, don't worry :-)

Thanks.
Then shall I rework patches [3/13 to 13/13] and re-submit only musb dual instances patches which 
are independent of control module. 

> 
> --
> balbi
> --
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 00/13] usb: musb: adding multi instance support
       [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
                     ` (4 preceding siblings ...)
  2012-08-31 11:09   ` [PATCH v9 13/13] usb: otg: nop: add dt support Ravi Babu
@ 2012-09-11  9:17   ` Felipe Balbi
  2012-09-11 10:45     ` B, Ravi
  5 siblings, 1 reply; 26+ messages in thread
From: Felipe Balbi @ 2012-09-11  9:17 UTC (permalink / raw)
  To: Ravi Babu
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

[-- Attachment #1: Type: text/plain, Size: 2603 bytes --]

Hi,

On Fri, Aug 31, 2012 at 04:39:46PM +0530, Ravi Babu wrote:
> This series of patches adds,
> a) Multi instances support in musb driver
> b) DT support for musb_dsps glue layer
> c) DT support for NOP transceiver
> 
> AM33xx and TI81xx has dual musb controller and has two usb PHY of same type.
> This patch series uses 'phandle' based API devm_usb_get_phy_by_phandle() to
> get the PHY of same type. This API support is being added by Kishon's patch
> discussed at [1]
> 
> The series applies to felipe/master [1] branch
> 	+ Vaibhav baseport patches on his tree at [4]
> 	+ Kishon's multi phy patches on Felipe's branch 'xceiv'
> 	+ Kishon's patch on phandle at [2]
> 	+ Damodar's recent patch at [3] 
> 	+ Ajay's & Damodar's patches at [5] and [6] included in this series
> 
> 1. http://git.kernel.org/?p=linux/kernel/git/balbi/usb.git;a=summary
> 2. http://marc.info/?l=linux-usb&m=134070369306112&w=2
> 3. http://marc.info/?l=linux-usb&m=134200284230689&w=2
> 4. https://github.com/hvaibhav/am335x-linux/commits/am335x-upstream-staging
> 5. http://marc.info/?l=linux-usb&m=134200285530701&w=2
> 6. http://marc.info/?l=linux-usb&m=134208820028625&w=2
> 
> Changes from v8:
> 	- included Sergei's comment, removing underscore in device tree file
> 	- removed duplicated signoff from patches
> Changes from v7:
> 	- patches rebased on felipe/master branch & verified
> 	- included additional two patches 0001 & 0002 as part of this series
> 	  which are already submitted [5] & [6] 
> Changes from v6:
> 	- Removed parent_pdev to get glue and used dev_get_getdrv() as per
> 	  Felipe's comment
> 	- use pr_debug() instead of pr_info() as per Felipe's comment
> Changes from v5:
> 	- Removed musb->id as per Felipe's comment
> 	- used nop_ida as per Felipe's comment
> Changes from v4:
> 	- Fixed Felipe's comment for adding EXPORT_SYMBOL_GPL()
> 	- Fixed Felipe's comment on using dev_set_mask()
> Changes from v3:
> 	- Fixed Kishon's comment on removing "id" from phy struct and
> 	  removing unneeded "#else" part.
> Changes from v2:
> 	- Fixed Sergei's comment on not using address prefix in musb_dsps
> 	  glue and nop transceiver dt dats.
> 	- Also removed the "ti" string in compatible property for nop data.
> Changes from v1:
> 	- Defined musb_ida to manage core ids based on Felipe's comment
> 	  in [PATCH 01/11]

I tried appliying this, but this doesn't apply. Please rebase on my musb
branch. Unfortunately there's no time anymore to wait otherwise the
entire musb branch will miss this merge window.

I'm sorry

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* RE: [PATCH v9 00/13] usb: musb: adding multi instance support
  2012-09-11  9:17   ` [PATCH v9 00/13] usb: musb: adding multi instance support Felipe Balbi
@ 2012-09-11 10:45     ` B, Ravi
  2012-09-11 11:35       ` Felipe Balbi
  0 siblings, 1 reply; 26+ messages in thread
From: B, Ravi @ 2012-09-11 10:45 UTC (permalink / raw)
  To: Balbi, Felipe
  Cc: linux-usb, linux-omap, grant.likely, devicetree-discuss, tony

> 
> Hi,
> 
> On Fri, Aug 31, 2012 at 04:39:46PM +0530, Ravi Babu wrote:
> > This series of patches adds,
> > a) Multi instances support in musb driver
> > b) DT support for musb_dsps glue layer
> > c) DT support for NOP transceiver
> > 
> > AM33xx and TI81xx has dual musb controller and has two usb 
> PHY of same type.
> > This patch series uses 'phandle' based API 
> > devm_usb_get_phy_by_phandle() to get the PHY of same type. This API 
> > support is being added by Kishon's patch discussed at [1]
> > 
> > The series applies to felipe/master [1] branch
> > 	+ Vaibhav baseport patches on his tree at [4]
> > 	+ Kishon's multi phy patches on Felipe's branch 'xceiv'
> > 	+ Kishon's patch on phandle at [2]
> > 	+ Damodar's recent patch at [3] 
> > 	+ Ajay's & Damodar's patches at [5] and [6] included in 
> this series
> > 
> > 1. http://git.kernel.org/?p=linux/kernel/git/balbi/usb.git;a=summary
> > 2. http://marc.info/?l=linux-usb&m=134070369306112&w=2
> > 3. http://marc.info/?l=linux-usb&m=134200284230689&w=2
> > 4. 
> > 
> https://github.com/hvaibhav/am335x-linux/commits/am335x-upstream-stagi
> > ng 5. http://marc.info/?l=linux-usb&m=134200285530701&w=2
> > 6. http://marc.info/?l=linux-usb&m=134208820028625&w=2
> > 
> > Changes from v8:
> > 	- included Sergei's comment, removing underscore in 
> device tree file
> > 	- removed duplicated signoff from patches Changes from v7:
> > 	- patches rebased on felipe/master branch & verified
> > 	- included additional two patches 0001 & 0002 as part 
> of this series
> > 	  which are already submitted [5] & [6] Changes from v6:
> > 	- Removed parent_pdev to get glue and used 
> dev_get_getdrv() as per
> > 	  Felipe's comment
> > 	- use pr_debug() instead of pr_info() as per Felipe's 
> comment Changes 
> > from v5:
> > 	- Removed musb->id as per Felipe's comment
> > 	- used nop_ida as per Felipe's comment Changes from v4:
> > 	- Fixed Felipe's comment for adding EXPORT_SYMBOL_GPL()
> > 	- Fixed Felipe's comment on using dev_set_mask() 
> Changes from v3:
> > 	- Fixed Kishon's comment on removing "id" from phy struct and
> > 	  removing unneeded "#else" part.
> > Changes from v2:
> > 	- Fixed Sergei's comment on not using address prefix in 
> musb_dsps
> > 	  glue and nop transceiver dt dats.
> > 	- Also removed the "ti" string in compatible property 
> for nop data.
> > Changes from v1:
> > 	- Defined musb_ida to manage core ids based on Felipe's comment
> > 	  in [PATCH 01/11]
> 
> I tried appliying this, but this doesn't apply. Please rebase 
> on my musb branch. Unfortunately there's no time anymore to 
> wait otherwise the entire musb branch will miss this merge window.
> 
> I'm sorry

Felipe, patch set is ready, I will re-send the patches shortly by today.

> 
> --
> balbi
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v9 00/13] usb: musb: adding multi instance support
  2012-09-11 10:45     ` B, Ravi
@ 2012-09-11 11:35       ` Felipe Balbi
       [not found]         ` <20120911113544.GE18907-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
  0 siblings, 1 reply; 26+ messages in thread
From: Felipe Balbi @ 2012-09-11 11:35 UTC (permalink / raw)
  To: B, Ravi
  Cc: Balbi, Felipe, linux-usb, linux-omap, grant.likely,
	devicetree-discuss, tony

[-- Attachment #1: Type: text/plain, Size: 3128 bytes --]

On Tue, Sep 11, 2012 at 10:45:44AM +0000, B, Ravi wrote:
> > 
> > Hi,
> > 
> > On Fri, Aug 31, 2012 at 04:39:46PM +0530, Ravi Babu wrote:
> > > This series of patches adds,
> > > a) Multi instances support in musb driver
> > > b) DT support for musb_dsps glue layer
> > > c) DT support for NOP transceiver
> > > 
> > > AM33xx and TI81xx has dual musb controller and has two usb 
> > PHY of same type.
> > > This patch series uses 'phandle' based API 
> > > devm_usb_get_phy_by_phandle() to get the PHY of same type. This API 
> > > support is being added by Kishon's patch discussed at [1]
> > > 
> > > The series applies to felipe/master [1] branch
> > > 	+ Vaibhav baseport patches on his tree at [4]
> > > 	+ Kishon's multi phy patches on Felipe's branch 'xceiv'
> > > 	+ Kishon's patch on phandle at [2]
> > > 	+ Damodar's recent patch at [3] 
> > > 	+ Ajay's & Damodar's patches at [5] and [6] included in 
> > this series
> > > 
> > > 1. http://git.kernel.org/?p=linux/kernel/git/balbi/usb.git;a=summary
> > > 2. http://marc.info/?l=linux-usb&m=134070369306112&w=2
> > > 3. http://marc.info/?l=linux-usb&m=134200284230689&w=2
> > > 4. 
> > > 
> > https://github.com/hvaibhav/am335x-linux/commits/am335x-upstream-stagi
> > > ng 5. http://marc.info/?l=linux-usb&m=134200285530701&w=2
> > > 6. http://marc.info/?l=linux-usb&m=134208820028625&w=2
> > > 
> > > Changes from v8:
> > > 	- included Sergei's comment, removing underscore in 
> > device tree file
> > > 	- removed duplicated signoff from patches Changes from v7:
> > > 	- patches rebased on felipe/master branch & verified
> > > 	- included additional two patches 0001 & 0002 as part 
> > of this series
> > > 	  which are already submitted [5] & [6] Changes from v6:
> > > 	- Removed parent_pdev to get glue and used 
> > dev_get_getdrv() as per
> > > 	  Felipe's comment
> > > 	- use pr_debug() instead of pr_info() as per Felipe's 
> > comment Changes 
> > > from v5:
> > > 	- Removed musb->id as per Felipe's comment
> > > 	- used nop_ida as per Felipe's comment Changes from v4:
> > > 	- Fixed Felipe's comment for adding EXPORT_SYMBOL_GPL()
> > > 	- Fixed Felipe's comment on using dev_set_mask() 
> > Changes from v3:
> > > 	- Fixed Kishon's comment on removing "id" from phy struct and
> > > 	  removing unneeded "#else" part.
> > > Changes from v2:
> > > 	- Fixed Sergei's comment on not using address prefix in 
> > musb_dsps
> > > 	  glue and nop transceiver dt dats.
> > > 	- Also removed the "ti" string in compatible property 
> > for nop data.
> > > Changes from v1:
> > > 	- Defined musb_ida to manage core ids based on Felipe's comment
> > > 	  in [PATCH 01/11]
> > 
> > I tried appliying this, but this doesn't apply. Please rebase 
> > on my musb branch. Unfortunately there's no time anymore to 
> > wait otherwise the entire musb branch will miss this merge window.
> > 
> > I'm sorry
> 
> Felipe, patch set is ready, I will re-send the patches shortly by today.

Thanks a lot. So I'll wait for a few more hours before sending out my
musb pull request ;-)

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* RE: [PATCH v9 00/13] usb: musb: adding multi instance support
       [not found]         ` <20120911113544.GE18907-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
@ 2012-09-11 11:46           ` B, Ravi
  0 siblings, 0 replies; 26+ messages in thread
From: B, Ravi @ 2012-09-11 11:46 UTC (permalink / raw)
  To: Balbi, Felipe
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA,
	grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ

> > > 
> > > On Fri, Aug 31, 2012 at 04:39:46PM +0530, Ravi Babu wrote:
> > > > This series of patches adds,
> > > > a) Multi instances support in musb driver
> > > > b) DT support for musb_dsps glue layer
> > > > c) DT support for NOP transceiver
> > > > 
> > > > AM33xx and TI81xx has dual musb controller and has two usb
> > > PHY of same type.
> > > > This patch series uses 'phandle' based API
> > > > devm_usb_get_phy_by_phandle() to get the PHY of same type. This 
> > > > API support is being added by Kishon's patch discussed at [1]
> > > > 
> > > > The series applies to felipe/master [1] branch
> > > > 	+ Vaibhav baseport patches on his tree at [4]
> > > > 	+ Kishon's multi phy patches on Felipe's branch 'xceiv'
> > > > 	+ Kishon's patch on phandle at [2]
> > > > 	+ Damodar's recent patch at [3] 
> > > > 	+ Ajay's & Damodar's patches at [5] and [6] included in
> > > this series
> > > > 
> > > > 1. 
> > > > 
> http://git.kernel.org/?p=linux/kernel/git/balbi/usb.git;a=summary
> > > > 2. http://marc.info/?l=linux-usb&m=134070369306112&w=2
> > > > 3. http://marc.info/?l=linux-usb&m=134200284230689&w=2
> > > > 4. 
> > > > 
> > > 
> https://github.com/hvaibhav/am335x-linux/commits/am335x-upstream-sta
> > > gi
> > > > ng 5. http://marc.info/?l=linux-usb&m=134200285530701&w=2
> > > > 6. http://marc.info/?l=linux-usb&m=134208820028625&w=2
> > > > 
> > > > Changes from v8:
> > > > 	- included Sergei's comment, removing underscore in
> > > device tree file
> > > > 	- removed duplicated signoff from patches 
> Changes from v7:
> > > > 	- patches rebased on felipe/master branch & verified
> > > > 	- included additional two patches 0001 & 0002 as part
> > > of this series
> > > > 	  which are already submitted [5] & [6] Changes from v6:
> > > > 	- Removed parent_pdev to get glue and used
> > > dev_get_getdrv() as per
> > > > 	  Felipe's comment
> > > > 	- use pr_debug() instead of pr_info() as per Felipe's
> > > comment Changes
> > > > from v5:
> > > > 	- Removed musb->id as per Felipe's comment
> > > > 	- used nop_ida as per Felipe's comment Changes from v4:
> > > > 	- Fixed Felipe's comment for adding EXPORT_SYMBOL_GPL()
> > > > 	- Fixed Felipe's comment on using dev_set_mask()
> > > Changes from v3:
> > > > 	- Fixed Kishon's comment on removing "id" from 
> phy struct and
> > > > 	  removing unneeded "#else" part.
> > > > Changes from v2:
> > > > 	- Fixed Sergei's comment on not using address prefix in
> > > musb_dsps
> > > > 	  glue and nop transceiver dt dats.
> > > > 	- Also removed the "ti" string in compatible property
> > > for nop data.
> > > > Changes from v1:
> > > > 	- Defined musb_ida to manage core ids based on 
> Felipe's comment
> > > > 	  in [PATCH 01/11]
> > > 
> > > I tried appliying this, but this doesn't apply. Please 
> rebase on my 
> > > musb branch. Unfortunately there's no time anymore to 
> wait otherwise 
> > > the entire musb branch will miss this merge window.
> > > 
> > > I'm sorry
> > 
> > Felipe, patch set is ready, I will re-send the patches 
> shortly by today.
> 
> Thanks a lot. So I'll wait for a few more hours before 
> sending out my musb pull request ;-)
> 

Thanks Felipe, these v9 patches are created on felipe/master branch. Now working on, to rebase on felipe/musb branch, will try to provide by end of today. 

> --
> balbi
> --
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2012-09-11 11:46 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-31 11:09 [PATCH v9 00/13] usb: musb: adding multi instance support Ravi Babu
2012-08-31 11:09 ` [PATCH v9 01/13] usb: musb: dsps: add phy control logic to glue Ravi Babu
     [not found]   ` <1346411399-23964-2-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
2012-08-31 12:23     ` Felipe Balbi
     [not found]       ` <20120831122342.GC24861-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2012-08-31 13:21         ` ABRAHAM, KISHON VIJAY
     [not found]           ` <CAAe_U6LaCiEPB9ET26j2xjLtumKzJGu+CtW=fK_02d30Z-3BgQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-08-31 13:19             ` Felipe Balbi
2012-08-31 15:47               ` ABRAHAM, KISHON VIJAY
     [not found]               ` <20120831131915.GA25341-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2012-09-04 14:04                 ` B, Ravi
2012-09-04 14:35                   ` Felipe Balbi
     [not found]                     ` <20120904143505.GH14348-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2012-09-04 18:34                       ` B, Ravi
2012-08-31 16:00   ` Tony Lindgren
2012-08-31 11:09 ` [PATCH v9 02/13] usb: musb: dsps: enable phy control for am335x Ravi Babu
2012-08-31 11:09 ` [PATCH v9 03/13] usb: musb: add musb_ida for multi instance support Ravi Babu
2012-08-31 11:09 ` [PATCH v9 06/13] usb: otg: nop: add support for multiple tranceiver Ravi Babu
2012-08-31 11:09 ` [PATCH v9 08/13] arm/dts: am33xx: Add dt data for usbss Ravi Babu
2012-08-31 11:09 ` [PATCH v9 09/13] arm/dts: am33xx: add dt data for usb nop phy Ravi Babu
2012-08-31 11:09 ` [PATCH v9 10/13] usb: musb: dsps: remove explicit NOP device creation Ravi Babu
2012-08-31 11:09 ` [PATCH v9 11/13] usb: musb: dsps: get the PHY using phandle api Ravi Babu
     [not found] ` <1346411399-23964-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
2012-08-31 11:09   ` [PATCH v9 04/13] usb: musb: kill global and static for multi instance Ravi Babu
2012-08-31 11:09   ` [PATCH v9 05/13] usb: musb: am335x: add support for dual instance Ravi Babu
2012-08-31 11:09   ` [PATCH v9 07/13] usb: musb: dsps: add dt support Ravi Babu
2012-08-31 11:09   ` [PATCH v9 12/13] arm/dts: am33xx: add phy phandle to usbss Ravi Babu
2012-08-31 11:09   ` [PATCH v9 13/13] usb: otg: nop: add dt support Ravi Babu
2012-09-11  9:17   ` [PATCH v9 00/13] usb: musb: adding multi instance support Felipe Balbi
2012-09-11 10:45     ` B, Ravi
2012-09-11 11:35       ` Felipe Balbi
     [not found]         ` <20120911113544.GE18907-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2012-09-11 11:46           ` B, Ravi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.