diff options
Diffstat (limited to 'drivers/usb/gadget/udc/renesas_usb3.c')
| -rw-r--r-- | drivers/usb/gadget/udc/renesas_usb3.c | 15 | 
1 files changed, 10 insertions, 5 deletions
| diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c index ade0723787e5..e5355ede2c46 100644 --- a/drivers/usb/gadget/udc/renesas_usb3.c +++ b/drivers/usb/gadget/udc/renesas_usb3.c @@ -352,6 +352,7 @@ struct renesas_usb3 {  	bool extcon_host;		/* check id and set EXTCON_USB_HOST */  	bool extcon_usb;		/* check vbus and set EXTCON_USB */  	bool forced_b_device; +	bool start_to_connect;  };  #define gadget_to_renesas_usb3(_gadget)	\ @@ -470,7 +471,8 @@ static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)  static void usb3_init_epc_registers(struct renesas_usb3 *usb3)  {  	usb3_write(usb3, ~0, USB3_USB_INT_STA_1); -	usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG); +	if (!usb3->workaround_for_vbus) +		usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);  }  static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3) @@ -676,8 +678,7 @@ static void usb3_mode_config(struct renesas_usb3 *usb3, bool host, bool a_dev)  	usb3_set_mode(usb3, host);  	usb3_vbus_out(usb3, a_dev);  	/* for A-Peripheral or forced B-device mode */ -	if ((!host && a_dev) || -	    (usb3->workaround_for_vbus && usb3->forced_b_device)) +	if ((!host && a_dev) || usb3->start_to_connect)  		usb3_connect(usb3);  	spin_unlock_irqrestore(&usb3->lock, flags);  } @@ -2369,7 +2370,11 @@ static ssize_t renesas_usb3_b_device_write(struct file *file,  	if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))  		return -EFAULT; -	if (!strncmp(buf, "1", 1)) +	usb3->start_to_connect = false; +	if (usb3->workaround_for_vbus && usb3->forced_b_device && +	    !strncmp(buf, "2", 1)) +		usb3->start_to_connect = true; +	else if (!strncmp(buf, "1", 1))  		usb3->forced_b_device = true;  	else  		usb3->forced_b_device = false; @@ -2377,7 +2382,7 @@ static ssize_t renesas_usb3_b_device_write(struct file *file,  	if (usb3->workaround_for_vbus)  		usb3_disconnect(usb3); -	/* Let this driver call usb3_connect() anyway */ +	/* Let this driver call usb3_connect() if needed */  	usb3_check_id(usb3);  	return count; | 
