|
@@ -195,6 +195,16 @@ static void mtu3_intr_enable(struct mtu3 *mtu)
|
|
|
mtu3_writel(mbase, U3D_DEV_LINK_INTR_ENABLE, SSUSB_DEV_SPEED_CHG_INTR);
|
|
|
}
|
|
|
|
|
|
+/* reset: u2 - data toggle, u3 - SeqN, flow control status etc */
|
|
|
+static void mtu3_ep_reset(struct mtu3_ep *mep)
|
|
|
+{
|
|
|
+ struct mtu3 *mtu = mep->mtu;
|
|
|
+ u32 rst_bit = EP_RST(mep->is_in, mep->epnum);
|
|
|
+
|
|
|
+ mtu3_setbits(mtu->mac_base, U3D_EP_RST, rst_bit);
|
|
|
+ mtu3_clrbits(mtu->mac_base, U3D_EP_RST, rst_bit);
|
|
|
+}
|
|
|
+
|
|
|
/* set/clear the stall and toggle bits for non-ep0 */
|
|
|
void mtu3_ep_stall_set(struct mtu3_ep *mep, bool set)
|
|
|
{
|
|
@@ -220,8 +230,7 @@ void mtu3_ep_stall_set(struct mtu3_ep *mep, bool set)
|
|
|
}
|
|
|
|
|
|
if (!set) {
|
|
|
- mtu3_setbits(mbase, U3D_EP_RST, EP_RST(mep->is_in, epnum));
|
|
|
- mtu3_clrbits(mbase, U3D_EP_RST, EP_RST(mep->is_in, epnum));
|
|
|
+ mtu3_ep_reset(mep);
|
|
|
mep->flags &= ~MTU3_EP_STALL;
|
|
|
} else {
|
|
|
mep->flags |= MTU3_EP_STALL;
|
|
@@ -400,6 +409,7 @@ void mtu3_deconfig_ep(struct mtu3 *mtu, struct mtu3_ep *mep)
|
|
|
mtu3_setbits(mbase, U3D_QIECR0, QMU_RX_DONE_INT(epnum));
|
|
|
}
|
|
|
|
|
|
+ mtu3_ep_reset(mep);
|
|
|
ep_fifo_free(mep);
|
|
|
|
|
|
dev_dbg(mtu->dev, "%s: %s\n", __func__, mep->name);
|