mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 22:44:27 +08:00
usb: mtu3: fix operation failure when test TEST_J/K
There is an error dialog popped up in PC when test TEST_J/K by EHSETT tool, due to not waiting for the completion of control transfer. Here fix it by entering test mode after Status Stage finish. Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
11254eb2de
commit
f3b28e5e07
@ -7,6 +7,7 @@
|
||||
* Author: Chunfeng.Yun <chunfeng.yun@mediatek.com>
|
||||
*/
|
||||
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/usb/composite.h>
|
||||
|
||||
#include "mtu3.h"
|
||||
@ -263,6 +264,7 @@ static int handle_test_mode(struct mtu3 *mtu, struct usb_ctrlrequest *setup)
|
||||
{
|
||||
void __iomem *mbase = mtu->mac_base;
|
||||
int handled = 1;
|
||||
u32 value;
|
||||
|
||||
switch (le16_to_cpu(setup->wIndex) >> 8) {
|
||||
case TEST_J:
|
||||
@ -292,6 +294,14 @@ static int handle_test_mode(struct mtu3 *mtu, struct usb_ctrlrequest *setup)
|
||||
if (mtu->test_mode_nr == TEST_PACKET_MODE)
|
||||
ep0_load_test_packet(mtu);
|
||||
|
||||
/* send status before entering test mode. */
|
||||
value = mtu3_readl(mbase, U3D_EP0CSR) & EP0_W1C_BITS;
|
||||
mtu3_writel(mbase, U3D_EP0CSR, value | EP0_SETUPPKTRDY | EP0_DATAEND);
|
||||
|
||||
/* wait for ACK status sent by host */
|
||||
readl_poll_timeout(mbase + U3D_EP0CSR, value,
|
||||
!(value & EP0_DATAEND), 100, 5000);
|
||||
|
||||
mtu3_writel(mbase, U3D_USB2_TEST_MODE, mtu->test_mode_nr);
|
||||
|
||||
mtu->ep0_state = MU3D_EP0_STATE_SETUP;
|
||||
|
Loading…
Reference in New Issue
Block a user