Commit ee896e34 authored by Hema HK's avatar Hema HK Committed by Felipe Balbi

usb: otg: OMAP4430: Introducing suspend function for power management

Introduced the suspend/resume function for the OMAP4430 internal PHY.
This will be used by the twl6030-usb transceiver driver.
Moved the clock enable/disable function calls and power on/off of the PHY
code from power on/off functions to suspend/resume function.

Pass the suspend function through board data for OMAP4430sdp and OMAP4panda.
This will be used by the twl6030-usb transceiver driver.
Signed-off-by: default avatarHema HK <hemahk@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Paul Walmsley <paul@pwsan.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent d8692748
...@@ -272,6 +272,7 @@ static struct twl4030_usb_data omap4_usbphy_data = { ...@@ -272,6 +272,7 @@ static struct twl4030_usb_data omap4_usbphy_data = {
.phy_exit = omap4430_phy_exit, .phy_exit = omap4430_phy_exit,
.phy_power = omap4430_phy_power, .phy_power = omap4430_phy_power,
.phy_set_clock = omap4430_phy_set_clk, .phy_set_clock = omap4430_phy_set_clk,
.phy_suspend = omap4430_phy_suspend,
}; };
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
......
...@@ -153,6 +153,7 @@ static struct twl4030_usb_data omap4_usbphy_data = { ...@@ -153,6 +153,7 @@ static struct twl4030_usb_data omap4_usbphy_data = {
.phy_exit = omap4430_phy_exit, .phy_exit = omap4430_phy_exit,
.phy_power = omap4430_phy_power, .phy_power = omap4430_phy_power,
.phy_set_clock = omap4430_phy_set_clk, .phy_set_clock = omap4430_phy_set_clk,
.phy_suspend = omap4430_phy_suspend,
}; };
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
......
...@@ -103,13 +103,6 @@ int omap4430_phy_set_clk(struct device *dev, int on) ...@@ -103,13 +103,6 @@ int omap4430_phy_set_clk(struct device *dev, int on)
int omap4430_phy_power(struct device *dev, int ID, int on) int omap4430_phy_power(struct device *dev, int ID, int on)
{ {
if (on) { if (on) {
/* enabled the clocks */
omap4430_phy_set_clk(dev, 1);
/* power on the phy */
if (__raw_readl(ctrl_base + CONTROL_DEV_CONF) & PHY_PD) {
__raw_writel(~PHY_PD, ctrl_base + CONTROL_DEV_CONF);
mdelay(200);
}
if (ID) if (ID)
/* enable VBUS valid, IDDIG groung */ /* enable VBUS valid, IDDIG groung */
__raw_writel(AVALID | VBUSVALID, ctrl_base + __raw_writel(AVALID | VBUSVALID, ctrl_base +
...@@ -125,10 +118,25 @@ int omap4430_phy_power(struct device *dev, int ID, int on) ...@@ -125,10 +118,25 @@ int omap4430_phy_power(struct device *dev, int ID, int on)
/* Enable session END and IDIG to high impedence. */ /* Enable session END and IDIG to high impedence. */
__raw_writel(SESSEND | IDDIG, ctrl_base + __raw_writel(SESSEND | IDDIG, ctrl_base +
USBOTGHS_CONTROL); USBOTGHS_CONTROL);
}
return 0;
}
int omap4430_phy_suspend(struct device *dev, int suspend)
{
if (suspend) {
/* Disable the clocks */ /* Disable the clocks */
omap4430_phy_set_clk(dev, 0); omap4430_phy_set_clk(dev, 0);
/* Power down the phy */ /* Power down the phy */
__raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF); __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
} else {
/* Enable the internel phy clcoks */
omap4430_phy_set_clk(dev, 1);
/* power on the phy */
if (__raw_readl(ctrl_base + CONTROL_DEV_CONF) & PHY_PD) {
__raw_writel(~PHY_PD, ctrl_base + CONTROL_DEV_CONF);
mdelay(200);
}
} }
return 0; return 0;
......
...@@ -88,6 +88,7 @@ extern int omap4430_phy_power(struct device *dev, int ID, int on); ...@@ -88,6 +88,7 @@ extern int omap4430_phy_power(struct device *dev, int ID, int on);
extern int omap4430_phy_set_clk(struct device *dev, int on); extern int omap4430_phy_set_clk(struct device *dev, int on);
extern int omap4430_phy_init(struct device *dev); extern int omap4430_phy_init(struct device *dev);
extern int omap4430_phy_exit(struct device *dev); extern int omap4430_phy_exit(struct device *dev);
extern int omap4430_phy_suspend(struct device *dev, int suspend);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment