All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control
@ 2012-07-11 10:29 Damodar Santhapuri
  2012-07-11 10:29 ` [PATCH v2 2/3] usb: musb: dsps: add phy control logic to glue Damodar Santhapuri
       [not found] ` <1342002598-30633-1-git-send-email-x0132156-l0cyMroinI0@public.gmane.org>
  0 siblings, 2 replies; 7+ messages in thread
From: Damodar Santhapuri @ 2012-07-11 10:29 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA, linux-omap-u79uwXL29TY76Z2rM5mHXA
  Cc: balbi-l0cyMroinI0, Ajay Kumar Gupta

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

Added usb_ctrl0 and usb_ctrl1 base address as new memory resources
which will be used at am335x musb driver glue layer to turn on or
off builin PHY untill we have a separate system control module
driver.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Singed-off-by: Damodar Santhapuri <x0132156-l0cyMroinI0@public.gmane.org>
---
Changes from v0:
Reordered the layout based on Kishon's comment on not using
platform_get_resources_by_name.

 arch/arm/mach-omap2/omap_hwmod_33xx_data.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
index df888fe..ec9e9df 100644
--- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
@@ -3269,11 +3269,23 @@ static struct omap_hwmod_addr_space am33xx_usbss_addr_space[] = {
 		.flags		= ADDR_TYPE_RT
 	},
 	{
+		.name		= "usb_ctrl0",
+		.pa_start	= 0x44E10620,
+		.pa_end		= 0x44E10624,
+		.flags		= ADDR_TYPE_RT
+	},
+	{
 		.name		= "musb1",
 		.pa_start	= 0x47401800,
 		.pa_end		= 0x47401800 + SZ_2K - 1,
 		.flags		= ADDR_TYPE_RT
 	},
+	{
+		.name		= "usb_ctrl1",
+		.pa_start	= 0x44E10628,
+		.pa_end		= 0x44E1062c,
+		.flags		= ADDR_TYPE_RT
+	},
 	{ }
 };
 
-- 
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] 7+ messages in thread

* [PATCH v2 2/3] usb: musb: dsps: add phy control logic to glue
  2012-07-11 10:29 [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control Damodar Santhapuri
@ 2012-07-11 10:29 ` Damodar Santhapuri
  2012-07-11 10:45   ` ABRAHAM, KISHON VIJAY
       [not found] ` <1342002598-30633-1-git-send-email-x0132156-l0cyMroinI0@public.gmane.org>
  1 sibling, 1 reply; 7+ messages in thread
From: Damodar Santhapuri @ 2012-07-11 10:29 UTC (permalink / raw)
  To: linux-usb, linux-omap; +Cc: balbi, Ajay Kumar Gupta, Damodar Santhapuri

From: Ajay Kumar Gupta <ajay.gupta@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: Damodar Santhapuri <x0132156@ti.com>
---
Changes from v0:
	- Used platform_get_resource() instead of platform_get_resource_byname()
based on Kishon's comment.

 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 494772f..72eda64 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -115,9 +115,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)
@@ -363,11 +400,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;
@@ -395,8 +430,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;
 
@@ -418,8 +452,6 @@ 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);
 
@@ -427,8 +459,7 @@ static int dsps_musb_exit(struct musb *musb)
 		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);
@@ -460,6 +491,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);
@@ -538,6 +584,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 */
@@ -556,6 +603,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);
@@ -582,6 +636,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:
@@ -612,24 +669,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] 7+ messages in thread

* [PATCH v2 3/3] usb: musb: dsps: enable phy control for am335x
       [not found] ` <1342002598-30633-1-git-send-email-x0132156-l0cyMroinI0@public.gmane.org>
@ 2012-07-11 10:29   ` Damodar Santhapuri
  2012-07-11 12:44   ` [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control Sergei Shtylyov
  1 sibling, 0 replies; 7+ messages in thread
From: Damodar Santhapuri @ 2012-07-11 10:29 UTC (permalink / raw)
  To: linux-usb-u79uwXL29TY76Z2rM5mHXA, linux-omap-u79uwXL29TY76Z2rM5mHXA
  Cc: balbi-l0cyMroinI0, Ajay Kumar Gupta, Damodar Santhapuri

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

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

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Damodar Santhapuri <x0132156-l0cyMroinI0@public.gmane.org>
---
 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 72eda64..46b07cc 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -140,16 +140,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

--
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] 7+ messages in thread

* Re: [PATCH v2 2/3] usb: musb: dsps: add phy control logic to glue
  2012-07-11 10:29 ` [PATCH v2 2/3] usb: musb: dsps: add phy control logic to glue Damodar Santhapuri
@ 2012-07-11 10:45   ` ABRAHAM, KISHON VIJAY
  2012-07-11 10:48     ` Gupta, Ajay Kumar
  0 siblings, 1 reply; 7+ messages in thread
From: ABRAHAM, KISHON VIJAY @ 2012-07-11 10:45 UTC (permalink / raw)
  To: Damodar Santhapuri; +Cc: linux-usb, linux-omap, balbi, Ajay Kumar Gupta

Hi,

On Wed, Jul 11, 2012 at 3:59 PM, Damodar Santhapuri <x0132156@ti.com> wrote:
> From: Ajay Kumar Gupta <ajay.gupta@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: Damodar Santhapuri <x0132156@ti.com>
> ---
> Changes from v0:
>         - Used platform_get_resource() instead of platform_get_resource_byname()
> based on Kishon's comment.
>
>  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 494772f..72eda64 100644
> --- a/drivers/usb/musb/musb_dsps.c
> +++ b/drivers/usb/musb/musb_dsps.c
> @@ -115,9 +115,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)

I think this function should be added in your transceiver driver. I
don't see glue as an appropriate place for this.
> +{
> +       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);
> +}
> +/**

Thanks
Kishon

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

* RE: [PATCH v2 2/3] usb: musb: dsps: add phy control logic to glue
  2012-07-11 10:45   ` ABRAHAM, KISHON VIJAY
@ 2012-07-11 10:48     ` Gupta, Ajay Kumar
  0 siblings, 0 replies; 7+ messages in thread
From: Gupta, Ajay Kumar @ 2012-07-11 10:48 UTC (permalink / raw)
  To: ABRAHAM, KISHON VIJAY, Santhapuri, Damodar
  Cc: linux-usb, linux-omap, Balbi, Felipe

Hi,
> On Wed, Jul 11, 2012 at 3:59 PM, Damodar Santhapuri <x0132156@ti.com>
> wrote:
> > From: Ajay Kumar Gupta <ajay.gupta@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: Damodar Santhapuri <x0132156@ti.com>
> > ---
> > Changes from v0:
> >         - Used platform_get_resource() instead of
> platform_get_resource_byname()
> > based on Kishon's comment.
> >
> >  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 494772f..72eda64 100644
> > --- a/drivers/usb/musb/musb_dsps.c
> > +++ b/drivers/usb/musb/musb_dsps.c
> > @@ -115,9 +115,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)
> 
> I think this function should be added in your transceiver driver. I
> don't see glue as an appropriate place for this

We use NOP transceiver which is generic and used by many other platforms.
This function is specific to am33xx glue and so musb_dsps.c is right place.

Thanks,
Ajay
> > +{
> > +       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);
> > +}
> > +/**
> 
> Thanks
> Kishon

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

* Re: [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control
       [not found] ` <1342002598-30633-1-git-send-email-x0132156-l0cyMroinI0@public.gmane.org>
  2012-07-11 10:29   ` [PATCH v2 3/3] usb: musb: dsps: enable phy control for am335x Damodar Santhapuri
@ 2012-07-11 12:44   ` Sergei Shtylyov
       [not found]     ` <4FFD7533.8010807-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
  1 sibling, 1 reply; 7+ messages in thread
From: Sergei Shtylyov @ 2012-07-11 12:44 UTC (permalink / raw)
  To: Damodar Santhapuri
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA, balbi-l0cyMroinI0,
	Ajay Kumar Gupta

Hello.

On 11-07-2012 14:29, Damodar Santhapuri wrote:

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

> Added usb_ctrl0 and usb_ctrl1 base address as new memory resources
> which will be used at am335x musb driver glue layer to turn on or
> off builin PHY untill we have a separate system control module
> driver.

> Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> Singed-off-by: Damodar Santhapuri <x0132156-l0cyMroinI0@public.gmane.org>
> ---
> Changes from v0:
> Reordered the layout based on Kishon's comment on not using
> platform_get_resources_by_name.

>   arch/arm/mach-omap2/omap_hwmod_33xx_data.c |   12 ++++++++++++
>   1 files changed, 12 insertions(+), 0 deletions(-)

> diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
> index df888fe..ec9e9df 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
> @@ -3269,11 +3269,23 @@ static struct omap_hwmod_addr_space am33xx_usbss_addr_space[] = {
>   		.flags		= ADDR_TYPE_RT
>   	},
>   	{
> +		.name		= "usb_ctrl0",
> +		.pa_start	= 0x44E10620,
> +		.pa_end		= 0x44E10624,

   Not 0x44E10623?

> +		.flags		= ADDR_TYPE_RT
> +	},
> +	{
>   		.name		= "musb1",
>   		.pa_start	= 0x47401800,
>   		.pa_end		= 0x47401800 + SZ_2K - 1,
>   		.flags		= ADDR_TYPE_RT
>   	},
> +	{
> +		.name		= "usb_ctrl1",
> +		.pa_start	= 0x44E10628,
> +		.pa_end		= 0x44E1062c,

    Not 0x44E1062B?

WBR, Sergei
--
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] 7+ messages in thread

* RE: [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control
       [not found]     ` <4FFD7533.8010807-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
@ 2012-07-12  8:52       ` Santhapuri, Damodar
  0 siblings, 0 replies; 7+ messages in thread
From: Santhapuri, Damodar @ 2012-07-12  8:52 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA, Balbi, Felipe, Gupta,
	Ajay Kumar


Hi,
> 
> Hello.
> 
> On 11-07-2012 14:29, Damodar Santhapuri wrote:
> 
> > From: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> 
> > Added usb_ctrl0 and usb_ctrl1 base address as new memory resources
> > which will be used at am335x musb driver glue layer to turn on or
> > off builin PHY untill we have a separate system control module
> > driver.
> 
> > Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
> > Singed-off-by: Damodar Santhapuri <x0132156-l0cyMroinI0@public.gmane.org>
> > ---
> > Changes from v0:
> > Reordered the layout based on Kishon's comment on not using
> > platform_get_resources_by_name.
> 
> >   arch/arm/mach-omap2/omap_hwmod_33xx_data.c |   12 ++++++++++++
> >   1 files changed, 12 insertions(+), 0 deletions(-)
> 
> > diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-
> omap2/omap_hwmod_33xx_data.c
> > index df888fe..ec9e9df 100644
> > --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
> > +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
> > @@ -3269,11 +3269,23 @@ static struct omap_hwmod_addr_space
> am33xx_usbss_addr_space[] = {
> >   		.flags		= ADDR_TYPE_RT
> >   	},
> >   	{
> > +		.name		= "usb_ctrl0",
> > +		.pa_start	= 0x44E10620,
> > +		.pa_end		= 0x44E10624,
> 
>    Not 0x44E10623?
> 
> > +		.flags		= ADDR_TYPE_RT
> > +	},
> > +	{
> >   		.name		= "musb1",
> >   		.pa_start	= 0x47401800,
> >   		.pa_end		= 0x47401800 + SZ_2K - 1,
> >   		.flags		= ADDR_TYPE_RT
> >   	},
> > +	{
> > +		.name		= "usb_ctrl1",
> > +		.pa_start	= 0x44E10628,
> > +		.pa_end		= 0x44E1062c,
> 
>     Not 0x44E1062B?

I will fix this and send you updated patch.

Damodar .
> 
> WBR, Sergei
--
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] 7+ messages in thread

end of thread, other threads:[~2012-07-12  8:52 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-11 10:29 [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control Damodar Santhapuri
2012-07-11 10:29 ` [PATCH v2 2/3] usb: musb: dsps: add phy control logic to glue Damodar Santhapuri
2012-07-11 10:45   ` ABRAHAM, KISHON VIJAY
2012-07-11 10:48     ` Gupta, Ajay Kumar
     [not found] ` <1342002598-30633-1-git-send-email-x0132156-l0cyMroinI0@public.gmane.org>
2012-07-11 10:29   ` [PATCH v2 3/3] usb: musb: dsps: enable phy control for am335x Damodar Santhapuri
2012-07-11 12:44   ` [PATCH v2 1/3] arm: omap: hwmod: add new memory resource for usb phy control Sergei Shtylyov
     [not found]     ` <4FFD7533.8010807-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2012-07-12  8:52       ` Santhapuri, Damodar

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.