PATCH: gspca-mercurial SN9C103 fixes
"Andoni Zubimendi" <[email protected]> Wed, 9 Jul 2008 16:11:56 -0300
| Newsgroups | gmane.linux.drivers.spca50x.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi! With this patch my webcam works better. It works fine in 320x240.The brightness and contrast can't be adjusted yet. I've been working to make it work in 640x480, but I don't have a working patch yet. To make it work in different resolutions I need to change some bytes in ov7630_sensor_init_3, should I make an array for every resolution ? Or put in the initialization values in a local variable in sd_start? Regards, Andoni ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ Spca50x-devs mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/spca50x-devs
geniusVideoCamLook.patch
(text/x-patch, 3.4 KB)
diff -r 9ff62c80bf4c linux/drivers/media/video/gspca/sonixb.c
--- a/linux/drivers/media/video/gspca/sonixb.c Mon Jul 07 23:41:40 2008 +0000
+++ b/linux/drivers/media/video/gspca/sonixb.c Wed Jul 09 15:33:27 2008 -0300
@@ -207,10 +207,12 @@
static const __u8 initOv7630_3[] = {
0x44, 0x44, 0x00, 0x1a, 0x20, 0x20, 0x20, 0x80, /* r01 .. r08 */
0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, /* r09 .. r10 */
- 0x00, 0x02, 0x01, 0x0a, /* r11 .. r14 */
- 0x28, 0x1e, /* H & V sizes r15 .. r16 */
- 0x68, COMP1, MCK_INIT1, /* r17 .. r19 */
- 0x1d, 0x10, 0x02, 0x03, 0x0f, 0x0c /* r1a .. r1f */
+ 0x00, 0x01, 0x01, 0x0a, /* r11 .. r14 */
+ 0x16, 0x12, /* H & V sizes r15 .. r16 */
+ 0x68, 0x8f, MCK_INIT1, /* r17 .. r19 */
+ 0x1d, 0x10, 0x02, 0x03, 0x0f, 0x0c, 0x00, /* r1a .. r20 */
+ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, /* r21 .. r28 */
+ 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0xff /* r29 .. r30 */
};
static const __u8 ov7630_sensor_init_com[][8] = {
{0xa0, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10},
@@ -241,14 +243,14 @@
{0xa0, 0x21, 0x00, 0x10, 0xbd, 0x06, 0xf6, 0x15}, /* gain */
};
static const __u8 ov7630_sensor_init_3[][8] = {
- {0xa0, 0x21, 0x10, 0x36, 0xbd, 0x06, 0xf6, 0x16}, /* exposure */
- {0xa0, 0x21, 0x76, 0x03, 0xbd, 0x06, 0xf6, 0x16},
- {0xa0, 0x21, 0x11, 0x01, 0xbd, 0x06, 0xf6, 0x16},
+ {0xa0, 0x21, 0x10, 0x83, 0xbd, 0x06, 0xf6, 0x16}, /* exposure */
+ {0xa0, 0x21, 0x76, 0x00, 0xbd, 0x06, 0xf6, 0x16},
+ {0xa0, 0x21, 0x11, 0x00, 0xbd, 0x06, 0xf6, 0x16},
{0xa0, 0x21, 0x00, 0x10, 0xbd, 0x06, 0xf6, 0x15}, /* gain */
/* {0xb0, 0x21, 0x2a, 0xc0, 0x3c, 0x06, 0xf6, 0x1d},
* a0 1c,a0 1f,c0 3c frame rate ?line interval from ov6630 */
/* {0xb0, 0x21, 0x2a, 0xa0, 0x1f, 0x06, 0xf6, 0x1d}, * from win */
- {0xb0, 0x21, 0x2a, 0xa0, 0x1c, 0x06, 0xf6, 0x1d},
+ {0xb0, 0x21, 0x2a, 0x80, 0x60, 0x06, 0xf6, 0x1d},
};
static const __u8 initPas106[] = {
@@ -364,7 +366,7 @@
const __u8 *buffer,
int len)
{
- __u8 tmpbuf[32];
+ __u8 tmpbuf[48];
#ifdef CONFIG_VIDEO_ADV_DEBUG
if (len > sizeof tmpbuf) {
@@ -622,6 +624,7 @@
const __u8 *sn9c10x;
__u8 reg01, reg17;
__u8 reg17_19[3];
+ __u8 reg15[2] = { 0x28, 0x1e };
mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
switch (sd->sensor) {
@@ -684,7 +687,7 @@
case SENSOR_OV7630_3:
reg01 = 0x44;
reg17 = 0x68;
- l = 0x10;
+ l = sizeof initOv7630_3;
break;
default:
reg01 = sn9c10x[0];
@@ -742,18 +745,21 @@
break;
}
/* H_size V_size 0x28, 0x1e maybe 640x480 */
- reg_w(dev, 0x15, &sn9c10x[0x15 - 1], 2);
+ reg_w(dev, 0x15, reg15, 2);
/* compression register */
reg_w(dev, 0x18, ®17_19[1], 1);
/* H_start */ /*fixme: not ov7630*/
- reg_w(dev, 0x12, &sn9c10x[0x12 - 1], 1);
+ if (sd->sensor != SENSOR_OV7630_3)
+ reg_w(dev, 0x12, &sn9c10x[0x12 - 1], 1);
/* V_START */ /*fixme: not ov7630*/
- reg_w(dev, 0x13, &sn9c10x[0x13 - 1], 1);
+ if (sd->sensor != SENSOR_OV7630_3)
+ reg_w(dev, 0x13, &sn9c10x[0x13 - 1], 1);
/* reset 0x17 SensorClk enable inv Clk 0x60 */
/*fixme: ov7630 [17]=68 8f (+20 if 102)*/
reg_w(dev, 0x17, ®17_19[0], 1);
/*MCKSIZE ->3 */ /*fixme: not ov7630*/
- reg_w(dev, 0x19, ®17_19[2], 1);
+ if (sd->sensor != SENSOR_OV7630_3)
+ reg_w(dev, 0x19, ®17_19[2], 1);
/* AE_STRX AE_STRY AE_ENDX AE_ENDY */
reg_w(dev, 0x1c, &sn9c10x[0x1c - 1], 4);
/* Enable video transfert */
shot0001.png
(image/png, 226 KB) - not displayed