Commit 6b33e5e7 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB: gspca_spca561: Fix LED on rev12a cameras



Fix LED control on rev12a cameras and remove the unneeded
sd_stop0 callback function.

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent cc2a8335
Loading
Loading
Loading
Loading
+11 −23
Original line number Diff line number Diff line
@@ -249,9 +249,9 @@ static const __u16 Pb100_2map8300[][2] = {
};

static const __u16 spca561_161rev12A_data1[][2] = {
	{0x29, 0x8118},		/* white balance - was 21 */
	{0x08, 0x8114},		/* white balance - was 01 */
	{0x0e, 0x8112},		/* white balance - was 00 */
	{0x29, 0x8118},		/* Control register (various enable bits) */
	{0x08, 0x8114},		/* GPIO: Led off */
	{0x0e, 0x8112},		/* 0x0e stream off 0x3e stream on */
	{0x00, 0x8102},		/* white balance - new */
	{0x92, 0x8804},
	{0x04, 0x8802},		/* windows uses 08 */
@@ -263,15 +263,11 @@ static const __u16 spca561_161rev12A_data2[][2] = {
	{0x07, 0x8601},
	{0x07, 0x8602},
	{0x04, 0x8501},
	{0x21, 0x8118},

	{0x07, 0x8201},		/* windows uses 02 */
	{0x08, 0x8200},
	{0x01, 0x8200},

	{0x00, 0x8114},
	{0x01, 0x8114},		/* windows uses 00 */

	{0x90, 0x8604},
	{0x00, 0x8605},
	{0xb0, 0x8603},
@@ -302,6 +298,9 @@ static const __u16 spca561_161rev12A_data2[][2] = {
	{0xf0, 0x8505},
	{0x32, 0x850a},
/*	{0x99, 0x8700},		 * - white balance - new (removed) */
	/* HDG we used to do this in stop0, making the init state and the state
	   after a start / stop different, so do this here instead. */
	{0x29, 0x8118},
	{}
};

@@ -645,6 +644,9 @@ static int sd_start_12a(struct gspca_dev *gspca_dev)
	setwhite(gspca_dev);
	setgain(gspca_dev);
	setexposure(gspca_dev);

	/* Led ON (bit 3 -> 0 */
	reg_w_val(gspca_dev->dev, 0x8114, 0x00);
	return 0;
}
static int sd_start_72a(struct gspca_dev *gspca_dev)
@@ -691,26 +693,14 @@ static void sd_stopN(struct gspca_dev *gspca_dev)

	if (sd->chip_revision == Rev012A) {
		reg_w_val(gspca_dev->dev, 0x8112, 0x0e);
		/* Led Off (bit 3 -> 1 */
		reg_w_val(gspca_dev->dev, 0x8114, 0x08);
	} else {
		reg_w_val(gspca_dev->dev, 0x8112, 0x20);
/*		reg_w_val(gspca_dev->dev, 0x8102, 0x00); ?? */
	}
}

/* called on streamoff with alt 0 and on disconnect */
static void sd_stop0(struct gspca_dev *gspca_dev)
{
	struct sd *sd = (struct sd *) gspca_dev;

	if (!gspca_dev->present)
		return;
	if (sd->chip_revision == Rev012A) {
		reg_w_val(gspca_dev->dev, 0x8118, 0x29);
		reg_w_val(gspca_dev->dev, 0x8114, 0x08);
	}
/*	reg_w_val(gspca_dev->dev, 0x8114, 0); */
}

static void do_autogain(struct gspca_dev *gspca_dev)
{
	struct sd *sd = (struct sd *) gspca_dev;
@@ -1028,7 +1018,6 @@ static const struct sd_desc sd_desc_12a = {
	.init = sd_init_12a,
	.start = sd_start_12a,
	.stopN = sd_stopN,
	.stop0 = sd_stop0,
	.pkt_scan = sd_pkt_scan,
};
static const struct sd_desc sd_desc_72a = {
@@ -1039,7 +1028,6 @@ static const struct sd_desc sd_desc_72a = {
	.init = sd_init_72a,
	.start = sd_start_72a,
	.stopN = sd_stopN,
	.stop0 = sd_stop0,
	.pkt_scan = sd_pkt_scan,
	.dq_callback = do_autogain,
};