Skip to content

Commit ff39074

Browse files
committed
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
2 parents fa1827d + 5f54a85 commit ff39074

File tree

15 files changed

+105
-45
lines changed

15 files changed

+105
-45
lines changed

drivers/usb/core/quirks.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ static const struct usb_device_id usb_quirk_list[] = {
215215
/* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */
216216
{ USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
217217

218+
/* Logitech HD Webcam C270 */
219+
{ USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
220+
218221
/* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
219222
{ USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
220223
{ USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },

drivers/usb/dwc2/gadget.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -835,19 +835,22 @@ static void dwc2_gadget_fill_nonisoc_xfer_ddma_one(struct dwc2_hsotg_ep *hs_ep,
835835
* with corresponding information based on transfer data.
836836
*/
837837
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,
840839
unsigned int len)
841840
{
841+
struct usb_request *ureq = NULL;
842842
struct dwc2_dma_desc *desc = hs_ep->desc_list;
843843
struct scatterlist *sg;
844844
int i;
845845
u8 desc_count = 0;
846846

847+
if (hs_ep->req)
848+
ureq = &hs_ep->req->req;
849+
847850
/* non-DMA sg buffer */
848-
if (!ureq->num_sgs) {
851+
if (!ureq || !ureq->num_sgs) {
849852
dwc2_gadget_fill_nonisoc_xfer_ddma_one(hs_ep, &desc,
850-
ureq->dma + offset, len, true);
853+
dma_buff, len, true);
851854
return;
852855
}
853856

@@ -1135,7 +1138,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
11351138
offset = ureq->actual;
11361139

11371140
/* Fill DDMA chain entries */
1138-
dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, ureq, offset,
1141+
dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, ureq->dma + offset,
11391142
length);
11401143

11411144
/* write descriptor chain address to control register */
@@ -2037,12 +2040,13 @@ static void dwc2_hsotg_program_zlp(struct dwc2_hsotg *hsotg,
20372040
dev_dbg(hsotg->dev, "Receiving zero-length packet on ep%d\n",
20382041
index);
20392042
if (using_desc_dma(hsotg)) {
2043+
/* Not specific buffer needed for ep0 ZLP */
2044+
dma_addr_t dma = hs_ep->desc_list_dma;
2045+
20402046
if (!index)
20412047
dwc2_gadget_set_ep0_desc_chain(hsotg, hs_ep);
20422048

2043-
/* Not specific buffer needed for ep0 ZLP */
2044-
dwc2_gadget_fill_nonisoc_xfer_ddma_one(hs_ep, &hs_ep->desc_list,
2045-
hs_ep->desc_list_dma, 0, true);
2049+
dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, dma, 0);
20462050
} else {
20472051
dwc2_writel(hsotg, DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |
20482052
DXEPTSIZ_XFERSIZE(0),
@@ -2417,6 +2421,10 @@ static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum)
24172421
dwc2_gadget_incr_frame_num(hs_ep);
24182422
}
24192423

2424+
/* Set actual frame number for completed transfers */
2425+
if (!using_desc_dma(hsotg) && hs_ep->isochronous)
2426+
req->frame_number = hsotg->frame_number;
2427+
24202428
dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, result);
24212429
}
24222430

drivers/usb/dwc2/hcd.c

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2480,8 +2480,10 @@ static void dwc2_free_dma_aligned_buffer(struct urb *urb)
24802480
return;
24812481

24822482
/* 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));
24852487

24862488
if (usb_urb_dir_in(urb)) {
24872489
if (usb_pipeisoc(urb->pipe))
@@ -2513,6 +2515,7 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
25132515
* DMA
25142516
*/
25152517
kmalloc_size = urb->transfer_buffer_length +
2518+
(dma_get_cache_alignment() - 1) +
25162519
sizeof(urb->transfer_buffer);
25172520

25182521
kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
@@ -2523,7 +2526,8 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
25232526
* Position value of original urb->transfer_buffer pointer to the end
25242527
* of allocation for later referencing
25252528
*/
2526-
memcpy(kmalloc_ptr + urb->transfer_buffer_length,
2529+
memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length,
2530+
dma_get_cache_alignment()),
25272531
&urb->transfer_buffer, sizeof(urb->transfer_buffer));
25282532

