History

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

Pull USB / Thunderbolt fixes from Greg KH: "Here are some small bugfixes and new device ids for USB and Thunderbolt drivers for 6.7-rc7. Included in here are: - new usb-serial device ids - thunderbolt driver fixes - typec driver fix - usb-storage driver quirk added - fotg210 driver fix All of these have been in linux-next with no reported issues" * tag 'usb-6.7-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: USB: serial: option: add Quectel EG912Y module support USB: serial: ftdi_sio: update Actisense PIDs constant names usb: fotg210-hcd: delete an incorrect bounds test usb-storage: Add quirk for incorrect WP on Kingston DT Ultimate 3.0 G3 usb: typec: ucsi: fix gpio-based orientation detection net: usb: ax88179_178a: avoid failed operations when device is disconnected USB: serial: option: add Quectel RM500Q R13 firmware support USB: serial: option: add Foxconn T99W265 with new baseline thunderbolt: Fix minimum allocated USB 3.x and PCIe bandwidth thunderbolt: Fix memory leak in margining_port_remove()

Linus Torvalds committed 2 years ago

Commit 4b2ee6d2 parents a0652eb ab241a09 files · +49 −19Browse files

Unified · Split

9 files
  1. drivers/net/usb/ax88179_178a.c +20 −3
  2. drivers/thunderbolt/debugfs.c +1 −1
  3. drivers/thunderbolt/usb4.c +5 −5
  4. drivers/usb/fotg210/fotg210-hcd.c +0 −3
  5. drivers/usb/serial/ftdi_sio.c +3 −3
  6. drivers/usb/serial/ftdi_sio_ids.h +3 −3
  7. drivers/usb/serial/option.c +5 −0
  8. drivers/usb/storage/unusual_devs.h +11 −0
  9. drivers/usb/typec/ucsi/ucsi_glink.c +1 −1
