Integrated Toshiba web camera stopped working (a while ago)

This broke somewhere in the 4.x kernel series. I saw some discussion on it, regarding part being moved to userland with a suggested quirks fix, but that didn’t work for me. Here’s what’s in dmesg:


 7422.871397] usb 2-5: new high-speed USB device number 14 using xhci_hcd
 7423.078616] usb 2-5: New USB device found, idVendor=04f2, idProduct=b446, bcdDevice=27.08
 7423.078631] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 7423.078636] usb 2-5: Product: TOSHIBA Web Camera - HD
 7423.078641] usb 2-5: Manufacturer: SunplusIT Inc
 7423.721736] mc: Linux media interface: v0.10
 7423.738947] videodev: Linux video capture interface: v2.00
 7423.761634] usb 2-5: Found UVC 1.00 device TOSHIBA Web Camera - HD (04f2:b446)
 7423.781664] input: TOSHIBA Web Camera - HD: TOSHIB as /devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0/input/input23
 7423.781708] usbcore: registered new interface driver uvcvideo
 7424.484955] usb 2-5: USB disconnect, device number 14

This repeats ad infinitum with device number incrementing. Eventually, I’ll get this:


[21625.639674] usb 2-5: new full-speed USB device number 16 using xhci_hcd
[21625.767703] usb 2-5: device descriptor read/64, error -71
[21641.487651] usb 2-5: device descriptor read/64, error -110
[21641.723574] usb 2-5: new full-speed USB device number 17 using xhci_hcd
[21641.851638] usb 2-5: device descriptor read/64, error -71
[21642.087642] usb 2-5: device descriptor read/64, error -71
[21642.195543] usb usb2-port5: attempt power cycle

If I do a sudo rmmod uvcvideo && sudo modprobe uvcvideo, I’ll get:


[299928.617097] usb 2-5: Failed to query (GET_RES) UVC control 3 on unit 2: -71 (exp. 2).
[299928.617350] usb 2-5: Failed to query (GET_DEF) UVC control 3 on unit 2: -75 (exp. 2).
[299928.628564] usb 2-5: Failed to query (GET_RES) UVC control 6 on unit 2: -32 (exp. 2).
[299928.668012] usb 2-5: Failed to query (GET_DEF) UVC control 9 on unit 2: -19 (exp. 2).

There’s no /dev/video, no /dev/uvcvideo, and the input device created in /sys does not exist there nor in /dev/input. Furthermore, lsusb -s 2:5 -v shows nothing. There’s no output from lsusb -v -d 04f2:b446 either. Here’s the output of lsmod | grep uvc:


uvcvideo              118784  0
videobuf2_vmalloc      20480  1 uvcvideo
videobuf2_v4l2         36864  1 uvcvideo
videobuf2_common       65536  4 videobuf2_vmalloc,videobuf2_v4l2,uvcvideo,videobuf2_memops
videodev              274432  3 videobuf2_v4l2,uvcvideo,videobuf2_common
mc                     61440  4 videodev,videobuf2_v4l2,uvcvideo,videobuf2_common
usbcore               323584  9 xhci_hcd,ehci_pci,usbhid,usb_storage,uvcvideo,ehci_hcd,btusb,xhci_pci,uas

I have all the V4L packages installed (zypper se -si v4l):


Loading repository data...
Reading installed packages...


