The patch number 9870 was added via Jean-Francois Moine <moin...@free.fr>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        v4l-dvb-maintai...@linuxtv.org

------

From: Jean-Francois Moine  <moin...@free.fr>
gspca - vc032x: Webcam 15b8:6002 and sensor po1200 added.


Priority: normal

Signed-off-by: Jean-Francois Moine <moin...@free.fr>


---

 linux/Documentation/video4linux/gspca.txt |    1 
 linux/drivers/media/video/gspca/vc032x.c  |  331 +++++++++++++++++++++-
 2 files changed, 324 insertions(+), 8 deletions(-)

diff -r ffeb9d2be572 -r 0dd65f86abd7 linux/Documentation/video4linux/gspca.txt
--- a/linux/Documentation/video4linux/gspca.txt Mon Dec 08 10:41:04 2008 +0100
+++ b/linux/Documentation/video4linux/gspca.txt Wed Dec 10 09:06:13 2008 +0100
@@ -271,6 +271,7 @@ zc3xx               10fd:8050       Typhoon Webshot II USB 
 zc3xx          10fd:8050       Typhoon Webshot II USB 300k
 ov534          1415:2000       Sony HD Eye for PS3 (SLEH 00201)
 pac207         145f:013a       Trust WB-1300N
+vc032x         15b8:6002       HP 2.0 Megapixel rz406aa
 spca501                1776:501c       Arowana 300K CMOS Camera
 t613           17a1:0128       TASCORP JPEG Webcam, NGS Cyclops
 vc032x         17ef:4802       Lenovo Vc0323+MI1310_SOC
diff -r ffeb9d2be572 -r 0dd65f86abd7 linux/drivers/media/video/gspca/vc032x.c
--- a/linux/drivers/media/video/gspca/vc032x.c  Mon Dec 08 10:41:04 2008 +0100
+++ b/linux/drivers/media/video/gspca/vc032x.c  Wed Dec 10 09:06:13 2008 +0100
@@ -47,7 +47,8 @@ struct sd {
 #define SENSOR_MI1310_SOC 3
 #define SENSOR_OV7660 4
 #define SENSOR_OV7670 5
-#define SENSOR_PO3130NC 6
+#define SENSOR_PO1200 6
+#define SENSOR_PO3130NC 7
 };
 
 /* V4L2 controls supported by the driver */
@@ -128,6 +129,14 @@ static struct v4l2_pix_format vc0323_mod
        {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
                .bytesperline = 640,
                .sizeimage = 640 * 480 * 3 / 8 + 590,
+               .colorspace = V4L2_COLORSPACE_JPEG,
+               .priv = 0},
+};
+
+static struct v4l2_pix_format svga_mode[] = {
+       {800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
+               .bytesperline = 800,
+               .sizeimage = 800 * 600 * 1 / 4 + 590,
                .colorspace = V4L2_COLORSPACE_JPEG,
                .priv = 0},
 };
@@ -1466,6 +1475,293 @@ static const __u8 ov7670_initQVGA_JPG[][
        {0x00, 0x77, 0x05, 0xaa },
        {},
 };
