summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhangfei Gao <zhangfei.gao@linaro.org>2015-11-02 10:44:38 +0800
committerVishal Bhoj <vishal.bhoj@linaro.org>2015-11-23 04:25:41 +0000
commit284832f993107d8ccbae5821d3dfc395d23769ea (patch)
treea72a52e88917f2cf7c8e15480f967b08d03e79bf
parent07db231d46ed4c1b0fbc7d4d76a255857e8aa434 (diff)
phy: phy-hisi: reset phy only when probe
Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
-rw-r--r--drivers/usb/phy/phy-hisi.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/usb/phy/phy-hisi.c b/drivers/usb/phy/phy-hisi.c
index e4c8d93a304..4b80652cbd0 100644
--- a/drivers/usb/phy/phy-hisi.c
+++ b/drivers/usb/phy/phy-hisi.c
@@ -78,6 +78,21 @@ static void hi6220_start_periphrals(struct hi6220_priv *priv, bool on)
usb_gadget_disconnect(otg->gadget);
}
+static void hi6220_phy_init(struct hi6220_priv *priv)
+{
+ struct regmap *reg = priv->reg;
+ u32 val, mask;
+
+ if (priv->reg == NULL)
+ return;
+
+ val = RST0_USBOTG_BUS | RST0_POR_PICOPHY |
+ RST0_USBOTG | RST0_USBOTG_32K;
+ mask = val;
+ regmap_update_bits(reg, SC_PERIPH_RSTEN0, mask, val);
+ regmap_update_bits(reg, SC_PERIPH_RSTDIS0, mask, val);
+}
+
static int hi6220_phy_setup(struct hi6220_priv *priv, bool on)
{
struct regmap *reg = priv->reg;
@@ -88,16 +103,6 @@ static int hi6220_phy_setup(struct hi6220_priv *priv, bool on)
return 0;
if (on) {
- val = RST0_USBOTG_BUS | RST0_POR_PICOPHY |
- RST0_USBOTG | RST0_USBOTG_32K;
- mask = val;
- ret = regmap_update_bits(reg, SC_PERIPH_RSTEN0, mask, val);
- if (ret)
- goto out;
- ret = regmap_update_bits(reg, SC_PERIPH_RSTDIS0, mask, val);
- if (ret)
- goto out;
-
val = CTRL5_USBOTG_RES_SEL | CTRL5_PICOPHY_ACAENB;
mask = val | CTRL5_PICOPHY_BC_MODE;
ret = regmap_update_bits(reg, SC_PERIPH_CTRL5, mask, val);
@@ -120,13 +125,6 @@ static int hi6220_phy_setup(struct hi6220_priv *priv, bool on)
ret = regmap_update_bits(reg, SC_PERIPH_CTRL4, mask, val);
if (ret)
goto out;
-
- val = RST0_USBOTG_BUS | RST0_POR_PICOPHY |
- RST0_USBOTG | RST0_USBOTG_32K;
- mask = val;
- ret = regmap_update_bits(reg, SC_PERIPH_RSTEN0, mask, val);
- if (ret)
- goto out;
}
return 0;
@@ -265,6 +263,7 @@ static int hi6220_phy_probe(struct platform_device *pdev)
if (IS_ERR(priv->reg))
priv->reg = NULL;
+ hi6220_phy_init(priv);
INIT_DELAYED_WORK(&priv->work, hi6220_detect_work);
ret = gpio_request(priv->gpio_vbus, "gpio_vbus_det");
@@ -323,6 +322,7 @@ static int hi6220_phy_suspend(struct device *dev)
struct platform_device *pdev = to_platform_device(dev);
struct hi6220_priv *priv = platform_get_drvdata(pdev);
+ hi6220_phy_setup(priv, false);
clk_disable_unprepare(priv->clk);
return 0;
@@ -334,6 +334,7 @@ static int hi6220_phy_resume(struct device *dev)
struct hi6220_priv *priv = platform_get_drvdata(pdev);
clk_prepare_enable(priv->clk);
+ hi6220_phy_setup(priv, true);
return 0;
}