diff options
Diffstat (limited to 'drivers/usb/cdns3')
| -rw-r--r-- | drivers/usb/cdns3/cdns3-ti.c | 3 | ||||
| -rw-r--r-- | drivers/usb/cdns3/core.c | 47 | ||||
| -rw-r--r-- | drivers/usb/cdns3/core.h | 2 | ||||
| -rw-r--r-- | drivers/usb/cdns3/drd.c | 4 | ||||
| -rw-r--r-- | drivers/usb/cdns3/ep0.c | 7 | ||||
| -rw-r--r-- | drivers/usb/cdns3/gadget.c | 15 | 
6 files changed, 16 insertions, 62 deletions
diff --git a/drivers/usb/cdns3/cdns3-ti.c b/drivers/usb/cdns3/cdns3-ti.c index 5685ba11480b..e701ab56b0a7 100644 --- a/drivers/usb/cdns3/cdns3-ti.c +++ b/drivers/usb/cdns3/cdns3-ti.c @@ -138,7 +138,7 @@ static int cdns_ti_probe(struct platform_device *pdev)  	error = pm_runtime_get_sync(dev);  	if (error < 0) {  		dev_err(dev, "pm_runtime_get_sync failed: %d\n", error); -		goto err_get; +		goto err;  	}  	/* assert RESET */ @@ -185,7 +185,6 @@ static int cdns_ti_probe(struct platform_device *pdev)  err:  	pm_runtime_put_sync(data->dev); -err_get:  	pm_runtime_disable(data->dev);  	return error; diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index 4aafba20f450..19bbb5b7e6b6 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -82,8 +82,6 @@ static void cdns3_exit_roles(struct cdns3 *cdns)  	cdns3_drd_exit(cdns);  } -static enum usb_role cdsn3_hw_role_state_machine(struct cdns3 *cdns); -  /**   * cdns3_core_init_role - initialize role of operation   * @cdns: Pointer to cdns3 structure @@ -193,12 +191,12 @@ err:  }  /** - * cdsn3_hw_role_state_machine  - role switch state machine based on hw events. + * cdns3_hw_role_state_machine  - role switch state machine based on hw events.   * @cdns: Pointer to controller structure.   *   * Returns next role to be entered based on hw events.   */ -static enum usb_role cdsn3_hw_role_state_machine(struct cdns3 *cdns) +static enum usb_role cdns3_hw_role_state_machine(struct cdns3 *cdns)  {  	enum usb_role role;  	int id, vbus; @@ -291,14 +289,10 @@ int cdns3_hw_role_switch(struct cdns3 *cdns)  	enum usb_role real_role, current_role;  	int ret = 0; -	/* Do nothing if role based on syfs. */ -	if (cdns->role_override) -		return 0; -  	pm_runtime_get_sync(cdns->dev);  	current_role = cdns->role; -	real_role = cdsn3_hw_role_state_machine(cdns); +	real_role = cdns3_hw_role_state_machine(cdns);  	/* Do nothing if nothing changed */  	if (current_role == real_role) @@ -353,39 +347,6 @@ static int cdns3_role_set(struct usb_role_switch *sw, enum usb_role role)  	pm_runtime_get_sync(cdns->dev); -	/* -	 * FIXME: switch role framework should be extended to meet -	 * requirements. Driver assumes that role can be controlled -	 * by SW or HW. Temporary workaround is to use USB_ROLE_NONE to -	 * switch from SW to HW control. -	 * -	 * For dr_mode == USB_DR_MODE_OTG: -	 *	if user sets USB_ROLE_HOST or USB_ROLE_DEVICE then driver -	 *	sets role_override flag and forces that role. -	 *	if user sets USB_ROLE_NONE, driver clears role_override and lets -	 *	HW state machine take over. -	 * -	 * For dr_mode != USB_DR_MODE_OTG: -	 *	Assumptions: -	 *	1. Restricted user control between NONE and dr_mode. -	 *	2. Driver doesn't need to rely on role_override flag. -	 *	3. Driver needs to ensure that HW state machine is never called -	 *	   if dr_mode != USB_DR_MODE_OTG. -	 */ -	if (role == USB_ROLE_NONE) -		cdns->role_override = 0; -	else -		cdns->role_override = 1; - -	/* -	 * HW state might have changed so driver need to trigger -	 * HW state machine if dr_mode == USB_DR_MODE_OTG. -	 */ -	if (!cdns->role_override && cdns->dr_mode == USB_DR_MODE_OTG) { -		cdns3_hw_role_switch(cdns); -		goto pm_put; -	} -  	if (cdns->role == role)  		goto pm_put; @@ -528,6 +489,8 @@ static int cdns3_probe(struct platform_device *pdev)  	sw_desc.get = cdns3_role_get;  	sw_desc.allow_userspace_control = true;  	sw_desc.driver_data = cdns; +	if (device_property_read_bool(dev, "usb-role-switch")) +		sw_desc.fwnode = dev->fwnode;  	cdns->role_sw = usb_role_switch_register(dev, &sw_desc);  	if (IS_ERR(cdns->role_sw)) { diff --git a/drivers/usb/cdns3/core.h b/drivers/usb/cdns3/core.h index 969eb94de204..1ad1f1fe61e9 100644 --- a/drivers/usb/cdns3/core.h +++ b/drivers/usb/cdns3/core.h @@ -62,7 +62,6 @@ struct cdns3_role_driver {   *           This field based on firmware setting, kernel configuration   *           and hardware configuration.   * @role_sw: pointer to role switch object. - * @role_override: set 1 if role rely on SW.   */  struct cdns3 {  	struct device			*dev; @@ -90,7 +89,6 @@ struct cdns3 {  	struct mutex			mutex;  	enum usb_dr_mode		dr_mode;  	struct usb_role_switch		*role_sw; -	int				role_override;  };  int cdns3_hw_role_switch(struct cdns3 *cdns); diff --git a/drivers/usb/cdns3/drd.c b/drivers/usb/cdns3/drd.c index 16ad485f0b69..58089841ed52 100644 --- a/drivers/usb/cdns3/drd.c +++ b/drivers/usb/cdns3/drd.c @@ -329,7 +329,7 @@ int cdns3_drd_init(struct cdns3 *cdns)  		cdns->otg_v1_regs = NULL;  		cdns->otg_regs = regs;  		writel(1, &cdns->otg_v0_regs->simulate); -		dev_info(cdns->dev, "DRD version v0 (%08x)\n", +		dev_dbg(cdns->dev, "DRD version v0 (%08x)\n",  			 readl(&cdns->otg_v0_regs->version));  	} else {  		cdns->otg_v0_regs = NULL; @@ -337,7 +337,7 @@ int cdns3_drd_init(struct cdns3 *cdns)  		cdns->otg_regs = (void *)&cdns->otg_v1_regs->cmd;  		cdns->version  = CDNS3_CONTROLLER_V1;  		writel(1, &cdns->otg_v1_regs->simulate); -		dev_info(cdns->dev, "DRD version v1 (ID: %08x, rev: %08x)\n", +		dev_dbg(cdns->dev, "DRD version v1 (ID: %08x, rev: %08x)\n",  			 readl(&cdns->otg_v1_regs->did),  			 readl(&cdns->otg_v1_regs->rid));  	} diff --git a/drivers/usb/cdns3/ep0.c b/drivers/usb/cdns3/ep0.c index e71240b386b4..82645a2a0f52 100644 --- a/drivers/usb/cdns3/ep0.c +++ b/drivers/usb/cdns3/ep0.c @@ -332,13 +332,6 @@ static int cdns3_ep0_feature_handle_device(struct cdns3_device *priv_dev,  		case TEST_K:  		case TEST_SE0_NAK:  		case TEST_PACKET: -			cdns3_ep0_complete_setup(priv_dev, 0, 1); -			/** -			 *  Little delay to give the controller some time -			 * for sending status stage. -			 * This time should be less then 3ms. -			 */ -			mdelay(1);  			cdns3_set_register_bit(&priv_dev->regs->usb_cmd,  					       USB_CMD_STMODE |  					       USB_STS_TMODE_SEL(tmode - 1)); diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c index 4d43f3b28309..5e24c2e57c0d 100644 --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -512,8 +512,8 @@ static void cdns3_wa2_descmiss_copy_data(struct cdns3_endpoint *priv_ep,  }  static struct usb_request *cdns3_wa2_gadget_giveback(struct cdns3_device *priv_dev, -					      struct cdns3_endpoint *priv_ep, -					      struct cdns3_request *priv_req) +						     struct cdns3_endpoint *priv_ep, +						     struct cdns3_request *priv_req)  {  	if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN &&  	    priv_req->flags & REQUEST_INTERNAL) { @@ -552,8 +552,8 @@ static struct usb_request *cdns3_wa2_gadget_giveback(struct cdns3_device *priv_d  }  static int cdns3_wa2_gadget_ep_queue(struct cdns3_device *priv_dev, -			      struct cdns3_endpoint *priv_ep, -			      struct cdns3_request *priv_req) +				     struct cdns3_endpoint *priv_ep, +				     struct cdns3_request *priv_req)  {  	int deferred = 0; @@ -1905,7 +1905,7 @@ static int cdns3_ep_onchip_buffer_reserve(struct cdns3_device *priv_dev,  }  static void cdns3_stream_ep_reconfig(struct cdns3_device *priv_dev, -			      struct cdns3_endpoint *priv_ep) +				     struct cdns3_endpoint *priv_ep)  {  	if (!priv_ep->use_streams || priv_dev->gadget.speed < USB_SPEED_SUPER)  		return; @@ -1926,7 +1926,7 @@ static void cdns3_stream_ep_reconfig(struct cdns3_device *priv_dev,  }  static void cdns3_configure_dmult(struct cdns3_device *priv_dev, -			   struct cdns3_endpoint *priv_ep) +				  struct cdns3_endpoint *priv_ep)  {  	struct cdns3_usb_regs __iomem *regs = priv_dev->regs; @@ -2965,7 +2965,7 @@ static int cdns3_init_eps(struct cdns3_device *priv_dev)  		priv_ep->flags = 0; -		dev_info(priv_dev->dev, "Initialized  %s support: %s %s\n", +		dev_dbg(priv_dev->dev, "Initialized  %s support: %s %s\n",  			 priv_ep->name,  			 priv_ep->endpoint.caps.type_bulk ? "BULK, INT" : "",  			 priv_ep->endpoint.caps.type_iso ? "ISO" : ""); @@ -3069,6 +3069,7 @@ static int cdns3_gadget_start(struct cdns3 *cdns)  	priv_dev->gadget.name = "usb-ss-gadget";  	priv_dev->gadget.sg_supported = 1;  	priv_dev->gadget.quirk_avoids_skb_reserve = 1; +	priv_dev->gadget.irq = cdns->dev_irq;  	spin_lock_init(&priv_dev->lock);  	INIT_WORK(&priv_dev->pending_status_wq,  | 
