2010-06-23 09:23:24

by Nils Radtke

[permalink] [raw]
Subject: [2.6.33.4 PATCH] V4L/uvcvideo: Add support for Suyin Corp. Lenovo Webcam

From: Nils Radtke <[email protected]>

This patch adds support for the Suyin Corp. Lenovo Webcam.
lsusb: ID 064e:a102 Suyin Corp. Lenovo Webcam

It is available as built-in webcam i.e. in ACER timeline 1810t
notebooks.

The note in uvc_driver.c about Logitech cameras applies the same
to the Suyin web cam: it doesn't announce itself as UVC devices
but is compliant.

Signed-off-by: Nils Radtke <[email protected]>

---

Thank you,

Nils

uvc_driver.c | 8 ++++++++
1 file changed, 8 insertions(+)


Index: linux/drivers/media/video/uvc/uvc_driver.c
===================================================================
--- linux.orig/drivers/media/video/uvc/uvc_driver.c 2010-06-23 10:37:03.000000000 +0200
+++ linux/drivers/media/video/uvc/uvc_driver.c 2010-06-23 10:37:07.000000000 +0200
@@ -2153,6 +2153,14 @@
.bInterfaceProtocol = 0,
.driver_info = UVC_QUIRK_PROBE_MINMAX
| UVC_QUIRK_IGNORE_SELECTOR_UNIT },
+ /* Suyin Corp. Lenovo Webcam */
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
+ | USB_DEVICE_ID_MATCH_INT_INFO,
+ .idVendor = 0x064e,
+ .idProduct = 0xa102,
+ .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
+ .bInterfaceSubClass = 1,
+ .bInterfaceProtocol = 0 },
/* Generic USB Video Class */
{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, 0) },
{}


2010-06-23 12:45:57

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [2.6.33.4 PATCH] V4L/uvcvideo: Add support for Suyin Corp. Lenovo Webcam

Hi Nils,

On Wednesday 23 June 2010 11:23:16 Nils Radtke wrote:
> From: Nils Radtke <[email protected]>
>
> This patch adds support for the Suyin Corp. Lenovo Webcam.
> lsusb: ID 064e:a102 Suyin Corp. Lenovo Webcam
>
> It is available as built-in webcam i.e. in ACER timeline 1810t
> notebooks.
>
> The note in uvc_driver.c about Logitech cameras applies the same
> to the Suyin web cam: it doesn't announce itself as UVC devices
> but is compliant.
>
> Signed-off-by: Nils Radtke <[email protected]>

Thanks for the patch. Could you please send me the output of lsusb -v for your
camera, as well as the raw binary descriptors ? You can retrieve the later
with

cat /proc/bus/usb/xxx/yyy

Replace xxx with the device bus number, and yyy with the device number. Both
can be retrieved from /proc/bus/usb/devices.

--
Regards,

Laurent Pinchart

2010-06-24 18:19:51

by Nils Radtke

[permalink] [raw]
Subject: Re: [2.6.33.4 PATCH] V4L/uvcvideo: Add support for Suyin Corp. Lenovo Webcam

Hi Laurent,

On Wed 2010-06-23 @ 02-45-53PM +0200, Laurent Pinchart wrote:
# Hi Nils,
#
# On Wednesday 23 June 2010 11:23:16 Nils Radtke wrote:
# > From: Nils Radtke <[email protected]>
# >
# > This patch adds support for the Suyin Corp. Lenovo Webcam.
# > lsusb: ID 064e:a102 Suyin Corp. Lenovo Webcam
# >
# > It is available as built-in webcam i.e. in ACER timeline 1810t
# > notebooks.
# >
# > The note in uvc_driver.c about Logitech cameras applies the same
# > to the Suyin web cam: it doesn't announce itself as UVC devices
# > but is compliant.
# >
# > Signed-off-by: Nils Radtke <[email protected]>
#
# Thanks for the patch. Could you please send me the output of lsusb -v for your

