0001
0002
0003
0004
0005
0006
0007
0008 #ifndef PT3_H
0009 #define PT3_H
0010
0011 #include <linux/atomic.h>
0012 #include <linux/types.h>
0013
0014 #include <media/dvb_demux.h>
0015 #include <media/dvb_frontend.h>
0016 #include <media/dmxdev.h>
0017
0018 #include "tc90522.h"
0019 #include "mxl301rf.h"
0020 #include "qm1d1c0042.h"
0021
0022 #define DRV_NAME KBUILD_MODNAME
0023
0024 #define PT3_NUM_FE 4
0025
0026
0027
0028
0029 #define REG_VERSION 0x00
0030 #define REG_BUS 0x04
0031 #define REG_SYSTEM_W 0x08
0032 #define REG_SYSTEM_R 0x0c
0033 #define REG_I2C_W 0x10
0034 #define REG_I2C_R 0x14
0035 #define REG_RAM_W 0x18
0036 #define REG_RAM_R 0x1c
0037 #define REG_DMA_BASE 0x40
0038 #define OFST_DMA_DESC_L 0x00
0039 #define OFST_DMA_DESC_H 0x04
0040 #define OFST_DMA_CTL 0x08
0041 #define OFST_TS_CTL 0x0c
0042 #define OFST_STATUS 0x10
0043 #define OFST_TS_ERR 0x14
0044
0045
0046
0047
0048 #define PT3_I2C_MAX 4091
0049 struct pt3_i2cbuf {
0050 u8 data[PT3_I2C_MAX];
0051 u8 tmp;
0052 u32 num_cmds;
0053 };
0054
0055
0056
0057
0058 #define TS_PACKET_SZ 188
0059
0060 #define DATA_XFER_SZ 4096
0061 #define DATA_BUF_XFERS 47
0062
0063 #define DATA_BUF_SZ (DATA_BUF_XFERS * DATA_XFER_SZ)
0064 #define MAX_DATA_BUFS 16
0065 #define MIN_DATA_BUFS 2
0066
0067 #define DESCS_IN_PAGE (PAGE_SIZE / sizeof(struct xfer_desc))
0068 #define MAX_NUM_XFERS (MAX_DATA_BUFS * DATA_BUF_XFERS)
0069 #define MAX_DESC_BUFS DIV_ROUND_UP(MAX_NUM_XFERS, DESCS_IN_PAGE)
0070
0071
0072
0073
0074
0075 struct xfer_desc {
0076 u32 addr_l;
0077 u32 addr_h;
0078 u32 size;
0079 u32 next_l;
0080 u32 next_h;
0081 };
0082
0083
0084 struct xfer_desc_buffer {
0085 dma_addr_t b_addr;
0086 struct xfer_desc *descs;
0087 };
0088
0089
0090 struct dma_data_buffer {
0091 dma_addr_t b_addr;
0092 u8 *data;
0093 };
0094
0095
0096
0097
0098 struct pt3_adap_config {
0099 struct i2c_board_info demod_info;
0100 struct tc90522_config demod_cfg;
0101
0102 struct i2c_board_info tuner_info;
0103 union tuner_config {
0104 struct qm1d1c0042_config qm1d1c0042;
0105 struct mxl301rf_config mxl301rf;
0106 } tuner_cfg;
0107 u32 init_freq;
0108 };
0109
0110 struct pt3_adapter {
0111 struct dvb_adapter dvb_adap;
0112 int adap_idx;
0113
0114 struct dvb_demux demux;
0115 struct dmxdev dmxdev;
0116 struct dvb_frontend *fe;
0117 struct i2c_client *i2c_demod;
0118 struct i2c_client *i2c_tuner;
0119
0120
0121 struct task_struct *thread;
0122 int num_feeds;
0123
0124 bool cur_lna;
0125 bool cur_lnb;
0126
0127
0128 struct dma_data_buffer buffer[MAX_DATA_BUFS];
0129 int buf_idx;
0130 int buf_ofs;
0131 int num_bufs;
0132 int num_discard;
0133
0134 struct xfer_desc_buffer desc_buf[MAX_DESC_BUFS];
0135 int num_desc_bufs;
0136 };
0137
0138
0139 struct pt3_board {
0140 struct pci_dev *pdev;
0141 void __iomem *regs[2];
0142
0143
0144 struct mutex lock;
0145
0146
0147 int lnb_on_cnt;
0148
0149
0150 int lna_on_cnt;
0151
0152 int num_bufs;
0153
0154 struct i2c_adapter i2c_adap;
0155 struct pt3_i2cbuf *i2c_buf;
0156
0157 struct pt3_adapter *adaps[PT3_NUM_FE];
0158 };
0159
0160
0161
0162
0163
0164 extern int pt3_alloc_dmabuf(struct pt3_adapter *adap);
0165 extern void pt3_init_dmabuf(struct pt3_adapter *adap);
0166 extern void pt3_free_dmabuf(struct pt3_adapter *adap);
0167 extern int pt3_start_dma(struct pt3_adapter *adap);
0168 extern int pt3_stop_dma(struct pt3_adapter *adap);
0169 extern int pt3_proc_dma(struct pt3_adapter *adap);
0170
0171 extern int pt3_i2c_master_xfer(struct i2c_adapter *adap,
0172 struct i2c_msg *msgs, int num);
0173 extern u32 pt3_i2c_functionality(struct i2c_adapter *adap);
0174 extern void pt3_i2c_reset(struct pt3_board *pt3);
0175 extern int pt3_init_all_demods(struct pt3_board *pt3);
0176 extern int pt3_init_all_mxl301rf(struct pt3_board *pt3);
0177 #endif