Merge branches 'msm-fixes' and 'msm-video' of git://codeaurora.org/quic/kernel/dwalke...
[pandora-kernel.git] / drivers / media / video / saa7164 / saa7164.h
index a8a29e5..1d9c5cb 100644 (file)
@@ -51,6 +51,8 @@
 #include <linux/version.h>
 #include <linux/mutex.h>
 #include <linux/crc32.h>
+#include <linux/kthread.h>
+#include <linux/freezer.h>
 
 #include <media/tuner.h>
 #include <media/tveeprom.h>
 
 #define SAA7164_MAX_UNITS              8
 #define SAA7164_TS_NUMBER_OF_LINES     312
+#define SAA7164_PS_NUMBER_OF_LINES     256
 #define SAA7164_PT_ENTRIES             16 /* (312 * 188) / 4096 */
 #define SAA7164_MAX_ENCODER_BUFFERS    64 /* max 5secs of latency at 6Mbps */
+#define SAA7164_MAX_VBI_BUFFERS                64
 
 /* Port related defines */
 #define SAA7164_PORT_TS1       (0)
 #define SAA7164_PORT_TS2       (SAA7164_PORT_TS1 + 1)
 #define SAA7164_PORT_ENC1      (SAA7164_PORT_TS2 + 1)
 #define SAA7164_PORT_ENC2      (SAA7164_PORT_ENC1 + 1)
-#define SAA7164_MAX_PORTS      (SAA7164_PORT_ENC2 + 1)
+#define SAA7164_PORT_VBI1      (SAA7164_PORT_ENC2 + 1)
+#define SAA7164_PORT_VBI2      (SAA7164_PORT_VBI1 + 1)
+#define SAA7164_MAX_PORTS      (SAA7164_PORT_VBI2 + 1)
 
 #define DBGLVL_FW    4
 #define DBGLVL_DVB   8
 #define DBGLVL_IRQ 256
 #define DBGLVL_BUF 512
 #define DBGLVL_ENC 1024
+#define DBGLVL_VBI 2048
+#define DBGLVL_THR 4096
+#define DBGLVL_CPU 8192
 
