5 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
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
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.
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
21 #ifndef __PVRUSB2_HDW_INTERNAL_H
22 #define __PVRUSB2_HDW_INTERNAL_H
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.
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>
43 /* Legal values for the SRATE state variable */
44 #define PVR2_CVAL_SRATE_48 0
45 #define PVR2_CVAL_SRATE_44_1 1
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
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
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
74 #define PVR2_VID_ENDPOINT 0x84
75 #define PVR2_UNK_ENDPOINT 0x86 /* maybe raw yuv ? */
76 #define PVR2_VBI_ENDPOINT 0x88
78 #define PVR2_CTL_BUFFSIZE 64
80 #define FREQTABLE_SIZE 500
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)
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,
96 typedef unsigned int (*pvr2_ctlf_get_v4lflags)(struct pvr2_ctrl *);
98 /* This structure describes a specific control. A table of these is set up
100 struct pvr2_ctl_info {
101 /* Control's name suitable for use as an identifier */
104 /* Short description of control */
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 */
118 /* Control's type (int, enum, bitmask) */
119 enum pvr2_ctl_type type;
121 /* Associated V4L control ID, if any */
124 /* Associated driver internal ID, if any */
127 /* Don't implicitly initialize this control's value */
130 /* Starting value for this control */
133 /* Type-specific control information */
135 struct { /* Integer control */
136 long min_value; /* lower limit */
137 long max_value; /* upper limit */
139 struct { /* enumerated control */
140 unsigned int count; /* enum value count */
141 const char **value_names; /* symbol names */
143 struct { /* bitmask control */
144 unsigned int valid_bits; /* bits in use */
145 const char **bit_names; /* symbol name/bit */
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];
159 const struct pvr2_ctl_info *info;
160 struct pvr2_hdw *hdw;
164 struct pvr2_audio_stat {
166 void (*detach)(void *);
167 int (*status)(void *);
170 struct pvr2_decoder_ctrl {
172 void (*detach)(void *);
173 void (*enable)(void *,int);
174 int (*tuned)(void *);
175 void (*force_reset)(void *);
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 */
183 #define PVR2_I2C_PEND_ALL (PVR2_I2C_PEND_DETECT |\
184 PVR2_I2C_PEND_CLIENT |\
185 PVR2_I2C_PEND_REFRESH |\
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
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
201 typedef int (*pvr2_i2c_func)(struct pvr2_hdw *,u8,u8 *,u16,u8 *, u16);
202 #define PVR2_I2C_FUNC_CNT 128
204 /* This structure contains all state data directly needed to
205 manipulate the hardware (as opposed to complying with a kernel
208 /* Underlying USB device handle */
209 struct usb_device *usb_dev;
210 struct usb_interface *usb_intf;
212 /* Device type, one of PVR2_HDW_TYPE_xxxxx */
213 unsigned int hdw_type;
216 struct pvr2_stream *vid_stream;
218 /* Mutex for all hardware state control */
219 struct mutex big_lock_mutex;
220 int big_lock_held; /* For debugging */
222 void (*poll_trigger_func)(void *);
223 void *poll_trigger_data;
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;
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;
240 /* Frequency table */
241 unsigned int freqTable[FREQTABLE_SIZE];
242 unsigned int freqProgSlot;
243 unsigned int freqSlot;
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; //
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
268 int flag_decoder_is_tuned;
270 struct pvr2_decoder_ctrl *decoder_ctrl;
272 // CPU firmware info (used to help find / save firmware data)
274 unsigned int fw_size;
276 // Which subsystem pieces have been enabled / configured
277 unsigned long subsys_enabled_mask;
279 // Which subsystems are manipulated to enable streaming
280 unsigned long subsys_stream_mask;
282 // True if there is a request to trigger logging of state in each
286 /* Tuner / frequency control stuff */
287 unsigned int tuner_type;
289 unsigned int freqVal;
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;
305 // Generated string names, one per actual V4L2 standard
306 const char *std_mask_ptrs[32];
307 char std_mask_names[32][10];
309 int unit_number; /* ID for driver instance */
310 unsigned long serial_number; /* ID for hardware itself */
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;
316 /* Location of eeprom or a negative number if none */
319 enum pvr2_config config;
321 /* Information about what audio signal we're hearing */
324 struct pvr2_audio_stat *audio_stat;
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 */
331 /* True if enc_cur_state is valid */
335 #define VCREATE_DATA(lab) int lab##_val; int lab##_dirty
336 VCREATE_DATA(brightness);
337 VCREATE_DATA(contrast);
338 VCREATE_DATA(saturation);
340 VCREATE_DATA(volume);
341 VCREATE_DATA(balance);
343 VCREATE_DATA(treble);
346 VCREATE_DATA(audiomode);
347 VCREATE_DATA(res_hor);
348 VCREATE_DATA(res_ver);
352 struct pvr2_ctld_info *mpeg_ctrl_info;
354 struct pvr2_ctrl *controls;
355 unsigned int control_cnt;
358 #endif /* __PVRUSB2_HDW_INTERNAL_H */
361 Stuff for Emacs to see, in order to encourage consistent editing style:
362 *** Local Variables: ***
364 *** fill-column: 75 ***
366 *** c-basic-offset: 8 ***