X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmedia%2Fdvb%2Fttpci%2Fav7110.h;h=9c79696da08a60d622aaf347cc5a67609fe74388;hb=refs%2Fheads%2Fvserver;hp=a1eded6999af67daabaeb7d2d7cb74611e250e4c;hpb=6a77f38946aaee1cd85eeec6cf4229b204c15071;p=linux-2.6.git diff --git a/drivers/media/dvb/ttpci/av7110.h b/drivers/media/dvb/ttpci/av7110.h index a1eded699..9c79696da 100644 --- a/drivers/media/dvb/ttpci/av7110.h +++ b/drivers/media/dvb/ttpci/av7110.h @@ -6,16 +6,13 @@ #include #include -#ifdef CONFIG_DEVFS_FS -#include -#endif - #include #include #include #include #include #include +#include #include "dvbdev.h" #include "demux.h" @@ -31,6 +28,7 @@ #include "tda8083.h" #include "sp8870.h" #include "stv0297.h" +#include "l64781.h" #include @@ -49,38 +47,38 @@ extern int av7110_debug; enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM}; struct av7110_p2t { - u8 pes[TS_SIZE]; - u8 counter; - long int pos; - int frags; - struct dvb_demux_feed *feed; + u8 pes[TS_SIZE]; + u8 counter; + long int pos; + int frags; + struct dvb_demux_feed *feed; }; /* video MPEG decoder events: */ /* (code copied from dvb_frontend.c, should maybe be factored out...) */ #define MAX_VIDEO_EVENT 8 struct dvb_video_events { - struct video_event events[MAX_VIDEO_EVENT]; - int eventw; - int eventr; - int overflow; - wait_queue_head_t wait_queue; - spinlock_t lock; + struct video_event events[MAX_VIDEO_EVENT]; + int eventw; + int eventr; + int overflow; + wait_queue_head_t wait_queue; + spinlock_t lock; }; /* place to store all the necessary device information */ struct av7110 { - /* devices */ + /* devices */ - struct dvb_device dvb_dev; - struct dvb_net dvb_net; + struct dvb_device dvb_dev; + struct dvb_net dvb_net; struct video_device *v4l_dev; struct video_device *vbi_dev; - struct saa7146_dev *dev; + struct saa7146_dev *dev; struct i2c_adapter i2c_adap; @@ -90,73 +88,73 @@ struct av7110 { int analog_tuner_flags; int current_input; u32 current_freq; - - struct tasklet_struct debi_tasklet; - struct tasklet_struct gpio_tasklet; - int adac_type; /* audio DAC type */ -#define DVB_ADAC_TI 0 + struct tasklet_struct debi_tasklet; + struct tasklet_struct gpio_tasklet; + + int adac_type; /* audio DAC type */ +#define DVB_ADAC_TI 0 #define DVB_ADAC_CRYSTAL 1 -#define DVB_ADAC_MSP 2 -#define DVB_ADAC_NONE -1 +#define DVB_ADAC_MSP34x0 2 +#define DVB_ADAC_MSP34x5 3 +#define DVB_ADAC_NONE -1 - /* buffers */ + /* buffers */ - void *iobuf; /* memory for all buffers */ - struct dvb_ringbuffer avout; /* buffer for video or A/V mux */ + void *iobuf; /* memory for all buffers */ + struct dvb_ringbuffer avout; /* buffer for video or A/V mux */ #define AVOUTLEN (128*1024) - struct dvb_ringbuffer aout; /* buffer for audio */ + struct dvb_ringbuffer aout; /* buffer for audio */ #define AOUTLEN (64*1024) - void *bmpbuf; + void *bmpbuf; #define BMPLEN (8*32768+1024) - /* bitmap buffers and states */ + /* bitmap buffers and states */ - int bmpp; - int bmplen; + int bmpp; + int bmplen; volatile int bmp_state; #define BMP_NONE 0 #define BMP_LOADING 1 -#define BMP_LOADINGS 2 -#define BMP_LOADED 3 +#define BMP_LOADED 2 wait_queue_head_t bmpq; - /* DEBI and polled command interface */ + /* DEBI and polled command interface */ - spinlock_t debilock; - struct semaphore dcomlock; + spinlock_t debilock; + struct mutex dcomlock; volatile int debitype; volatile int debilen; - /* Recording and playback flags */ + /* Recording and playback flags */ - int rec_mode; - int playing; + int rec_mode; + int playing; #define RP_NONE 0 #define RP_VIDEO 1 #define RP_AUDIO 2 -#define RP_AV 3 +#define RP_AV 3 - /* OSD */ + /* OSD */ - int osdwin; /* currently active window */ - u16 osdbpp[8]; - struct semaphore osd_sema; + int osdwin; /* currently active window */ + u16 osdbpp[8]; + struct mutex osd_mutex; - /* CA */ + /* CA */ - ca_slot_info_t ci_slot[2]; + ca_slot_info_t ci_slot[2]; - int vidmode; - struct dmxdev dmxdev; - struct dvb_demux demux; + int vidmode; + struct dmxdev dmxdev; + struct dvb_demux demux; - struct dmx_frontend hw_frontend; - struct dmx_frontend mem_frontend; + struct dmx_frontend hw_frontend; + struct dmx_frontend mem_frontend; /* for budget mode demux1 */ struct dmxdev dmxdev1; @@ -170,69 +168,73 @@ struct av7110 { struct saa7146_pgtable pt; struct tasklet_struct vpe_tasklet; - int fe_synced; - struct semaphore pid_mutex; + int fe_synced; + struct mutex pid_mutex; - int video_blank; - struct video_status videostate; - int display_ar; - int trickmode; + int video_blank; + struct video_status videostate; + int display_ar; + int trickmode; #define TRICK_NONE 0 #define TRICK_FAST 1 #define TRICK_SLOW 2 #define TRICK_FREEZE 3 - struct audio_status audiostate; + struct audio_status audiostate; - struct dvb_demux_filter *handle2filter[32]; - struct av7110_p2t p2t_filter[MAXFILT]; - struct dvb_filter_pes2ts p2t[2]; - struct ipack ipack[2]; - u8 *kbuf[2]; + struct dvb_demux_filter *handle2filter[32]; + struct av7110_p2t p2t_filter[MAXFILT]; + struct dvb_filter_pes2ts p2t[2]; + struct ipack ipack[2]; + u8 *kbuf[2]; - int sinfo; - int feeding; + int sinfo; + int feeding; - int arm_errors; - int registered; + int arm_errors; + int registered; /* AV711X */ - u32 arm_fw; - u32 arm_rtsl; - u32 arm_vid; - u32 arm_app; - u32 avtype; - int arm_ready; - struct task_struct *arm_thread; + u32 arm_fw; + u32 arm_rtsl; + u32 arm_vid; + u32 arm_app; + u32 avtype; + int arm_ready; + struct task_struct *arm_thread; wait_queue_head_t arm_wait; - u16 arm_loops; - int arm_rmmod; + u16 arm_loops; + int arm_rmmod; + + void *debi_virt; + dma_addr_t debi_bus; - void *debi_virt; - dma_addr_t debi_bus; + u16 pids[DMX_PES_OTHER]; - u16 pids[DMX_PES_OTHER]; - - struct dvb_ringbuffer ci_rbuffer; - struct dvb_ringbuffer ci_wbuffer; + struct dvb_ringbuffer ci_rbuffer; + struct dvb_ringbuffer ci_wbuffer; struct audio_mixer mixer; - struct dvb_adapter *dvb_adapter; - struct dvb_device *video_dev; - struct dvb_device *audio_dev; - struct dvb_device *ca_dev; - struct dvb_device *osd_dev; + struct dvb_adapter dvb_adapter; + struct dvb_device *video_dev; + struct dvb_device *audio_dev; + struct dvb_device *ca_dev; + struct dvb_device *osd_dev; struct dvb_video_events video_events; - video_size_t video_size; + video_size_t video_size; - u32 ir_config; - - /* firmware stuff */ - unsigned int device_initialized; + u16 wssMode; + u16 wssData; + + u32 ir_config; + u32 ir_command; + void (*ir_handler)(struct av7110 *av7110, u32 ircom); + struct tasklet_struct ir_tasklet; + /* firmware stuff */ unsigned char *bin_fw; unsigned long size_fw; @@ -244,6 +246,15 @@ struct av7110 { struct dvb_frontend* fe; fe_status_t fe_status; + + /* crash recovery */ + void (*recover)(struct av7110* av7110); + struct dvb_frontend_parameters saved_fe_params; + fe_sec_voltage_t saved_voltage; + fe_sec_tone_mode_t saved_tone; + struct dvb_diseqc_master_cmd saved_master_cmd; + fe_sec_mini_cmd_t saved_minicmd; + int (*fe_init)(struct dvb_frontend* fe); int (*fe_read_status)(struct dvb_frontend* fe, fe_status_t* status); int (*fe_diseqc_reset_overload)(struct dvb_frontend* fe); @@ -251,20 +262,16 @@ struct av7110 { int (*fe_diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd); int (*fe_set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone); int (*fe_set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage); - int (*fe_dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned int cmd); + int (*fe_dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); int (*fe_set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params); }; -extern void ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, +extern int ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, u16 subpid, u16 pcrpid); -extern void av7110_register_irc_handler(void (*func)(u32)); -extern void av7110_unregister_irc_handler(void (*func)(u32)); -extern void av7110_setup_irc_config (struct av7110 *av7110, u32 ir_config); - -extern int av7110_ir_init (void); -extern void av7110_ir_exit (void); +extern int av7110_ir_init(struct av7110 *av7110); +extern void av7110_ir_exit(struct av7110 *av7110); /* msp3400 i2c subaddresses */ #define MSP_WR_DEM 0x10 @@ -275,7 +282,6 @@ extern void av7110_ir_exit (void); extern int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val); extern u8 i2c_readreg(struct av7110 *av7110, u8 id, u8 reg); extern int msp_writereg(struct av7110 *av7110, u8 dev, u16 reg, u16 val); -extern int msp_readreg(struct av7110 *av7110, u8 dev, u16 reg, u16 *val); extern int av7110_init_analog_module(struct av7110 *av7110); @@ -283,4 +289,3 @@ extern int av7110_init_v4l(struct av7110 *av7110); extern int av7110_exit_v4l(struct av7110 *av7110); #endif /* _AV7110_H_ */ -