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

Commit 9e19db5b authored by Brett Warden's avatar Brett Warden Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (6238): bw-qcam: use data_reverse instead of manually poking the control register



Fixes use of parport_write_control() to match the newer interface that
requires explicit parport_data_reverse() and parport_data_forward() calls.
This eliminates the following error message and restores the original
intended behavior:

parport0 (bw-qcam): use data_reverse for this!

Also increases threshold in qc_detect() from 300 to 400, as my camera often
results in a count of approx 330.  Added a kernel error message to indicate
detection failure.

Thanks Ray and Randy for your comments, and for pointing out that I
needed to reset the port to forward mode!

Signed-off-by: default avatarBrett T. Warden <brett.warden@gmail.com>
Acked-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 0b67f5c5
Loading
Loading
Loading
Loading
+16 −2
Original line number Original line Diff line number Diff line
@@ -104,6 +104,17 @@ static inline void write_lpdata(struct qcam_device *q, int d)


static inline void write_lpcontrol(struct qcam_device *q, int d)
static inline void write_lpcontrol(struct qcam_device *q, int d)
{
{
	if(0x20 & d) {
		/* Set bidirectional mode to reverse (data in) */
		parport_data_reverse(q->pport);
	} else {
		/* Set bidirectional mode to forward (data out) */
		parport_data_forward(q->pport);
	}

	/* Now issue the regular port command, but strip out the
	 * direction flag */
	d &= ~0x20;
	parport_write_control(q->pport, d);
	parport_write_control(q->pport, d);
}
}


@@ -344,11 +355,14 @@ static int qc_detect(struct qcam_device *q)
	/* Be (even more) liberal in what you accept...  */
	/* Be (even more) liberal in what you accept...  */


/*	if (count > 30 && count < 200) */
/*	if (count > 30 && count < 200) */
	if (count > 20 && count < 300)
	if (count > 20 && count < 400)
	{
		return 1;	/* found */
		return 1;	/* found */
	else
	} else {
		printk(KERN_ERR "No Quickcam found on port %s\n", q->pport->name);
		return 0;	/* not found */
		return 0;	/* not found */
	}
	}
}




/* Reset the QuickCam.  This uses the same sequence the Windows
/* Reset the QuickCam.  This uses the same sequence the Windows