V4L/DVB (5047): Pvrusb2: Fix tuning calculation when in radio mode
authorMike Isely <isely@pobox.com>
Thu, 28 Dec 2006 02:23:22 +0000 (23:23 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Wed, 21 Feb 2007 15:34:32 +0000 (13:34 -0200)
Frequency units in V4L2 are apparently different when in radio mode
compared to tv mode.  Why?  Who knows.  This change adapts the driver
appropriately - so that internally we always only deal in Hz and don't
have to muck with craziness like this.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c

index c092083..c885a9c 100644 (file)
@@ -146,10 +146,15 @@ static void set_frequency(struct pvr2_hdw *hdw)
        fv = hdw->freqVal;
        pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 set_freq(%lu)",fv);
        memset(&freq,0,sizeof(freq));
-       freq.frequency = fv / 62500;
+       if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
+               // ((fv * 1000) / 62500)
+               freq.frequency = (fv * 2) / 125;
+               freq.type = V4L2_TUNER_RADIO;
+       } else {
+               freq.frequency = fv / 62500;
+               freq.type = V4L2_TUNER_ANALOG_TV;
+       }
        freq.tuner = 0;
-       freq.type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
-                    V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
        pvr2_i2c_core_cmd(hdw,VIDIOC_S_FREQUENCY,&freq);
 }