]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
usb: chipidea: Configure phy for appropriate mode
authorStephen Boyd <stephen.boyd@linaro.org>
Wed, 25 Jan 2017 22:32:43 +0000 (14:32 -0800)
committerPeter Chen <peter.chen@nxp.com>
Fri, 3 Feb 2017 08:48:33 +0000 (16:48 +0800)
When the qcom chipidea controller is used with an extcon, we need
to signal device mode or host mode to the phy so it can configure
itself for the correct mode. This should be done after the phy is
powered up, so that the register writes work correctly. Add in
the appropriate phy_set_mode() call here.

Cc: Peter Chen <peter.chen@nxp.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
drivers/usb/chipidea/core.c

index bcb3a9c360d47902aed93ea5ad626cbb4155b76b..79ad8e91632e6d29f3a67a328b559d2b2be7f793 100644 (file)
@@ -427,13 +427,21 @@ void ci_platform_configure(struct ci_hdrc *ci)
        is_device_mode = hw_read(ci, OP_USBMODE, USBMODE_CM) == USBMODE_CM_DC;
        is_host_mode = hw_read(ci, OP_USBMODE, USBMODE_CM) == USBMODE_CM_HC;
 
-       if (is_device_mode &&
-               (ci->platdata->flags & CI_HDRC_DISABLE_DEVICE_STREAMING))
-               hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS);
+       if (is_device_mode) {
+               phy_set_mode(ci->phy, PHY_MODE_USB_DEVICE);
 
-       if (is_host_mode &&
-               (ci->platdata->flags & CI_HDRC_DISABLE_HOST_STREAMING))
-               hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS);
+               if (ci->platdata->flags & CI_HDRC_DISABLE_DEVICE_STREAMING)
+                       hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS,
+                                USBMODE_CI_SDIS);
+       }
+
+       if (is_host_mode) {
+               phy_set_mode(ci->phy, PHY_MODE_USB_HOST);
+
+               if (ci->platdata->flags & CI_HDRC_DISABLE_HOST_STREAMING)
+                       hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS,
+                                USBMODE_CI_SDIS);
+       }
 
        if (ci->platdata->flags & CI_HDRC_FORCE_FULLSPEED) {
                if (ci->hw_bank.lpm)