ソースを参照

V4L/DVB (12621): gspca_mr97310a: Move detection of CIF sensor type to probe() function

gspca_mr97310a: Move detection of CIF sensor type to probe() function,
so that the right controls are set to disabled from the start, rather then
having them disappear all of a sudden when the stream is started.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Hans de Goede 16 年 前
コミット
5f5e26b1e6
1 ファイル変更34 行追加25 行削除
  1. 34 25
      drivers/media/video/gspca/mr97310a.c

+ 34 - 25
drivers/media/video/gspca/mr97310a.c

@@ -360,6 +360,8 @@ static int sd_config(struct gspca_dev *gspca_dev,
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct cam *cam;
+	__u8 *data = gspca_dev->usb_buf;
+	int err_code;
 
 	cam = &gspca_dev->cam;
 	cam->cam_mode = vga_mode;
@@ -372,6 +374,38 @@ static int sd_config(struct gspca_dev *gspca_dev,
 	if (id->idProduct == 0x010e) {
 		sd->cam_type = CAM_TYPE_CIF;
 		cam->nmodes--;
+
+		data[0] = 0x01;
+		data[1] = 0x01;
+		err_code = mr_write(gspca_dev, 2);
+		if (err_code < 0)
+			return err_code;
+
+		msleep(200);
+		data[0] = get_sensor_id(gspca_dev);
+		/*
+		 * Known CIF cameras. If you have another to report, please do
+		 *
+		 * Name			byte just read		sd->sensor_type
+		 *					reported by
+		 * Sakar Spy-shot	0x28		T. Kilgore	0
+		 * Innovage		0xf5 (unstable)	T. Kilgore	0
+		 * Vivitar Mini		0x53		H. De Goede	0
+		 * Vivitar Mini		0x08		T. Kilgore	1
+		 * Elta-Media 8212dc	0x23		T. Kaiser	1
+		 * Philips dig. keych.	0x37		T. Kilgore	1
+		 */
+		if ((data[0] & 0x78) == 8 ||
+		    ((data[0] & 0x2) == 0x2 && data[0] != 0x53))
+			sd->sensor_type = 1;
+		else
+			sd->sensor_type = 0;
+
+		PDEBUG(D_ERR, "Sensor type is %01x", sd->sensor_type);
+
+		if (sd->sensor_type == 0)
+			gspca_dev->ctrl_dis = (1 << BRIGHTNESS_IDX) |
+					      (1 << EXPOSURE_IDX) | (1 << GAIN_IDX);
 	} else {
 		sd->cam_type = CAM_TYPE_VGA;
 		gspca_dev->ctrl_dis = (1 << BRIGHTNESS_IDX) |
@@ -411,37 +445,12 @@ static int start_cif_cam(struct gspca_dev *gspca_dev)
 	};
 
 	/* Note: Some of the above descriptions guessed from MR97113A driver */
-	sd->sensor_type = 0;
 	data[0] = 0x01;
 	data[1] = 0x01;
 	err_code = mr_write(gspca_dev, 2);
 	if (err_code < 0)
 		return err_code;
 
-	msleep(200);
-	data[0] = get_sensor_id(gspca_dev);
-	/*
-	 * Known CIF cameras. If you have another to report, please do
-	 *
-	 * Name			byte just read		sd->sensor_type
-	 *					reported by
-	 * Sakar Spy-shot	0x28		T. Kilgore	0
-	 * Innovage		0xf5 (unstable)	T. Kilgore	0
-	 * Vivitar Mini		0x53		H. De Goede	0
-	 * Vivitar Mini		0x08		T. Kilgore	1
-	 * Elta-Media 8212dc	0x23		T. Kaiser	1
-	 * Philips dig. keych.	0x37		T. Kilgore	1
-	 */
-	if ((data[0] & 0x78) == 8 ||
-	    ((data[0] & 0x2) == 0x2 && data[0] != 0x53))
-		sd->sensor_type = 1;
-
-	PDEBUG(D_ERR, "Sensor type is %01x", sd->sensor_type);
-
-	if (sd->sensor_type == 0)
-		gspca_dev->ctrl_dis = (1 << BRIGHTNESS_IDX) |
-				      (1 << EXPOSURE_IDX) | (1 << GAIN_IDX);
-
 	memcpy(data, startup_string, 11);
 	if (sd->sensor_type)
 		data[5] = 0xbb;