diff options
Diffstat (limited to 'drivers/media/video/cx23885/cx23885.h')
-rw-r--r-- | drivers/media/video/cx23885/cx23885.h | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h new file mode 100644 index 000000000000..f58ab86bd532 --- /dev/null +++ b/drivers/media/video/cx23885/cx23885.h | |||
@@ -0,0 +1,295 @@ | |||
1 | /* | ||
2 | * Driver for the Conexant CX23885 PCIe bridge | ||
3 | * | ||
4 | * Copyright (c) 2006 Steven Toth <stoth@hauppauge.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | */ | ||
21 | |||
22 | #include <linux/pci.h> | ||
23 | #include <linux/i2c.h> | ||
24 | #include <linux/i2c-algo-bit.h> | ||
25 | #include <linux/kdev_t.h> | ||
26 | |||
27 | #include <media/v4l2-common.h> | ||
28 | #include <media/tuner.h> | ||
29 | #include <media/tveeprom.h> | ||
30 | #include <media/video-buf.h> | ||
31 | #include <media/video-buf-dvb.h> | ||
32 | |||
33 | #include "btcx-risc.h" | ||
34 | #include "cx23885-reg.h" | ||
35 | |||
36 | #include <linux/version.h> | ||
37 | #include <linux/mutex.h> | ||
38 | |||
39 | #define CX88_VERSION_CODE KERNEL_VERSION(0,0,6) | ||
40 | |||
41 | #define UNSET (-1U) | ||
42 | |||
43 | #define CX23885_MAXBOARDS 8 | ||
44 | |||
45 | #define SRAM 0 | ||
46 | |||
47 | /* Max number of inputs by card */ | ||
48 | #define MAX_CX23885_INPUT 8 | ||
49 | |||
50 | //#define SHADOW_MAX 3 | ||
51 | |||
52 | #define BUFFER_TIMEOUT (HZ) /* 0.5 seconds */ | ||
53 | |||
54 | #define CX23885_BOARD_NOAUTO UNSET | ||
55 | #define CX23885_BOARD_UNKNOWN 0 | ||
56 | #define CX23885_BOARD_HAUPPAUGE_HVR1800lp 1 | ||
57 | #define CX23885_BOARD_HAUPPAUGE_HVR1800 2 | ||
58 | |||
59 | enum cx23885_itype { | ||
60 | CX23885_VMUX_COMPOSITE1 = 1, | ||
61 | CX23885_VMUX_COMPOSITE2, | ||
62 | CX23885_VMUX_COMPOSITE3, | ||
63 | CX23885_VMUX_COMPOSITE4, | ||
64 | CX23885_VMUX_SVIDEO, | ||
65 | CX23885_VMUX_TELEVISION, | ||
66 | CX23885_VMUX_CABLE, | ||
67 | CX23885_VMUX_DVB, | ||
68 | CX23885_VMUX_DEBUG, | ||
69 | CX23885_RADIO, | ||
70 | }; | ||
71 | |||
72 | struct cx23885_fmt { | ||
73 | char *name; | ||
74 | u32 fourcc; /* v4l2 format id */ | ||
75 | int depth; | ||
76 | int flags; | ||
77 | u32 cxformat; | ||
78 | }; | ||
79 | |||
80 | /* buffer for one video frame */ | ||
81 | struct cx23885_buffer { | ||
82 | /* common v4l buffer stuff -- must be first */ | ||
83 | struct videobuf_buffer vb; | ||
84 | |||
85 | /* cx23885 specific */ | ||
86 | unsigned int bpl; | ||
87 | struct btcx_riscmem risc; | ||
88 | struct cx23885_fmt *fmt; | ||
89 | u32 count; | ||
90 | }; | ||
91 | |||
92 | struct cx23885_input { | ||
93 | enum cx23885_itype type; | ||
94 | unsigned int vmux; | ||
95 | u32 gpio0, gpio1, gpio2, gpio3; | ||
96 | }; | ||
97 | |||
98 | struct cx23885_board { | ||
99 | char *name; | ||
100 | enum { | ||
101 | CX23885_MPEG_UNDEFINED = 0, | ||
102 | CX23885_MPEG_DVB | ||
103 | } portc; | ||
104 | enum { | ||
105 | CX23885_BRIDGE_UNDEFINED = 0, | ||
106 | CX23885_BRIDGE_885 = 885, | ||
107 | CX23885_BRIDGE_887 = 887, | ||
108 | } bridge; | ||
109 | struct cx23885_input input[MAX_CX23885_INPUT]; | ||
110 | }; | ||
111 | |||
112 | struct cx23885_subid { | ||
113 | u16 subvendor; | ||
114 | u16 subdevice; | ||
115 | u32 card; | ||
116 | }; | ||
117 | |||
118 | struct cx23885_i2c { | ||
119 | struct cx23885_dev *dev; | ||
120 | |||
121 | int nr; | ||
122 | |||
123 | /* i2c i/o */ | ||
124 | struct i2c_adapter i2c_adap; | ||
125 | struct i2c_algo_bit_data i2c_algo; | ||
126 | struct i2c_client i2c_client; | ||
127 | u32 i2c_rc; | ||
128 | |||
129 | /* 885 registers used for raw addess */ | ||
130 | u32 i2c_period; | ||
131 | u32 reg_ctrl; | ||
132 | u32 reg_stat; | ||
133 | u32 reg_addr; | ||
134 | u32 reg_rdata; | ||
135 | u32 reg_wdata; | ||
136 | }; | ||
137 | |||
138 | struct cx23885_dmaqueue { | ||
139 | struct list_head active; | ||
140 | struct list_head queued; | ||
141 | struct timer_list timeout; | ||
142 | struct btcx_riscmem stopper; | ||
143 | u32 count; | ||
144 | }; | ||
145 | |||
146 | struct cx23885_tsport { | ||
147 | struct cx23885_dev *dev; | ||
148 | |||
149 | int nr; | ||
150 | int sram_chno; | ||
151 | |||
152 | struct videobuf_dvb dvb; | ||
153 | |||
154 | /* dma queues */ | ||
155 | struct cx23885_dmaqueue mpegq; | ||
156 | u32 ts_packet_size; | ||
157 | u32 ts_packet_count; | ||
158 | |||
159 | int width; | ||
160 | int height; | ||
161 | |||
162 | spinlock_t slock; | ||
163 | |||
164 | /* registers */ | ||
165 | u32 reg_gpcnt; | ||
166 | u32 reg_gpcnt_ctl; | ||
167 | u32 reg_dma_ctl; | ||
168 | u32 reg_lngth; | ||
169 | u32 reg_hw_sop_ctrl; | ||
170 | u32 reg_gen_ctrl; | ||
171 | u32 reg_bd_pkt_status; | ||
172 | u32 reg_sop_status; | ||
173 | u32 reg_fifo_ovfl_stat; | ||
174 | u32 reg_vld_misc; | ||
175 | u32 reg_ts_clk_en; | ||
176 | u32 reg_ts_int_msk; | ||
177 | |||
178 | /* Default register vals */ | ||
179 | int pci_irqmask; | ||
180 | u32 dma_ctl_val; | ||
181 | u32 ts_int_msk_val; | ||
182 | u32 gen_ctrl_val; | ||
183 | u32 ts_clk_en_val; | ||
184 | }; | ||
185 | |||
186 | struct cx23885_dev { | ||
187 | struct list_head devlist; | ||
188 | atomic_t refcount; | ||
189 | |||
190 | /* pci stuff */ | ||
191 | struct pci_dev *pci; | ||
192 | unsigned char pci_rev, pci_lat; | ||
193 | int pci_bus, pci_slot; | ||
194 | u32 __iomem *lmmio; | ||
195 | u8 __iomem *bmmio; | ||
196 | //u32 shadow[SHADOW_MAX]; | ||
197 | int pci_irqmask; | ||
198 | |||
199 | /* I2C adapters: Master 1 and 2 (External) and Master 3 (Internal only) */ | ||
200 | struct cx23885_i2c i2c_bus[3]; | ||
201 | |||
202 | int nr; | ||
203 | struct mutex lock; | ||
204 | |||
205 | /* board details */ | ||
206 | unsigned int board; | ||
207 | char name[32]; | ||
208 | |||
209 | struct cx23885_tsport ts2; | ||
210 | |||
211 | /* sram configuration */ | ||
212 | struct sram_channel *sram_channels; | ||
213 | }; | ||
214 | |||
215 | #define SRAM_CH01 0 /* Video A */ | ||
216 | #define SRAM_CH02 1 /* VBI A */ | ||
217 | #define SRAM_CH03 2 /* Video B */ | ||
218 | #define SRAM_CH04 3 /* Transport via B */ | ||
219 | #define SRAM_CH05 4 /* VBI B */ | ||
220 | #define SRAM_CH06 5 /* Video C */ | ||
221 | #define SRAM_CH07 6 /* Transport via C */ | ||
222 | #define SRAM_CH08 7 /* Audio Internal A */ | ||
223 | #define SRAM_CH09 8 /* Audio Internal B */ | ||
224 | #define SRAM_CH10 9 /* Audio External */ | ||
225 | #define SRAM_CH11 10 /* COMB_3D_N */ | ||
226 | #define SRAM_CH12 11 /* Comb 3D N1 */ | ||
227 | #define SRAM_CH13 12 /* Comb 3D N2 */ | ||
228 | #define SRAM_CH14 13 /* MOE Vid */ | ||
229 | #define SRAM_CH15 14 /* MOE RSLT */ | ||
230 | |||
231 | struct sram_channel { | ||
232 | char *name; | ||
233 | u32 cmds_start; | ||
234 | u32 ctrl_start; | ||
235 | u32 cdt; | ||
236 | u32 fifo_start;; | ||
237 | u32 fifo_size; | ||
238 | u32 ptr1_reg; | ||
239 | u32 ptr2_reg; | ||
240 | u32 cnt1_reg; | ||
241 | u32 cnt2_reg; | ||
242 | u32 jumponly; | ||
243 | }; | ||
244 | |||
245 | /* ----------------------------------------------------------- */ | ||
246 | |||
247 | #define cx_read(reg) readl(dev->lmmio + ((reg)>>2)) | ||
248 | #define cx_write(reg,value) writel((value), dev->lmmio + ((reg)>>2)) | ||
249 | |||
250 | #define cx_andor(reg,mask,value) \ | ||
251 | writel((readl(dev->lmmio+((reg)>>2)) & ~(mask)) |\ | ||
252 | ((value) & (mask)), dev->lmmio+((reg)>>2)) | ||
253 | |||
254 | #define cx_set(reg,bit) cx_andor((reg),(bit),(bit)) | ||
255 | #define cx_clear(reg,bit) cx_andor((reg),(bit),0) | ||
256 | |||
257 | |||
258 | extern int cx23885_sram_channel_setup(struct cx23885_dev *dev, | ||
259 | struct sram_channel *ch, | ||
260 | unsigned int bpl, u32 risc); | ||
261 | |||
262 | /* ----------------------------------------------------------- */ | ||
263 | /* cx23885-cards.c */ | ||
264 | |||
265 | extern struct cx23885_board cx23885_boards[]; | ||
266 | extern const unsigned int cx23885_bcount; | ||
267 | |||
268 | extern struct cx23885_subid cx23885_subids[]; | ||
269 | extern const unsigned int cx23885_idcount; | ||
270 | |||
271 | extern void cx23885_card_list(struct cx23885_dev *dev); | ||
272 | extern void cx23885_card_setup(struct cx23885_dev *dev); | ||
273 | extern void cx23885_card_setup_pre_i2c(struct cx23885_dev *dev); | ||
274 | |||
275 | extern int cx23885_dvb_register(struct cx23885_tsport *port); | ||
276 | extern int cx23885_dvb_unregister(struct cx23885_tsport *port); | ||
277 | |||
278 | extern int cx23885_buf_prepare(struct videobuf_queue *q, struct cx23885_tsport *port, | ||
279 | struct cx23885_buffer *buf, enum v4l2_field field); | ||
280 | |||
281 | extern void cx23885_buf_queue(struct cx23885_tsport *port, struct cx23885_buffer *buf); | ||
282 | extern void cx23885_free_buffer(struct videobuf_queue *q, struct cx23885_buffer *buf); | ||
283 | |||
284 | /* ----------------------------------------------------------- */ | ||
285 | /* cx23885-i2c.c */ | ||
286 | extern int cx23885_i2c_register(struct cx23885_i2c *bus); | ||
287 | extern int cx23885_i2c_unregister(struct cx23885_i2c *bus); | ||
288 | extern void cx23885_call_i2c_clients(struct cx23885_i2c *bus, unsigned int cmd, void *arg); | ||
289 | |||
290 | /* | ||
291 | * Local variables: | ||
292 | * c-basic-offset: 8 | ||
293 | * End: | ||
294 | * kate: eol "unix"; indent-width 3; remove-trailing-space on; replace-trailing-space-save on; tab-width 8; replace-tabs off; space-indent off; mixed-indent off | ||
295 | */ | ||