diff options
Diffstat (limited to 'drivers/usb/musb/musb_virthub.c')
| -rw-r--r-- | drivers/usb/musb/musb_virthub.c | 33 | 
1 files changed, 16 insertions, 17 deletions
diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c index cafc69536e1d..2b2164e028b3 100644 --- a/drivers/usb/musb/musb_virthub.c +++ b/drivers/usb/musb/musb_virthub.c @@ -43,14 +43,13 @@ void musb_host_finish_resume(struct work_struct *work)  	musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16;  	usb_hcd_poll_rh_status(musb->hcd);  	/* NOTE: it might really be A_WAIT_BCON ... */ -	musb->xceiv->otg->state = OTG_STATE_A_HOST; +	musb_set_state(musb, OTG_STATE_A_HOST);  	spin_unlock_irqrestore(&musb->lock, flags);  }  int musb_port_suspend(struct musb *musb, bool do_suspend)  { -	struct usb_otg	*otg = musb->xceiv->otg;  	u8		power;  	void __iomem	*mbase = musb->mregs; @@ -85,10 +84,11 @@ int musb_port_suspend(struct musb *musb, bool do_suspend)  		musb_dbg(musb, "Root port suspended, power %02x", power);  		musb->port1_status |= USB_PORT_STAT_SUSPEND; -		switch (musb->xceiv->otg->state) { +		switch (musb_get_state(musb)) {  		case OTG_STATE_A_HOST: -			musb->xceiv->otg->state = OTG_STATE_A_SUSPEND; -			musb->is_active = otg->host->b_hnp_enable; +			musb_set_state(musb, OTG_STATE_A_SUSPEND); +			musb->is_active = musb->xceiv && +				musb->xceiv->otg->host->b_hnp_enable;  			if (musb->is_active)  				mod_timer(&musb->otg_timer, jiffies  					+ msecs_to_jiffies( @@ -96,13 +96,14 @@ int musb_port_suspend(struct musb *musb, bool do_suspend)  			musb_platform_try_idle(musb, 0);  			break;  		case OTG_STATE_B_HOST: -			musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON; -			musb->is_active = otg->host->b_hnp_enable; +			musb_set_state(musb, OTG_STATE_B_WAIT_ACON); +			musb->is_active = musb->xceiv && +				musb->xceiv->otg->host->b_hnp_enable;  			musb_platform_try_idle(musb, 0);  			break;  		default:  			musb_dbg(musb, "bogus rh suspend? %s", -				usb_otg_state_string(musb->xceiv->otg->state)); +				 musb_otg_state_string(musb));  		}  	} else if (power & MUSB_POWER_SUSPENDM) {  		power &= ~MUSB_POWER_SUSPENDM; @@ -123,7 +124,7 @@ void musb_port_reset(struct musb *musb, bool do_reset)  	u8		power;  	void __iomem	*mbase = musb->mregs; -	if (musb->xceiv->otg->state == OTG_STATE_B_IDLE) { +	if (musb_get_state(musb) == OTG_STATE_B_IDLE) {  		musb_dbg(musb, "HNP: Returning from HNP; no hub reset from b_idle");  		musb->port1_status &= ~USB_PORT_STAT_RESET;  		return; @@ -196,32 +197,30 @@ void musb_port_reset(struct musb *musb, bool do_reset)  void musb_root_disconnect(struct musb *musb)  { -	struct usb_otg	*otg = musb->xceiv->otg; -  	musb->port1_status = USB_PORT_STAT_POWER  			| (USB_PORT_STAT_C_CONNECTION << 16);  	usb_hcd_poll_rh_status(musb->hcd);  	musb->is_active = 0; -	switch (musb->xceiv->otg->state) { +	switch (musb_get_state(musb)) {  	case OTG_STATE_A_SUSPEND: -		if (otg->host->b_hnp_enable) { -			musb->xceiv->otg->state = OTG_STATE_A_PERIPHERAL; +		if (musb->xceiv && musb->xceiv->otg->host->b_hnp_enable) { +			musb_set_state(musb, OTG_STATE_A_PERIPHERAL);  			musb->g.is_a_peripheral = 1;  			break;  		}  		fallthrough;  	case OTG_STATE_A_HOST: -		musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON; +		musb_set_state(musb, OTG_STATE_A_WAIT_BCON);  		musb->is_active = 0;  		break;  	case OTG_STATE_A_WAIT_VFALL: -		musb->xceiv->otg->state = OTG_STATE_B_IDLE; +		musb_set_state(musb, OTG_STATE_B_IDLE);  		break;  	default:  		musb_dbg(musb, "host disconnect (%s)", -			usb_otg_state_string(musb->xceiv->otg->state)); +			 musb_otg_state_string(musb));  	}  }  EXPORT_SYMBOL_GPL(musb_root_disconnect);  | 
