Skip to contentSkip to conversation

gspca pac7302/pac7311: separate start

PATCH In review Németh Márton 1 participant 1 message Oct 31, 2009 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH 6/21 gspca pac7302/pac7311: separate start

From: Márton Németh <[email protected]>

Separate the start function. Remove the run-time decision for PAC7302 and PAC7311 sensors.

Cc Thomas Kaiser <[email protected]>
Cc Theodore Kilgore <[email protected]>
Cc Kyle Guinn <[email protected]>

---

drivers/media/video/gspca/pac7311.c +33 -17
diff -uprN f/drivers/media/video/gspca/pac7311.c g/drivers/media/video/gspca/pac7311.c
@@ -714,20 +714,40 @@ static int pac7311_sd_init(struct gspca_
 	return 0;
 }
 
-static int sd_start(struct gspca_dev *gspca_dev)
+static int pac7302_sd_start(struct gspca_dev *gspca_dev)
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 
 	sd->sof_read = 0;
 
-	if (sd->sensor == SENSOR_PAC7302) {
-		reg_w_var(gspca_dev, start_7302);
-		pac7302_setbrightcont(gspca_dev);
-		pac7302_setcolors(gspca_dev);
-	} else {
-		reg_w_var(gspca_dev, start_7311);
-		pac7311_setcontrast(gspca_dev);
-	}
+	reg_w_var(gspca_dev, start_7302);
+	pac7302_setbrightcont(gspca_dev);
+	pac7302_setcolors(gspca_dev);
+	setgain(gspca_dev);
+	setexposure(gspca_dev);
+	sethvflip(gspca_dev);
+
+	/* only resolution 640x480 is supported for pac7302 */
+
+	sd->sof_read = 0;
+	sd->autogain_ignore_frames = 0;
+	atomic_set(&sd->avg_lum, -1);
+
+	/* start stream */
+	reg_w(gspca_dev, 0xff, 0x01);
+	reg_w(gspca_dev, 0x78, 0x01);
+
+	return 0;
+}
+
+static int pac7311_sd_start(struct gspca_dev *gspca_dev)
+{
+	struct sd *sd = (struct sd *) gspca_dev;
+
+	sd->sof_read = 0;
+
+	reg_w_var(gspca_dev, start_7311);
+	pac7311_setcontrast(gspca_dev);
 	setgain(gspca_dev);
 	setexposure(gspca_dev);
 	sethvflip(gspca_dev);
@@ -745,8 +765,6 @@ static int sd_start(struct gspca_dev *gs
 		reg_w(gspca_dev, 0x87, 0x11);
 		break;
 	case 0:					/* 640x480 */
-		if (sd->sensor == SENSOR_PAC7302)
-			break;
 		reg_w(gspca_dev, 0xff, 0x01);
 		reg_w(gspca_dev, 0x17, 0x00);
 		reg_w(gspca_dev, 0x87, 0x12);
@@ -759,10 +777,8 @@ static int sd_start(struct gspca_dev *gs
 
 	/* start stream */
 	reg_w(gspca_dev, 0xff, 0x01);
-	if (sd->sensor == SENSOR_PAC7302)
-		reg_w(gspca_dev, 0x78, 0x01);
-	else
-		reg_w(gspca_dev, 0x78, 0x05);
+	reg_w(gspca_dev, 0x78, 0x05);
+
 	return 0;
 }
 
@@ -1160,7 +1176,7 @@ static struct sd_desc pac7302_sd_desc =
 	.nctrls = ARRAY_SIZE(sd_ctrls),
 	.config = pac7302_sd_config,
 	.init = pac7302_sd_init,
-	.start = sd_start,
+	.start = pac7302_sd_start,
 	.stopN = sd_stopN,
 	.stop0 = sd_stop0,
 	.pkt_scan = pac7302_sd_pkt_scan,
@@ -1174,7 +1190,7 @@ static struct sd_desc pac7311_sd_desc =
 	.nctrls = ARRAY_SIZE(sd_ctrls),
 	.config = pac7311_sd_config,
 	.init = pac7311_sd_init,
-	.start = sd_start,
+	.start = pac7311_sd_start,
 	.stopN = sd_stopN,
 	.stop0 = sd_stop0,
 	.pkt_scan = pac7311_sd_pkt_scan,