25292533
if (usb_urb_dir_out(urb))
@@ -2608,7 +2612,7 @@ static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
26082612
chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
26092613
chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
26102614
chan->speed = qh->dev_speed;
2611-
chan->max_packet = dwc2_max_packet(qh->maxp);
2615+
chan->max_packet = qh->maxp;
26122616

26132617
chan->xfer_started = 0;
26142618
chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS;
@@ -2686,7 +2690,7 @@ static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
26862690
* This value may be modified when the transfer is started
26872691
* to reflect the actual transfer length
26882692
*/
2689-
chan->multi_count = dwc2_hb_mult(qh->maxp);
2693+
chan->multi_count = qh->maxp_mult;
26902694

26912695
if (hsotg->params.dma_desc_enable) {
26922696
chan->desc_list_addr = qh->desc_list_dma;
@@ -3806,19 +3810,21 @@ static struct dwc2_hcd_urb *dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg,
38063810

38073811
static void dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg,
38083812
struct dwc2_hcd_urb *urb, u8 dev_addr,
3809-
u8 ep_num, u8 ep_type, u8 ep_dir, u16 mps)
3813+
u8 ep_num, u8 ep_type, u8 ep_dir,
3814+
u16 maxp, u16 maxp_mult)
38103815
{
38113816
if (dbg_perio() ||
38123817
ep_type == USB_ENDPOINT_XFER_BULK ||
38133818
ep_type == USB_ENDPOINT_XFER_CONTROL)
38143819
dev_vdbg(hsotg->dev,
3815-
"addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, mps=%d\n",
3816-
dev_addr, ep_num, ep_dir, ep_type, mps);
3820+
"addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, maxp=%d (%d mult)\n",
3821+
dev_addr, ep_num, ep_dir, ep_type, maxp, maxp_mult);
38173822
urb->pipe_info.dev_addr = dev_addr;
38183823
urb->pipe_info.ep_num = ep_num;
38193824
urb->pipe_info.pipe_type = ep_type;
38203825
urb->pipe_info.pipe_dir = ep_dir;
3821-
urb->pipe_info.mps = mps;
3826+
urb->pipe_info.maxp = maxp;
3827+
urb->pipe_info.maxp_mult = maxp_mult;
38223828
}
38233829

