diff options
Diffstat (limited to 'drivers/usb/renesas_usbhs/mod.c')
| -rw-r--r-- | drivers/usb/renesas_usbhs/mod.c | 63 | 
1 files changed, 36 insertions, 27 deletions
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c index 9a705b15b3a1..d4be5d594896 100644 --- a/drivers/usb/renesas_usbhs/mod.c +++ b/drivers/usb/renesas_usbhs/mod.c @@ -218,10 +218,14 @@ static int usbhs_status_get_each_irq(struct usbhs_priv *priv,  	/********************  spin lock ********************/  	usbhs_lock(priv, flags);  	state->intsts0 = usbhs_read(priv, INTSTS0); -	state->intsts1 = usbhs_read(priv, INTSTS1); -  	intenb0 = usbhs_read(priv, INTENB0); -	intenb1 = usbhs_read(priv, INTENB1); + +	if (usbhs_mod_is_host(priv)) { +		state->intsts1 = usbhs_read(priv, INTSTS1); +		intenb1 = usbhs_read(priv, INTENB1); +	} else { +		state->intsts1 = intenb1 = 0; +	}  	/* mask */  	if (mod) { @@ -275,7 +279,8 @@ static irqreturn_t usbhs_interrupt(int irq, void *data)  	 *	   - Function :: VALID bit should 0  	 */  	usbhs_write(priv, INTSTS0, ~irq_state.intsts0 & INTSTS0_MAGIC); -	usbhs_write(priv, INTSTS1, ~irq_state.intsts1 & INTSTS1_MAGIC); +	if (usbhs_mod_is_host(priv)) +		usbhs_write(priv, INTSTS1, ~irq_state.intsts1 & INTSTS1_MAGIC);  	usbhs_write(priv, BRDYSTS, ~irq_state.brdysts);  	usbhs_write(priv, NRDYSTS, ~irq_state.nrdysts); @@ -303,19 +308,20 @@ static irqreturn_t usbhs_interrupt(int irq, void *data)  	if (irq_state.intsts0 & BRDY)  		usbhs_mod_call(priv, irq_ready, priv, &irq_state); -	/* INTSTS1 */ -	if (irq_state.intsts1 & ATTCH) -		usbhs_mod_call(priv, irq_attch, priv, &irq_state); - -	if (irq_state.intsts1 & DTCH) -		usbhs_mod_call(priv, irq_dtch, priv, &irq_state); +	if (usbhs_mod_is_host(priv)) { +		/* INTSTS1 */ +		if (irq_state.intsts1 & ATTCH) +			usbhs_mod_call(priv, irq_attch, priv, &irq_state); -	if (irq_state.intsts1 & SIGN) -		usbhs_mod_call(priv, irq_sign, priv, &irq_state); +		if (irq_state.intsts1 & DTCH) +			usbhs_mod_call(priv, irq_dtch, priv, &irq_state); -	if (irq_state.intsts1 & SACK) -		usbhs_mod_call(priv, irq_sack, priv, &irq_state); +		if (irq_state.intsts1 & SIGN) +			usbhs_mod_call(priv, irq_sign, priv, &irq_state); +		if (irq_state.intsts1 & SACK) +			usbhs_mod_call(priv, irq_sack, priv, &irq_state); +	}  	return IRQ_HANDLED;  } @@ -334,7 +340,8 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod)  	 *  - update INTSTS0  	 */  	usbhs_write(priv, INTENB0, 0); -	usbhs_write(priv, INTENB1, 0); +	if (usbhs_mod_is_host(priv)) +		usbhs_write(priv, INTENB1, 0);  	usbhs_write(priv, BEMPENB, 0);  	usbhs_write(priv, BRDYENB, 0); @@ -368,25 +375,27 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod)  			intenb0 |= BRDYE;  		} -		/* -		 * INTSTS1 -		 */ -		if (mod->irq_attch) -			intenb1 |= ATTCHE; +		if (usbhs_mod_is_host(priv)) { +			/* +			 * INTSTS1 +			 */ +			if (mod->irq_attch) +				intenb1 |= ATTCHE; -		if (mod->irq_dtch) -			intenb1 |= DTCHE; +			if (mod->irq_dtch) +				intenb1 |= DTCHE; -		if (mod->irq_sign) -			intenb1 |= SIGNE; +			if (mod->irq_sign) +				intenb1 |= SIGNE; -		if (mod->irq_sack) -			intenb1 |= SACKE; +			if (mod->irq_sack) +				intenb1 |= SACKE; +		}  	}  	if (intenb0)  		usbhs_write(priv, INTENB0, intenb0); -	if (intenb1) +	if (usbhs_mod_is_host(priv) && intenb1)  		usbhs_write(priv, INTENB1, intenb1);  }  |