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