This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / drivers / media / video / pvrusb2 / pvrusb2-hdw-internal.h
1 /*
2  *
3  *  $Id$
4  *
5  *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License
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  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21 #ifndef __PVRUSB2_HDW_INTERNAL_H
22 #define __PVRUSB2_HDW_INTERNAL_H
23
24 /*
25
26   This header sets up all the internal structures and definitions needed to
27   track and coordinate the driver's interaction with the hardware.  ONLY
28   source files which actually implement part of that whole circus should be
29   including this header.  Higher levels, like the external layers to the
30   various public APIs (V4L, sysfs, etc) should NOT ever include this
31   private, internal header.  This means that pvrusb2-hdw, pvrusb2-encoder,
32   etc will include this, but pvrusb2-v4l should not.
33
34 */
35
36 #include <linux/videodev2.h>
37 #include <linux/i2c.h>
38 #include <linux/mutex.h>
39 #include "pvrusb2-hdw.h"
40 #include "pvrusb2-io.h"
41 #include <media/cx2341x.h>
42
43 /* Legal values for the SRATE state variable */
44 #define PVR2_CVAL_SRATE_48 0
45 #define PVR2_CVAL_SRATE_44_1 1
46
47 /* Legal values for the AUDIOBITRATE state variable */
48 #define PVR2_CVAL_AUDIOBITRATE_384 0
49 #define PVR2_CVAL_AUDIOBITRATE_320 1
50 #define PVR2_CVAL_AUDIOBITRATE_256 2
51 #define PVR2_CVAL_AUDIOBITRATE_224 3
52 #define PVR2_CVAL_AUDIOBITRATE_192 4
53 #define PVR2_CVAL_AUDIOBITRATE_160 5
54 #define PVR2_CVAL_AUDIOBITRATE_128 6
55 #define PVR2_CVAL_AUDIOBITRATE_112 7
56 #define PVR2_CVAL_AUDIOBITRATE_96 8
57 #define PVR2_CVAL_AUDIOBITRATE_80 9
58 #define PVR2_CVAL_AUDIOBITRATE_64 10
59 #define PVR2_CVAL_AUDIOBITRATE_56 11
60 #define PVR2_CVAL_AUDIOBITRATE_48 12
61 #define PVR2_CVAL_AUDIOBITRATE_32 13
62 #define PVR2_CVAL_AUDIOBITRATE_VBR 14
63
64 /* Legal values for the AUDIOEMPHASIS state variable */
65 #define PVR2_CVAL_AUDIOEMPHASIS_NONE 0
66 #define PVR2_CVAL_AUDIOEMPHASIS_50_15 1
67 #define PVR2_CVAL_AUDIOEMPHASIS_CCITT 2
68
69 /* Legal values for PVR2_CID_HSM */
70 #define PVR2_CVAL_HSM_FAIL 0
71 #define PVR2_CVAL_HSM_FULL 1
72 #define PVR2_CVAL_HSM_HIGH 2
73
74 #define PVR2_VID_ENDPOINT        0x84
75 #define PVR2_UNK_ENDPOINT        0x86    /* maybe raw yuv ? */
76 #define PVR2_VBI_ENDPOINT        0x88
77
78 #define PVR2_CTL_BUFFSIZE        64
79
80 #define FREQTABLE_SIZE 500
81
82 #define LOCK_TAKE(x) do { mutex_lock(&x##_mutex); x##_held = !0; } while (0)
83 #define LOCK_GIVE(x) do { x##_held = 0; mutex_unlock(&x##_mutex); } while (0)
84
85 struct pvr2_decoder;
86
87 typedef int (*pvr2_ctlf_is_dirty)(struct pvr2_ctrl *);
88 typedef void (*pvr2_ctlf_clear_dirty)(struct pvr2_ctrl *);
89 typedef int (*pvr2_ctlf_get_value)(struct pvr2_ctrl *,int *);
90 typedef int (*pvr2_ctlf_set_value)(struct pvr2_ctrl *,int msk,int val);
91 typedef int (*pvr2_ctlf_val_to_sym)(struct pvr2_ctrl *,int msk,int val,
92                                     char *,unsigned int,unsigned int *);
93 typedef int (*pvr2_ctlf_sym_to_val)(struct pvr2_ctrl *,
94                                     const char *,unsigned int,
95                                     int *mskp,int *valp);
96 typedef unsigned int (*pvr2_ctlf_get_v4lflags)(struct pvr2_ctrl *);
97
98 /* This structure describes a specific control.  A table of these is set up
99    in pvrusb2-hdw.c. */
100 struct pvr2_ctl_info {
101         /* Control's name suitable for use as an identifier */
102         const char *name;
103
104         /* Short description of control */
105         const char *desc;
106
107         /* Control's implementation */
108         pvr2_ctlf_get_value get_value;      /* Get its value */
109         pvr2_ctlf_get_value get_min_value;  /* Get minimum allowed value */
110         pvr2_ctlf_get_value get_max_value;  /* Get maximum allowed value */
111         pvr2_ctlf_set_value set_value;      /* Set its value */
112         pvr2_ctlf_val_to_sym val_to_sym;    /* Custom convert value->symbol */
113         pvr2_ctlf_sym_to_val sym_to_val;    /* Custom convert symbol->value */
114         pvr2_ctlf_is_dirty is_dirty;        /* Return true if dirty */
115         pvr2_ctlf_clear_dirty clear_dirty;  /* Clear dirty state */
116         pvr2_ctlf_get_v4lflags get_v4lflags;/* Retrieve v4l flags */
117
118         /* Control's type (int, enum, bitmask) */
119         enum pvr2_ctl_type type;
120
121         /* Associated V4L control ID, if any */
122         int v4l_id;
123
124         /* Associated driver internal ID, if any */
125         int internal_id;
126
127         /* Don't implicitly initialize this control's value */
128         int skip_init;
129
130         /* Starting value for this control */
131         int default_value;
132
133         /* Type-specific control information */
134         union {
135                 struct { /* Integer control */
136                         long min_value; /* lower limit */
137                         long max_value; /* upper limit */
138                 } type_int;
139                 struct { /* enumerated control */
140                         unsigned int count;       /* enum value count */
141                         const char **value_names; /* symbol names */
142                 } type_enum;
143                 struct { /* bitmask control */
144                         unsigned int valid_bits; /* bits in use */
145                         const char **bit_names;  /* symbol name/bit */
146                 } type_bitmask;
147         } def;
148 };
149
150
151 /* Same as pvr2_ctl_info, but includes storage for the control description */
152 #define PVR2_CTLD_INFO_DESC_SIZE 32
153 struct pvr2_ctld_info {
154         struct pvr2_ctl_info info;
155         char desc[PVR2_CTLD_INFO_DESC_SIZE];
156 };
157
158 struct pvr2_ctrl {
159         const struct pvr2_ctl_info *info;
160         struct pvr2_hdw *hdw;
161 };
162
163
164 struct pvr2_audio_stat {
165         void *ctxt;
166         void (*detach)(void *);
167         int (*status)(void *);
168 };
169
170 struct pvr2_decoder_ctrl {
171         void *ctxt;
172         void (*detach)(void *);
173         void (*enable)(void *,int);
174         int (*tuned)(void *);
175         void (*force_reset)(void *);
176 };
177
178 #define PVR2_I2C_PEND_DETECT  0x01  /* Need to detect a client type */
179 #define PVR2_I2C_PEND_CLIENT  0x02  /* Client needs a specific update */
180 #define PVR2_I2C_PEND_REFRESH 0x04  /* Client has specific pending bits */
181 #define PVR2_I2C_PEND_STALE   0x08  /* Broadcast pending bits */
182
183 #define PVR2_I2C_PEND_ALL (PVR2_I2C_PEND_DETECT |\
184                            PVR2_I2C_PEND_CLIENT |\
185                            PVR2_I2C_PEND_REFRESH |\
186                            PVR2_I2C_PEND_STALE)
187
188 /* Disposition of firmware1 loading situation */
189 #define FW1_STATE_UNKNOWN 0
190 #define FW1_STATE_MISSING 1
191 #define FW1_STATE_FAILED 2
192 #define FW1_STATE_RELOAD 3
193 #define FW1_STATE_OK 4
194
195 /* Known major hardware variants, keyed from device ID */
196 #define PVR2_HDW_TYPE_29XXX 0
197 #ifdef CONFIG_VIDEO_PVRUSB2_24XXX
198 #define PVR2_HDW_TYPE_24XXX 1
199 #endif
200
201 typedef int (*pvr2_i2c_func)(struct pvr2_hdw *,u8,u8 *,u16,u8 *, u16);
202 #define PVR2_I2C_FUNC_CNT 128
203
204 /* This structure contains all state data directly needed to
205    manipulate the hardware (as opposed to complying with a kernel
206    interface) */
207 struct pvr2_hdw {
208         /* Underlying USB device handle */
209         struct usb_device *usb_dev;
210         struct usb_interface *usb_intf;
211
212         /* Device type, one of PVR2_HDW_TYPE_xxxxx */
213         unsigned int hdw_type;
214
215         /* Video spigot */
216         struct pvr2_stream *vid_stream;
217
218         /* Mutex for all hardware state control */
219         struct mutex big_lock_mutex;
220         int big_lock_held;  /* For debugging */
221
222         void (*poll_trigger_func)(void *);
223         void *poll_trigger_data;
224
225         char name[32];
226
227         /* I2C stuff */
228         struct i2c_adapter i2c_adap;
229         struct i2c_algorithm i2c_algo;
230         pvr2_i2c_func i2c_func[PVR2_I2C_FUNC_CNT];
231         int i2c_cx25840_hack_state;
232         int i2c_linked;
233         unsigned int i2c_pend_types;    /* Which types of update are needed */
234         unsigned long i2c_pend_mask;    /* Change bits we need to scan */
235         unsigned long i2c_stale_mask;   /* Pending broadcast change bits */
236         unsigned long i2c_active_mask;  /* All change bits currently in use */
237         struct list_head i2c_clients;
238         struct mutex i2c_list_lock;
239
240         /* Frequency table */
241         unsigned int freqTable[FREQTABLE_SIZE];
242         unsigned int freqProgSlot;
243         unsigned int freqSlot;
244
245         /* Stuff for handling low level control interaction with device */
246         struct mutex ctl_lock_mutex;
247         int ctl_lock_held;  /* For debugging */
248         struct urb *ctl_write_urb;
249         struct urb *ctl_read_urb;
250         unsigned char *ctl_write_buffer;
251         unsigned char *ctl_read_buffer;
252         volatile int ctl_write_pend_flag;
253         volatile int ctl_read_pend_flag;
254         volatile int ctl_timeout_flag;
255         struct completion ctl_done;
256         unsigned char cmd_buffer[PVR2_CTL_BUFFSIZE];
257         int cmd_debug_state;               // Low level command debugging info
258         unsigned char cmd_debug_code;      //
259         unsigned int cmd_debug_write_len;  //
260         unsigned int cmd_debug_read_len;   //
261
262         int flag_ok;            // device in known good state
263         int flag_disconnected;  // flag_ok == 0 due to disconnect
264         int flag_init_ok;       // true if structure is fully initialized
265         int flag_streaming_enabled; // true if streaming should be on
266         int fw1_state;          // current situation with fw1
267
268         int flag_decoder_is_tuned;
269
270         struct pvr2_decoder_ctrl *decoder_ctrl;
271
272         // CPU firmware info (used to help find / save firmware data)
273         char *fw_buffer;
274         unsigned int fw_size;
275
276         // Which subsystem pieces have been enabled / configured
277         unsigned long subsys_enabled_mask;
278
279         // Which subsystems are manipulated to enable streaming
280         unsigned long subsys_stream_mask;
281
282         // True if there is a request to trigger logging of state in each
283         // module.
284         int log_requested;
285
286         /* Tuner / frequency control stuff */
287         unsigned int tuner_type;
288         int tuner_updated;
289         unsigned int freqVal;
290         int freqDirty;
291
292         /* Video standard handling */
293         v4l2_std_id std_mask_eeprom; // Hardware supported selections
294         v4l2_std_id std_mask_avail;  // Which standards we may select from
295         v4l2_std_id std_mask_cur;    // Currently selected standard(s)
296         unsigned int std_enum_cnt;   // # of enumerated standards
297         int std_enum_cur;            // selected standard enumeration value
298         int std_dirty;               // True if std_mask_cur has changed
299         struct pvr2_ctl_info std_info_enum;
300         struct pvr2_ctl_info std_info_avail;
301         struct pvr2_ctl_info std_info_cur;
302         struct v4l2_standard *std_defs;
303         const char **std_enum_names;
304
305         // Generated string names, one per actual V4L2 standard
306         const char *std_mask_ptrs[32];
307         char std_mask_names[32][10];
308
309         int unit_number;             /* ID for driver instance */
310         unsigned long serial_number; /* ID for hardware itself */
311
312         /* Minor number used by v4l logic (yes, this is a hack, as there should
313            be no v4l junk here).  Probably a better way to do this. */
314         int v4l_minor_number;
315
316         /* Location of eeprom or a negative number if none */
317         int eeprom_addr;
318
319         enum pvr2_config config;
320
321         /* Information about what audio signal we're hearing */
322         int flag_stereo;
323         int flag_bilingual;
324         struct pvr2_audio_stat *audio_stat;
325
326         /* Control state needed for cx2341x module */
327         struct cx2341x_mpeg_params enc_cur_state;
328         struct cx2341x_mpeg_params enc_ctl_state;
329         /* True if an encoder attribute has changed */
330         int enc_stale;
331         /* True if enc_cur_state is valid */
332         int enc_cur_valid;
333
334         /* Control state */
335 #define VCREATE_DATA(lab) int lab##_val; int lab##_dirty
336         VCREATE_DATA(brightness);
337         VCREATE_DATA(contrast);
338         VCREATE_DATA(saturation);
339         VCREATE_DATA(hue);
340         VCREATE_DATA(volume);
341         VCREATE_DATA(balance);
342         VCREATE_DATA(bass);
343         VCREATE_DATA(treble);
344         VCREATE_DATA(mute);
345         VCREATE_DATA(input);
346         VCREATE_DATA(audiomode);
347         VCREATE_DATA(res_hor);
348         VCREATE_DATA(res_ver);
349         VCREATE_DATA(srate);
350 #undef VCREATE_DATA
351
352         struct pvr2_ctld_info *mpeg_ctrl_info;
353
354         struct pvr2_ctrl *controls;
355         unsigned int control_cnt;
356 };
357
358 #endif /* __PVRUSB2_HDW_INTERNAL_H */
359
360 /*
361   Stuff for Emacs to see, in order to encourage consistent editing style:
362   *** Local Variables: ***
363   *** mode: c ***
364   *** fill-column: 75 ***
365   *** tab-width: 8 ***
366   *** c-basic-offset: 8 ***
367   *** End: ***
368   */