S  | Name                   | Type    | Version     | Arch   | Repository
---+------------------------+---------+-------------+--------+-----------------------------
i+ | libgviewv4l2core-2_0-2 | package | 2.0.6-2.10  | x86_64 | Main Repository (OSS)
i+ | libgviewv4l2core-2_0-2 | package | 2.0.6-2.10  | x86_64 | openSUSE:Factory
i+ | libgviewv4l2core-2_0-2 | package | 2.0.6-2.10  | x86_64 | openSUSE:Tumbleweed
i+ | libv4l                 | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4l                 | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4l                 | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | libv4l1-0              | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4l1-0              | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4l1-0              | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | libv4l1-0-32bit        | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4l1-0-32bit        | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4l1-0-32bit        | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | libv4l2-0              | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4l2-0              | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4l2-0              | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | libv4l2-0-32bit        | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4l2-0-32bit        | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4l2-0-32bit        | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | libv4l2rds0            | package | 1.20.0-96.5 | x86_64 | home:X0F:branches:multimedia
i+ | libv4lconvert0         | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4lconvert0         | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4lconvert0         | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | libv4lconvert0-32bit   | package | 1.20.0-3.2  | x86_64 | Main Repository (OSS)
i+ | libv4lconvert0-32bit   | package | 1.20.0-3.2  | x86_64 | openSUSE:Factory
i+ | libv4lconvert0-32bit   | package | 1.20.0-3.2  | x86_64 | openSUSE:Tumbleweed
i+ | obs-v4l2sink           | package | 0.1.0-4.13  | x86_64 | Packman Repository
i+ | v4l-conf               | package | 3.107-2.3   | x86_64 | Main Repository (OSS)
i+ | v4l-conf               | package | 3.107-2.3   | x86_64 | openSUSE:Factory
i+ | v4l-conf               | package | 3.107-2.3   | x86_64 | openSUSE:Tumbleweed
i+ | v4l-tools              | package | 3.107-2.3   | x86_64 | Main Repository (OSS)
i+ | v4l-tools              | package | 3.107-2.3   | x86_64 | openSUSE:Factory
i+ | v4l-tools              | package | 3.107-2.3   | x86_64 | openSUSE:Tumbleweed
i+ | v4l-utils              | package | 1.20.0-96.5 | x86_64 | home:X0F:branches:multimedia
i+ | xf86-video-v4l         | package | 0.3.0-2.35  | x86_64 | home:X0F:HSF

My user is visible when I run grep video /etc/group. I didn’t get anything new when enabling tracing on the uvcvideo module. Although this device is not listed in the http://www.ideasonboard.org/uvc/#devices list, the webcam used to work. The only thing I can think of ATM is to dump the device descriptors on boot before it becomes unresponsive, but what can else I do to get it working again?

When there are already problems reading the device descriptor, I am pretty sure all else will fail.

Are you sure there is no hardware problem (camera, USB cable, USB connector, wrong USB type)?

That seems logical. What about this:

https://urukrama.wordpress.com/2009/01/27/usb-drive-not-recognised-error-71/

It’s integrated, so there’s nothing to unplug. It stopped working after an update. Someone else reported this in Redhat’s bug tracker, IIRC. It seems to be a kernel issue.

That was interestiing. It caused uvcvideo not to be loaded at all upon boot. After loading it, I got:


  192.259437] mc: Linux media interface: v0.10
  192.281253] videodev: Linux video capture interface: v2.00
  192.302394] usbcore: registered new interface driver uvcvideo
  444.876597] usb 3-5: new full-speed USB device number 9 using xhci_hcd
  445.004566] usb 3-5: device descriptor read/64, error -71
  445.244596] usb 3-5: device descriptor read/64, error -71
  445.484597] usb 3-5: new full-speed USB device number 10 using xhci_hcd
  445.612559] usb 3-5: device descriptor read/64, error -71
  445.852556] usb 3-5: device descriptor read/64, error -71
  445.964571] usb usb3-port5: attempt power cycle
  446.620540] usb 3-5: new full-speed USB device number 11 using xhci_hcd
  446.620696] usb 3-5: Device not responding to setup address.
  446.828661] usb 3-5: Device not responding to setup address.
  447.036530] usb 3-5: device not accepting address 11, error -71
  447.164535] usb 3-5: new full-speed USB device number 12 using xhci_hcd
  447.164676] usb 3-5: Device not responding to setup address.
  447.376740] usb 3-5: Device not responding to setup address.
  447.584552] usb 3-5: device not accepting address 12, error -71
  447.584656] usb usb3-port5: unable to enumerate USB device

That’s what it was doing. The output of lsusb -s 3:5 -v shows nothing. I’m not ruling out a hardware issue, since this laptop is old. The touchpad stopped working, although it’s detected by the OS and WM. However, I remember the webcam working one day and not the next.

Can you reboot to another Operating system and test?

Or if not that, boot to a liveUSB or liveCD, install a webcam app that uses minimal memory (into ram while booting from liveCD/liveUSB) and test webcam hardware still works? If it doesn’t work there, then that will show its hardware and save time investigating a broken device.