USB driver fixes for 7.1-rc3
Here are some small USB driver fixes for 7.1-rc3 to resolve some reported issues, and a new device id. These are: - usblp driver heap leak fixes - ulpi driver memory leak fix - typec driver fixes - dwc3 driver fix - omap dma driver fix - new option driver device id addition All of these have been in linux-next for over a week with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCaf7mNg8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylbXACfWg3KnXzN+gCG8PM/zVLtinrAhDgAoLzKi1xv OqVhzuOICtZiP8WBoBoC =SeVl -----END PGP SIGNATURE----- Merge tag 'usb-7.1-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB driver fixes from Greg KH: "Here are some small USB driver fixes for 7.1-rc3 to resolve some reported issues, and a new device id. These are: - usblp driver heap leak fixes - ulpi driver memory leak fix - typec driver fixes - dwc3 driver fix - omap dma driver fix - new option driver device id addition All of these have been in linux-next for over a week with no reported issues" * tag 'usb-7.1-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: USB: serial: option: add Telit Cinterion LE910Cx compositions usb: usblp: fix uninitialized heap leak via LPGETSTATUS ioctl usb: usblp: fix heap leak in IEEE 1284 device ID via short response usb: dwc3: Move GUID programming after PHY initialization usb: typec: tcpm: fix debug accessory mode detection for sink ports usb: typec: tcpm: reset internal port states on soft reset AMS usb: ulpi: fix memory leak on ulpi_register() error paths USB: omap_udc: DMA: Don't enable burst 4 modemaster
commit
fe3e5bc9e3
|
|
@ -1178,7 +1178,7 @@ static int usblp_probe(struct usb_interface *intf,
|
|||
}
|
||||
|
||||
/* Allocate buffer for printer status */
|
||||
usblp->statusbuf = kmalloc(STATUS_BUF_SIZE, GFP_KERNEL);
|
||||
usblp->statusbuf = kzalloc(STATUS_BUF_SIZE, GFP_KERNEL);
|
||||
if (!usblp->statusbuf) {
|
||||
retval = -ENOMEM;
|
||||
goto abort;
|
||||
|
|
@ -1377,6 +1377,7 @@ static int usblp_cache_device_id_string(struct usblp *usblp)
|
|||
{
|
||||
int err, length;
|
||||
|
||||
memset(usblp->device_id_string, 0, USBLP_DEVICE_ID_SIZE);
|
||||
err = usblp_get_id(usblp, 0, usblp->device_id_string, USBLP_DEVICE_ID_SIZE - 1);
|
||||
if (err < 0) {
|
||||
dev_dbg(&usblp->intf->dev,
|
||||
|
|
|
|||
|
|
@ -286,12 +286,15 @@ static int ulpi_register(struct device *dev, struct ulpi *ulpi)
|
|||
ACPI_COMPANION_SET(&ulpi->dev, ACPI_COMPANION(dev));
|
||||
|
||||
ret = ulpi_of_register(ulpi);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
kfree(ulpi);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ulpi_read_id(ulpi);
|
||||
if (ret) {
|
||||
of_node_put(ulpi->dev.of_node);
|
||||
kfree(ulpi);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1359,12 +1359,6 @@ int dwc3_core_init(struct dwc3 *dwc)
|
|||
|
||||
hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
|
||||
|
||||
/*
|
||||
* Write Linux Version Code to our GUID register so it's easy to figure
|
||||
* out which kernel version a bug was found.
|
||||
*/
|
||||
dwc3_writel(dwc, DWC3_GUID, LINUX_VERSION_CODE);
|
||||
|
||||
ret = dwc3_phy_setup(dwc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
@ -1398,6 +1392,12 @@ int dwc3_core_init(struct dwc3 *dwc)
|
|||
if (ret)
|
||||
goto err_exit_phy;
|
||||
|
||||
/*
|
||||
* Write Linux Version Code to our GUID register so it's easy to figure
|
||||
* out which kernel version a bug was found.
|
||||
*/
|
||||
dwc3_writel(dwc, DWC3_GUID, LINUX_VERSION_CODE);
|
||||
|
||||
dwc3_core_setup_global_control(dwc);
|
||||
dwc3_core_num_eps(dwc);
|
||||
|
||||
|
|
|
|||
|
|
@ -733,8 +733,6 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel)
|
|||
if (status == 0) {
|
||||
omap_writew(reg, UDC_TXDMA_CFG);
|
||||
/* EMIFF or SDRC */
|
||||
omap_set_dma_src_burst_mode(ep->lch,
|
||||
OMAP_DMA_DATA_BURST_4);
|
||||
omap_set_dma_src_data_pack(ep->lch, 1);
|
||||
/* TIPB */
|
||||
omap_set_dma_dest_params(ep->lch,
|
||||
|
|
@ -756,8 +754,6 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel)
|
|||
UDC_DATA_DMA,
|
||||
0, 0);
|
||||
/* EMIFF or SDRC */
|
||||
omap_set_dma_dest_burst_mode(ep->lch,
|
||||
OMAP_DMA_DATA_BURST_4);
|
||||
omap_set_dma_dest_data_pack(ep->lch, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1513,7 +1513,11 @@ static const struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */
|
||||
.driver_info = NCTRL(2) | RSVD(3) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x1250, 0xff, 0x00, 0x00) }, /* Telit LE910Cx (rmnet) */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1251, 0xff) }, /* Telit LE910Cx (RNDIS) */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1252, 0xff) }, /* Telit LE910Cx (MBIM) */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1253, 0xff) }, /* Telit LE910Cx (ECM) */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1254, 0xff) }, /* Telit LE910Cx */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1255, 0xff) }, /* Telit LE910Cx */
|
||||
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
|
||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
||||
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
|
||||
|
|
|
|||
|
|
@ -732,9 +732,14 @@ static const char * const pd_rev[] = {
|
|||
(tcpm_cc_is_source((port)->cc2) && \
|
||||
!tcpm_cc_is_source((port)->cc1)))
|
||||
|
||||
#define tcpm_port_is_debug_source(port) \
|
||||
(tcpm_cc_is_source((port)->cc1) && tcpm_cc_is_source((port)->cc2))
|
||||
|
||||
#define tcpm_port_is_debug_sink(port) \
|
||||
(tcpm_cc_is_sink((port)->cc1) && tcpm_cc_is_sink((port)->cc2))
|
||||
|
||||
#define tcpm_port_is_debug(port) \
|
||||
((tcpm_cc_is_source((port)->cc1) && tcpm_cc_is_source((port)->cc2)) || \
|
||||
(tcpm_cc_is_sink((port)->cc1) && tcpm_cc_is_sink((port)->cc2)))
|
||||
(tcpm_port_is_debug_source(port) || tcpm_port_is_debug_sink(port))
|
||||
|
||||
#define tcpm_port_is_audio(port) \
|
||||
(tcpm_cc_is_audio((port)->cc1) && tcpm_cc_is_audio((port)->cc2))
|
||||
|
|
@ -5176,7 +5181,7 @@ static void run_state_machine(struct tcpm_port *port)
|
|||
tcpm_set_state(port, SNK_UNATTACHED, PD_T_DRP_SNK);
|
||||
break;
|
||||
case SRC_ATTACH_WAIT:
|
||||
if (tcpm_port_is_debug(port))
|
||||
if (tcpm_port_is_debug_source(port))
|
||||
tcpm_set_state(port, DEBUG_ACC_ATTACHED,
|
||||
port->timings.cc_debounce_time);
|
||||
else if (tcpm_port_is_audio(port))
|
||||
|
|
@ -5434,7 +5439,7 @@ static void run_state_machine(struct tcpm_port *port)
|
|||
tcpm_set_state(port, SRC_UNATTACHED, PD_T_DRP_SRC);
|
||||
break;
|
||||
case SNK_ATTACH_WAIT:
|
||||
if (tcpm_port_is_debug(port))
|
||||
if (tcpm_port_is_debug_sink(port))
|
||||
tcpm_set_state(port, DEBUG_ACC_ATTACHED,
|
||||
PD_T_CC_DEBOUNCE);
|
||||
else if (tcpm_port_is_audio(port))
|
||||
|
|
@ -5454,7 +5459,7 @@ static void run_state_machine(struct tcpm_port *port)
|
|||
if (tcpm_port_is_disconnected(port))
|
||||
tcpm_set_state(port, SNK_UNATTACHED,
|
||||
PD_T_PD_DEBOUNCE);
|
||||
else if (tcpm_port_is_debug(port))
|
||||
else if (tcpm_port_is_debug_sink(port))
|
||||
tcpm_set_state(port, DEBUG_ACC_ATTACHED,
|
||||
PD_T_CC_DEBOUNCE);
|
||||
else if (tcpm_port_is_audio(port))
|
||||
|
|
@ -5935,6 +5940,8 @@ static void run_state_machine(struct tcpm_port *port)
|
|||
/* remove existing capabilities */
|
||||
tcpm_partner_source_caps_reset(port);
|
||||
tcpm_pd_send_control(port, PD_CTRL_ACCEPT, TCPC_TX_SOP);
|
||||
port->vdm_sm_running = false;
|
||||
port->explicit_contract = false;
|
||||
tcpm_ams_finish(port);
|
||||
if (port->pwr_role == TYPEC_SOURCE) {
|
||||
port->upcoming_state = SRC_SEND_CAPABILITIES;
|
||||
|
|
@ -6360,10 +6367,10 @@ static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1,
|
|||
|
||||
switch (port->state) {
|
||||
case TOGGLING:
|
||||
if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) ||
|
||||
if (tcpm_port_is_debug_source(port) || tcpm_port_is_audio(port) ||
|
||||
tcpm_port_is_source(port))
|
||||
tcpm_set_state(port, SRC_ATTACH_WAIT, 0);
|
||||
else if (tcpm_port_is_sink(port))
|
||||
else if (tcpm_port_is_debug_sink(port) || tcpm_port_is_sink(port))
|
||||
tcpm_set_state(port, SNK_ATTACH_WAIT, 0);
|
||||
break;
|
||||
case CHECK_CONTAMINANT:
|
||||
|
|
@ -6371,9 +6378,11 @@ static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1,
|
|||
break;
|
||||
case SRC_UNATTACHED:
|
||||
case ACC_UNATTACHED:
|
||||
if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) ||
|
||||
if (tcpm_port_is_debug_source(port) || tcpm_port_is_audio(port) ||
|
||||
tcpm_port_is_source(port))
|
||||
tcpm_set_state(port, SRC_ATTACH_WAIT, 0);
|
||||
else if (tcpm_port_is_debug_sink(port))
|
||||
tcpm_set_state(port, SNK_ATTACH_WAIT, 0);
|
||||
break;
|
||||
case SRC_ATTACH_WAIT:
|
||||
if (tcpm_port_is_disconnected(port) ||
|
||||
|
|
@ -6395,7 +6404,7 @@ static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1,
|
|||
}
|
||||
break;
|
||||
case SNK_UNATTACHED:
|
||||
if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) ||
|
||||
if (tcpm_port_is_debug_sink(port) || tcpm_port_is_audio(port) ||
|
||||
tcpm_port_is_sink(port))
|
||||
tcpm_set_state(port, SNK_ATTACH_WAIT, 0);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue