Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'usb-5.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
"Here are some small USB driver fixes for 5.2-rc5

Nothing major, just some small gadget fixes, usb-serial new device
ids, a few new quirks, and some small fixes for some regressions that
have been found after the big 5.2-rc1 merge.

All of these have been in linux-next for a while with no reported
issues"

* tag 'usb-5.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
usb: typec: Make sure an alt mode exist before getting its partner
usb: gadget: udc: lpc32xx: fix return value check in lpc32xx_udc_probe()
usb: gadget: dwc2: fix zlp handling
usb: dwc2: Set actual frame number for completed ISOC transfer for none DDMA
usb: gadget: udc: lpc32xx: allocate descriptor with GFP_ATOMIC
usb: gadget: fusb300_udc: Fix memory leak of fusb300->ep[i]
usb: phy: mxs: Disable external charger detect in mxs_phy_hw_init()
usb: dwc2: Fix DMA cache alignment issues
usb: dwc2: host: Fix wMaxPacketSize handling (fix webcam regression)
USB: Fix chipmunk-like voice when using Logitech C270 for recording audio.
USB: usb-storage: Add new ID to ums-realtek
usb: typec: ucsi: ccg: fix memory leak in do_flash
USB: serial: option: add Telit 0x1260 and 0x1261 compositions
USB: serial: pl2303: add Allied Telesis VT-Kit3
USB: serial: option: add support for Simcom SIM7500/SIM7600 RNDIS mode

