V4L/DVB (12587): Add support BeholdTV X7 card
[safe/jmp/linux-2.6] / drivers / media / video / saa7134 / saa7134.h
index 491ab1f..caefbf0 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <linux/version.h>
-#define SAA7134_VERSION_CODE KERNEL_VERSION(0,2,14)
+#define SAA7134_VERSION_CODE KERNEL_VERSION(0,2,15)
 
 #include <linux/pci.h>
 #include <linux/i2c.h>
@@ -35,6 +35,7 @@
 
 #include <media/v4l2-common.h>
 #include <media/v4l2-ioctl.h>
+#include <media/v4l2-device.h>
 #include <media/tuner.h>
 #include <media/ir-common.h>
 #include <media/ir-kbd-i2c.h>
@@ -251,7 +252,7 @@ struct saa7134_format {
 #define SAA7134_BOARD_BEHOLD_505FM     126
 #define SAA7134_BOARD_BEHOLD_507_9FM   127
 #define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128
-#define SAA7134_BOARD_BEHOLD_607_9FM   129
+#define SAA7134_BOARD_BEHOLD_607FM_MK3 129
 #define SAA7134_BOARD_BEHOLD_M6                130
 #define SAA7134_BOARD_TWINHAN_DTV_DVB_3056 131
 #define SAA7134_BOARD_GENIUS_TVGO_A11MCE   132
@@ -275,8 +276,27 @@ struct saa7134_format {
 #define SAA7134_BOARD_REAL_ANGEL_220     150
 #define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI  151
 #define SAA7134_BOARD_ASUSTeK_TIGER         152
-
-#define SAA7134_MAXBOARDS 8
+#define SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG 153
+#define SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS 154
+#define SAA7134_BOARD_HAUPPAUGE_HVR1150     155
+#define SAA7134_BOARD_HAUPPAUGE_HVR1120   156
+#define SAA7134_BOARD_AVERMEDIA_STUDIO_507UA 157
+#define SAA7134_BOARD_AVERMEDIA_CARDBUS_501 158
+#define SAA7134_BOARD_BEHOLD_505RDS         159
+#define SAA7134_BOARD_BEHOLD_507RDS_MK3     160
+#define SAA7134_BOARD_BEHOLD_507RDS_MK5     161
+#define SAA7134_BOARD_BEHOLD_607FM_MK5      162
+#define SAA7134_BOARD_BEHOLD_609FM_MK3      163
+#define SAA7134_BOARD_BEHOLD_609FM_MK5      164
+#define SAA7134_BOARD_BEHOLD_607RDS_MK3     165
+#define SAA7134_BOARD_BEHOLD_607RDS_MK5     166
+#define SAA7134_BOARD_BEHOLD_609RDS_MK3     167
+#define SAA7134_BOARD_BEHOLD_609RDS_MK5     168
+#define SAA7134_BOARD_VIDEOMATE_S350        169
+#define SAA7134_BOARD_AVERMEDIA_STUDIO_505  170
+#define SAA7134_BOARD_BEHOLD_X7             171
+
+#define SAA7134_MAXBOARDS 32
 #define SAA7134_INPUT_MAX 8
 
 /* ----------------------------------------------------------- */
@@ -307,6 +327,11 @@ enum saa7134_mpeg_type {
        SAA7134_MPEG_DVB,
 };
 
+enum saa7134_mpeg_ts_type {
+       SAA7134_MPEG_TS_PARALLEL = 0,
+       SAA7134_MPEG_TS_SERIAL,
+};
+
 struct saa7134_board {
        char                    *name;
        unsigned int            audio_clock;
@@ -322,6 +347,8 @@ struct saa7134_board {
        unsigned int            radio_type;
        unsigned char           tuner_addr;
        unsigned char           radio_addr;
+       unsigned char           empress_addr;
+       unsigned char           rds_addr;
 
        unsigned int            tda9887_conf;
        unsigned int            tuner_config;
@@ -329,6 +356,7 @@ struct saa7134_board {
        /* peripheral I/O */
        enum saa7134_video_out  video_out;
        enum saa7134_mpeg_type  mpeg;
+       enum saa7134_mpeg_ts_type ts_type;
        unsigned int            vid_port_opts;
 };
 
@@ -351,6 +379,7 @@ struct saa7134_board {
 #define INTERLACE_OFF          2
 
 #define BUFFER_TIMEOUT     msecs_to_jiffies(500)  /* 0.5 seconds */
+#define TS_BUFFER_TIMEOUT  msecs_to_jiffies(1000)  /* 1 second */
 
 struct saa7134_dev;
 struct saa7134_dma;
@@ -443,7 +472,6 @@ struct saa7134_dmasound {
        unsigned int               bufsize;
        struct saa7134_pgtable     pt;
        struct videobuf_dmabuf     dma;
-       wait_queue_head_t          wq;
        unsigned int               dma_blk;
        unsigned int               read_offset;
        unsigned int               read_count;
@@ -468,18 +496,13 @@ struct saa7134_mpeg_ops {
        void                       (*signal_change)(struct saa7134_dev *dev);
 };
 
-enum saa7134_ts_status {
-       SAA7134_TS_STOPPED,
-       SAA7134_TS_BUFF_DONE,
-       SAA7134_TS_STARTED,
-};
-
 /* global device status */
 struct saa7134_dev {
        struct list_head           devlist;
        struct mutex               lock;
        spinlock_t                 slock;
        struct v4l2_prio_state     prio;
+       struct v4l2_device         v4l2_dev;
        /* workstruct for loading modules */
        struct work_struct request_module_wk;
 
@@ -519,6 +542,7 @@ struct saa7134_dev {
        struct i2c_adapter         i2c_adap;
        struct i2c_client          i2c_client;
        unsigned char              eedata[256];
+       int                        has_rds;
 
        /* video overlay */
        struct v4l2_framebuffer    ovbuf;
@@ -567,10 +591,8 @@ struct saa7134_dev {
        /* SAA7134_MPEG_* */
        struct saa7134_ts          ts;
        struct saa7134_dmaqueue    ts_q;
-       enum saa7134_ts_status     ts_state;
-       unsigned int               buff_cnt;
+       int                        ts_started;
        struct saa7134_mpeg_ops    *mops;
-       struct i2c_client          *mpeg_i2c_client;
 
        /* SAA7134_MPEG_EMPRESS only */
        struct video_device        *empress_dev;
@@ -581,11 +603,12 @@ struct saa7134_dev {
 
 #if defined(CONFIG_VIDEO_SAA7134_DVB) || defined(CONFIG_VIDEO_SAA7134_DVB_MODULE)
        /* SAA7134_MPEG_DVB only */
-       struct videobuf_dvb        dvb;
+       struct videobuf_dvb_frontends frontends;
        int (*original_demod_sleep)(struct dvb_frontend *fe);
        int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
        int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg);
 #endif
+       void (*gate_ctrl)(struct saa7134_dev *dev, int open);
 };
 
 /* ----------------------------------------------------------- */
@@ -614,10 +637,31 @@ struct saa7134_dev {
                V4L2_STD_NTSC   | V4L2_STD_PAL_M | \
                V4L2_STD_PAL_60)
 
+#define GRP_EMPRESS (1)
+#define saa_call_all(dev, o, f, args...) do {                          \
+       if (dev->gate_ctrl)                                             \
+               dev->gate_ctrl(dev, 1);                                 \
+       v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args);       \
+       if (dev->gate_ctrl)                                             \
+               dev->gate_ctrl(dev, 0);                                 \
+} while (0)
+
+#define saa_call_empress(dev, o, f, args...) ({                                \
+       long _rc;                                                       \
+       if (dev->gate_ctrl)                                             \
+               dev->gate_ctrl(dev, 1);                                 \
+       _rc = v4l2_device_call_until_err(&(dev)->v4l2_dev,              \
+                                        GRP_EMPRESS, o, f , ##args);   \
+       if (dev->gate_ctrl)                                             \
+               dev->gate_ctrl(dev, 0);                                 \
+       _rc;                                                            \
+})
+
 /* ----------------------------------------------------------- */
 /* saa7134-core.c                                              */
 
 extern struct list_head  saa7134_devlist;
+extern struct mutex saa7134_devlist_lock;
 extern int saa7134_no_overlay;
 
 void saa7134_track_gpio(struct saa7134_dev *dev, char *msg);
@@ -666,10 +710,6 @@ int saa7134_tuner_callback(void *priv, int component, int command, int arg);
 
 int saa7134_i2c_register(struct saa7134_dev *dev);
 int saa7134_i2c_unregister(struct saa7134_dev *dev);
-void saa7134_i2c_call_clients(struct saa7134_dev *dev,
-                             unsigned int cmd, void *arg);
-int saa7134_i2c_call_saa6752(struct saa7134_dev *dev,
-                             unsigned int cmd, void *arg);
 
 
 /* ----------------------------------------------------------- */
@@ -709,6 +749,9 @@ void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops);
 
 int saa7134_ts_init_hw(struct saa7134_dev *dev);
 
+int saa7134_ts_start(struct saa7134_dev *dev);
+int saa7134_ts_stop(struct saa7134_dev *dev);
+
 /* ----------------------------------------------------------- */
 /* saa7134-vbi.c                                               */
 
@@ -756,7 +799,7 @@ void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status);
 int  saa7134_input_init1(struct saa7134_dev *dev);
 void saa7134_input_fini(struct saa7134_dev *dev);
 void saa7134_input_irq(struct saa7134_dev *dev);
-void saa7134_set_i2c_ir(struct saa7134_dev *dev, struct IR_i2c *ir);
+void saa7134_probe_i2c_ir(struct saa7134_dev *dev);
 void saa7134_ir_start(struct saa7134_dev *dev, struct card_ir *ir);
 void saa7134_ir_stop(struct saa7134_dev *dev);