Bus 002 Device 002: ID 064e:a102 Suyin Corp. Lenovo Webcam
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2 ?
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x064e Suyin Corp.
idProduct 0xa102 Lenovo Webcam
bcdDevice 2.22
iManufacturer 2 SuYin
iProduct 1 WebCam
iSerial 3 CN0316-S30C-OV061-VA-R02.02.02
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 569
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 98mA
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 0
bInterfaceCount 2
bFunctionClass 14 Video
bFunctionSubClass 3 Video Interface Collection
bFunctionProtocol 0
iFunction 5 Webcam
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 1 Video Control
bInterfaceProtocol 0
iInterface 5 Webcam
VideoControl Interface Descriptor:
bLength 13
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdUVC 1.00
wTotalLength 103
dwClockFrequency 15.000000MHz
bInCollection 1
baInterfaceNr( 0) 1
VideoControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 5
iTerminal 0
VideoControl Interface Descriptor:
bLength 26
bDescriptorType 36
bDescriptorSubtype 6 (EXTENSION_UNIT)
bUnitID 4
guidExtensionCode {7033f028-1163-2e4a-ba2c-6890eb334016}
bNumControl 8
bNrPins 1
baSourceID( 0) 3
bControlSize 1
bmControls( 0) 0x0f
iExtension 0
VideoControl Interface Descriptor:
bLength 26
bDescriptorType 36
bDescriptorSubtype 6 (EXTENSION_UNIT)
bUnitID 5
guidExtensionCode {3fae1228-d7bc-114e-a357-6f1edef7d61d}
bNumControl 8
bNrPins 1
baSourceID( 0) 4
bControlSize 1
bmControls( 0) 0xff
iExtension 0
VideoControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0201 Camera Sensor
bAssocTerminal 0
iTerminal 0
wObjectiveFocalLengthMin 0
wObjectiveFocalLengthMax 0
wOcularFocalLength 0
bControlSize 3
bmControls 0x00000000
VideoControl Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 5 (PROCESSING_UNIT)
Warning: Descriptor too short
bUnitID 3
bSourceID 1
wMaxMultiplier 0
bControlSize 2
bmControls 0x0000173f
Brightness
Contrast
Hue
Saturation
Sharpness
Gamma
Backlight Compensation
Gain
Power Line Frequency
White Balance Temperature, Auto
iProcessing 0
bmVideoStandards 0x 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 6
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
VideoStreaming Interface Descriptor:
bLength 14
bDescriptorType 36
bDescriptorSubtype 1 (INPUT_HEADER)
bNumFormats 1
wTotalLength 323
bEndPointAddress 129
bmInfo 0
bTerminalLink 2
bStillCaptureMethod 2
bTriggerSupport 1
bTriggerUsage 1
bControlSize 1
bmaControls( 0) 27
VideoStreaming Interface Descriptor:
bLength 27
bDescriptorType 36
bDescriptorSubtype 4 (FORMAT_UNCOMPRESSED)
bFormatIndex 1
bNumFrameDescriptors 5
guidFormat {59555932-0000-1000-8000-00aa00389b71}
bBitsPerPixel 16
bDefaultFrameIndex 1
bAspectRatioX 0
bAspectRatioY 0
bmInterlaceFlags 0x00
Interlaced stream or variable: No
Fields per frame: 1 fields
Field 1 first: No
Field pattern: Field 1 only
bCopyProtect 0
VideoStreaming Interface Descriptor:
bLength 50
bDescriptorType 36
bDescriptorSubtype 5 (FRAME_UNCOMPRESSED)
bFrameIndex 1
bmCapabilities 0x00
Still image unsupported
wWidth 640
wHeight 480
dwMinBitRate 3072000
dwMaxBitRate 18432000
dwMaxVideoFrameBufferSize 614400
dwDefaultFrameInterval 333333
bFrameIntervalType 6
dwFrameInterval( 0) 333333
dwFrameInterval( 1) 400000
dwFrameInterval( 2) 500000
dwFrameInterval( 3) 666666
dwFrameInterval( 4) 1000000
dwFrameInterval( 5) 2000000
VideoStreaming Interface Descriptor:
bLength 50
bDescriptorType 36
bDescriptorSubtype 5 (FRAME_UNCOMPRESSED)
bFrameIndex 2
bmCapabilities 0x00
Still image unsupported
wWidth 352
wHeight 288
dwMinBitRate 1013760
dwMaxBitRate 6082560
dwMaxVideoFrameBufferSize 202752
dwDefaultFrameInterval 333333
bFrameIntervalType 6
dwFrameInterval( 0) 333333
dwFrameInterval( 1) 400000
dwFrameInterval( 2) 500000
dwFrameInterval( 3) 666666
dwFrameInterval( 4) 1000000
dwFrameInterval( 5) 2000000
VideoStreaming Interface Descriptor:
bLength 50
bDescriptorType 36
bDescriptorSubtype 5 (FRAME_UNCOMPRESSED)
bFrameIndex 3
bmCapabilities 0x00
Still image unsupported
wWidth 320
wHeight 240
dwMinBitRate 768000
dwMaxBitRate 4608000
dwMaxVideoFrameBufferSize 153600
dwDefaultFrameInterval 333333
bFrameIntervalType 6
dwFrameInterval( 0) 333333
dwFrameInterval( 1) 400000
dwFrameInterval( 2) 500000
dwFrameInterval( 3) 666666
dwFrameInterval( 4) 1000000
dwFrameInterval( 5) 2000000
VideoStreaming Interface Descriptor:
bLength 50
bDescriptorType 36
bDescriptorSubtype 5 (FRAME_UNCOMPRESSED)
bFrameIndex 4
bmCapabilities 0x00
Still image unsupported
wWidth 176
wHeight 144
dwMinBitRate 253440
dwMaxBitRate 1520640
dwMaxVideoFrameBufferSize 50688
dwDefaultFrameInterval 333333
bFrameIntervalType 6
dwFrameInterval( 0) 333333
dwFrameInterval( 1) 400000
dwFrameInterval( 2) 500000
dwFrameInterval( 3) 666666
dwFrameInterval( 4) 1000000
dwFrameInterval( 5) 2000000
VideoStreaming Interface Descriptor:
bLength 50
bDescriptorType 36
bDescriptorSubtype 5 (FRAME_UNCOMPRESSED)
bFrameIndex 5
bmCapabilities 0x00
Still image unsupported
wWidth 160
wHeight 120
dwMinBitRate 192000
dwMaxBitRate 1152000
dwMaxVideoFrameBufferSize 38400
dwDefaultFrameInterval 333333
bFrameIntervalType 6
dwFrameInterval( 0) 333333
dwFrameInterval( 1) 400000
dwFrameInterval( 2) 500000
dwFrameInterval( 3) 666666
dwFrameInterval( 4) 1000000
dwFrameInterval( 5) 2000000
VideoStreaming Interface Descriptor:
bLength 26
bDescriptorType 36
bDescriptorSubtype 3 (STILL_IMAGE_FRAME)
bEndpointAddress 0
bNumImageSizePatterns 5
wWidth( 0) 640
wHeight( 0) 480
wWidth( 1) 352
wHeight( 1) 288
wWidth( 2) 320
wHeight( 2) 240
wWidth( 3) 176
wHeight( 3) 144
wWidth( 4) 160
wHeight( 4) 120
bNumCompressionPatterns 5
VideoStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 13 (COLORFORMAT)
bColorPrimaries 1 (BT.709,sRGB)
bTransferCharacteristics 1 (BT.709)
bMatrixCoefficients 4 (SMPTE 170M (BT.601))
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0080 1x 128 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 2
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0100 1x 256 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 3
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0320 1x 800 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 4
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0b20 2x 800 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 5
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x1320 3x 800 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 6
bNumEndpoints 1
bInterfaceClass 14 Video
bInterfaceSubClass 2 Video Streaming
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x1400 3x 1024 bytes
bInterval 1
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2 ?
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0002
(Bus Powered)
Remote Wakeup Enabled