+
+/* PO1200 - values from usbvm326.inf and ms-win trace */
+static const __u8 po1200_gamma[17] = {
+#if 1
+       0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
+       0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
+#else
+/*ms-win trace*/
+       0x01, 0x0b, 0x1e, 0x38, 0x51, 0x6b, 0x83, 0x9a, 0xaf,
+       0xc1, 0xd0, 0xdd, 0xe8, 0xf2, 0xf9, 0xff, 0xff
+#endif
+};
+static const __u8 po1200_matrix[9] = {
+       0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e
+};
+static const __u8 po1200_initVGA_data[][4] = {
+       {0xb0, 0x03, 0x19, 0xcc},       /* reset? */
+#if 0
+       {0x00, 0x00, 0x64, 0xdd},
+       {0xb3, 0x49, 0x11, 0xcc},
+       {0x00, 0x00, 0x33, 0xdd},
+/*read b349*/
+#endif
+       {0xb0, 0x03, 0x19, 0xcc},
+/*     {0x00, 0x00, 0x33, 0xdd}, */
+       {0xb0, 0x04, 0x02, 0xcc},
+       {0xb0, 0x02, 0x02, 0xcc},
+       {0xb3, 0x5d, 0x00, 0xcc},
+       {0xb3, 0x01, 0x01, 0xcc},
+       {0xb3, 0x00, 0x64, 0xcc},
+       {0xb3, 0x00, 0x65, 0xcc},
+       {0xb3, 0x05, 0x01, 0xcc},
+       {0xb3, 0x06, 0x01, 0xcc},
+       {0xb3, 0x5c, 0x01, 0xcc},
+       {0xb3, 0x08, 0x01, 0xcc},
+       {0xb3, 0x09, 0x0c, 0xcc},
+       {0xb3, 0x00, 0x67, 0xcc},
+       {0xb3, 0x02, 0xb2, 0xcc},
+       {0xb3, 0x03, 0x18, 0xcc},
+       {0xb3, 0x04, 0x15, 0xcc},
+       {0xb3, 0x20, 0x00, 0xcc},
+       {0xb3, 0x21, 0x00, 0xcc},
+       {0xb3, 0x22, 0x02, 0xcc},
+       {0xb3, 0x23, 0x58, 0xcc},
+       {0xb3, 0x14, 0x00, 0xcc},
+       {0xb3, 0x15, 0x00, 0xcc},
+       {0xb3, 0x16, 0x03, 0xcc},
+       {0xb3, 0x17, 0x1f, 0xcc},
+       {0xbc, 0x00, 0x71, 0xcc},
+       {0xbc, 0x01, 0x01, 0xcc},
+       {0xb0, 0x54, 0x13, 0xcc},
+       {0xb3, 0x00, 0x67, 0xcc},
+       {0xb3, 0x34, 0x01, 0xcc},
+       {0xb3, 0x35, 0xdc, 0xcc},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x12, 0x05, 0xaa},
+       {0x00, 0x13, 0x02, 0xaa},
+       {0x00, 0x1e, 0xc6, 0xaa},
+       {0x00, 0x21, 0x00, 0xaa},
+       {0x00, 0x25, 0x02, 0xaa},
+       {0x00, 0x3c, 0x4f, 0xaa},
+       {0x00, 0x3f, 0xe0, 0xaa},
+       {0x00, 0x42, 0xff, 0xaa},
+       {0x00, 0x45, 0x34, 0xaa},
+       {0x00, 0x55, 0xfe, 0xaa},
+       {0x00, 0x59, 0xd3, 0xaa},
+       {0x00, 0x5e, 0x04, 0xaa},
+       {0x00, 0x61, 0xb8, 0xaa},
+       {0x00, 0x62, 0x02, 0xaa},
+       {0x00, 0xa7, 0x31, 0xaa},
+       {0x00, 0xa9, 0x66, 0xaa},
+       {0x00, 0xb0, 0x00, 0xaa},
+       {0x00, 0xb1, 0x00, 0xaa},
+       {0x00, 0xb3, 0x11, 0xaa},
+       {0x00, 0xb6, 0x26, 0xaa},
+       {0x00, 0xb7, 0x20, 0xaa},
+       {0x00, 0xba, 0x04, 0xaa},
+       {0x00, 0x88, 0x42, 0xaa},
+       {0x00, 0x89, 0x9a, 0xaa},
+       {0x00, 0x8a, 0x88, 0xaa},
+       {0x00, 0x8b, 0x8e, 0xaa},
+       {0x00, 0x8c, 0x3e, 0xaa},
+       {0x00, 0x8d, 0x90, 0xaa},
+       {0x00, 0x8e, 0x87, 0xaa},
+       {0x00, 0x8f, 0x96, 0xaa},
+       {0x00, 0x90, 0x3d, 0xaa},
+       {0x00, 0x64, 0x00, 0xaa},
+       {0x00, 0x65, 0x10, 0xaa},
+       {0x00, 0x66, 0x20, 0xaa},
+       {0x00, 0x67, 0x2b, 0xaa},
+       {0x00, 0x68, 0x36, 0xaa},
+       {0x00, 0x69, 0x49, 0xaa},
+       {0x00, 0x6a, 0x5a, 0xaa},
+       {0x00, 0x6b, 0x7f, 0xaa},
+       {0x00, 0x6c, 0x9b, 0xaa},
+       {0x00, 0x6d, 0xba, 0xaa},
+       {0x00, 0x6e, 0xd4, 0xaa},
+       {0x00, 0x6f, 0xea, 0xaa},
+       {0x00, 0x70, 0x00, 0xaa},
+       {0x00, 0x71, 0x10, 0xaa},
+       {0x00, 0x72, 0x20, 0xaa},
+       {0x00, 0x73, 0x2b, 0xaa},
+       {0x00, 0x74, 0x36, 0xaa},
+       {0x00, 0x75, 0x49, 0xaa},
+       {0x00, 0x76, 0x5a, 0xaa},
+       {0x00, 0x77, 0x7f, 0xaa},
+       {0x00, 0x78, 0x9b, 0xaa},
+       {0x00, 0x79, 0xba, 0xaa},
+       {0x00, 0x7a, 0xd4, 0xaa},
+       {0x00, 0x7b, 0xea, 0xaa},
+       {0x00, 0x7c, 0x00, 0xaa},
+       {0x00, 0x7d, 0x10, 0xaa},
+       {0x00, 0x7e, 0x20, 0xaa},
+       {0x00, 0x7f, 0x2b, 0xaa},
+       {0x00, 0x80, 0x36, 0xaa},
+       {0x00, 0x81, 0x49, 0xaa},
+       {0x00, 0x82, 0x5a, 0xaa},
+       {0x00, 0x83, 0x7f, 0xaa},
+       {0x00, 0x84, 0x9b, 0xaa},
+       {0x00, 0x85, 0xba, 0xaa},
+       {0x00, 0x86, 0xd4, 0xaa},
+       {0x00, 0x87, 0xea, 0xaa},
+       {0x00, 0x57, 0x2a, 0xaa},
+       {0x00, 0x03, 0x01, 0xaa},
+       {0x00, 0x04, 0x10, 0xaa},
+       {0x00, 0x05, 0x10, 0xaa},
+       {0x00, 0x06, 0x10, 0xaa},
+       {0x00, 0x07, 0x10, 0xaa},
+       {0x00, 0x08, 0x13, 0xaa},
+       {0x00, 0x0a, 0x00, 0xaa},
+       {0x00, 0x0b, 0x10, 0xaa},
+       {0x00, 0x0c, 0x20, 0xaa},
+       {0x00, 0x0d, 0x18, 0xaa},
+       {0x00, 0x22, 0x01, 0xaa},
+       {0x00, 0x23, 0x60, 0xaa},
+       {0x00, 0x25, 0x08, 0xaa},
+       {0x00, 0x26, 0x82, 0xaa},
+       {0x00, 0x2e, 0x0f, 0xaa},
+       {0x00, 0x2f, 0x1e, 0xaa},
+       {0x00, 0x30, 0x2d, 0xaa},
+       {0x00, 0x31, 0x3c, 0xaa},
+       {0x00, 0x32, 0x4b, 0xaa},
+       {0x00, 0x33, 0x5a, 0xaa},
+       {0x00, 0x34, 0x69, 0xaa},
+       {0x00, 0x35, 0x78, 0xaa},
+       {0x00, 0x36, 0x87, 0xaa},
+       {0x00, 0x37, 0x96, 0xaa},
+       {0x00, 0x38, 0xa5, 0xaa},
+       {0x00, 0x39, 0xb4, 0xaa},
+       {0x00, 0x3a, 0xc3, 0xaa},
+       {0x00, 0x3b, 0xd2, 0xaa},
+       {0x00, 0x3c, 0xe1, 0xaa},
+       {0x00, 0x3e, 0xff, 0xaa},
+       {0x00, 0x3f, 0xff, 0xaa},
+       {0x00, 0x40, 0xff, 0xaa},
+       {0x00, 0x41, 0xff, 0xaa},
+       {0x00, 0x42, 0xff, 0xaa},
+       {0x00, 0x43, 0xff, 0xaa},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x20, 0xc4, 0xaa},
+       {0x00, 0x13, 0x03, 0xaa},
+       {0x00, 0x3c, 0x50, 0xaa},
+       {0x00, 0x61, 0x6a, 0xaa},
+       {0x00, 0x51, 0x5b, 0xaa},
+       {0x00, 0x52, 0x91, 0xaa},
+       {0x00, 0x53, 0x4c, 0xaa},
+       {0x00, 0x54, 0x50, 0xaa},
+       {0x00, 0x56, 0x02, 0xaa},
+       {0xb6, 0x00, 0x00, 0xcc},
+       {0xb6, 0x03, 0x03, 0xcc},
+       {0xb6, 0x02, 0x20, 0xcc},
+       {0xb6, 0x05, 0x02, 0xcc},
+       {0xb6, 0x04, 0x58, 0xcc},
+       {0xb6, 0x12, 0xf8, 0xcc},
+       {0xb6, 0x13, 0x21, 0xcc},
+       {0xb6, 0x18, 0x03, 0xcc},
+       {0xb6, 0x17, 0xa9, 0xcc},
+       {0xb6, 0x16, 0x80, 0xcc},
+       {0xb6, 0x22, 0x12, 0xcc},
+       {0xb6, 0x23, 0x0b, 0xcc},
+       {0xbf, 0xc0, 0x39, 0xcc},
+       {0xbf, 0xc1, 0x04, 0xcc},
+       {0xbf, 0xcc, 0x00, 0xcc},
+       {0xb8, 0x06, 0x20, 0xcc},
+       {0xb8, 0x07, 0x03, 0xcc},
+       {0xb8, 0x08, 0x58, 0xcc},
+       {0xb8, 0x09, 0x02, 0xcc},
+       {0xb3, 0x01, 0x41, 0xcc},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0xd9, 0x0f, 0xaa},
+       {0x00, 0xda, 0xaa, 0xaa},
+       {0x00, 0xd9, 0x10, 0xaa},
+       {0x00, 0xda, 0xaa, 0xaa},
+       {0x00, 0xd9, 0x11, 0xaa},
+       {0x00, 0xda, 0x00, 0xaa},
+       {0x00, 0xd9, 0x12, 0xaa},
+       {0x00, 0xda, 0xff, 0xaa},
+       {0x00, 0xd9, 0x13, 0xaa},
+       {0x00, 0xda, 0xff, 0xaa},
+       {0x00, 0xe8, 0x11, 0xaa},
+       {0x00, 0xe9, 0x12, 0xaa},
+       {0x00, 0xea, 0x5c, 0xaa},
+       {0x00, 0xeb, 0xff, 0xaa},
+       {0x00, 0xd8, 0x80, 0xaa},
+       {0x00, 0xe6, 0x02, 0xaa},
+       {0x00, 0xd6, 0x40, 0xaa},
+       {0x00, 0xe3, 0x05, 0xaa},
+       {0x00, 0xe0, 0x40, 0xaa},
+       {0x00, 0xde, 0x03, 0xaa},
+       {0x00, 0xdf, 0x03, 0xaa},
+       {0x00, 0xdb, 0x02, 0xaa},
+       {0x00, 0xdc, 0x00, 0xaa},
+       {0x00, 0xdd, 0x03, 0xaa},
+       {0x00, 0xe1, 0x08, 0xaa},
+       {0x00, 0xe2, 0x01, 0xaa},
+       {0x00, 0xd6, 0x40, 0xaa},
+       {0x00, 0xe4, 0x40, 0xaa},
+       {0x00, 0xa8, 0x9f, 0xaa},
+       {0x00, 0xb4, 0x16, 0xaa},
+       {0xb0, 0x02, 0x06, 0xcc},
+       {0xb0, 0x18, 0x06, 0xcc},
+       {0xb0, 0x19, 0x06, 0xcc},
+       {0xb3, 0x5d, 0x18, 0xcc},
+       {0xb3, 0x05, 0x00, 0xcc},
+       {0xb3, 0x06, 0x00, 0xcc},
+       {0x00, 0xb4, 0x0e, 0xaa},
+       {0x00, 0xb5, 0x49, 0xaa},
+       {0x00, 0xb6, 0x1c, 0xaa},
+       {0x00, 0xb7, 0x96, 0xaa},
+/* end of usbvm326.inf - start of ms-win trace */
+       {0xb6, 0x12, 0xf8, 0xcc},
+       {0xb6, 0x13, 0x3d, 0xcc},
+/*read b306*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x1a, 0x09, 0xaa},
+       {0x00, 0x1b, 0x8a, 0xaa},
+/*read b827*/
+       {0xb8, 0x27, 0x00, 0xcc},
+       {0xb8, 0x26, 0x60, 0xcc},
+       {0xb8, 0x26, 0x60, 0xcc},
+/*gamma - to do?*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0xae, 0x84, 0xaa},
+/*gamma again*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x96, 0xa0, 0xaa},
+/*matrix*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x91, 0x35, 0xaa},
+       {0x00, 0x92, 0x22, 0xaa},
+/*gamma*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x95, 0x85, 0xaa},
+/*matrix*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x61, 0xb8, 0xaa},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x4d, 0x20, 0xaa},
+       {0xb8, 0x22, 0x40, 0xcc},
+       {0xb8, 0x23, 0x40, 0xcc},
+       {0xb8, 0x24, 0x40, 0xcc},
+       {0xb8, 0x81, 0x09, 0xcc},
+       {0x00, 0x00, 0x64, 0xdd},
+       {0x00, 0x03, 0x01, 0xaa},
+/*read 46*/
+       {0x00, 0x46, 0x3c, 0xaa},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x16, 0x40, 0xaa},
+       {0x00, 0x17, 0x40, 0xaa},
+       {0x00, 0x18, 0x40, 0xaa},
+       {0x00, 0x19, 0x41, 0xaa},
+       {0x00, 0x03, 0x01, 0xaa},
+       {0x00, 0x46, 0x3c, 0xaa},
+       {0x00, 0x00, 0x18, 0xdd},
+/*read bfff*/
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0x1e, 0x46, 0xaa},
+       {0x00, 0xa8, 0x8f, 0xaa},
+       {0x00, 0x03, 0x00, 0xaa},
+       {0x00, 0xb4, 0x1c, 0xaa},
+       {0x00, 0xb5, 0x92, 0xaa},
+       {0x00, 0xb6, 0x39, 0xaa},
+       {0x00, 0xb7, 0x24, 0xaa},
+/*write 89 0400 1415*/
+};
+
 struct sensor_info {
        int sensorId;
        __u8 I2cAdd;
@@ -1486,6 +1782,7 @@ static const struct sensor_info sensor_i
        {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},
 /* (tested in vc032x_probe_sensor) */
 /*     {SENSOR_MI0360,     0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */
+       {SENSOR_PO1200,     0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},
 };
 
 /* read 'len' bytes in gspca_dev->usb_buf */
