1
2
3
4
5
6 #ifndef __PVRUSB2_HDW_INTERNAL_H
7 #define __PVRUSB2_HDW_INTERNAL_H
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #include <linux/videodev2.h>
22 #include <linux/i2c.h>
23 #include <linux/workqueue.h>
24 #include <linux/mutex.h>
25 #include "pvrusb2-hdw.h"
26 #include "pvrusb2-io.h"
27 #include <media/v4l2-device.h>
28 #include <media/drv-intf/cx2341x.h>
29 #include <media/i2c/ir-kbd-i2c.h>
30 #include "pvrusb2-devattr.h"
31
32
33 #define PVR2_CVAL_HSM_FAIL 0
34 #define PVR2_CVAL_HSM_FULL 1
35 #define PVR2_CVAL_HSM_HIGH 2
36
37 #define PVR2_VID_ENDPOINT 0x84
38 #define PVR2_UNK_ENDPOINT 0x86
39 #define PVR2_VBI_ENDPOINT 0x88
40
41 #define PVR2_CTL_BUFFSIZE 64
42
43 #define FREQTABLE_SIZE 500
44
45 #define LOCK_TAKE(x) do { mutex_lock(&x##_mutex); x##_held = !0; } while (0)
46 #define LOCK_GIVE(x) do { x##_held = 0; mutex_unlock(&x##_mutex); } while (0)
47
48 typedef int (*pvr2_ctlf_is_dirty)(struct pvr2_ctrl *);
49 typedef void (*pvr2_ctlf_clear_dirty)(struct pvr2_ctrl *);
50 typedef int (*pvr2_ctlf_check_value)(struct pvr2_ctrl *,int);
51 typedef int (*pvr2_ctlf_get_value)(struct pvr2_ctrl *,int *);
52 typedef int (*pvr2_ctlf_set_value)(struct pvr2_ctrl *,int msk,int val);
53 typedef int (*pvr2_ctlf_val_to_sym)(struct pvr2_ctrl *,int msk,int val,
54 char *,unsigned int,unsigned int *);
55 typedef int (*pvr2_ctlf_sym_to_val)(struct pvr2_ctrl *,
56 const char *,unsigned int,
57 int *mskp,int *valp);
58 typedef unsigned int (*pvr2_ctlf_get_v4lflags)(struct pvr2_ctrl *);
59
60
61
62 struct pvr2_ctl_info {
63
64 const char *name;
65
66
67 const char *desc;
68
69
70 pvr2_ctlf_get_value get_value;
71 pvr2_ctlf_get_value get_def_value;
72 pvr2_ctlf_get_value get_min_value;
73 pvr2_ctlf_get_value get_max_value;
74 pvr2_ctlf_set_value set_value;
75 pvr2_ctlf_check_value check_value;
76 pvr2_ctlf_val_to_sym val_to_sym;
77 pvr2_ctlf_sym_to_val sym_to_val;
78 pvr2_ctlf_is_dirty is_dirty;
79 pvr2_ctlf_clear_dirty clear_dirty;
80 pvr2_ctlf_get_v4lflags get_v4lflags;
81
82
83 enum pvr2_ctl_type type;
84
85
86 int v4l_id;
87
88
89 int internal_id;
90
91
92 int skip_init;
93
94
95 int default_value;
96
97
98 union {
99 struct {
100 long min_value;
101 long max_value;
102 } type_int;
103 struct {
104 unsigned int count;
105 const char * const *value_names;
106 } type_enum;
107 struct {
108 unsigned int valid_bits;
109 const char **bit_names;
110 } type_bitmask;
111 } def;
112 };
113
114
115
116 #define PVR2_CTLD_INFO_DESC_SIZE 32
117 struct pvr2_ctld_info {
118 struct pvr2_ctl_info info;
119 char desc[PVR2_CTLD_INFO_DESC_SIZE];
120 };
121
122 struct pvr2_ctrl {
123 const struct pvr2_ctl_info *info;
124 struct pvr2_hdw *hdw;
125 };
126
127
128
129
130 #define FW1_STATE_UNKNOWN 0
131 #define FW1_STATE_MISSING 1
132 #define FW1_STATE_FAILED 2
133 #define FW1_STATE_RELOAD 3
134 #define FW1_STATE_OK 4
135
136
137 #define PVR2_PATHWAY_UNKNOWN 0
138 #define PVR2_PATHWAY_ANALOG 1
139 #define PVR2_PATHWAY_DIGITAL 2
140
141 typedef int (*pvr2_i2c_func)(struct pvr2_hdw *,u8,u8 *,u16,u8 *, u16);
142 #define PVR2_I2C_FUNC_CNT 128
143
144
145
146
147 struct pvr2_hdw {
148
149 struct usb_device *usb_dev;
150 struct usb_interface *usb_intf;
151
152
153 struct v4l2_device v4l2_dev;
154
155
156 const struct pvr2_device_desc *hdw_desc;
157
158
159 struct work_struct workpoll;
160
161
162 struct pvr2_stream *vid_stream;
163
164
165 struct mutex big_lock_mutex;
166 int big_lock_held;
167
168
169
170
171
172 char name[32];
173
174
175
176
177
178
179
180 char identifier[32];
181
182
183 struct i2c_adapter i2c_adap;
184 struct i2c_algorithm i2c_algo;
185 pvr2_i2c_func i2c_func[PVR2_I2C_FUNC_CNT];
186 int i2c_cx25840_hack_state;
187 int i2c_linked;
188
189
190 unsigned int ir_scheme_active;
191 struct IR_i2c_init_data ir_init_data;
192
193
194 unsigned int freqTable[FREQTABLE_SIZE];
195 unsigned int freqProgSlot;
196
197
198 struct mutex ctl_lock_mutex;
199 int ctl_lock_held;
200 struct urb *ctl_write_urb;
201 struct urb *ctl_read_urb;
202 unsigned char *ctl_write_buffer;
203 unsigned char *ctl_read_buffer;
204 int ctl_write_pend_flag;
205 int ctl_read_pend_flag;
206 int ctl_timeout_flag;
207 struct completion ctl_done;
208 unsigned char cmd_buffer[PVR2_CTL_BUFFSIZE];
209 int cmd_debug_state;
210 unsigned char cmd_debug_code;
211 unsigned int cmd_debug_write_len;
212 unsigned int cmd_debug_read_len;
213
214
215
216 int state_pathway_ok;
217 int state_encoder_ok;
218 int state_encoder_run;
219 int state_encoder_config;
220 int state_encoder_waitok;
221 int state_encoder_runok;
222 int state_decoder_run;
223 int state_decoder_ready;
224 int state_usbstream_run;
225 int state_decoder_quiescent;
226 int state_pipeline_config;
227 int state_pipeline_req;
228 int state_pipeline_pause;
229 int state_pipeline_idle;
230
231
232
233
234
235 unsigned int master_state;
236
237
238 int led_on;
239
240
241 int state_stale;
242
243 void (*state_func)(void *);
244 void *state_data;
245
246
247
248 struct timer_list quiescent_timer;
249
250
251
252
253
254 struct timer_list decoder_stabilization_timer;
255
256
257 struct timer_list encoder_wait_timer;
258
259
260 struct timer_list encoder_run_timer;
261
262
263 wait_queue_head_t state_wait_data;
264
265
266 int force_dirty;
267 int flag_ok;
268 int flag_modulefail;
269 int flag_disconnected;
270 int flag_init_ok;
271 int fw1_state;
272 int pathway_state;
273 int flag_decoder_missed;
274 int flag_tripped;
275
276 unsigned int decoder_client_id;
277
278
279 char *fw_buffer;
280 unsigned int fw_size;
281 int fw_cpu_flag;
282
283
284 unsigned int tuner_type;
285 int tuner_updated;
286 unsigned int freqValTelevision;
287 unsigned int freqValRadio;
288 unsigned int freqSlotTelevision;
289 unsigned int freqSlotRadio;
290 unsigned int freqSelector;
291 int freqDirty;
292
293
294 struct v4l2_tuner tuner_signal_info;
295 int tuner_signal_stale;
296
297
298 struct v4l2_cropcap cropcap_info;
299 int cropcap_stale;
300
301
302 v4l2_std_id std_mask_eeprom;
303 v4l2_std_id std_mask_avail;
304 v4l2_std_id std_mask_cur;
305 int std_enum_cur;
306 int std_dirty;
307 struct pvr2_ctl_info std_info_enum;
308 struct pvr2_ctl_info std_info_avail;
309 struct pvr2_ctl_info std_info_cur;
310 struct pvr2_ctl_info std_info_detect;
311
312
313 const char *std_mask_ptrs[32];
314 char std_mask_names[32][16];
315
316 int unit_number;
317 unsigned long serial_number;
318
319 char bus_info[32];
320
321
322
323 int v4l_minor_number_video;
324 int v4l_minor_number_vbi;
325 int v4l_minor_number_radio;
326
327
328 unsigned int input_avail_mask;
329
330 unsigned int input_allowed_mask;
331
332
333 int eeprom_addr;
334
335 enum pvr2_config active_stream_type;
336 enum pvr2_config desired_stream_type;
337
338
339 struct cx2341x_mpeg_params enc_cur_state;
340 struct cx2341x_mpeg_params enc_ctl_state;
341
342 int enc_stale;
343
344 int enc_unsafe_stale;
345
346 int enc_cur_valid;
347
348
349 #define VCREATE_DATA(lab) int lab##_val; int lab##_dirty
350 VCREATE_DATA(brightness);
351 VCREATE_DATA(contrast);
352 VCREATE_DATA(saturation);
353 VCREATE_DATA(hue);
354 VCREATE_DATA(volume);
355 VCREATE_DATA(balance);
356 VCREATE_DATA(bass);
357 VCREATE_DATA(treble);
358 VCREATE_DATA(mute);
359 VCREATE_DATA(cropl);
360 VCREATE_DATA(cropt);
361 VCREATE_DATA(cropw);
362 VCREATE_DATA(croph);
363 VCREATE_DATA(input);
364 VCREATE_DATA(audiomode);
365 VCREATE_DATA(res_hor);
366 VCREATE_DATA(res_ver);
367 VCREATE_DATA(srate);
368 #undef VCREATE_DATA
369
370 struct pvr2_ctld_info *mpeg_ctrl_info;
371
372 struct pvr2_ctrl *controls;
373 unsigned int control_cnt;
374 };
375
376
377 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *);
378
379 void pvr2_hdw_status_poll(struct pvr2_hdw *);
380
381 #endif