38243830
/*
@@ -3909,8 +3915,9 @@ void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
39093915
dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
39103916
"IN" : "OUT");
39113917
dev_dbg(hsotg->dev,
3912-
" Max packet size: %d\n",
3913-
dwc2_hcd_get_mps(&urb->pipe_info));
3918+
" Max packet size: %d (%d mult)\n",
3919+
dwc2_hcd_get_maxp(&urb->pipe_info),
3920+
dwc2_hcd_get_maxp_mult(&urb->pipe_info));
39143921
dev_dbg(hsotg->dev,
39153922
" transfer_buffer: %p\n",
39163923
urb->buf);
@@ -4510,8 +4517,10 @@ static void dwc2_dump_urb_info(struct usb_hcd *hcd, struct urb *urb,
45104517
}
45114518

45124519
dev_vdbg(hsotg->dev, " Speed: %s\n", speed);
4513-
dev_vdbg(hsotg->dev, " Max packet size: %d\n",
4514-
usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)));
4520+
dev_vdbg(hsotg->dev, " Max packet size: %d (%d mult)\n",
4521+
usb_endpoint_maxp(&urb->ep->desc),
4522+
usb_endpoint_maxp_mult(&urb->ep->desc));
4523+
45154524
dev_vdbg(hsotg->dev, " Data buffer length: %d\n",
45164525
urb->transfer_buffer_length);
45174526
dev_vdbg(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n",
@@ -4594,8 +4603,8 @@ static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
45944603
dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe),
45954604
usb_pipeendpoint(urb->pipe), ep_type,
45964605
usb_pipein(urb->pipe),
4597-
usb_maxpacket(urb->dev, urb->pipe,
4598-
!(usb_pipein(urb->pipe))));
4606+
usb_endpoint_maxp(&ep->desc),
4607+
usb_endpoint_maxp_mult(&ep->desc));
45994608

46004609
buf = urb->transfer_buffer;
46014610

drivers/usb/dwc2/hcd.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ struct dwc2_hcd_pipe_info {
171171
u8 ep_num;
172172
u8 pipe_type;
173173
u8 pipe_dir;
174-
u16 mps;
174+
u16 maxp;
175+
u16 maxp_mult;
175176
};
176177

177178
struct dwc2_hcd_iso_packet_desc {
@@ -264,6 +265,7 @@ struct dwc2_hs_transfer_time {
264265
* - USB_ENDPOINT_XFER_ISOC
265266
* @ep_is_in: Endpoint direction
266267
* @maxp: Value from wMaxPacketSize field of Endpoint Descriptor
268+
* @maxp_mult: Multiplier for maxp
267269
* @dev_speed: Device speed. One of the following values:
268270
* - USB_SPEED_LOW
269271
* - USB_SPEED_FULL
@@ -340,6 +342,7 @@ struct dwc2_qh {
340342
u8 ep_type;
341343
u8 ep_is_in;
342344
u16 maxp;
345+
u16 maxp_mult;
343346
u8 dev_speed;
344347
u8 data_toggle;
345348
u8 ping_state;
@@ -503,9 +506,14 @@ static inline u8 dwc2_hcd_get_pipe_type(struct dwc2_hcd_pipe_info *pipe)
503506
return pipe->pipe_type;
504507
}
505508

506-
static inline u16 dwc2_hcd_get_mps(struct dwc2_hcd_pipe_info *pipe)
509+
static inline u16 dwc2_hcd_get_maxp(struct dwc2_hcd_pipe_info *pipe)
510+
{
511+
return pipe->maxp;
512+
}
513+
514+
static inline u16 dwc2_hcd_get_maxp_mult(struct dwc2_hcd_pipe_info *pipe)
507515
{
508-
return pipe->mps;
516+
return pipe->maxp_mult;
509517
}
510518

511519
static inline u8 dwc2_hcd_get_dev_addr(struct dwc2_hcd_pipe_info *pipe)
@@ -620,12 +628,6 @@ static inline bool dbg_urb(struct urb *urb)
620628
static inline bool dbg_perio(void) { return false; }
621629
#endif
622630

623-
/* High bandwidth multiplier as encoded in highspeed endpoint descriptors */
624-
#define dwc2_hb_mult(wmaxpacketsize) (1 + (((wmaxpacketsize) >> 11) & 0x03))
625-
626-
/* Packet size for any kind of endpoint descriptor */
627-
#define dwc2_max_packet(wmaxpacketsize) ((wmaxpacketsize) & 0x07ff)
628-
629631
/*
630632
* Returns true if frame1 index is greater than frame2 index. The comparison
631633
* is done modulo FRLISTEN_64_SIZE. This accounts for the rollover of the

drivers/usb/dwc2/hcd_intr.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,8 +1617,9 @@ static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg,
16171617

16181618
dev_err(hsotg->dev, " Speed: %s\n", speed);
16191619

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));
16221623
dev_err(hsotg->dev, " Data buffer length: %d\n", urb->length);
16231624
dev_err(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n",
16241625
urb->buf, (unsigned long)urb->dma);

drivers/usb/dwc2/hcd_queue.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ static void dwc2_hs_pmap_unschedule(struct dwc2_hsotg *hsotg,
708708
static int dwc2_uframe_schedule_split(struct dwc2_hsotg *hsotg,
709709
struct dwc2_qh *qh)
710710
{
711-
int bytecount = dwc2_hb_mult(qh->maxp) * dwc2_max_packet(qh->maxp);
711+
int bytecount = qh->maxp_mult * qh->maxp;
712712
int ls_search_slice;
713713
int err = 0;
714714
int host_interval_in_sched;
@@ -1332,7 +1332,7 @@ static int dwc2_check_max_xfer_size(struct dwc2_hsotg *hsotg,
13321332
u32 max_channel_xfer_size;
13331333
int status = 0;
13341334

1335-
max_xfer_size = dwc2_max_packet(qh->maxp) * dwc2_hb_mult(qh->maxp);
1335+
max_xfer_size = qh->maxp * qh->maxp_mult;
13361336
max_channel_xfer_size = hsotg->params.max_transfer_size;
13371337

13381338
if (max_xfer_size > max_channel_xfer_size) {
@@ -1517,8 +1517,9 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
15171517
u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
15181518
bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED &&
15191519
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;
15221523
char *speed, *type;
15231524

15241525
/* Initialize QH */
@@ -1531,6 +1532,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
15311532

