Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f5e26b1 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab
Browse files

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: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 9ac6978a
Loading
Loading
Loading
Loading
+34 −25
Original line number Diff line number Diff line
@@ -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;