/*
+ * $Id: saa7134.h,v 1.27 2004/11/04 11:03:52 kraxel Exp $
+ *
* v4l2 device driver for philips saa7134 based TV cards
*
* (c) 2001,02 Gerd Knorr <kraxel@bytesex.org>
#include <asm/io.h>
-#include <media/video-buf.h>
#include <media/tuner.h>
#include <media/audiochip.h>
#include <media/id.h>
#include <media/ir-common.h>
+#include <media/video-buf.h>
+#include <media/video-buf-dvb.h>
#ifndef TRUE
# define TRUE (1==1)
#define SAA7134_BOARD_CINERGY200 38
#define SAA7134_BOARD_FLYTVPLATINUM 39
#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40
-
+#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41
+#define SAA7134_BOARD_SABRENT_SBTTVFM 42
+#define SAA7134_BOARD_ZOLID_XPERT_TV7134 43
+#define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44
+#define SAA7134_BOARD_AVERMEDIA_307 45
+#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46
+#define SAA7134_BOARD_CINERGY400_CARDBUS 47
+
+#define SAA7134_MAXBOARDS 8
#define SAA7134_INPUT_MAX 8
struct saa7134_input {
unsigned int tv:1;
};
+enum saa7134_mpeg_type {
+ SAA7134_MPEG_UNUSED,
+ SAA7134_MPEG_EMPRESS,
+ SAA7134_MPEG_DVB,
+};
+
struct saa7134_board {
char *name;
unsigned int audio_clock;
struct saa7134_input inputs[SAA7134_INPUT_MAX];
struct saa7134_input radio;
struct saa7134_input mute;
-
- /* peripheral I/O */
- unsigned int has_ts;
- enum saa7134_video_out video_out;
/* i2c chip info */
unsigned int tuner_type;
unsigned int tda9887_conf;
+
+ /* peripheral I/O */
+ enum saa7134_video_out video_out;
+ enum saa7134_mpeg_type mpeg;
};
#define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name)
-#define card_has_ts(dev) (saa7134_boards[dev->board].has_ts)
+#define card_is_empress(dev) (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg)
+#define card_is_dvb(dev) (SAA7134_MPEG_DVB == saa7134_boards[dev->board].mpeg)
+#define card_has_mpeg(dev) (SAA7134_MPEG_UNUSED != saa7134_boards[dev->board].mpeg)
#define card(dev) (saa7134_boards[dev->board])
#define card_in(dev,n) (saa7134_boards[dev->board].inputs[n])
unsigned int radio;
enum v4l2_buf_type type;
unsigned int resources;
-#ifdef VIDIOC_G_PRIORITY
+#ifdef VIDIOC_G_PRIORITY
enum v4l2_priority prio;
#endif
struct saa7134_pgtable pt_vbi;
};
-/* TS status */
-struct saa7134_ts {
- unsigned int users;
-
- /* TS capture */
- struct videobuf_queue ts;
- struct saa7134_pgtable pt_ts;
- int started;
-};
-
/* oss dsp status */
struct saa7134_oss {
struct semaphore lock;
struct timer_list timer;
};
+/* ts/mpeg status */
+struct saa7134_ts {
+ /* TS capture */
+ struct saa7134_pgtable pt_ts;
+ int nr_packets;
+ int nr_bufs;
+};
+
+/* ts/mpeg ops */
+struct saa7134_mpeg_ops {
+ enum saa7134_mpeg_type type;
+ struct list_head next;
+ int (*init)(struct saa7134_dev *dev);
+ int (*fini)(struct saa7134_dev *dev);
+};
+
/* global device status */
struct saa7134_dev {
struct list_head devlist;
struct semaphore lock;
spinlock_t slock;
-#ifdef VIDIOC_G_PRIORITY
+#ifdef VIDIOC_G_PRIORITY
struct v4l2_prio_state prio;
#endif
/* various device info */
unsigned int resources;
struct video_device *video_dev;
- struct video_device *ts_dev;
struct video_device *radio_dev;
struct video_device *vbi_dev;
struct saa7134_oss oss;
- struct saa7134_ts ts;
/* infrared remote */
int has_remote;
/* pci i/o */
char name[32];
+ int nr;
struct pci_dev *pci;
unsigned char pci_rev,pci_lat;
- __u32 *lmmio;
- __u8 *bmmio;
+ __u32 __iomem *lmmio;
+ __u8 __iomem *bmmio;
/* config info */
unsigned int board;
/* video+ts+vbi capture */
struct saa7134_dmaqueue video_q;
- struct saa7134_dmaqueue ts_q;
struct saa7134_dmaqueue vbi_q;
unsigned int video_fieldcount;
unsigned int vbi_fieldcount;
struct saa7134_input *hw_input;
unsigned int hw_mute;
int last_carrier;
+
+ /* SAA7134_MPEG_* */
+ struct saa7134_ts ts;
+ struct saa7134_dmaqueue ts_q;
+ struct saa7134_mpeg_ops *mops;
+
+ /* SAA7134_MPEG_EMPRESS only */
+ struct video_device *empress_dev;
+ struct videobuf_queue empress_tsq;
+ unsigned int empress_users;
+
+ /* SAA7134_MPEG_DVB only */
+ struct videobuf_dvb dvb;
};
/* ----------------------------------------------------------- */
#define saa_setb(reg,bit) saa_andorb((reg),(bit),(bit))
#define saa_clearb(reg,bit) saa_andorb((reg),(bit),0)
-#define saa_wait(d) { udelay(d); }
+#define saa_wait(us) { udelay(us); }
/* ----------------------------------------------------------- */
/* saa7134-core.c */
extern const unsigned int saa7134_bcount;
extern struct pci_device_id __devinitdata saa7134_pci_tbl[];
-extern int saa7134_board_init(struct saa7134_dev *dev);
+extern int saa7134_board_init1(struct saa7134_dev *dev);
+extern int saa7134_board_init2(struct saa7134_dev *dev);
/* ----------------------------------------------------------- */
/* ----------------------------------------------------------- */
/* saa7134-ts.c */
-extern struct video_device saa7134_ts_template;
+#define TS_PACKET_SIZE 188 /* TS packets 188 bytes */
+
+extern struct videobuf_queue_ops saa7134_ts_qops;
+
int saa7134_ts_init1(struct saa7134_dev *dev);
int saa7134_ts_fini(struct saa7134_dev *dev);
void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status);
+int saa7134_ts_register(struct saa7134_mpeg_ops *ops);
+void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops);
/* ----------------------------------------------------------- */
/* saa7134-vbi.c */