# cat /proc/bus/usb/xxx/yyy
See attached.


Cheers,

Nils


Attachments:
(No filename) (17.45 kB)
cat_proc-bus-usb-002-002_suying_webcam.log (587.00 B)
Download all attachments

2010-06-25 07:29:26

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [2.6.33.4 PATCH] V4L/uvcvideo: Add support for Suyin Corp. Lenovo Webcam

Hi Nils,

On Thursday 24 June 2010 20:19:41 Nils Radtke wrote:
> On Wed 2010-06-23 @ 02-45-53PM +0200, Laurent Pinchart wrote:
> # On Wednesday 23 June 2010 11:23:16 Nils Radtke wrote:
> # > From: Nils Radtke <[email protected]>
> # >
> # > This patch adds support for the Suyin Corp. Lenovo Webcam.
> # > lsusb: ID 064e:a102 Suyin Corp. Lenovo Webcam
> # >
> # > It is available as built-in webcam i.e. in ACER timeline 1810t
> # > notebooks.
> # >
> # > The note in uvc_driver.c about Logitech cameras applies the same
> # > to the Suyin web cam: it doesn't announce itself as UVC devices
> # > but is compliant.
> # >
> # > Signed-off-by: Nils Radtke <[email protected]>
> #
> # Thanks for the patch. Could you please send me the output of lsusb -v for
> your
>
> Bus 002 Device 002: ID 064e:a102 Suyin Corp. Lenovo Webcam

