V4L/DVB (7308): pvrusb2: Define digital control scheme device attributes
authorMike Isely <isely@pobox.com>
Tue, 22 Apr 2008 17:45:40 +0000 (14:45 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 24 Apr 2008 17:07:47 +0000 (14:07 -0300)
Unlike analog control, control of the digital side is not nearly as
uniform among different devices.  So we have to specify the correct
digital control scheme as a new device attribute.

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

index 4522ad6320c252a685a9d4c787f6df696e3b1f64..1a60591e38b5c1d4226dc5ce23daca98e1c85a34 100644 (file)
@@ -137,11 +137,11 @@ static const struct pvr2_device_desc pvr2_device_onair_creator = {
                .client_modules.lst = pvr2_client_onair_creator,
                .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_creator),
                .default_tuner_type = TUNER_LG_TDVS_H06XF,
-               .flag_has_digitaltuner = !0,
                .flag_has_analogtuner = !0,
                .flag_has_composite = !0,
                .flag_has_svideo = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
+               .digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR,
 };
 #endif
 
@@ -163,11 +163,11 @@ static const struct pvr2_device_desc pvr2_device_onair_usb2 = {
                .client_modules.lst = pvr2_client_onair_usb2,
                .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_usb2),
                .default_tuner_type = TUNER_PHILIPS_ATSC,
-               .flag_has_digitaltuner = !0,
                .flag_has_analogtuner = !0,
                .flag_has_composite = !0,
                .flag_has_svideo = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
+               .digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR,
 };
 #endif
 
@@ -229,11 +229,11 @@ static const struct pvr2_device_desc pvr2_device_75xxx = {
                .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx),
                .flag_has_cx25840 = !0,
                .flag_has_hauppauge_rom = !0,
-               .flag_has_digitaltuner = !0,
                .flag_has_analogtuner = !0,
                .flag_has_composite = !0,
                .flag_has_svideo = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
+               .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,
                .default_std_mask = V4L2_STD_NTSC_M,
 };
 
index b564121803bbc8ca1b4c7d13fe99dccdfc57ba55..4e4798d6139fd5bcede2392ca3f465e935fdf127 100644 (file)
@@ -39,6 +39,10 @@ struct pvr2_string_table {
 #define PVR2_ROUTING_SCHEME_HAUPPAUGE 0
 #define PVR2_ROUTING_SCHEME_GOTVIEW 1
 
+#define PVR2_DIGITAL_SCHEME_NONE 0
+#define PVR2_DIGITAL_SCHEME_HAUPPAUGE 1
+#define PVR2_DIGITAL_SCHEME_ONAIR 2
+
 /* This describes a particular hardware type (except for the USB device ID
    which must live in a separate structure due to environmental
    constraints).  See the top of pvrusb2-hdw.c for where this is
@@ -66,6 +70,13 @@ struct pvr2_device_desc {
           drivers (search for things which touch this field). */
        unsigned int signal_routing_scheme;
 
+       /* Control scheme to use if there is a digital tuner.  This
+          contains one of PVR2_DIGITAL_SCHEME_XXX.  This is an arbitrary
+          integer scheme id; its meaning is contained entirely within the
+          driver and is interpreted by logic which must control the
+          streaming pathway (search for things which touch this field). */
+       unsigned int digital_control_scheme;
+
        /* V4L tuner type ID to use with this device (only used if the
           driver could not discover the type any other way). */
        int default_tuner_type;
@@ -103,10 +114,11 @@ struct pvr2_device_desc {
           commands. */
        char flag_has_hauppauge_custom_ir;
 
-       /* These bits define which kinds of sources the device can handle. */
+       /* These bits define which kinds of sources the device can handle.
+          Note: Digital tuner presence is inferred by the
+          digital_control_scheme enumeration. */
        char flag_has_fmradio;       /* Has FM radio receiver */
        char flag_has_analogtuner;   /* Has analog tuner */
-       char flag_has_digitaltuner;  /* Has digital tuner */
        char flag_has_composite;     /* Has composite input */
        char flag_has_svideo;        /* Has s-video input */
 };
index 8eabb67e589599cbdfbe80accffdd904a1f93251..7016d3eda3241157696dc7f540dd678a2fb2adad 100644 (file)
@@ -1852,7 +1852,9 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
        /* Calculate which inputs are OK */
        m = 0;
        if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
-       if (hdw_desc->flag_has_digitaltuner) m |= 1 << PVR2_CVAL_INPUT_DTV;
+       if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
+               m |= 1 << PVR2_CVAL_INPUT_DTV;
+       }
        if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
        if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
        if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;