hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/usb/uvc/uvc_driver.c
....@@ -1127,10 +1127,8 @@
11271127 + n;
11281128 memcpy(unit->extension.bmControls, &buffer[23+p], 2*n);
11291129
1130
- if (buffer[24+p+2*n] != 0)
1131
- usb_string(udev, buffer[24+p+2*n], unit->name,
1132
- sizeof(unit->name));
1133
- else
1130
+ if (buffer[24+p+2*n] == 0 ||
1131
+ usb_string(udev, buffer[24+p+2*n], unit->name, sizeof(unit->name)) < 0)
11341132 sprintf(unit->name, "Extension %u", buffer[3]);
11351133
11361134 list_add_tail(&unit->list, &dev->entities);
....@@ -1255,15 +1253,15 @@
12551253 memcpy(term->media.bmTransportModes, &buffer[10+n], p);
12561254 }
12571255
1258
- if (buffer[7] != 0)
1259
- usb_string(udev, buffer[7], term->name,
1260
- sizeof(term->name));
1261
- else if (UVC_ENTITY_TYPE(term) == UVC_ITT_CAMERA)
1262
- sprintf(term->name, "Camera %u", buffer[3]);
1263
- else if (UVC_ENTITY_TYPE(term) == UVC_ITT_MEDIA_TRANSPORT_INPUT)
1264
- sprintf(term->name, "Media %u", buffer[3]);
1265
- else
1266
- sprintf(term->name, "Input %u", buffer[3]);
1256
+ if (buffer[7] == 0 ||
1257
+ usb_string(udev, buffer[7], term->name, sizeof(term->name)) < 0) {
1258
+ if (UVC_ENTITY_TYPE(term) == UVC_ITT_CAMERA)
1259
+ sprintf(term->name, "Camera %u", buffer[3]);
1260
+ if (UVC_ENTITY_TYPE(term) == UVC_ITT_MEDIA_TRANSPORT_INPUT)
1261
+ sprintf(term->name, "Media %u", buffer[3]);
1262
+ else
1263
+ sprintf(term->name, "Input %u", buffer[3]);
1264
+ }
12671265
12681266 list_add_tail(&term->list, &dev->entities);
12691267 break;
....@@ -1295,10 +1293,8 @@
12951293
12961294 memcpy(term->baSourceID, &buffer[7], 1);
12971295
1298
- if (buffer[8] != 0)
1299
- usb_string(udev, buffer[8], term->name,
1300
- sizeof(term->name));
1301
- else
1296
+ if (buffer[8] == 0 ||
1297
+ usb_string(udev, buffer[8], term->name, sizeof(term->name)) < 0)
13021298 sprintf(term->name, "Output %u", buffer[3]);
13031299
13041300 list_add_tail(&term->list, &dev->entities);
....@@ -1320,10 +1316,8 @@
13201316
13211317 memcpy(unit->baSourceID, &buffer[5], p);
13221318
1323
- if (buffer[5+p] != 0)
1324
- usb_string(udev, buffer[5+p], unit->name,
1325
- sizeof(unit->name));
1326
- else
1319
+ if (buffer[5+p] == 0 ||
1320
+ usb_string(udev, buffer[5+p], unit->name, sizeof(unit->name)) < 0)
13271321 sprintf(unit->name, "Selector %u", buffer[3]);
13281322
13291323 list_add_tail(&unit->list, &dev->entities);
....@@ -1353,10 +1347,8 @@
13531347 if (dev->uvc_version >= 0x0110)
13541348 unit->processing.bmVideoStandards = buffer[9+n];
13551349
1356
- if (buffer[8+n] != 0)
1357
- usb_string(udev, buffer[8+n], unit->name,
1358
- sizeof(unit->name));
1359
- else
1350
+ if (buffer[8+n] == 0 ||
1351
+ usb_string(udev, buffer[8+n], unit->name, sizeof(unit->name)) < 0)
13601352 sprintf(unit->name, "Processing %u", buffer[3]);
13611353
13621354 list_add_tail(&unit->list, &dev->entities);
....@@ -1384,10 +1376,8 @@
13841376 unit->extension.bmControls = (u8 *)unit + sizeof(*unit);
13851377 memcpy(unit->extension.bmControls, &buffer[23+p], n);
13861378
1387
- if (buffer[23+p+n] != 0)
1388
- usb_string(udev, buffer[23+p+n], unit->name,
1389
- sizeof(unit->name));
1390
- else
1379
+ if (buffer[23+p+n] == 0 ||
1380
+ usb_string(udev, buffer[23+p+n], unit->name, sizeof(unit->name)) < 0)
13911381 sprintf(unit->name, "Extension %u", buffer[3]);
13921382
13931383 list_add_tail(&unit->list, &dev->entities);
....@@ -2575,6 +2565,24 @@
25752565 .bInterfaceSubClass = 1,
25762566 .bInterfaceProtocol = 0,
25772567 .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
2568
+ /* Logitech, Webcam C910 */
2569
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2570
+ | USB_DEVICE_ID_MATCH_INT_INFO,
2571
+ .idVendor = 0x046d,
2572
+ .idProduct = 0x0821,
2573
+ .bInterfaceClass = USB_CLASS_VIDEO,
2574
+ .bInterfaceSubClass = 1,
2575
+ .bInterfaceProtocol = 0,
2576
+ .driver_info = UVC_INFO_QUIRK(UVC_QUIRK_WAKE_AUTOSUSPEND)},
2577
+ /* Logitech, Webcam B910 */
2578
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2579
+ | USB_DEVICE_ID_MATCH_INT_INFO,
2580
+ .idVendor = 0x046d,
2581
+ .idProduct = 0x0823,
2582
+ .bInterfaceClass = USB_CLASS_VIDEO,
2583
+ .bInterfaceSubClass = 1,
2584
+ .bInterfaceProtocol = 0,
2585
+ .driver_info = UVC_INFO_QUIRK(UVC_QUIRK_WAKE_AUTOSUSPEND)},
25782586 /* Logitech Quickcam Fusion */
25792587 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
25802588 | USB_DEVICE_ID_MATCH_INT_INFO,