diff options
| author | Ivan T. Ivanov <iivanov@mm-sol.com> | 2014-04-28 09:34:21 -0400 |
|---|---|---|
| committer | Felipe Balbi <balbi@ti.com> | 2014-04-30 12:29:58 -0400 |
| commit | 349907c262ad5e698c24565658ae489fb69fee53 (patch) | |
| tree | aea76d5ae3d5f5e64006b12deb2e5f4c53b941d4 | |
| parent | 30bf8667cef5655ddfaedf043f13d03606844213 (diff) | |
usb: phy: msm: Handle disconnect events
Put the transceiver in non-driving mode. Otherwise host
may not detect soft-disconnection.
Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
Cc: Pavankumar Kondeti <pkondeti@codeaurora.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
| -rw-r--r-- | drivers/usb/phy/phy-msm-usb.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c index 9437bcf8c367..366527ecbdd1 100644 --- a/drivers/usb/phy/phy-msm-usb.c +++ b/drivers/usb/phy/phy-msm-usb.c | |||
| @@ -235,6 +235,23 @@ static void ulpi_init(struct msm_otg *motg) | |||
| 235 | } | 235 | } |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | static int msm_phy_notify_disconnect(struct usb_phy *phy, | ||
| 239 | enum usb_device_speed speed) | ||
| 240 | { | ||
| 241 | int val; | ||
| 242 | |||
| 243 | /* | ||
| 244 | * Put the transceiver in non-driving mode. Otherwise host | ||
| 245 | * may not detect soft-disconnection. | ||
| 246 | */ | ||
| 247 | val = ulpi_read(phy, ULPI_FUNC_CTRL); | ||
| 248 | val &= ~ULPI_FUNC_CTRL_OPMODE_MASK; | ||
| 249 | val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING; | ||
| 250 | ulpi_write(phy, val, ULPI_FUNC_CTRL); | ||
| 251 | |||
| 252 | return 0; | ||
| 253 | } | ||
| 254 | |||
| 238 | static int msm_otg_link_clk_reset(struct msm_otg *motg, bool assert) | 255 | static int msm_otg_link_clk_reset(struct msm_otg *motg, bool assert) |
| 239 | { | 256 | { |
| 240 | int ret; | 257 | int ret; |
| @@ -1626,6 +1643,7 @@ static int msm_otg_probe(struct platform_device *pdev) | |||
| 1626 | 1643 | ||
| 1627 | phy->init = msm_phy_init; | 1644 | phy->init = msm_phy_init; |
| 1628 | phy->set_power = msm_otg_set_power; | 1645 | phy->set_power = msm_otg_set_power; |
| 1646 | phy->notify_disconnect = msm_phy_notify_disconnect; | ||
| 1629 | 1647 | ||
| 1630 | phy->io_ops = &msm_otg_io_ops; | 1648 | phy->io_ops = &msm_otg_io_ops; |
| 1631 | 1649 | ||
