V4L/DVB (6238): bw-qcam: use data_reverse instead of manually poking the control...
authorBrett Warden <brett.warden@gmail.com>
Fri, 28 Sep 2007 06:19:04 +0000 (03:19 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Wed, 10 Oct 2007 01:14:50 +0000 (22:14 -0300)
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: Brett T. Warden <brett.warden@gmail.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/bw-qcam.c

index 7d47cbe6ad25ac23654eb26d5789e5f7d848c843..0edd05ebcc3f05b80e1e18993350850ef28fedf8 100644 (file)
@@ -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)
 {
+       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);
 }
 
@@ -344,10 +355,13 @@ static int qc_detect(struct qcam_device *q)
        /* Be (even more) liberal in what you accept...  */
 
 /*     if (count > 30 && count < 200) */
-       if (count > 20 && count < 300)
+       if (count > 20 && count < 400)
+       {
                return 1;       /* found */
-       else
+       } else {
+               printk(KERN_ERR "No Quickcam found on port %s\n", q->pport->name);
                return 0;       /* not found */
+       }
 }