+105 -45
+3
drivers/usb/core/quirks.c
··· 215 215 /* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */ 216 216 { USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME }, 217 217 218 + /* Logitech HD Webcam C270 */ 219 + { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME }, 220 + 218 221 /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */ 219 222 { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT }, 220 223 { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
+16 -8
drivers/usb/dwc2/gadget.c
··· 835 835 * with corresponding information based on transfer data. 836 836 */ 837 837 static void dwc2_gadget_config_nonisoc_xfer_ddma(struct dwc2_hsotg_ep *hs_ep, 838 - struct usb_request *ureq, 839 - unsigned int offset, 838 + dma_addr_t dma_buff, 840 839 unsigned int len) 841 840 { 841 + struct usb_request *ureq = NULL; 842 842 struct dwc2_dma_desc *desc = hs_ep->desc_list; 843 843 struct scatterlist *sg; 844 844 int i; 845 845 u8 desc_count = 0; 846 846 847 + if (hs_ep->req) 848 + ureq = &hs_ep->req->req; 849 + 847 850 /* non-DMA sg buffer */ 848 - if (!ureq->num_sgs) { 851 + if (!ureq || !ureq->num_sgs) { 849 852 dwc2_gadget_fill_nonisoc_xfer_ddma_one(hs_ep, &desc, 850 - ureq->dma + offset, len, true); 853 + dma_buff, len, true); 851 854 return; 852 855 } 853 856 ··· 1138 1135 offset = ureq->actual; 1139 1136 1140 1137 /* Fill DDMA chain entries */ 1141 - dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, ureq, offset, 1138 + dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, ureq->dma + offset, 1142 1139 length); 1143 1140 1144 1141 /* write descriptor chain address to control register */ ··· 2040 2037 dev_dbg(hsotg->dev, "Receiving zero-length packet on ep%d\n", 2041 2038 index); 2042 2039 if (using_desc_dma(hsotg)) { 2040 + /* Not specific buffer needed for ep0 ZLP */ 2041 + dma_addr_t dma = hs_ep->desc_list_dma; 2042 + 2043 2043 if (!index) 2044 2044 dwc2_gadget_set_ep0_desc_chain(hsotg, hs_ep); 2045 2045 2046 - /* Not specific buffer needed for ep0 ZLP */ 2047 - dwc2_gadget_fill_nonisoc_xfer_ddma_one(hs_ep, &hs_ep->desc_list, 2048 - hs_ep->desc_list_dma, 0, true); 2046 + dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, dma, 0); 2049 2047 } else { 2050 2048 dwc2_writel(hsotg, DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) | 2051 2049 DXEPTSIZ_XFERSIZE(0), ··· 2420 2416 else if (hs_ep->isochronous && hs_ep->interval > 1) 2421 2417 dwc2_gadget_incr_frame_num(hs_ep); 2422 2418 } 2419 + 2420 + /* Set actual frame number for completed transfers */ 2421 + if (!using_desc_dma(hsotg) && hs_ep->isochronous) 2422 + req->frame_number = hsotg->frame_number; 2423 2423 2424 2424 dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, result); 2425 2425 }
+24 -15
drivers/usb/dwc2/hcd.c
··· 2480 2480 return; 2481 2481 2482 2482 /* Restore urb->transfer_buffer from the end of the allocated area */ 2483 - memcpy(&stored_xfer_buffer, urb->transfer_buffer + 2484 - urb->transfer_buffer_length, sizeof(urb->transfer_buffer)); 2483 + memcpy(&stored_xfer_buffer, 2484 + PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length, 2485 + dma_get_cache_alignment()), 2486 + sizeof(urb->transfer_buffer)); 2485 2487 2486 2488 if (usb_urb_dir_in(urb)) { 2487 2489 if (usb_pipeisoc(urb->pipe)) ··· 2515 2513 * DMA 2516 2514 */ 2517 2515 kmalloc_size = urb->transfer_buffer_length + 2516 + (dma_get_cache_alignment() - 1) + 2518 2517 sizeof(urb->transfer_buffer); 2519 2518 2520 2519 kmalloc_ptr = kmalloc(kmalloc_size, mem_flags); ··· 2526 2523 * Position value of original urb->transfer_buffer pointer to the end 2527 2524 * of allocation for later referencing 2528 2525 */ 2529 - memcpy(kmalloc_ptr + urb->transfer_buffer_length, 2526 + memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length, 2527 + dma_get_cache_alignment()), 2530 2528 &urb->transfer_buffer, sizeof(urb->transfer_buffer)); 2531 2529 2532 2530 if (usb_urb_dir_out(urb)) ··· 2612 2608 chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info); 2613 2609 chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info); 2614 2610 chan->speed = qh->dev_speed; 2615 - chan->max_packet = dwc2_max_packet(qh->maxp); 2611 + chan->max_packet = qh->maxp; 2616 2612 2617 2613 chan->xfer_started = 0; 2618 2614 chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS; ··· 2690 2686 * This value may be modified when the transfer is started 2691 2687 * to reflect the actual transfer length 2692 2688 */ 2693 - chan->multi_count = dwc2_hb_mult(qh->maxp); 2689 + chan->multi_count = qh->maxp_mult; 2694 2690 2695 2691 if (hsotg->params.dma_desc_enable) { 2696 2692 chan->desc_list_addr = qh->desc_list_dma; ··· 3810 3806 3811 3807 static void dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg, 3812 3808 struct dwc2_hcd_urb *urb, u8 dev_addr, 3813 - u8 ep_num, u8 ep_type, u8 ep_dir, u16 mps) 3809 + u8 ep_num, u8 ep_type, u8 ep_dir, 3810 + u16 maxp, u16 maxp_mult) 3814 3811 { 3815 3812 if (dbg_perio() || 3816 3813 ep_type == USB_ENDPOINT_XFER_BULK || 3817 3814 ep_type == USB_ENDPOINT_XFER_CONTROL) 3818 3815 dev_vdbg(hsotg->dev, 3819 - "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, mps=%d\n", 3820 - dev_addr, ep_num, ep_dir, ep_type, mps); 3816 + "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, maxp=%d (%d mult)\n", 3817 + dev_addr, ep_num, ep_dir, ep_type, maxp, maxp_mult); 3821 3818 urb->pipe_info.dev_addr = dev_addr; 3822 3819 urb->pipe_info.ep_num = ep_num; 3823 3820 urb->pipe_info.pipe_type = ep_type; 3824 3821 urb->pipe_info.pipe_dir = ep_dir; 3825 - urb->pipe_info.mps = mps; 3822 + urb->pipe_info.maxp = maxp; 3823 + urb->pipe_info.maxp_mult = maxp_mult; 3826 3824 } 3827 3825 3828 3826 /* ··· 3915 3909 dwc2_hcd_is_pipe_in(&urb->pipe_info) ? 3916 3910 "IN" : "OUT"); 3917 3911 dev_dbg(hsotg->dev, 3918 - " Max packet size: %d\n", 3919 - dwc2_hcd_get_mps(&urb->pipe_info)); 3912 + " Max packet size: %d (%d mult)\n", 3913 + dwc2_hcd_get_maxp(&urb->pipe_info), 3914 + dwc2_hcd_get_maxp_mult(&urb->pipe_info)); 3920 3915 dev_dbg(hsotg->dev, 3921 3916 " transfer_buffer: %p\n", 3922 3917 urb->buf); ··· 4517 4510 } 4518 4511 4519 4512 dev_vdbg(hsotg->dev, " Speed: %s\n", speed); 4520 - dev_vdbg(hsotg->dev, " Max packet size: %d\n", 4521 - usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe))); 4513 + dev_vdbg(hsotg->dev, " Max packet size: %d (%d mult)\n", 4514 + usb_endpoint_maxp(&urb->ep->desc), 4515 + usb_endpoint_maxp_mult(&urb->ep->desc)); 4516 + 4522 4517 dev_vdbg(hsotg->dev, " Data buffer length: %d\n", 4523 4518 urb->transfer_buffer_length); 4524 4519 dev_vdbg(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n", ··· 4603 4594 dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe), 4604 4595 usb_pipeendpoint(urb->pipe), ep_type, 4605 4596 usb_pipein(urb->pipe), 4606 - usb_maxpacket(urb->dev, urb->pipe, 4607 - !(usb_pipein(urb->pipe)))); 4597 + usb_endpoint_maxp(&ep->desc), 4598 + usb_endpoint_maxp_mult(&ep->desc)); 4608 4599 4609 4600 buf = urb->transfer_buffer; 4610 4601
+11 -9
drivers/usb/dwc2/hcd.h
··· 171 171 u8 ep_num; 172 172 u8 pipe_type; 173 173 u8 pipe_dir; 174 - u16 mps; 174 + u16 maxp; 175 + u16 maxp_mult; 175 176 }; 176 177 177 178 struct dwc2_hcd_iso_packet_desc { ··· 265 264 * - USB_ENDPOINT_XFER_ISOC 266 265 * @ep_is_in: Endpoint direction 267 266 * @maxp: Value from wMaxPacketSize field of Endpoint Descriptor 267 + * @maxp_mult: Multiplier for maxp 268 268 * @dev_speed: Device speed. One of the following values: 269 269 * - USB_SPEED_LOW 270 270 * - USB_SPEED_FULL ··· 342 340 u8 ep_type; 343 341 u8 ep_is_in; 344 342 u16 maxp; 343 + u16 maxp_mult; 345 344 u8 dev_speed; 346 345 u8 data_toggle; 347 346 u8 ping_state; ··· 506 503 return pipe->pipe_type; 507 504 } 508 505 509 - static inline u16 dwc2_hcd_get_mps(struct dwc2_hcd_pipe_info *pipe) 506 + static inline u16 dwc2_hcd_get_maxp(struct dwc2_hcd_pipe_info *pipe) 510 507 { 511 - return pipe->mps; 508 + return pipe->maxp; 509 + } 510 + 511 + static inline u16 dwc2_hcd_get_maxp_mult(struct dwc2_hcd_pipe_info *pipe) 512 + { 513 + return pipe->maxp_mult; 512 514 } 513 515 514 516 static inline u8 dwc2_hcd_get_dev_addr(struct dwc2_hcd_pipe_info *pipe) ··· 627 619 628 620 static inline bool dbg_perio(void) { return false; } 629 621 #endif 630 - 631 - /* High bandwidth multiplier as encoded in highspeed endpoint descriptors */ 632 - #define dwc2_hb_mult(wmaxpacketsize) (1 + (((wmaxpacketsize) >> 11) & 0x03)) 633 - 634 - /* Packet size for any kind of endpoint descriptor */ 635 - #define dwc2_max_packet(wmaxpacketsize) ((wmaxpacketsize) & 0x07ff) 636 622 637 623 /* 638 624 * Returns true if frame1 index is greater than frame2 index. The comparison
+3 -2
drivers/usb/dwc2/hcd_intr.c
··· 1617 1617 1618 1618 dev_err(hsotg->dev, " Speed: %s\n", speed); 1619 1619 1620 - dev_err(hsotg->dev, " Max packet size: %d\n", 1621 - dwc2_hcd_get_mps(&urb->pipe_info)); 1620 + dev_err(hsotg->dev, " Max packet size: %d (mult %d)\n", 1621 + dwc2_hcd_get_maxp(&urb->pipe_info), 1622 + dwc2_hcd_get_maxp_mult(&urb->pipe_info)); 1622 1623 dev_err(hsotg->dev, " Data buffer length: %d\n", urb->length); 1623 1624 dev_err(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n", 1624 1625 urb->buf, (unsigned long)urb->dma);
+6 -4
drivers/usb/dwc2/hcd_queue.c
··· 708 708 static int dwc2_uframe_schedule_split(struct dwc2_hsotg *hsotg, 709 709 struct dwc2_qh *qh) 710 710 { 711 - int bytecount = dwc2_hb_mult(qh->maxp) * dwc2_max_packet(qh->maxp); 711 + int bytecount = qh->maxp_mult * qh->maxp; 712 712 int ls_search_slice; 713 713 int err = 0; 714 714 int host_interval_in_sched; ··· 1332 1332 u32 max_channel_xfer_size; 1333 1333 int status = 0; 1334 1334 1335 - max_xfer_size = dwc2_max_packet(qh->maxp) * dwc2_hb_mult(qh->maxp); 1335 + max_xfer_size = qh->maxp * qh->maxp_mult; 1336 1336 max_channel_xfer_size = hsotg->params.max_transfer_size; 1337 1337 1338 1338 if (max_xfer_size > max_channel_xfer_size) { ··· 1517 1517 u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT; 1518 1518 bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED && 1519 1519 dev_speed != USB_SPEED_HIGH); 1520 - int maxp = dwc2_hcd_get_mps(&urb->pipe_info); 1521 - int bytecount = dwc2_hb_mult(maxp) * dwc2_max_packet(maxp); 1520 + int maxp = dwc2_hcd_get_maxp(&urb->pipe_info); 1521 + int maxp_mult = dwc2_hcd_get_maxp_mult(&urb->pipe_info); 1522 + int bytecount = maxp_mult * maxp; 1522 1523 char *speed, *type; 1523 1524 1524 1525 /* Initialize QH */ ··· 1532 1531 1533 1532 qh->data_toggle = DWC2_HC_PID_DATA0; 1534 1533 qh->maxp = maxp; 1534 + qh->maxp_mult = maxp_mult; 1535 1535 INIT_LIST_HEAD(&qh->qtd_list); 1536 1536 INIT_LIST_HEAD(&qh->qh_list_entry); 1537 1537
+5
drivers/usb/gadget/udc/fusb300_udc.c
··· 1342 1342 static int fusb300_remove(struct platform_device *pdev) 1343 1343 { 1344 1344 struct fusb300 *fusb300 = platform_get_drvdata(pdev); 1345 + int i; 1345 1346 1346 1347 usb_del_gadget_udc(&fusb300->gadget); 1347 1348 iounmap(fusb300->reg); 1348 1349 free_irq(platform_get_irq(pdev, 0), fusb300); 1349 1350 1350 1351 fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req); 1352 + for (i = 0; i < FUSB300_MAX_NUM_EP; i++) 1353 + kfree(fusb300->ep[i]); 1351 1354 kfree(fusb300); 1352 1355 1353 1356 return 0; ··· 1494 1491 if (fusb300->ep0_req) 1495 1492 fusb300_free_request(&fusb300->ep[0]->ep, 1496 1493 fusb300->ep0_req); 1494 + for (i = 0; i < FUSB300_MAX_NUM_EP; i++) 1495 + kfree(fusb300->ep[i]); 1497 1496 kfree(fusb300); 1498 1497 } 1499 1498 if (reg)
+3 -4
drivers/usb/gadget/udc/lpc32xx_udc.c
··· 937 937 dma_addr_t dma; 938 938 struct lpc32xx_usbd_dd_gad *dd; 939 939 940 - dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( 941 - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); 940 + dd = dma_pool_alloc(udc->dd_cache, GFP_ATOMIC | GFP_DMA, &dma); 942 941 if (dd) 943 942 dd->this_dma = dma; 944 943 ··· 3069 3070 } 3070 3071 3071 3072 udc->udp_baseaddr = devm_ioremap_resource(dev, res); 3072 - if (!udc->udp_baseaddr) { 3073 + if (IS_ERR(udc->udp_baseaddr)) { 3073 3074 dev_err(udc->dev, "IO map failure\n"); 3074 - return -ENOMEM; 3075 + return PTR_ERR(udc->udp_baseaddr); 3075 3076 } 3076 3077 3077 3078 /* Get USB device clock */
+14
drivers/usb/phy/phy-mxs-usb.c
··· 63 63 64 64 #define ANADIG_USB1_CHRG_DETECT_SET 0x1b4 65 65 #define ANADIG_USB1_CHRG_DETECT_CLR 0x1b8 66 + #define ANADIG_USB2_CHRG_DETECT_SET 0x214 66 67 #define ANADIG_USB1_CHRG_DETECT_EN_B BIT(20) 67 68 #define ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B BIT(19) 68 69 #define ANADIG_USB1_CHRG_DETECT_CHK_CONTACT BIT(18) ··· 250 249 251 250 if (mxs_phy->data->flags & MXS_PHY_NEED_IP_FIX) 252 251 writel(BM_USBPHY_IP_FIX, base + HW_USBPHY_IP_SET); 252 + 253 + if (mxs_phy->regmap_anatop) { 254 + unsigned int reg = mxs_phy->port_id ? 255 + ANADIG_USB1_CHRG_DETECT_SET : 256 + ANADIG_USB2_CHRG_DETECT_SET; 257 + /* 258 + * The external charger detector needs to be disabled, 259 + * or the signal at DP will be poor 260 + */ 261 + regmap_write(mxs_phy->regmap_anatop, reg, 262 + ANADIG_USB1_CHRG_DETECT_EN_B | 263 + ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B); 264 + } 253 265 254 266 mxs_phy_tx_init(mxs_phy); 255 267
+6
drivers/usb/serial/option.c
··· 1171 1171 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) }, 1172 1172 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214), 1173 1173 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, 1174 + { USB_DEVICE(TELIT_VENDOR_ID, 0x1260), 1175 + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, 1176 + { USB_DEVICE(TELIT_VENDOR_ID, 0x1261), 1177 + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, 1174 1178 { USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */ 1175 1179 .driver_info = NCTRL(0) | RSVD(1) }, 1176 1180 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */ ··· 1776 1772 { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E), 1777 1773 .driver_info = RSVD(5) | RSVD(6) }, 1778 1774 { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ 1775 + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */ 1776 + .driver_info = RSVD(7) }, 1779 1777 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), 1780 1778 .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, 1781 1779 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
+1
drivers/usb/serial/pl2303.c
··· 106 106 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, 107 107 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, 108 108 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) }, 109 + { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) }, 109 110 { } /* Terminating entry */ 110 111 }; 111 112
+3
drivers/usb/serial/pl2303.h
··· 155 155 #define SMART_VENDOR_ID 0x0b8c 156 156 #define SMART_PRODUCT_ID 0x2303 157 157 158 + /* Allied Telesis VT-Kit3 */ 159 + #define AT_VENDOR_ID 0x0caa 160 + #define AT_VTKIT3_PRODUCT_ID 0x3001
+5
drivers/usb/storage/unusual_realtek.h
··· 17 17 "USB Card Reader", 18 18 USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0), 19 19 20 + UNUSUAL_DEV(0x0bda, 0x0153, 0x0000, 0x9999, 21 + "Realtek", 22 + "USB Card Reader", 23 + USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0), 24 + 20 25 UNUSUAL_DEV(0x0bda, 0x0158, 0x0000, 0x9999, 21 26 "Realtek", 22 27 "USB Card Reader",
+1 -1
drivers/usb/typec/bus.c
··· 192 192 const struct typec_altmode * 193 193 typec_altmode_get_partner(struct typec_altmode *adev) 194 194 { 195 - return &to_altmode(adev)->partner->adev; 195 + return adev ? &to_altmode(adev)->partner->adev : NULL; 196 196 } 197 197 EXPORT_SYMBOL_GPL(typec_altmode_get_partner); 198 198
+4 -2
drivers/usb/typec/ucsi/ucsi_ccg.c
··· 862 862 863 863 not_signed_fw: 864 864 wr_buf = kzalloc(CCG4_ROW_SIZE + 4, GFP_KERNEL); 865 - if (!wr_buf) 866 - return -ENOMEM; 865 + if (!wr_buf) { 866 + err = -ENOMEM; 867 + goto release_fw; 868 + } 867 869 868 870 err = ccg_cmd_enter_flashing(uc); 869 871 if (err)