RE: [PATCH 2/3] usb: musb: dsps: add phy control logic to glue

2012-07-11 Thread Gupta, Ajay Kumar
Hi,
On Mon, Jul 9, 2012 at 7:18 PM, Damodar Santhapuri
 x0132...@ti.com
[...]
Avoid getting resource by name.. With dt, you wont be able to do
those..
   
When we are completely on DT then this would anyways go and we
 can
get these resource data for each usb port from DT APIs.
  
   Even with dt, you will still get the resources using
   platform_get_resource() API's.. So why not have it that way from
 the
   beginning itself..
 
  Ok got it. We will post an updated patch.
 
 Plalform_get_resource api works fine if we hardcode 3rd argument to
 3+id for usb_cntrl register Since dsps_create_musb_pdev calls for each
 wrp-instances.
 
 static int __devinit dsps_create_musb_pdev(struct dsps_glue *glue, u8
 id)
 {
   
   
 /* get memory resource for usb control register */
 res = platform_get_resource(pdev, IORESOURCE_MEM, 3+id);
 dev_err(dev,Damodar :usb ctrl%d res=%x\n,id,res-start);
 if (!res) {
 dev_err(dev, %s get mem resource failed\n, res_name);
 ret = -ENODEV;
 goto err0;
 }
 
 }

You can place the memory resources as 
{{usbss, .}, {musb0, .}, {usb0_ctrl, .}, {musb1, .}, {usb1_ctrl, .}}

and then use index as 2 * id + 2 to get the usbX_ctrl base address.

Ajay
 
 Damodar.
 
  Ajay
  
   Thanks
   Kishon
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH 2/3] usb: musb: dsps: add phy control logic to glue

2012-07-10 Thread Gupta, Ajay Kumar
Hi,
 
 On Mon, Jul 9, 2012 at 7:18 PM, Damodar Santhapuri x0132...@ti.com
 wrote:
  From: Ajay Kumar Gupta ajay.gu...@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.gu...@ti.com
  Signed-off-by: Damodar Santhapuri x0132...@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|   88
 +--
   4 files changed, 74 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_816X0x9
  +#define MUSB_USBSS_REV_814X0xb
 
   /* 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..f7271c3 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
 %s/seperate/separate
  + * control module
  + */
  +static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
  +{
  +   u32 usbphycfg;
  +
  +   usbphycfg = __raw_readl(glue-usb_ctrl);
 
 How about using readl instead of __raw_readl here and below?
  +
  +   if (on) {
  +   if (glue-usbss_rev == MUSB_USBSS_REV_816X) {
  +

Re: [PATCH 2/3] usb: musb: dsps: add phy control logic to glue

2012-07-10 Thread ABRAHAM, KISHON VIJAY
Hi,

On Tue, Jul 10, 2012 at 11:35 AM, Gupta, Ajay Kumar ajay.gu...@ti.com wrote:
 Hi,

 On Mon, Jul 9, 2012 at 7:18 PM, Damodar Santhapuri x0132...@ti.com
 wrote:
  From: Ajay Kumar Gupta ajay.gu...@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.gu...@ti.com
  Signed-off-by: Damodar Santhapuri x0132...@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|   88
 +--
   4 files changed, 74 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_816X0x9
  +#define MUSB_USBSS_REV_814X0xb
 
   /* 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..f7271c3 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
 %s/seperate/separate
  + * control module
  + */
  +static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
  +{
  +   u32 usbphycfg;
  +
  +   usbphycfg = __raw_readl(glue-usb_ctrl);

 How about using readl instead of __raw_readl here and below?
  +
  +   if 

RE: [PATCH 2/3] usb: musb: dsps: add phy control logic to glue

2012-07-10 Thread Gupta, Ajay Kumar
Hi,
 On Tue, Jul 10, 2012 at 11:35 AM, Gupta, Ajay Kumar ajay.gu...@ti.com
 wrote:
  Hi,
 
  On Mon, Jul 9, 2012 at 7:18 PM, Damodar Santhapuri x0132...@ti.com
  wrote:
   From: Ajay Kumar Gupta ajay.gu...@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.gu...@ti.com
   Signed-off-by: Damodar Santhapuri x0132...@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|   88
  +--
4 files changed, 74 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_816X0x9
   +#define MUSB_USBSS_REV_814X0xb
  
/* 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..f7271c3 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
  %s/seperate/separate
   + * control module
   + */
   +static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
   +{
   +   u32 

RE: [PATCH 2/3] usb: musb: dsps: add phy control logic to glue

2012-07-10 Thread Santhapuri, Damodar

Hi,
 
 Hi,
  On Tue, Jul 10, 2012 at 11:35 AM, Gupta, Ajay Kumar ajay.gu...@ti.com
  wrote:
   Hi,
  
   On Mon, Jul 9, 2012 at 7:18 PM, Damodar Santhapuri x0132...@ti.com
   wrote:
From: Ajay Kumar Gupta ajay.gu...@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.gu...@ti.com
Signed-off-by: Damodar Santhapuri x0132...@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|   88
   +--
 4 files changed, 74 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_816X0x9
+#define MUSB_USBSS_REV_814X0xb
   
 /* 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..f7271c3 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
   

Re: [PATCH 2/3] usb: musb: dsps: add phy control logic to glue

2012-07-09 Thread ABRAHAM, KISHON VIJAY
Hi,

On Mon, Jul 9, 2012 at 7:18 PM, Damodar Santhapuri x0132...@ti.com wrote:
 From: Ajay Kumar Gupta ajay.gu...@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.gu...@ti.com
 Signed-off-by: Damodar Santhapuri x0132...@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|   88 
 +--
  4 files changed, 74 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_816X0x9
 +#define MUSB_USBSS_REV_814X0xb

  /* 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..f7271c3 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
%s/seperate/separate
 + * control module
 + */
 +static void musb_dsps_phy_control(struct dsps_glue *glue, u8 on)
 +{
 +   u32 usbphycfg;
 +
 +   usbphycfg = __raw_readl(glue-usb_ctrl);

How about using readl instead of __raw_readl here and below?
 +
 +   if (on) {
 +   if (glue-usbss_rev == MUSB_USBSS_REV_816X) {
 +   usbphycfg |= TI816X_USBPHY0_NORMAL_MODE;
 +   usbphycfg = ~TI816X_USBPHY_REFCLK_OSC;
 +   }