]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c
V4L/DVB (5080): Pvrusb2: Allow streaming from /dev/radioX
[linux-2.6-omap-h63xx.git] / drivers / media / video / pvrusb2 / pvrusb2-i2c-cmd-v4l2.c
index 05ea17afe9037817567c710b4c06e3dae94ddc6b..51da8945efe4110a7c785bcee8c9758deed7f4f3 100644 (file)
 #include "pvrusb2-hdw-internal.h"
 #include "pvrusb2-debug.h"
 #include <linux/videodev2.h>
-
+#include <media/v4l2-common.h>
 
 static void set_standard(struct pvr2_hdw *hdw)
 {
-       v4l2_std_id vs;
-       vs = hdw->std_mask_cur;
-       pvr2_trace(PVR2_TRACE_CHIPS,
-                  "i2c v4l2 set_standard(0x%llx)",(long long unsigned)vs);
-
-       pvr2_i2c_core_cmd(hdw,VIDIOC_S_STD,&vs);
+       pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 set_standard");
+
+       if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
+               pvr2_i2c_core_cmd(hdw,AUDC_SET_RADIO,NULL);
+       } else {
+               v4l2_std_id vs;
+               vs = hdw->std_mask_cur;
+               pvr2_i2c_core_cmd(hdw,VIDIOC_S_STD,&vs);
+       }
 }
 
 
 static int check_standard(struct pvr2_hdw *hdw)
 {
-       return hdw->std_dirty != 0;
+       return (hdw->input_dirty != 0) || (hdw->std_dirty != 0);
 }
 
 
@@ -140,12 +143,18 @@ static void set_frequency(struct pvr2_hdw *hdw)
 {
        unsigned long fv;
        struct v4l2_frequency freq;
-       fv = hdw->freqVal;
+       fv = pvr2_hdw_get_cur_freq(hdw);
        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 = V4L2_TUNER_ANALOG_TV;
        pvr2_i2c_core_cmd(hdw,VIDIOC_S_FREQUENCY,&freq);
 }