Browse Source

V4L/DVB (8353): gspca: 640x480 for bridge sn9c103 / sensor ov7630.

sonixb:   640x480 mode for sn9c103 - ov7630.

Signed-off-by: Andoni Zubimendi <andoni.zubimendi@gmail.com>
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Andoni Zubimendi 17 years ago
parent
commit
4b972d29bb
1 changed files with 16 additions and 4 deletions
  1. 16 4
      drivers/media/video/gspca/sonixb.c

+ 16 - 4
drivers/media/video/gspca/sonixb.c

@@ -278,8 +278,14 @@ static const __u8 ov7630_sensor_init[][8] = {
 	{0xa0, 0x21, 0x76, 0x02, 0xbd, 0x06, 0xf6, 0x16},
 	{0xa0, 0x21, 0x00, 0x10, 0xbd, 0x06, 0xf6, 0x15},	/* gain */
 };
-static const __u8 ov7630_sensor_init_3[][8] = {
-	{0xa0, 0x21, 0x10, 0x83, 0xbd, 0x06, 0xf6, 0x16},      /* exposure */
+static const __u8 ov7630_sensor_init_3[][5][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, 0x00, 0x10, 0xbd, 0x06, 0xf6, 0x15},	/* gain */
+	{0xb0, 0x21, 0x2a, 0xa0, 0x1c, 0x06, 0xf6, 0x1d},
+    },
+    {	{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 */
@@ -287,6 +293,7 @@ static const __u8 ov7630_sensor_init_3[][8] = {
 		* 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, 0x80, 0x60, 0x06, 0xf6, 0x1d},
+    }
 };
 
 static const __u8 initPas106[] = {
@@ -730,6 +737,11 @@ static int sd_config(struct gspca_dev *gspca_dev,
 	if (!sif) {
 		cam->cam_mode = vga_mode;
 		cam->nmodes = ARRAY_SIZE(vga_mode);
+		if (sd->sensor == SENSOR_OV7630_3) {
+			/* We only have 320x240 & 640x480 */
+			cam->cam_mode++;
+			cam->nmodes--;
+		}
 	} else {
 		cam->cam_mode = sif_mode;
 		cam->nmodes = ARRAY_SIZE(sif_mode);
@@ -877,8 +889,8 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		i2c_w_vector(gspca_dev, ov7630_sensor_init_com,
 				sizeof ov7630_sensor_init_com);
 		msleep(200);
-		i2c_w_vector(gspca_dev, ov7630_sensor_init_3,
-				sizeof ov7630_sensor_init_3);
+		i2c_w_vector(gspca_dev, ov7630_sensor_init_3[mode],
+				sizeof ov7630_sensor_init_3[mode]);
 		break;
 	case SENSOR_PAS106:
 		pas106_i2cinit(gspca_dev);