diff options
Diffstat (limited to 'drivers/usb')
| -rw-r--r-- | drivers/usb/core/quirks.c | 2 | ||||
| -rw-r--r-- | drivers/usb/dwc3/dwc3-generic-plat.c | 3 | ||||
| -rw-r--r-- | drivers/usb/gadget/legacy/raw_gadget.c | 2 | ||||
| -rw-r--r-- | drivers/usb/host/xhci-dbgcap.c | 15 | ||||
| -rw-r--r-- | drivers/usb/host/xhci-pci.c | 3 | ||||
| -rw-r--r-- | drivers/usb/misc/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/option.c | 10 | ||||
| -rw-r--r-- | drivers/usb/typec/tcpm/tcpm.c | 4 | 
8 files changed, 29 insertions, 11 deletions
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index f5bc53875330..47f589c4104a 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -467,6 +467,8 @@ static const struct usb_device_id usb_quirk_list[] = {  	/* Huawei 4G LTE module */  	{ USB_DEVICE(0x12d1, 0x15bb), .driver_info =  			USB_QUIRK_DISCONNECT_SUSPEND }, +	{ USB_DEVICE(0x12d1, 0x15c1), .driver_info = +			USB_QUIRK_DISCONNECT_SUSPEND },  	{ USB_DEVICE(0x12d1, 0x15c3), .driver_info =  			USB_QUIRK_DISCONNECT_SUSPEND }, diff --git a/drivers/usb/dwc3/dwc3-generic-plat.c b/drivers/usb/dwc3/dwc3-generic-plat.c index d96b20570002..f8ad79c08c4e 100644 --- a/drivers/usb/dwc3/dwc3-generic-plat.c +++ b/drivers/usb/dwc3/dwc3-generic-plat.c @@ -85,11 +85,8 @@ static int dwc3_generic_probe(struct platform_device *pdev)  static void dwc3_generic_remove(struct platform_device *pdev)  {  	struct dwc3 *dwc = platform_get_drvdata(pdev); -	struct dwc3_generic *dwc3g = to_dwc3_generic(dwc);  	dwc3_core_remove(dwc); - -	clk_bulk_disable_unprepare(dwc3g->num_clocks, dwc3g->clks);  }  static int dwc3_generic_suspend(struct device *dev) diff --git a/drivers/usb/gadget/legacy/raw_gadget.c b/drivers/usb/gadget/legacy/raw_gadget.c index 20165e1582d9..b71680c58de6 100644 --- a/drivers/usb/gadget/legacy/raw_gadget.c +++ b/drivers/usb/gadget/legacy/raw_gadget.c @@ -667,8 +667,6 @@ static void *raw_alloc_io_data(struct usb_raw_ep_io *io, void __user *ptr,  		return ERR_PTR(-EINVAL);  	if (!usb_raw_io_flags_valid(io->flags))  		return ERR_PTR(-EINVAL); -	if (io->length > PAGE_SIZE) -		return ERR_PTR(-EINVAL);  	if (get_from_user)  		data = memdup_user(ptr + sizeof(*io), io->length);  	else { diff --git a/drivers/usb/host/xhci-dbgcap.c b/drivers/usb/host/xhci-dbgcap.c index 63edf2d8f245..ecda964e018a 100644 --- a/drivers/usb/host/xhci-dbgcap.c +++ b/drivers/usb/host/xhci-dbgcap.c @@ -892,7 +892,8 @@ static enum evtreturn xhci_dbc_do_handle_events(struct xhci_dbc *dbc)  			dev_info(dbc->dev, "DbC configured\n");  			portsc = readl(&dbc->regs->portsc);  			writel(portsc, &dbc->regs->portsc); -			return EVT_GSER; +			ret = EVT_GSER; +			break;  		}  		return EVT_DONE; @@ -954,7 +955,8 @@ static enum evtreturn xhci_dbc_do_handle_events(struct xhci_dbc *dbc)  			break;  		case TRB_TYPE(TRB_TRANSFER):  			dbc_handle_xfer_event(dbc, evt); -			ret = EVT_XFER_DONE; +			if (ret != EVT_GSER) +				ret = EVT_XFER_DONE;  			break;  		default:  			break; @@ -1390,8 +1392,15 @@ int xhci_dbc_suspend(struct xhci_hcd *xhci)  	if (!dbc)  		return 0; -	if (dbc->state == DS_CONFIGURED) +	switch (dbc->state) { +	case DS_ENABLED: +	case DS_CONNECTED: +	case DS_CONFIGURED:  		dbc->resume_required = 1; +		break; +	default: +		break; +	}  	xhci_dbc_stop(dbc); diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 5c8ab519f497..f67a4d956204 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -582,6 +582,8 @@ static int xhci_pci_setup(struct usb_hcd *hcd)  	if (!usb_hcd_is_primary_hcd(hcd))  		return 0; +	xhci->allow_single_roothub = 1; +  	if (xhci->quirks & XHCI_PME_STUCK_QUIRK)  		xhci_pme_acpi_rtd3_enable(pdev); @@ -637,7 +639,6 @@ int xhci_pci_common_probe(struct pci_dev *dev, const struct pci_device_id *id)  	xhci = hcd_to_xhci(hcd);  	xhci->reset = reset; -	xhci->allow_single_roothub = 1;  	if (!xhci_has_one_roothub(xhci)) {  		xhci->shared_hcd = usb_create_shared_hcd(&xhci_pci_hc_driver, &dev->dev,  							 pci_name(dev), hcd); diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig index 09ac6f1c985f..0b56b773dbdf 100644 --- a/drivers/usb/misc/Kconfig +++ b/drivers/usb/misc/Kconfig @@ -182,6 +182,7 @@ config USB_LJCA  config USB_USBIO  	tristate "Intel USBIO Bridge support"  	depends on USB && ACPI +	depends on X86 || COMPILE_TEST  	select AUXILIARY_BUS  	help  	  This adds support for Intel USBIO drivers. diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 62e984d20e59..5de856f65f0d 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c @@ -273,6 +273,7 @@ static void option_instat_callback(struct urb *urb);  #define QUECTEL_PRODUCT_EM05CN			0x0312  #define QUECTEL_PRODUCT_EM05G_GR		0x0313  #define QUECTEL_PRODUCT_EM05G_RS		0x0314 +#define QUECTEL_PRODUCT_RG255C			0x0316  #define QUECTEL_PRODUCT_EM12			0x0512  #define QUECTEL_PRODUCT_RM500Q			0x0800  #define QUECTEL_PRODUCT_RM520N			0x0801 @@ -617,6 +618,7 @@ static void option_instat_callback(struct urb *urb);  #define UNISOC_VENDOR_ID			0x1782  /* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */  #define TOZED_PRODUCT_LT70C			0x4055 +#define UNISOC_PRODUCT_UIS7720			0x4064  /* Luat Air72*U series based on UNISOC UIS8910 uses UNISOC's vendor ID */  #define LUAT_PRODUCT_AIR720U			0x4e00 @@ -1270,6 +1272,9 @@ static const struct usb_device_id option_ids[] = {  	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },  	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG650V, 0xff, 0xff, 0x30) },  	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG650V, 0xff, 0, 0) }, +	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255C, 0xff, 0xff, 0x30) }, +	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255C, 0xff, 0, 0) }, +	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255C, 0xff, 0xff, 0x40) },  	{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },  	{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, @@ -1398,10 +1403,14 @@ static const struct usb_device_id option_ids[] = {  	  .driver_info = RSVD(0) | NCTRL(3) },  	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a2, 0xff),	/* Telit FN920C04 (MBIM) */  	  .driver_info = NCTRL(4) }, +	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a3, 0xff),	/* Telit FN920C04 (ECM) */ +	  .driver_info = NCTRL(4) },  	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a4, 0xff),	/* Telit FN20C04 (rmnet) */  	  .driver_info = RSVD(0) | NCTRL(3) },  	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a7, 0xff),	/* Telit FN920C04 (MBIM) */  	  .driver_info = NCTRL(4) }, +	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a8, 0xff),	/* Telit FN920C04 (ECM) */ +	  .driver_info = NCTRL(4) },  	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a9, 0xff),	/* Telit FN20C04 (rmnet) */  	  .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },  	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff),	/* Telit FN920C04 (MBIM) */ @@ -2466,6 +2475,7 @@ static const struct usb_device_id option_ids[] = {  	{ USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9291, 0xff, 0xff, 0x30) },  	{ USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9291, 0xff, 0xff, 0x40) },  	{ USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, +	{ USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, UNISOC_PRODUCT_UIS7720, 0xff, 0, 0) },  	{ USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) },  	{ USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0530, 0xff),			/* TCL IK512 MBIM */  	  .driver_info = NCTRL(1) }, diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index b2a568a5bc9b..cc78770509db 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -7876,9 +7876,9 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)  	port->partner_desc.identity = &port->partner_ident; -	port->role_sw = usb_role_switch_get(port->dev); +	port->role_sw = fwnode_usb_role_switch_get(tcpc->fwnode);  	if (!port->role_sw) -		port->role_sw = fwnode_usb_role_switch_get(tcpc->fwnode); +		port->role_sw = usb_role_switch_get(port->dev);  	if (IS_ERR(port->role_sw)) {  		err = PTR_ERR(port->role_sw);  		goto out_destroy_wq;  | 
