phy: rockchip-inno-usb3: workaround for USB3 PHY disconnection det issue
authorWilliam Wu <wulf@rock-chips.com>
Wed, 15 Feb 2017 13:12:31 +0000 (21:12 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 17 Feb 2017 02:47:51 +0000 (10:47 +0800)
commit020b3e1a109f75e954c756dd1a5bf9eb705f7a12
treeee810f5690275888c84ade4bded2c2d4bc84758a
parent1c6c74e1dd82024469f48fe2cd1e333cdc0efb62
phy: rockchip-inno-usb3: workaround for USB3 PHY disconnection det issue

The rk322xh USB3 PHY has a problem to detect disconnection,
it loses the ability to detect an absence of a far-end
receiver termination specified in USB3 spec Table 6-21,
and this causes the linkstate to change between SS.Inactive
and Polling state, but not return to correct state Rx.detect.

To workaround this bug, we depends on the hub_event to
detect the port linkstate change and do soft disconnect.
And then do USB3 PHY reset and reinit HCD to recovery
the whole USB3.

The workaround process is:
Plug out USB3 device -> hub_event detect PLC and find
USB 3.0 port in the Inactive -> call usb_remove_device()
to do soft disconnect -> call usb_phy_notify_connect()
-> send notifier to DWC3 controller driver to do USB3
PHY reset and reinit HCD.

Change-Id: Icb975581c6fbbb34a7da90ddca47e04a46e5da48
Signed-off-by: William Wu <wulf@rock-chips.com>
drivers/phy/phy-rockchip-inno-usb3.c