|
@@ -282,9 +282,16 @@ static irqreturn_t usbhs_interrupt(int irq, void *data)
|
|
|
if (usbhs_mod_is_host(priv))
|
|
|
usbhs_write(priv, INTSTS1, ~irq_state.intsts1 & INTSTS1_MAGIC);
|
|
|
|
|
|
- usbhs_write(priv, BRDYSTS, ~irq_state.brdysts);
|
|
|
+ /*
|
|
|
+ * The driver should not clear the xxxSTS after the line of
|
|
|
+ * "call irq callback functions" because each "if" statement is
|
|
|
+ * possible to call the callback function for avoiding any side effects.
|
|
|
+ */
|
|
|
+ if (irq_state.intsts0 & BRDY)
|
|
|
+ usbhs_write(priv, BRDYSTS, ~irq_state.brdysts);
|
|
|
usbhs_write(priv, NRDYSTS, ~irq_state.nrdysts);
|
|
|
- usbhs_write(priv, BEMPSTS, ~irq_state.bempsts);
|
|
|
+ if (irq_state.intsts0 & BEMP)
|
|
|
+ usbhs_write(priv, BEMPSTS, ~irq_state.bempsts);
|
|
|
|
|
|
/*
|
|
|
* call irq callback functions
|