[snip]

> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 0
> bNumEndpoints 1
> bInterfaceClass 14 Video
> bInterfaceSubClass 1 Video Control
> bInterfaceProtocol 0
> iInterface 5 Webcam

This looks like a pretty standard UVC device. Are you sure your patch is
needed ?

--
Regards,

Laurent Pinchart

2010-06-26 10:36:31

by Nils Radtke

[permalink] [raw]
Subject: Re: [2.6.33.4 PATCH] V4L/uvcvideo: Add support for Suyin Corp. Lenovo Webcam

Hi Laurent,

On ven 2010-06-25 @ 09-29-28 +0200, Laurent Pinchart wrote:
# Hi Nils,
#
# On Thursday 24 June 2010 20:19:41 Nils Radtke wrote:
# > On Wed 2010-06-23 @ 02-45-53PM +0200, Laurent Pinchart wrote:
# > # On Wednesday 23 June 2010 11:23:16 Nils Radtke wrote:
# > # > From: Nils Radtke <[email protected]>
# > # >
# > # > This patch adds support for the Suyin Corp. Lenovo Webcam.
# > # > lsusb: ID 064e:a102 Suyin Corp. Lenovo Webcam
# > # >
# > # > It is available as built-in webcam i.e. in ACER timeline 1810t
# > # > notebooks.
# > # >
# > # > The note in uvc_driver.c about Logitech cameras applies the same
# > # > to the Suyin web cam: it doesn't announce itself as UVC devices
# > # > but is compliant.
# > # >
# > # > Signed-off-by: Nils Radtke <[email protected]>
# > #
# > # Thanks for the patch. Could you please send me the output of lsusb -v for
# > your
# >
# > Bus 002 Device 002: ID 064e:a102 Suyin Corp. Lenovo Webcam
#
# [snip]
#
# > Interface Descriptor:
# > bLength 9
# > bDescriptorType 4
# > bInterfaceNumber 0
# > bAlternateSetting 0
# > bNumEndpoints 1
# > bInterfaceClass 14 Video
# > bInterfaceSubClass 1 Video Control
# > bInterfaceProtocol 0
# > iInterface 5 Webcam
#
# This looks like a pretty standard UVC device. Are you sure your patch is
# needed ?
Indeed. Hm, about whether the patch is needed.. What happened here was: the module
didn't get loaded w/o the patch. But then maybe something else made the change?
After subsequent reboot the module did get loaded. Hm..

Isn't the vendor/product ID a point of reference that tells the kernel which module
to load when supported hw is found? That was the idea behind adding the ID and
submitting the patch.

Thanks for clarification.

Cheers,

Nils

2010-06-26 17:05:05

by Greg KH

[permalink] [raw]
Subject: Re: [2.6.33.4 PATCH] V4L/uvcvideo: Add support for Suyin Corp. Lenovo Webcam

On Sat, Jun 26, 2010 at 12:36:15PM +0200, Nils Radtke wrote:
> Isn't the vendor/product ID a point of reference that tells the kernel which module
> to load when supported hw is found? That was the idea behind adding the ID and
> submitting the patch.

No, it also triggers off of the class information of the device, which
your device says it supports. If we had to add every single unique
device id for usb keyboards, that would be a mess :)

thanks,

greg k-h