-#define SAA7164_NORMS ( V4L2_STD_NTSC_M |  V4L2_STD_NTSC_M_JP |  V4L2_STD_NTSC_443 )
+#define SAA7164_NORMS (V4L2_STD_NTSC_M |  V4L2_STD_NTSC_M_JP |  V4L2_STD_NTSC_443)
 
 enum port_t {
        SAA7164_MPEG_UNDEFINED = 0,
        SAA7164_MPEG_DVB,
        SAA7164_MPEG_ENCODER,
+       SAA7164_MPEG_VBI,
 };
 
 enum saa7164_i2c_bus_nr {
@@ -155,7 +165,8 @@ struct saa7164_unit {
 
 struct saa7164_board {
        char    *name;
-       enum port_t porta, portb, portc, portd;
+       enum port_t porta, portb, portc,
+               portd, porte, portf;
        enum {
                SAA7164_CHIP_UNDEFINED = 0,
                SAA7164_CHIP_REV2,
@@ -170,10 +181,17 @@ struct saa7164_subid {
        u32     card;
 };
 
-struct saa7164_fh {
+struct saa7164_encoder_fh {
        struct saa7164_port *port;
-       u32 freq;
-       u32 tuner_type;
+//     u32 freq;
+//     u32 tuner_type;
+       atomic_t v4l_reading;
+};
+
+struct saa7164_vbi_fh {
+       struct saa7164_port *port;
+//     u32 freq;
+//     u32 tuner_type;
        atomic_t v4l_reading;
 };
 
@@ -269,6 +287,23 @@ struct saa7164_encoder_params {
        u32 gop_size;
 };
 
+struct saa7164_vbi_params {
+       struct saa7164_tvnorm encodernorm;
+       u32 height;
+       u32 width;
+       u32 is_50hz;
+       u32 bitrate; /* bps */
+       u32 bitrate_peak; /* bps */
+       u32 bitrate_mode;
+       u32 stream_type; /* V4L2_MPEG_STREAM_TYPE_MPEG2_TS */
+
+       u32 audio_sampling_freq;
+       u32 ctl_mute;
+       u32 ctl_aspect;
+       u32 refdist;
+       u32 gop_size;
+};
+
 struct saa7164_port;
 
 struct saa7164_buffer {
@@ -308,10 +343,10 @@ struct saa7164_port {
        /* --- Generic port attributes --- */
 
        /* HW stream parameters */
-       tmHWStreamParameters_t hw_streamingparams;
+       struct tmHWStreamParameters hw_streamingparams;
 
        /* DMA configuration values, is seeded during initialization */
-       tmComResDMATermDescrHeader_t hwcfg;
+       struct tmComResDMATermDescrHeader hwcfg;
 
        /* hardware specific registers */
        u32 bufcounter;
@@ -329,8 +364,8 @@ struct saa7164_port {
 
        u64 last_irq_msecs, last_svc_msecs;
        u64 last_irq_msecs_diff, last_svc_msecs_diff;
-       u32 last_irq_wp, last_svc_wp;
-       u32 last_irq_rp, last_svc_rp;
+       u32 last_svc_wp;
+       u32 last_svc_rp;
        u64 last_irq_svc_msecs_diff;
        u64 last_read_msecs, last_read_msecs_diff;
        u64 last_poll_msecs, last_poll_msecs_diff;
@@ -365,34 +400,34 @@ struct saa7164_port {
        u16 ctl_sharpness;
        s8 ctl_volume;
 
-       tmComResAFeatureDescrHeader_t audfeat;
-       tmComResEncoderDescrHeader_t encunit;
-       tmComResProcDescrHeader_t vidproc;
-       tmComResExtDevDescrHeader_t ifunit;
-       tmComResTunerDescrHeader_t tunerunit;
+       struct tmComResAFeatureDescrHeader audfeat;
+       struct tmComResEncoderDescrHeader encunit;
+       struct tmComResProcDescrHeader vidproc;
+       struct tmComResExtDevDescrHeader ifunit;
+       struct tmComResTunerDescrHeader tunerunit;
 
        struct work_struct workenc;
 
-       /* V4L */
+       /* V4L Encoder Video */
        struct saa7164_encoder_params encoder_params;
        struct video_device *v4l_device;
        atomic_t v4l_reader_count;
-//     spinlock_t slock;
-//     struct mutex fops_lock;
 
        struct saa7164_buffer list_buf_used;
        struct saa7164_buffer list_buf_free;
        wait_queue_head_t wait_read;
 
+       /* V4L VBI */
+       struct tmComResVBIFormatDescrHeader vbi_fmt_ntsc;
+       struct saa7164_vbi_params vbi_params;
+
        /* Debug */
        u32 sync_errors;
        u32 v_cc_errors;
        u32 a_cc_errors;
        u8 last_v_cc;
        u8 last_a_cc;
-
-       u8 *shadow_buf[8];
-       u32 shadow_crc[8];
+       u32 done_first_interrupt;
 };
 
 struct saa7164_dev {
@@ -417,12 +452,13 @@ struct saa7164_dev {
 
        /* firmware status */
        struct saa7164_fw_status        fw_status;
+       u32                             firmwareloaded;
 
-       tmComResHWDescr_t               hwdesc;
-       tmComResInterfaceDescr_t        intfdesc;
-       tmComResBusDescr_t              busdesc;
+       struct tmComResHWDescr          hwdesc;
+       struct tmComResInterfaceDescr   intfdesc;
+       struct tmComResBusDescr         busdesc;
 
-       tmComResBusInfo_t               bus;
+       struct tmComResBusInfo          bus;
 
        /* Interrupt status and ack registers */
        u32 int_status;
@@ -435,16 +471,22 @@ struct saa7164_dev {
        struct saa7164_i2c i2c_bus[3];
 
        /* Transport related */
-       struct saa7164_port ports[ SAA7164_MAX_PORTS ];
+       struct saa7164_port ports[SAA7164_MAX_PORTS];
 
        /* Deferred command/api interrupts handling */
        struct work_struct workcmd;
 
+       /* A kernel thread to monitor the firmware log, used
+        * only in debug mode.
+        */
+       struct task_struct *kthread;
+
 };
 
 extern struct list_head saa7164_devlist;
 extern unsigned int waitsecs;
 extern unsigned int encoder_buffers;
+extern unsigned int vbi_buffers;
 
 /* ----------------------------------------------------------- */
 /* saa7164-core.c                                              */
@@ -469,14 +511,14 @@ extern void saa7164_call_i2c_clients(struct saa7164_i2c *bus,
 /* saa7164-bus.c                                               */
 int saa7164_bus_setup(struct saa7164_dev *dev);
 void saa7164_bus_dump(struct saa7164_dev *dev);
-int saa7164_bus_set(struct saa7164_dev *dev, tmComResInfo_t* msg, void *buf);
-int saa7164_bus_get(struct saa7164_dev *dev, tmComResInfo_t* msg,
+int saa7164_bus_set(struct saa7164_dev *dev, struct tmComResInfo* msg, void *buf);
+int saa7164_bus_get(struct saa7164_dev *dev, struct tmComResInfo* msg,
        void *buf, int peekonly);
 
 /* ----------------------------------------------------------- */
 /* saa7164-cmd.c                                               */
 int saa7164_cmd_send(struct saa7164_dev *dev,
-       u8 id, tmComResCmd_t command, u16 controlselector,
+       u8 id, enum tmComResCmd command, u16 controlselector,
        u16 size, void *buf);
 void saa7164_cmd_signal(struct saa7164_dev *dev, u8 seqno);
 int saa7164_irq_dequeue(struct saa7164_dev *dev);
@@ -508,6 +550,10 @@ int saa7164_api_set_audio_volume(struct saa7164_port *port, s8 level);
 int saa7164_api_set_audio_std(struct saa7164_port *port);
 int saa7164_api_set_audio_detection(struct saa7164_port *port, int autodetect);
 int saa7164_api_get_videomux(struct saa7164_port *port);
+int saa7164_api_set_vbi_format(struct saa7164_port *port);
+int saa7164_api_set_debug(struct saa7164_dev *dev, u8 level);
+int saa7164_api_collect_debug(struct saa7164_dev *dev);
+int saa7164_api_get_load_info(struct saa7164_dev *dev, struct tmFwInfoStruct *i);
 
 /* ----------------------------------------------------------- */
 /* saa7164-cards.c                                             */
@@ -549,6 +595,13 @@ int saa7164_encoder_register(struct saa7164_port *port);
 void saa7164_encoder_unregister(struct saa7164_port *port);
 
 /* ----------------------------------------------------------- */
+/* saa7164-vbi.c                                            */
+int saa7164_vbi_register(struct saa7164_port *port);
+void saa7164_vbi_unregister(struct saa7164_port *port);
+
+/* ----------------------------------------------------------- */
+
+extern unsigned int crc_checking;
 
 extern unsigned int saa_debug;
 #define dprintk(level, fmt, arg...)\
@@ -569,7 +622,6 @@ extern unsigned int saa_debug;
 #define saa7164_readl(reg) readl(dev->lmmio + ((reg) >> 2))
 #define saa7164_writel(reg, value) writel((value), dev->lmmio + ((reg) >> 2))
 
-
 #define saa7164_readb(reg)             readl(dev->bmmio + (reg))
 #define saa7164_writeb(reg, value)     writel((value), dev->bmmio + (reg))