@@ -1709,6 +2006,9 @@ static int sd_config(struct gspca_dev *g
        case SENSOR_OV7670:
                PDEBUG(D_PROBE, "Find Sensor OV7670");
                break;
+       case SENSOR_PO1200:
+               PDEBUG(D_PROBE, "Find Sensor PO1200");
+               break;
        case SENSOR_PO3130NC:
                PDEBUG(D_PROBE, "Find Sensor PO3130NC");
                break;
@@ -1719,8 +2019,13 @@ static int sd_config(struct gspca_dev *g
                cam->cam_mode = vc0321_mode;
                cam->nmodes = ARRAY_SIZE(vc0321_mode);
        } else {
-               cam->cam_mode = vc0323_mode;
-               cam->nmodes = ARRAY_SIZE(vc0323_mode);
+               if (sensor != SENSOR_PO1200) {
+                       cam->cam_mode = vc0323_mode;
+                       cam->nmodes = ARRAY_SIZE(vc0323_mode);
+               } else {
+                       cam->cam_mode = svga_mode;
+                       cam->nmodes = ARRAY_SIZE(svga_mode);
+               }
        }
 
        sd->qindex = 7;
@@ -1895,6 +2200,11 @@ static int sd_start(struct gspca_dev *gs
                }
                usb_exchange(gspca_dev, po3130_rundata);
                break;
+       case SENSOR_PO1200:
+               GammaT = po1200_gamma;
+               MatrixT = po1200_matrix;
+               usb_exchange(gspca_dev, po1200_initVGA_data);
+               break;
        default:
                PDEBUG(D_PROBE, "Damned !! no sensor found Bye");
                return -EMEDIUMTYPE;
@@ -1927,11 +2237,15 @@ static int sd_start(struct gspca_dev *gs
                reg_w(gspca_dev->dev, 0xa0, 0x23, 0xb800); * ISP CTRL_BAS
                */
                /* set the led on 0x0892 0x0896 */
-               reg_w(gspca_dev->dev, 0x89, 0xffff, 0xfdff);
-               msleep(100);
-               setquality(gspca_dev);
-               sethvflip(gspca_dev);
-               setlightfreq(gspca_dev);
+               if (sd->sensor != SENSOR_PO1200) {
+                       reg_w(gspca_dev->dev, 0x89, 0xffff, 0xfdff);
+                       msleep(100);
+                       setquality(gspca_dev);
+                       sethvflip(gspca_dev);
+                       setlightfreq(gspca_dev);
+               } else {
+                       reg_w(gspca_dev->dev, 0x89, 0x0400, 0x1415);
+               }
        }
        return 0;
 }
@@ -2078,6 +2392,7 @@ static const __devinitdata struct usb_de
        {USB_DEVICE(0x0ac8, 0x0328), .driver_info = BRIDGE_VC0321},
        {USB_DEVICE(0x0ac8, 0xc001), .driver_info = BRIDGE_VC0321},
        {USB_DEVICE(0x0ac8, 0xc002), .driver_info = BRIDGE_VC0321},
+       {USB_DEVICE(0x15b8, 0x6002), .driver_info = BRIDGE_VC0323},
        {USB_DEVICE(0x17ef, 0x4802), .driver_info = BRIDGE_VC0323},
        {}
 };


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/0dd65f86abd7682b852ad15022514debf1b5ff6f

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to