drivers/net/usb/ax88179_178a.c+20−3
@@ -173,6 +173,7 @@ struct ax88179_data { · 172 unmodified lines
173 u8 in_pm;173 u8 in_pm;
174 u32 wol_supported;174 u32 wol_supported;
175 u32 wolopts;175 u32 wolopts;
176 u8 disconnecting;
176};177};
177 178
178struct ax88179_int_data {179struct ax88179_int_data {
@@ -208,6 +209,7 @@ static int __ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, · 29 unmodified lines
208{209{
209 int ret;210 int ret;
210 int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);211 int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
212 struct ax88179_data *ax179_data = dev->driver_priv;
211 213
212 BUG_ON(!dev);214 BUG_ON(!dev);
213 215
@@ -219,7 +221,7 @@ static int __ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, · 5 unmodified lines
219 ret = fn(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,221 ret = fn(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
220 value, index, data, size);222 value, index, data, size);
221 223
222 if (unlikely(ret < 0))224 if (unlikely((ret < 0) && !(ret == -ENODEV && ax179_data->disconnecting)))
223 netdev_warn(dev->net, "Failed to read reg index 0x%04x: %d\n",225 netdev_warn(dev->net, "Failed to read reg index 0x%04x: %d\n",
224 index, ret);226 index, ret);
225 227
@@ -231,6 +233,7 @@ static int __ax88179_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, · 5 unmodified lines
231{233{
232 int ret;234 int ret;
233 int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);235 int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
236 struct ax88179_data *ax179_data = dev->driver_priv;
234 237
235 BUG_ON(!dev);238 BUG_ON(!dev);
236 239
@@ -242,7 +245,7 @@ static int __ax88179_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, · 5 unmodified lines
242 ret = fn(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,245 ret = fn(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
243 value, index, data, size);246 value, index, data, size);
244 247
245 if (unlikely(ret < 0))248 if (unlikely((ret < 0) && !(ret == -ENODEV && ax179_data->disconnecting)))
246 netdev_warn(dev->net, "Failed to write reg index 0x%04x: %d\n",249 netdev_warn(dev->net, "Failed to write reg index 0x%04x: %d\n",
247 index, ret);250 index, ret);
248 251
@@ -492,6 +495,20 @@ static int ax88179_resume(struct usb_interface *intf) · 243 unmodified lines
492 return usbnet_resume(intf);495 return usbnet_resume(intf);
493}496}
494 497
498static void ax88179_disconnect(struct usb_interface *intf)
499{
500 struct usbnet *dev = usb_get_intfdata(intf);
501 struct ax88179_data *ax179_data;
502
503 if (!dev)
504 return;
505
506 ax179_data = dev->driver_priv;
507 ax179_data->disconnecting = 1;
508
509 usbnet_disconnect(intf);
510}
511
495static void512static void
496ax88179_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)513ax88179_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
497{514{
@@ -1906,7 +1923,7 @@ static struct usb_driver ax88179_178a_driver = { · 1408 unmodified lines
1906 .suspend = ax88179_suspend,1923 .suspend = ax88179_suspend,
1907 .resume = ax88179_resume,1924 .resume = ax88179_resume,
1908 .reset_resume = ax88179_resume,1925 .reset_resume = ax88179_resume,
1909 .disconnect = usbnet_disconnect,1926 .disconnect = ax88179_disconnect,
1910 .supports_autosuspend = 1,1927 .supports_autosuspend = 1,
1911 .disable_hub_initiated_lpm = 1,1928 .disable_hub_initiated_lpm = 1,
1912};1929};
drivers/thunderbolt/debugfs.c+1−1
@@ -959,7 +959,7 @@ static void margining_port_remove(struct tb_port *port) · 958 unmodified lines
959 snprintf(dir_name, sizeof(dir_name), "port%d", port->port);959 snprintf(dir_name, sizeof(dir_name), "port%d", port->port);
960 parent = debugfs_lookup(dir_name, port->sw->debugfs_dir);960 parent = debugfs_lookup(dir_name, port->sw->debugfs_dir);
961 if (parent)961 if (parent)
962 debugfs_remove_recursive(debugfs_lookup("margining", parent));962 debugfs_lookup_and_remove("margining", parent);
963 963
964 kfree(port->usb4->margining);964 kfree(port->usb4->margining);
965 port->usb4->margining = NULL;965 port->usb4->margining = NULL;
drivers/thunderbolt/usb4.c+5−5
@@ -2311,13 +2311,13 @@ int usb4_usb3_port_release_bandwidth(struct tb_port *port, int *upstream_bw, · 2310 unmodified lines
2311 goto err_request;2311 goto err_request;
2312 2312
2313 /*2313 /*
2314 * Always keep 1000 Mb/s to make sure xHCI has at least some2314 * Always keep 900 Mb/s to make sure xHCI has at least some
2315 * bandwidth available for isochronous traffic.2315 * bandwidth available for isochronous traffic.
2316 */2316 */
2317 if (consumed_up < 1000)2317 if (consumed_up < 900)
2318 consumed_up = 1000;2318 consumed_up = 900;
2319 if (consumed_down < 1000)2319 if (consumed_down < 900)
2320 consumed_down = 1000;2320 consumed_down = 900;
2321 2321
2322 ret = usb4_usb3_port_write_allocated_bandwidth(port, consumed_up,2322 ret = usb4_usb3_port_write_allocated_bandwidth(port, consumed_up,
2323 consumed_down);2323 consumed_down);
drivers/usb/fotg210/fotg210-hcd.c+0−3
@@ -428,8 +428,6 @@ static void qh_lines(struct fotg210_hcd *fotg210, struct fotg210_qh *qh, · 427 unmodified lines
428 temp = size;428 temp = size;
429 size -= temp;429 size -= temp;
430 next += temp;430 next += temp;
431 if (temp == size)
432 goto done;
433 }431 }
434 432
435 temp = snprintf(next, size, "\n");433 temp = snprintf(next, size, "\n");
@@ -439,7 +437,6 @@ static void qh_lines(struct fotg210_hcd *fotg210, struct fotg210_qh *qh, · 3 unmodified lines
439 size -= temp;437 size -= temp;
440 next += temp;438 next += temp;
441 439
442done:
443 *sizep = size;440 *sizep = size;
444 *nextp = next;441 *nextp = next;
445}442}
drivers/usb/serial/ftdi_sio.c+3−3
@@ -1033,9 +1033,9 @@ static const struct usb_device_id id_table_combined[] = { · 1032 unmodified lines
1033 { USB_DEVICE(FTDI_VID, ACTISENSE_USG_PID) },1033 { USB_DEVICE(FTDI_VID, ACTISENSE_USG_PID) },
1034 { USB_DEVICE(FTDI_VID, ACTISENSE_NGT_PID) },1034 { USB_DEVICE(FTDI_VID, ACTISENSE_NGT_PID) },
1035 { USB_DEVICE(FTDI_VID, ACTISENSE_NGW_PID) },1035 { USB_DEVICE(FTDI_VID, ACTISENSE_NGW_PID) },
1036 { USB_DEVICE(FTDI_VID, ACTISENSE_D9AC_PID) },1036 { USB_DEVICE(FTDI_VID, ACTISENSE_UID_PID) },
1037 { USB_DEVICE(FTDI_VID, ACTISENSE_D9AD_PID) },1037 { USB_DEVICE(FTDI_VID, ACTISENSE_USA_PID) },
1038 { USB_DEVICE(FTDI_VID, ACTISENSE_D9AE_PID) },1038 { USB_DEVICE(FTDI_VID, ACTISENSE_NGX_PID) },
1039 { USB_DEVICE(FTDI_VID, ACTISENSE_D9AF_PID) },1039 { USB_DEVICE(FTDI_VID, ACTISENSE_D9AF_PID) },
1040 { USB_DEVICE(FTDI_VID, CHETCO_SEAGAUGE_PID) },1040 { USB_DEVICE(FTDI_VID, CHETCO_SEAGAUGE_PID) },
1041 { USB_DEVICE(FTDI_VID, CHETCO_SEASWITCH_PID) },1041 { USB_DEVICE(FTDI_VID, CHETCO_SEASWITCH_PID) },
drivers/usb/serial/ftdi_sio_ids.h+3−3
@@ -1568,9 +1568,9 @@ · 1567 unmodified lines
1568#define ACTISENSE_USG_PID 0xD9A9 /* USG USB Serial Adapter */1568#define ACTISENSE_USG_PID 0xD9A9 /* USG USB Serial Adapter */
1569#define ACTISENSE_NGT_PID 0xD9AA /* NGT NMEA2000 Interface */1569#define ACTISENSE_NGT_PID 0xD9AA /* NGT NMEA2000 Interface */
1570#define ACTISENSE_NGW_PID 0xD9AB /* NGW NMEA2000 Gateway */1570#define ACTISENSE_NGW_PID 0xD9AB /* NGW NMEA2000 Gateway */
1571#define ACTISENSE_D9AC_PID 0xD9AC /* Actisense Reserved */1571#define ACTISENSE_UID_PID 0xD9AC /* USB Isolating Device */
1572#define ACTISENSE_D9AD_PID 0xD9AD /* Actisense Reserved */1572#define ACTISENSE_USA_PID 0xD9AD /* USB to Serial Adapter */
1573#define ACTISENSE_D9AE_PID 0xD9AE /* Actisense Reserved */1573#define ACTISENSE_NGX_PID 0xD9AE /* NGX NMEA2000 Gateway */
1574#define ACTISENSE_D9AF_PID 0xD9AF /* Actisense Reserved */1574#define ACTISENSE_D9AF_PID 0xD9AF /* Actisense Reserved */
1575#define CHETCO_SEAGAUGE_PID 0xA548 /* SeaGauge USB Adapter */1575#define CHETCO_SEAGAUGE_PID 0xA548 /* SeaGauge USB Adapter */
1576#define CHETCO_SEASWITCH_PID 0xA549 /* SeaSwitch USB Adapter */1576#define CHETCO_SEASWITCH_PID 0xA549 /* SeaSwitch USB Adapter */
drivers/usb/serial/option.c+5−0
@@ -272,6 +272,7 @@ static void option_instat_callback(struct urb *urb); · 271 unmodified lines
272#define QUECTEL_PRODUCT_RM500Q 0x0800272#define QUECTEL_PRODUCT_RM500Q 0x0800
273#define QUECTEL_PRODUCT_RM520N 0x0801273#define QUECTEL_PRODUCT_RM520N 0x0801
274#define QUECTEL_PRODUCT_EC200U 0x0901274#define QUECTEL_PRODUCT_EC200U 0x0901
275#define QUECTEL_PRODUCT_EG912Y 0x6001
275#define QUECTEL_PRODUCT_EC200S_CN 0x6002276#define QUECTEL_PRODUCT_EC200S_CN 0x6002
276#define QUECTEL_PRODUCT_EC200A 0x6005277#define QUECTEL_PRODUCT_EC200A 0x6005
277#define QUECTEL_PRODUCT_EM061K_LWW 0x6008278#define QUECTEL_PRODUCT_EM061K_LWW 0x6008
@@ -1232,6 +1233,7 @@ static const struct usb_device_id option_ids[] = { · 954 unmodified lines
1232 { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0700, 0xff), /* BG95 */1233 { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0700, 0xff), /* BG95 */
1233 .driver_info = RSVD(3) | ZLP },1234 .driver_info = RSVD(3) | ZLP },
1234 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },1235 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },
1236 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0x40) },
1235 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },1237 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
1236 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),1238 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
1237 .driver_info = ZLP },1239 .driver_info = ZLP },
@@ -1244,6 +1246,7 @@ static const struct usb_device_id option_ids[] = { · 6 unmodified lines
1244 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200U, 0xff, 0, 0) },1246 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200U, 0xff, 0, 0) },
1245 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) },1247 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) },
1246 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },1248 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
1249 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG912Y, 0xff, 0, 0) },
1247 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },1250 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
1248 1251
1249 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },1252 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
@@ -2242,6 +2245,8 @@ static const struct usb_device_id option_ids[] = { · 992 unmodified lines
2242 .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },2245 .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
2243 { USB_DEVICE(0x0489, 0xe0b5), /* Foxconn T77W968 ESIM */2246 { USB_DEVICE(0x0489, 0xe0b5), /* Foxconn T77W968 ESIM */
2244 .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },2247 .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
2248 { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0da, 0xff), /* Foxconn T99W265 MBIM variant */
2249 .driver_info = RSVD(3) | RSVD(5) },
2245 { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */2250 { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */
2246 .driver_info = RSVD(3) },2251 .driver_info = RSVD(3) },
2247 { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0ee, 0xff), /* Foxconn T99W368 MBIM */2252 { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0ee, 0xff), /* Foxconn T99W368 MBIM */
drivers/usb/storage/unusual_devs.h+11−0
@@ -1305,6 +1305,17 @@ UNUSUAL_DEV( 0x090c, 0x6000, 0x0100, 0x0100, · 1304 unmodified lines
1305 USB_SC_DEVICE, USB_PR_DEVICE, NULL,1305 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1306 US_FL_INITIAL_READ10 ),1306 US_FL_INITIAL_READ10 ),
1307 1307
1308/*
1309 * Patch by Tasos Sahanidis <tasos@tasossah.com>
1310 * This flash drive always shows up with write protect enabled
1311 * during the first mode sense.
1312 */
1313UNUSUAL_DEV(0x0951, 0x1697, 0x0100, 0x0100,
1314 "Kingston",
1315 "DT Ultimate G3",
1316 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1317 US_FL_NO_WP_DETECT),
1318
1308/*1319/*
1309 * This Pentax still camera is not conformant1320 * This Pentax still camera is not conformant
1310 * to the USB storage specification: -1321 * to the USB storage specification: -
drivers/usb/typec/ucsi/ucsi_glink.c+1−1
@@ -228,7 +228,7 @@ static void pmic_glink_ucsi_notify(struct work_struct *work) · 227 unmodified lines
228 228
229 con_num = UCSI_CCI_CONNECTOR(cci);229 con_num = UCSI_CCI_CONNECTOR(cci);
230 if (con_num) {230 if (con_num) {
231 if (con_num < PMIC_GLINK_MAX_PORTS &&231 if (con_num <= PMIC_GLINK_MAX_PORTS &&
232 ucsi->port_orientation[con_num - 1]) {232 ucsi->port_orientation[con_num - 1]) {
233 int orientation = gpiod_get_value(ucsi->port_orientation[con_num - 1]);233 int orientation = gpiod_get_value(ucsi->port_orientation[con_num - 1]);
234 234