15321533
qh->data_toggle = DWC2_HC_PID_DATA0;
15331534
qh->maxp = maxp;
1535+
qh->maxp_mult = maxp_mult;
15341536
INIT_LIST_HEAD(&qh->qtd_list);
15351537
INIT_LIST_HEAD(&qh->qh_list_entry);
15361538

drivers/usb/gadget/udc/fusb300_udc.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,12 +1342,15 @@ static const struct usb_gadget_ops fusb300_gadget_ops = {
13421342
static int fusb300_remove(struct platform_device *pdev)
13431343
{
13441344
struct fusb300 *fusb300 = platform_get_drvdata(pdev);
1345+
int i;
13451346

13461347
usb_del_gadget_udc(&fusb300->gadget);
13471348
iounmap(fusb300->reg);
13481349
free_irq(platform_get_irq(pdev, 0), fusb300);
13491350

13501351
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]);
13511354
kfree(fusb300);
13521355

13531356
return 0;
@@ -1491,6 +1494,8 @@ static int fusb300_probe(struct platform_device *pdev)
14911494
if (fusb300->ep0_req)
14921495
fusb300_free_request(&fusb300->ep[0]->ep,
14931496
fusb300->ep0_req);
1497+
for (i = 0; i < FUSB300_MAX_NUM_EP; i++)
1498+
kfree(fusb300->ep[i]);
14941499
kfree(fusb300);
14951500
}
14961501
if (reg)

drivers/usb/gadget/udc/lpc32xx_udc.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -937,8 +937,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc)
937937
dma_addr_t dma;
938938
struct lpc32xx_usbd_dd_gad *dd;
939939

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);
942941
if (dd)
943942
dd->this_dma = dma;
944943

@@ -3070,9 +3069,9 @@ static int lpc32xx_udc_probe(struct platform_device *pdev)
30703069
}
30713070

30723071
udc->udp_baseaddr = devm_ioremap_resource(dev, res);
3073-
if (!udc->udp_baseaddr) {
3072+
if (IS_ERR(udc->udp_baseaddr)) {
30743073
dev_err(udc->dev, "IO map failure\n");
3075-
return -ENOMEM;
3074+
return PTR_ERR(udc->udp_baseaddr);
30763075
}
30773076

30783077
/* Get USB device clock */

drivers/usb/phy/phy-mxs-usb.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363

6464
#define ANADIG_USB1_CHRG_DETECT_SET 0x1b4
6565
#define ANADIG_USB1_CHRG_DETECT_CLR 0x1b8
66+
#define ANADIG_USB2_CHRG_DETECT_SET 0x214
6667
#define ANADIG_USB1_CHRG_DETECT_EN_B BIT(20)
6768
#define ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B BIT(19)
6869
#define ANADIG_USB1_CHRG_DETECT_CHK_CONTACT BIT(18)
@@ -250,6 +251,19 @@ static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
250251
if (mxs_phy->data->flags & MXS_PHY_NEED_IP_FIX)
251252
writel(BM_USBPHY_IP_FIX, base + HW_USBPHY_IP_SET);
252253

254+
if (mxs_phy->regmap_anatop) {
255+
unsigned int reg = mxs_phy->port_id ?
256+
ANADIG_USB1_CHRG_DETECT_SET :
257+
ANADIG_USB2_CHRG_DETECT_SET;
258+
/*
259+
* The external charger detector needs to be disabled,
260+
* or the signal at DP will be poor
261+
*/
262+
regmap_write(mxs_phy->regmap_anatop, reg,
263+
ANADIG_USB1_CHRG_DETECT_EN_B |
264+
ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B);
265+
}
266+
253267
mxs_phy_tx_init(mxs_phy);
254268

255269
return 0;

drivers/usb/serial/option.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,10 @@ static const struct usb_device_id option_ids[] = {
11711171
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
11721172
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
11731173
.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) },
11741178
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */
11751179
.driver_info = NCTRL(0) | RSVD(1) },
11761180
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */
@@ -1772,6 +1776,8 @@ static const struct usb_device_id option_ids[] = {
17721776
{ USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E),
17731777
.driver_info = RSVD(5) | RSVD(6) },
17741778
{ USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */
1779+
{ USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */
1780+
.driver_info = RSVD(7) },
17751781
{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
17761782
.driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) },
17771783
{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),

0 commit comments

Comments
 (0)