0112-usb-mtu3-set-otg_sel-for-u2port-only-if-works-as-dua.patch 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. From 36f70702b66cd3453b65d46b5c26ea87d8897363 Mon Sep 17 00:00:00 2001
  2. From: Chunfeng Yun <[email protected]>
  3. Date: Fri, 13 Oct 2017 17:10:46 +0800
  4. Subject: [PATCH 112/224] usb: mtu3: set otg_sel for u2port only if works as
  5. dual-role mode
  6. When set otg_sel(SSUSB_U2_PORT_OTG_SEL) for u2port which supports
  7. dual-role mode, the controller will automatically switch mode
  8. between host and device according to IDDIG signal. But if the
  9. u2port only supports device mode, and no IDDIG pin is provided,
  10. setting otg_sel may cause failure of detection by host.
  11. So set it only for dual-role mode.
  12. Signed-off-by: Chunfeng Yun <[email protected]>
  13. Signed-off-by: Felipe Balbi <[email protected]>
  14. ---
  15. drivers/usb/mtu3/mtu3_core.c | 9 +++++++--
  16. 1 file changed, 7 insertions(+), 2 deletions(-)
  17. --- a/drivers/usb/mtu3/mtu3_core.c
  18. +++ b/drivers/usb/mtu3/mtu3_core.c
  19. @@ -115,7 +115,9 @@ static int mtu3_device_enable(struct mtu
  20. mtu3_clrbits(ibase, SSUSB_U2_CTRL(0),
  21. (SSUSB_U2_PORT_DIS | SSUSB_U2_PORT_PDN |
  22. SSUSB_U2_PORT_HOST_SEL));
  23. - mtu3_setbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_OTG_SEL);
  24. +
  25. + if (mtu->ssusb->dr_mode == USB_DR_MODE_OTG)
  26. + mtu3_setbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_OTG_SEL);
  27. return ssusb_check_clocks(mtu->ssusb, check_clk);
  28. }
  29. @@ -130,7 +132,10 @@ static void mtu3_device_disable(struct m
  30. mtu3_setbits(ibase, SSUSB_U2_CTRL(0),
  31. SSUSB_U2_PORT_DIS | SSUSB_U2_PORT_PDN);
  32. - mtu3_clrbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_OTG_SEL);
  33. +
  34. + if (mtu->ssusb->dr_mode == USB_DR_MODE_OTG)
  35. + mtu3_clrbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_OTG_SEL);
  36. +
  37. mtu3_setbits(ibase, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
  38. }