diff options
Diffstat (limited to 'drivers/usb/renesas_usbhs/mod.c')
| -rw-r--r-- | drivers/usb/renesas_usbhs/mod.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c index d4be5d594896..28965ef4f824 100644 --- a/drivers/usb/renesas_usbhs/mod.c +++ b/drivers/usb/renesas_usbhs/mod.c @@ -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  |