]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2019 09:52:50 +0000 (11:52 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2019 09:52:50 +0000 (11:52 +0200)
added patches:
usb-dwc2-fix-dma-cache-alignment-issues.patch
usb-dwc2-host-fix-wmaxpacketsize-handling-fix-webcam-regression.patch
usb-fix-chipmunk-like-voice-when-using-logitech-c270-for-recording-audio.patch
usb-serial-option-add-support-for-simcom-sim7500-sim7600-rndis-mode.patch
usb-serial-option-add-telit-0x1260-and-0x1261-compositions.patch
usb-serial-pl2303-add-allied-telesis-vt-kit3.patch
usb-usb-storage-add-new-id-to-ums-realtek.patch

queue-4.19/series
queue-4.19/usb-dwc2-fix-dma-cache-alignment-issues.patch [new file with mode: 0644]
queue-4.19/usb-dwc2-host-fix-wmaxpacketsize-handling-fix-webcam-regression.patch [new file with mode: 0644]
queue-4.19/usb-fix-chipmunk-like-voice-when-using-logitech-c270-for-recording-audio.patch [new file with mode: 0644]
queue-4.19/usb-serial-option-add-support-for-simcom-sim7500-sim7600-rndis-mode.patch [new file with mode: 0644]
queue-4.19/usb-serial-option-add-telit-0x1260-and-0x1261-compositions.patch [new file with mode: 0644]
queue-4.19/usb-serial-pl2303-add-allied-telesis-vt-kit3.patch [new file with mode: 0644]
queue-4.19/usb-usb-storage-add-new-id-to-ums-realtek.patch [new file with mode: 0644]

index 3da7f28f294912115c2a83c653d721f8d4d761f7..7f7fafc86b64e6697196d2313b1385ddffd261e3 100644 (file)
@@ -56,3 +56,10 @@ kvm-s390-fix-memory-slot-handling-for-kvm_set_user_m.patch
 tools-kvm_stat-fix-fields-filter-for-child-events.patch
 drm-vmwgfx-integer-underflow-in-vmw_cmd_dx_set_shader-leading-to-an-invalid-read.patch
 drm-vmwgfx-null-pointer-dereference-from-vmw_cmd_dx_view_define.patch
+usb-dwc2-fix-dma-cache-alignment-issues.patch
+usb-dwc2-host-fix-wmaxpacketsize-handling-fix-webcam-regression.patch
+usb-fix-chipmunk-like-voice-when-using-logitech-c270-for-recording-audio.patch
+usb-usb-storage-add-new-id-to-ums-realtek.patch
+usb-serial-pl2303-add-allied-telesis-vt-kit3.patch
+usb-serial-option-add-support-for-simcom-sim7500-sim7600-rndis-mode.patch
+usb-serial-option-add-telit-0x1260-and-0x1261-compositions.patch
diff --git a/queue-4.19/usb-dwc2-fix-dma-cache-alignment-issues.patch b/queue-4.19/usb-dwc2-fix-dma-cache-alignment-issues.patch
new file mode 100644 (file)
index 0000000..021e0d3
--- /dev/null
@@ -0,0 +1,62 @@
+From 4a4863bf2e7932e584a3a462d3c6daf891142ddc Mon Sep 17 00:00:00 2001
+From: Martin Schiller <ms@dev.tdt.de>
+Date: Mon, 18 Feb 2019 07:37:30 +0100
+Subject: usb: dwc2: Fix DMA cache alignment issues
+
+From: Martin Schiller <ms@dev.tdt.de>
+
+commit 4a4863bf2e7932e584a3a462d3c6daf891142ddc upstream.
+
+Insert a padding between data and the stored_xfer_buffer pointer to
+ensure they are not on the same cache line.
+
+Otherwise, the stored_xfer_buffer gets corrupted for IN URBs on
+non-cache-coherent systems. (In my case: Lantiq xRX200 MIPS)
+
+Fixes: 3bc04e28a030 ("usb: dwc2: host: Get aligned DMA in a more supported way")
+Fixes: 56406e017a88 ("usb: dwc2: Fix DMA alignment to start at allocated boundary")
+Cc: <stable@vger.kernel.org>
+Tested-by: Douglas Anderson <dianders@chromium.org>
+Reviewed-by: Douglas Anderson <dianders@chromium.org>
+Acked-by: Minas Harutyunyan <hminas@synopsys.com>
+Signed-off-by: Martin Schiller <ms@dev.tdt.de>
+Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/dwc2/hcd.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -2673,8 +2673,10 @@ static void dwc2_free_dma_aligned_buffer
+               return;
+       /* Restore urb->transfer_buffer from the end of the allocated area */
+-      memcpy(&stored_xfer_buffer, urb->transfer_buffer +
+-             urb->transfer_buffer_length, sizeof(urb->transfer_buffer));
++      memcpy(&stored_xfer_buffer,
++             PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length,
++                       dma_get_cache_alignment()),
++             sizeof(urb->transfer_buffer));
+       if (usb_urb_dir_in(urb)) {
+               if (usb_pipeisoc(urb->pipe))
+@@ -2706,6 +2708,7 @@ static int dwc2_alloc_dma_aligned_buffer
+        * DMA
+        */
+       kmalloc_size = urb->transfer_buffer_length +
++              (dma_get_cache_alignment() - 1) +
+               sizeof(urb->transfer_buffer);
+       kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
+@@ -2716,7 +2719,8 @@ static int dwc2_alloc_dma_aligned_buffer
+        * Position value of original urb->transfer_buffer pointer to the end
+        * of allocation for later referencing
+        */
+-      memcpy(kmalloc_ptr + urb->transfer_buffer_length,
++      memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length,
++                       dma_get_cache_alignment()),
+              &urb->transfer_buffer, sizeof(urb->transfer_buffer));
+       if (usb_urb_dir_out(urb))
diff --git a/queue-4.19/usb-dwc2-host-fix-wmaxpacketsize-handling-fix-webcam-regression.patch b/queue-4.19/usb-dwc2-host-fix-wmaxpacketsize-handling-fix-webcam-regression.patch
new file mode 100644 (file)
index 0000000..ea40425
--- /dev/null
@@ -0,0 +1,240 @@
+From babd183915e91a64e976b9e8ab682bb56624df76 Mon Sep 17 00:00:00 2001
+From: Douglas Anderson <dianders@chromium.org>
+Date: Fri, 31 May 2019 13:04:12 -0700
+Subject: usb: dwc2: host: Fix wMaxPacketSize handling (fix webcam regression)
+
+From: Douglas Anderson <dianders@chromium.org>
+
+commit babd183915e91a64e976b9e8ab682bb56624df76 upstream.
+
+In commit abb621844f6a ("usb: ch9: make usb_endpoint_maxp() return
+only packet size") the API to usb_endpoint_maxp() changed.  It used to
+just return wMaxPacketSize but after that commit it returned
+wMaxPacketSize with the high bits (the multiplier) masked off.  If you
+wanted to get the multiplier it was now up to your code to call the
+new usb_endpoint_maxp_mult() which was introduced in
+commit 541b6fe63023 ("usb: add helper to extract bits 12:11 of
+wMaxPacketSize").
+
+Prior to the API change most host drivers were updated, but no update
+was made to dwc2.  Presumably it was assumed that dwc2 was too
+simplistic to use the multiplier and thus just didn't support a
+certain class of USB devices.  However, it turns out that dwc2 did use
+the multiplier and many devices using it were working quite nicely.
+That means that many USB devices have been broken since the API
+change.  One such device is a Logitech HD Pro Webcam C920.
+
+Specifically, though dwc2 didn't directly call usb_endpoint_maxp(), it
+did call usb_maxpacket() which in turn called usb_endpoint_maxp().
+
+Let's update dwc2 to work properly with the new API.
+
+Fixes: abb621844f6a ("usb: ch9: make usb_endpoint_maxp() return only packet size")
+Cc: stable@vger.kernel.org
+Acked-by: Minas Harutyunyan <hminas@synopsys.com>
+Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
+Signed-off-by: Douglas Anderson <dianders@chromium.org>
+Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/dwc2/hcd.c       |   29 +++++++++++++++++------------
+ drivers/usb/dwc2/hcd.h       |   20 +++++++++++---------
+ drivers/usb/dwc2/hcd_intr.c  |    5 +++--
+ drivers/usb/dwc2/hcd_queue.c |   10 ++++++----
+ 4 files changed, 37 insertions(+), 27 deletions(-)
+
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -2805,7 +2805,7 @@ static int dwc2_assign_and_init_hc(struc
+       chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
+       chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
+       chan->speed = qh->dev_speed;
+-      chan->max_packet = dwc2_max_packet(qh->maxp);
++      chan->max_packet = qh->maxp;
+       chan->xfer_started = 0;
+       chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS;
+@@ -2883,7 +2883,7 @@ static int dwc2_assign_and_init_hc(struc
+                * This value may be modified when the transfer is started
+                * to reflect the actual transfer length
+                */
+-              chan->multi_count = dwc2_hb_mult(qh->maxp);
++              chan->multi_count = qh->maxp_mult;
+       if (hsotg->params.dma_desc_enable) {
+               chan->desc_list_addr = qh->desc_list_dma;
+@@ -3995,19 +3995,21 @@ static struct dwc2_hcd_urb *dwc2_hcd_urb
+ static void dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg,
+                                     struct dwc2_hcd_urb *urb, u8 dev_addr,
+-                                    u8 ep_num, u8 ep_type, u8 ep_dir, u16 mps)
++                                    u8 ep_num, u8 ep_type, u8 ep_dir,
++                                    u16 maxp, u16 maxp_mult)
+ {
+       if (dbg_perio() ||
+           ep_type == USB_ENDPOINT_XFER_BULK ||
+           ep_type == USB_ENDPOINT_XFER_CONTROL)
+               dev_vdbg(hsotg->dev,
+-                       "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, mps=%d\n",
+-                       dev_addr, ep_num, ep_dir, ep_type, mps);
++                       "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, maxp=%d (%d mult)\n",
++                       dev_addr, ep_num, ep_dir, ep_type, maxp, maxp_mult);
+       urb->pipe_info.dev_addr = dev_addr;
+       urb->pipe_info.ep_num = ep_num;
+       urb->pipe_info.pipe_type = ep_type;
+       urb->pipe_info.pipe_dir = ep_dir;
+-      urb->pipe_info.mps = mps;
++      urb->pipe_info.maxp = maxp;
++      urb->pipe_info.maxp_mult = maxp_mult;
+ }
+ /*
+@@ -4098,8 +4100,9 @@ void dwc2_hcd_dump_state(struct dwc2_hso
+                                       dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
+                                       "IN" : "OUT");
+                               dev_dbg(hsotg->dev,
+-                                      "      Max packet size: %d\n",
+-                                      dwc2_hcd_get_mps(&urb->pipe_info));
++                                      "      Max packet size: %d (%d mult)\n",
++                                      dwc2_hcd_get_maxp(&urb->pipe_info),
++                                      dwc2_hcd_get_maxp_mult(&urb->pipe_info));
+                               dev_dbg(hsotg->dev,
+                                       "      transfer_buffer: %p\n",
+                                       urb->buf);
+@@ -4657,8 +4660,10 @@ static void dwc2_dump_urb_info(struct us
+       }
+       dev_vdbg(hsotg->dev, "  Speed: %s\n", speed);
+-      dev_vdbg(hsotg->dev, "  Max packet size: %d\n",
+-               usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)));
++      dev_vdbg(hsotg->dev, "  Max packet size: %d (%d mult)\n",
++               usb_endpoint_maxp(&urb->ep->desc),
++               usb_endpoint_maxp_mult(&urb->ep->desc));
++
+       dev_vdbg(hsotg->dev, "  Data buffer length: %d\n",
+                urb->transfer_buffer_length);
+       dev_vdbg(hsotg->dev, "  Transfer buffer: %p, Transfer DMA: %08lx\n",
+@@ -4741,8 +4746,8 @@ static int _dwc2_hcd_urb_enqueue(struct
+       dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe),
+                                 usb_pipeendpoint(urb->pipe), ep_type,
+                                 usb_pipein(urb->pipe),
+-                                usb_maxpacket(urb->dev, urb->pipe,
+-                                              !(usb_pipein(urb->pipe))));
++                                usb_endpoint_maxp(&ep->desc),
++                                usb_endpoint_maxp_mult(&ep->desc));
+       buf = urb->transfer_buffer;
+--- a/drivers/usb/dwc2/hcd.h
++++ b/drivers/usb/dwc2/hcd.h
+@@ -171,7 +171,8 @@ struct dwc2_hcd_pipe_info {
+       u8 ep_num;
+       u8 pipe_type;
+       u8 pipe_dir;
+-      u16 mps;
++      u16 maxp;
++      u16 maxp_mult;
+ };
+ struct dwc2_hcd_iso_packet_desc {
+@@ -264,6 +265,7 @@ struct dwc2_hs_transfer_time {
+  *                       - USB_ENDPOINT_XFER_ISOC
+  * @ep_is_in:           Endpoint direction
+  * @maxp:               Value from wMaxPacketSize field of Endpoint Descriptor
++ * @maxp_mult:          Multiplier for maxp
+  * @dev_speed:          Device speed. One of the following values:
+  *                       - USB_SPEED_LOW
+  *                       - USB_SPEED_FULL
+@@ -340,6 +342,7 @@ struct dwc2_qh {
+       u8 ep_type;
+       u8 ep_is_in;
+       u16 maxp;
++      u16 maxp_mult;
+       u8 dev_speed;
+       u8 data_toggle;
+       u8 ping_state;
+@@ -503,9 +506,14 @@ static inline u8 dwc2_hcd_get_pipe_type(
+       return pipe->pipe_type;
+ }
+-static inline u16 dwc2_hcd_get_mps(struct dwc2_hcd_pipe_info *pipe)
++static inline u16 dwc2_hcd_get_maxp(struct dwc2_hcd_pipe_info *pipe)
++{
++      return pipe->maxp;
++}
++
++static inline u16 dwc2_hcd_get_maxp_mult(struct dwc2_hcd_pipe_info *pipe)
+ {
+-      return pipe->mps;
++      return pipe->maxp_mult;
+ }
+ 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 *u
+ static inline bool dbg_perio(void) { return false; }
+ #endif
+-/* High bandwidth multiplier as encoded in highspeed endpoint descriptors */
+-#define dwc2_hb_mult(wmaxpacketsize) (1 + (((wmaxpacketsize) >> 11) & 0x03))
+-
+-/* Packet size for any kind of endpoint descriptor */
+-#define dwc2_max_packet(wmaxpacketsize) ((wmaxpacketsize) & 0x07ff)
+-
+ /*
+  * Returns true if frame1 index is greater than frame2 index. The comparison
+  * is done modulo FRLISTEN_64_SIZE. This accounts for the rollover of the
+--- a/drivers/usb/dwc2/hcd_intr.c
++++ b/drivers/usb/dwc2/hcd_intr.c
+@@ -1617,8 +1617,9 @@ static void dwc2_hc_ahberr_intr(struct d
+       dev_err(hsotg->dev, "  Speed: %s\n", speed);
+-      dev_err(hsotg->dev, "  Max packet size: %d\n",
+-              dwc2_hcd_get_mps(&urb->pipe_info));
++      dev_err(hsotg->dev, "  Max packet size: %d (mult %d)\n",
++              dwc2_hcd_get_maxp(&urb->pipe_info),
++              dwc2_hcd_get_maxp_mult(&urb->pipe_info));
+       dev_err(hsotg->dev, "  Data buffer length: %d\n", urb->length);
+       dev_err(hsotg->dev, "  Transfer buffer: %p, Transfer DMA: %08lx\n",
+               urb->buf, (unsigned long)urb->dma);
+--- a/drivers/usb/dwc2/hcd_queue.c
++++ b/drivers/usb/dwc2/hcd_queue.c
+@@ -708,7 +708,7 @@ static void dwc2_hs_pmap_unschedule(stru
+ static int dwc2_uframe_schedule_split(struct dwc2_hsotg *hsotg,
+                                     struct dwc2_qh *qh)
+ {
+-      int bytecount = dwc2_hb_mult(qh->maxp) * dwc2_max_packet(qh->maxp);
++      int bytecount = qh->maxp_mult * qh->maxp;
+       int ls_search_slice;
+       int err = 0;
+       int host_interval_in_sched;
+@@ -1332,7 +1332,7 @@ static int dwc2_check_max_xfer_size(stru
+       u32 max_channel_xfer_size;
+       int status = 0;
+-      max_xfer_size = dwc2_max_packet(qh->maxp) * dwc2_hb_mult(qh->maxp);
++      max_xfer_size = qh->maxp * qh->maxp_mult;
+       max_channel_xfer_size = hsotg->params.max_transfer_size;
+       if (max_xfer_size > max_channel_xfer_size) {
+@@ -1517,8 +1517,9 @@ static void dwc2_qh_init(struct dwc2_hso
+       u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
+       bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED &&
+                        dev_speed != USB_SPEED_HIGH);
+-      int maxp = dwc2_hcd_get_mps(&urb->pipe_info);
+-      int bytecount = dwc2_hb_mult(maxp) * dwc2_max_packet(maxp);
++      int maxp = dwc2_hcd_get_maxp(&urb->pipe_info);
++      int maxp_mult = dwc2_hcd_get_maxp_mult(&urb->pipe_info);
++      int bytecount = maxp_mult * maxp;
+       char *speed, *type;
+       /* Initialize QH */
+@@ -1531,6 +1532,7 @@ static void dwc2_qh_init(struct dwc2_hso
+       qh->data_toggle = DWC2_HC_PID_DATA0;
+       qh->maxp = maxp;
++      qh->maxp_mult = maxp_mult;
+       INIT_LIST_HEAD(&qh->qtd_list);
+       INIT_LIST_HEAD(&qh->qh_list_entry);
diff --git a/queue-4.19/usb-fix-chipmunk-like-voice-when-using-logitech-c270-for-recording-audio.patch b/queue-4.19/usb-fix-chipmunk-like-voice-when-using-logitech-c270-for-recording-audio.patch
new file mode 100644 (file)
index 0000000..44ab3ad
--- /dev/null
@@ -0,0 +1,37 @@
+From bd21f0222adab64974b7d1b4b8c7ce6b23e9ea4d Mon Sep 17 00:00:00 2001
+From: Marco Zatta <marco@zatta.me>
+Date: Sat, 1 Jun 2019 09:52:57 +0200
+Subject: USB: Fix chipmunk-like voice when using Logitech C270 for recording audio.
+
+From: Marco Zatta <marco@zatta.me>
+
+commit bd21f0222adab64974b7d1b4b8c7ce6b23e9ea4d upstream.
+
+This patch fixes the chipmunk-like voice that manifets randomly when
+using the integrated mic of the Logitech Webcam HD C270.
+
+The issue was solved initially for this device by commit 2394d67e446b
+("USB: add RESET_RESUME for webcams shown to be quirky") but it was then
+reintroduced by e387ef5c47dd ("usb: Add USB_QUIRK_RESET_RESUME for all
+Logitech UVC webcams"). This patch is to have the fix back.
+
+Signed-off-by: Marco Zatta <marco@zatta.me>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/core/quirks.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -215,6 +215,9 @@ static const struct usb_device_id usb_qu
+       /* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */
+       { USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
++      /* Logitech HD Webcam C270 */
++      { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
++
+       /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
+       { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
+       { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
diff --git a/queue-4.19/usb-serial-option-add-support-for-simcom-sim7500-sim7600-rndis-mode.patch b/queue-4.19/usb-serial-option-add-support-for-simcom-sim7500-sim7600-rndis-mode.patch
new file mode 100644 (file)
index 0000000..a490d39
--- /dev/null
@@ -0,0 +1,51 @@
+From 5417a7e482962952e622eabd60cd3600dd65dedf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rgen=20Storvist?= <jorgen.storvist@gmail.com>
+Date: Mon, 13 May 2019 18:37:52 +0200
+Subject: USB: serial: option: add support for Simcom SIM7500/SIM7600 RNDIS mode
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jörgen Storvist <jorgen.storvist@gmail.com>
+
+commit 5417a7e482962952e622eabd60cd3600dd65dedf upstream.
+
+Added IDs for Simcom SIM7500/SIM7600 series cellular module in RNDIS
+mode. Reserved the interface for ADB.
+
+T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  7 Spd=480 MxCh= 0
+D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
+P:  Vendor=1e0e ProdID=9011 Rev=03.18
+S:  Manufacturer=SimTech, Incorporated
+S:  Product=SimTech, Incorporated
+S:  SerialNumber=0123456789ABCDEF
+C:  #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
+I:  If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=ff Driver=rndis_host
+I:  If#=0x1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
+I:  If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
+I:  If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
+I:  If#=0x4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
+I:  If#=0x5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
+I:  If#=0x6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
+I:  If#=0x7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
+
+Signed-off-by: Jörgen Storvist <jorgen.storvist@gmail.com>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -1772,6 +1772,8 @@ static const struct usb_device_id option
+       { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E),
+         .driver_info = RSVD(5) | RSVD(6) },
+       { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) },   /* Simcom SIM7500/SIM7600 MBIM mode */
++      { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff),     /* Simcom SIM7500/SIM7600 RNDIS mode */
++        .driver_info = RSVD(7) },
+       { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
+         .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) },
+       { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
diff --git a/queue-4.19/usb-serial-option-add-telit-0x1260-and-0x1261-compositions.patch b/queue-4.19/usb-serial-option-add-telit-0x1260-and-0x1261-compositions.patch
new file mode 100644 (file)
index 0000000..02f3ae4
--- /dev/null
@@ -0,0 +1,33 @@
+From f3dfd4072c3ee6e287f501a18b5718b185d6a940 Mon Sep 17 00:00:00 2001
+From: Daniele Palmas <dnlplm@gmail.com>
+Date: Wed, 15 May 2019 17:27:49 +0200
+Subject: USB: serial: option: add Telit 0x1260 and 0x1261 compositions
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+commit f3dfd4072c3ee6e287f501a18b5718b185d6a940 upstream.
+
+Added support for Telit LE910Cx 0x1260 and 0x1261 compositions.
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -1171,6 +1171,10 @@ static const struct usb_device_id option
+       { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
++      { USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
++        .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
++      { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
++        .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
+       { USB_DEVICE(TELIT_VENDOR_ID, 0x1900),                          /* Telit LN940 (QMI) */
+         .driver_info = NCTRL(0) | RSVD(1) },
+       { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff),    /* Telit LN940 (MBIM) */
diff --git a/queue-4.19/usb-serial-pl2303-add-allied-telesis-vt-kit3.patch b/queue-4.19/usb-serial-pl2303-add-allied-telesis-vt-kit3.patch
new file mode 100644 (file)
index 0000000..c37ad47
--- /dev/null
@@ -0,0 +1,41 @@
+From c5f81656a18b271976a86724dadd8344e54de74e Mon Sep 17 00:00:00 2001
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+Date: Tue, 14 May 2019 17:35:42 +1200
+Subject: USB: serial: pl2303: add Allied Telesis VT-Kit3
+
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+commit c5f81656a18b271976a86724dadd8344e54de74e upstream.
+
+This is adds the vendor and device id for the AT-VT-Kit3 which is a
+pl2303-based device.
+
+Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/pl2303.c |    1 +
+ drivers/usb/serial/pl2303.h |    3 +++
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/usb/serial/pl2303.c
++++ b/drivers/usb/serial/pl2303.c
+@@ -106,6 +106,7 @@ static const struct usb_device_id id_tab
+       { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
+       { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
+       { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
++      { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
+       { }                                     /* Terminating entry */
+ };
+--- a/drivers/usb/serial/pl2303.h
++++ b/drivers/usb/serial/pl2303.h
+@@ -155,3 +155,6 @@
+ #define SMART_VENDOR_ID       0x0b8c
+ #define SMART_PRODUCT_ID      0x2303
++/* Allied Telesis VT-Kit3 */
++#define AT_VENDOR_ID          0x0caa
++#define AT_VTKIT3_PRODUCT_ID  0x3001
diff --git a/queue-4.19/usb-usb-storage-add-new-id-to-ums-realtek.patch b/queue-4.19/usb-usb-storage-add-new-id-to-ums-realtek.patch
new file mode 100644 (file)
index 0000000..a788cc3
--- /dev/null
@@ -0,0 +1,36 @@
+From 1a6dd3fea131276a4fc44ae77b0f471b0b473577 Mon Sep 17 00:00:00 2001
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Date: Tue, 4 Jun 2019 00:20:49 +0800
+Subject: USB: usb-storage: Add new ID to ums-realtek
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+commit 1a6dd3fea131276a4fc44ae77b0f471b0b473577 upstream.
+
+There is one more Realtek card reader requires ums-realtek to work
+correctly.
+
+Add the device ID to support it.
+
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/storage/unusual_realtek.h |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/usb/storage/unusual_realtek.h
++++ b/drivers/usb/storage/unusual_realtek.h
+@@ -17,6 +17,11 @@ UNUSUAL_DEV(0x0bda, 0x0138, 0x0000, 0x99
+               "USB Card Reader",
+               USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
++UNUSUAL_DEV(0x0bda, 0x0153, 0x0000, 0x9999,
++              "Realtek",
++              "USB Card Reader",
++              USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
++
+ UNUSUAL_DEV(0x0bda, 0x0158, 0x0000, 0x9999,
+               "Realtek",
+               "USB Card Reader",