1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun #ifndef __BUDGET_DVB__ 4*4882a593Smuzhiyun #define __BUDGET_DVB__ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #include <media/dvb_frontend.h> 7*4882a593Smuzhiyun #include <media/dvbdev.h> 8*4882a593Smuzhiyun #include <media/demux.h> 9*4882a593Smuzhiyun #include <media/dvb_demux.h> 10*4882a593Smuzhiyun #include <media/dmxdev.h> 11*4882a593Smuzhiyun #include "dvb_filter.h" 12*4882a593Smuzhiyun #include <media/dvb_net.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include <linux/module.h> 15*4882a593Smuzhiyun #include <linux/mutex.h> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #include <media/drv-intf/saa7146.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun extern int budget_debug; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #ifdef dprintk 22*4882a593Smuzhiyun #undef dprintk 23*4882a593Smuzhiyun #endif 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define dprintk(level, fmt, arg...) do { \ 26*4882a593Smuzhiyun if (level & budget_debug) \ 27*4882a593Smuzhiyun printk(KERN_DEBUG KBUILD_MODNAME ": %s(): " fmt, \ 28*4882a593Smuzhiyun __func__, ##arg); \ 29*4882a593Smuzhiyun } while (0) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun struct budget_info { 33*4882a593Smuzhiyun char *name; 34*4882a593Smuzhiyun int type; 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* place to store all the necessary device information */ 38*4882a593Smuzhiyun struct budget { 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* devices */ 41*4882a593Smuzhiyun struct dvb_device dvb_dev; 42*4882a593Smuzhiyun struct dvb_net dvb_net; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun struct saa7146_dev *dev; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun struct i2c_adapter i2c_adap; 47*4882a593Smuzhiyun struct budget_info *card; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun unsigned char *grabbing; 50*4882a593Smuzhiyun struct saa7146_pgtable pt; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct tasklet_struct fidb_tasklet; 53*4882a593Smuzhiyun struct tasklet_struct vpe_tasklet; 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun struct dmxdev dmxdev; 56*4882a593Smuzhiyun struct dvb_demux demux; 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun struct dmx_frontend hw_frontend; 59*4882a593Smuzhiyun struct dmx_frontend mem_frontend; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun int ci_present; 62*4882a593Smuzhiyun int video_port; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun u32 buffer_width; 65*4882a593Smuzhiyun u32 buffer_height; 66*4882a593Smuzhiyun u32 buffer_size; 67*4882a593Smuzhiyun u32 buffer_warning_threshold; 68*4882a593Smuzhiyun u32 buffer_warnings; 69*4882a593Smuzhiyun unsigned long buffer_warning_time; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun u32 ttbp; 72*4882a593Smuzhiyun int feeding; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun spinlock_t feedlock; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun spinlock_t debilock; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun struct dvb_adapter dvb_adapter; 79*4882a593Smuzhiyun struct dvb_frontend *dvb_frontend; 80*4882a593Smuzhiyun int (*read_fe_status)(struct dvb_frontend *fe, enum fe_status *status); 81*4882a593Smuzhiyun int fe_synced; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun void *priv; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define MAKE_BUDGET_INFO(x_var,x_name,x_type) \ 87*4882a593Smuzhiyun static struct budget_info x_var ## _info = { \ 88*4882a593Smuzhiyun .name=x_name, \ 89*4882a593Smuzhiyun .type=x_type }; \ 90*4882a593Smuzhiyun static struct saa7146_pci_extension_data x_var = { \ 91*4882a593Smuzhiyun .ext_priv = &x_var ## _info, \ 92*4882a593Smuzhiyun .ext = &budget_extension }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #define BUDGET_TT 0 95*4882a593Smuzhiyun #define BUDGET_TT_HW_DISEQC 1 96*4882a593Smuzhiyun #define BUDGET_PATCH 3 97*4882a593Smuzhiyun #define BUDGET_FS_ACTIVY 4 98*4882a593Smuzhiyun #define BUDGET_CIN1200S 5 99*4882a593Smuzhiyun #define BUDGET_CIN1200C 6 100*4882a593Smuzhiyun #define BUDGET_CIN1200T 7 101*4882a593Smuzhiyun #define BUDGET_KNC1S 8 102*4882a593Smuzhiyun #define BUDGET_KNC1C 9 103*4882a593Smuzhiyun #define BUDGET_KNC1T 10 104*4882a593Smuzhiyun #define BUDGET_KNC1SP 11 105*4882a593Smuzhiyun #define BUDGET_KNC1CP 12 106*4882a593Smuzhiyun #define BUDGET_KNC1TP 13 107*4882a593Smuzhiyun #define BUDGET_TVSTAR 14 108*4882a593Smuzhiyun #define BUDGET_CIN1200C_MK3 15 109*4882a593Smuzhiyun #define BUDGET_KNC1C_MK3 16 110*4882a593Smuzhiyun #define BUDGET_KNC1CP_MK3 17 111*4882a593Smuzhiyun #define BUDGET_KNC1S2 18 112*4882a593Smuzhiyun #define BUDGET_KNC1C_TDA10024 19 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun #define BUDGET_VIDEO_PORTA 0 115*4882a593Smuzhiyun #define BUDGET_VIDEO_PORTB 1 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun extern int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, 118*4882a593Smuzhiyun struct saa7146_pci_extension_data *info, 119*4882a593Smuzhiyun struct module *owner, short *adapter_nums); 120*4882a593Smuzhiyun extern void ttpci_budget_init_hooks(struct budget *budget); 121*4882a593Smuzhiyun extern int ttpci_budget_deinit(struct budget *budget); 122*4882a593Smuzhiyun extern void ttpci_budget_irq10_handler(struct saa7146_dev *dev, u32 * isr); 123*4882a593Smuzhiyun extern void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port); 124*4882a593Smuzhiyun extern int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count, 125*4882a593Smuzhiyun int uselocks, int nobusyloop); 126*4882a593Smuzhiyun extern int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr, int count, u32 value, 127*4882a593Smuzhiyun int uselocks, int nobusyloop); 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #endif 130