]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/pvrusb2/pvrusb2-devattr.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
[linux-2.6-omap-h63xx.git] / drivers / media / video / pvrusb2 / pvrusb2-devattr.h
index 64b467f0637f121e1ea4eb6b9eb9fe8a6be2ef01..cb3a33eb027660a12c3dc355271dbad6c35c69ac 100644 (file)
@@ -1,6 +1,5 @@
 /*
  *
- *  $Id$
  *
  *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
  *
@@ -23,6 +22,9 @@
 
 #include <linux/mod_devicetable.h>
 #include <linux/videodev2.h>
+#ifdef CONFIG_VIDEO_PVRUSB2_DVB
+#include "pvrusb2-dvb.h"
+#endif
 
 /*
 
@@ -39,6 +41,17 @@ 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
+
+#define PVR2_LED_SCHEME_NONE 0
+#define PVR2_LED_SCHEME_HAUPPAUGE 1
+
+#define PVR2_IR_SCHEME_NONE 0
+#define PVR2_IR_SCHEME_24XXX 1
+#define PVR2_IR_SCHEME_ZILOG 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
@@ -58,50 +71,86 @@ struct pvr2_device_desc {
           was initialized from internal ROM. */
        struct pvr2_string_table fx2_firmware;
 
+#ifdef CONFIG_VIDEO_PVRUSB2_DVB
+       /* callback functions to handle attachment of digital tuner & demod */
+       struct pvr2_dvb_props *dvb_props;
+
+#endif
+       /* Initial standard bits to use for this device, if not zero.
+          Anything set here is also implied as an available standard.
+          Note: This is ignored if overridden on the module load line via
+          the video_std module option. */
+       v4l2_std_id default_std_mask;
+
+       /* 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;
+
        /* Signal routing scheme used by device, contains one of
           PVR2_ROUTING_SCHEME_XXX.  Schemes have to be defined as we
           encounter them.  This is an arbitrary integer scheme id; its
           meaning is contained entirely within the driver and is
           interpreted by logic which must send commands to the chip-level
           drivers (search for things which touch this field). */
-       unsigned int signal_routing_scheme;
+       unsigned char signal_routing_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;
+       /* Indicates scheme for controlling device's LED (if any).  The
+          driver will turn on the LED when streaming is underway.  This
+          contains one of PVR2_LED_SCHEME_XXX. */
+       unsigned char led_scheme;
 
-       /* Initial standard bits to use for this device, if not zero.
-          Anything set here is also implied as an available standard.
-          Note: This is ignored if overridden on the module load line via
-          the video_std module option. */
-       v4l2_std_id default_std_mask;
+       /* 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 char digital_control_scheme;
 
        /* If set, we don't bother trying to load cx23416 firmware. */
-       char flag_skip_cx23416_firmware;
+       unsigned int flag_skip_cx23416_firmware:1;
+
+       /* If set, the encoder must be healthy in order for digital mode to
+          work (otherwise we assume that digital streaming will work even
+          if we fail to locate firmware for the encoder).  If the device
+          doesn't support digital streaming then this flag has no
+          effect. */
+       unsigned int flag_digital_requires_cx23416:1;
 
        /* Device has a hauppauge eeprom which we can interrogate. */
-       char flag_has_hauppauge_rom;
+       unsigned int flag_has_hauppauge_rom:1;
 
        /* Device does not require a powerup command to be issued. */
-       char flag_no_powerup;
+       unsigned int flag_no_powerup:1;
 
        /* Device has a cx25840 - this enables special additional logic to
           handle it. */
-       char flag_has_cx25840;
+       unsigned int flag_has_cx25840:1;
 
        /* Device has a wm8775 - this enables special additional logic to
           ensure that it is found. */
-       char flag_has_wm8775;
-
-       /* Device has IR hardware that can be faked into looking like a
-          normal Hauppauge i2c IR receiver.  This is currently very
-          specific to the 24xxx device, where Hauppauge had replaced their
-          'standard' I2C IR receiver with a bunch of FPGA logic controlled
-          directly via the FX2.  Turning this on tells the pvrusb2 driver
-          to virtualize the presence of the non-existant IR receiver chip and
-          implement the virtual receiver in terms of appropriate FX2
-          commands. */
-       char flag_has_hauppauge_custom_ir;
+       unsigned int flag_has_wm8775:1;
+
+       /* Indicate any specialized IR scheme that might need to be
+          supported by this driver.  If not set, then it is assumed that
+          IR can work without help from the driver (which is frequently
+          the case).  This is otherwise set to one of
+          PVR2_IR_SCHEME_xxxx.  For "xxxx", the value "24XXX" indicates a
+          Hauppauge 24xxx class device which has an FPGA-hosted IR
+          receiver that can only be reached via FX2 command codes.  In
+          that case the pvrusb2 driver will emulate the behavior of the
+          older 29xxx device's IR receiver (a "virtual" I2C chip) in terms
+          of those command codes.  For the value "ZILOG", we're dealing
+          with an IR chip that must be taken out of reset via another FX2
+          command code (which is the case for HVR-1950 devices). */
+       unsigned int ir_scheme:2;
+
+       /* These bits define which kinds of sources the device can handle.
+          Note: Digital tuner presence is inferred by the
+          digital_control_scheme enumeration. */
+       unsigned int flag_has_fmradio:1;       /* Has FM radio receiver */
+       unsigned int flag_has_analogtuner:1;   /* Has analog tuner */
+       unsigned int flag_has_composite:1;     /* Has composite input */
+       unsigned int flag_has_svideo:1;        /* Has s-video input */
 };
 
 extern struct usb_device_id pvr2_device_table[];