Merge branch 'misc' into test
[pandora-kernel.git] / drivers / media / video / pvrusb2 / pvrusb2-hdw.c
1 /*
2  *
3  *
4  *  Copyright (C) 2005 Mike Isely <isely@pobox.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
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  *
19  */
20
21 #include <linux/errno.h>
22 #include <linux/string.h>
23 #include <linux/slab.h>
24 #include <linux/firmware.h>
25 #include <linux/videodev2.h>
26 #include <media/v4l2-common.h>
27 #include <media/tuner.h>
28 #include "pvrusb2.h"
29 #include "pvrusb2-std.h"
30 #include "pvrusb2-util.h"
31 #include "pvrusb2-hdw.h"
32 #include "pvrusb2-i2c-core.h"
33 #include "pvrusb2-eeprom.h"
34 #include "pvrusb2-hdw-internal.h"
35 #include "pvrusb2-encoder.h"
36 #include "pvrusb2-debug.h"
37 #include "pvrusb2-fx2-cmd.h"
38 #include "pvrusb2-wm8775.h"
39 #include "pvrusb2-video-v4l.h"
40 #include "pvrusb2-cx2584x-v4l.h"
41 #include "pvrusb2-cs53l32a.h"
42 #include "pvrusb2-audio.h"
43
44 #define TV_MIN_FREQ     55250000L
45 #define TV_MAX_FREQ    850000000L
46
47 /* This defines a minimum interval that the decoder must remain quiet
48    before we are allowed to start it running. */
49 #define TIME_MSEC_DECODER_WAIT 50
50
51 /* This defines a minimum interval that the decoder must be allowed to run
52    before we can safely begin using its streaming output. */
53 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
54
55 /* This defines a minimum interval that the encoder must remain quiet
56    before we are allowed to configure it. */
57 #define TIME_MSEC_ENCODER_WAIT 50
58
59 /* This defines the minimum interval that the encoder must successfully run
60    before we consider that the encoder has run at least once since its
61    firmware has been loaded.  This measurement is in important for cases
62    where we can't do something until we know that the encoder has been run
63    at least once. */
64 #define TIME_MSEC_ENCODER_OK 250
65
66 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
67 static DEFINE_MUTEX(pvr2_unit_mtx);
68
69 static int ctlchg;
70 static int procreload;
71 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
72 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
73 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
74 static int init_pause_msec;
75
76 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
77 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
78 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
79 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
80 module_param(procreload, int, S_IRUGO|S_IWUSR);
81 MODULE_PARM_DESC(procreload,
82                  "Attempt init failure recovery with firmware reload");
83 module_param_array(tuner,    int, NULL, 0444);
84 MODULE_PARM_DESC(tuner,"specify installed tuner type");
85 module_param_array(video_std,    int, NULL, 0444);
86 MODULE_PARM_DESC(video_std,"specify initial video standard");
87 module_param_array(tolerance,    int, NULL, 0444);
88 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
89
90 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
91 static int default_tv_freq    = 61250000L;
92 /* 104.3 MHz, a usable FM station for my area */
93 static int default_radio_freq = 104300000L;
94
95 module_param_named(tv_freq, default_tv_freq, int, 0444);
96 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
97 module_param_named(radio_freq, default_radio_freq, int, 0444);
98 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
99
100 #define PVR2_CTL_WRITE_ENDPOINT  0x01
101 #define PVR2_CTL_READ_ENDPOINT   0x81
102
103 #define PVR2_GPIO_IN 0x9008
104 #define PVR2_GPIO_OUT 0x900c
105 #define PVR2_GPIO_DIR 0x9020
106
107 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
108
109 #define PVR2_FIRMWARE_ENDPOINT   0x02
110
111 /* size of a firmware chunk */
112 #define FIRMWARE_CHUNK_SIZE 0x2000
113
114 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
115                                         struct v4l2_subdev *);
116
117 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
118         [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
119         [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
120         [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
121         [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update,
122         [PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update,
123 };
124
125 static const char *module_names[] = {
126         [PVR2_CLIENT_ID_MSP3400] = "msp3400",
127         [PVR2_CLIENT_ID_CX25840] = "cx25840",
128         [PVR2_CLIENT_ID_SAA7115] = "saa7115",
129         [PVR2_CLIENT_ID_TUNER] = "tuner",
130         [PVR2_CLIENT_ID_DEMOD] = "tuner",
131         [PVR2_CLIENT_ID_CS53L32A] = "cs53l32a",
132         [PVR2_CLIENT_ID_WM8775] = "wm8775",
133 };
134
135
136 static const unsigned char *module_i2c_addresses[] = {
137         [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
138         [PVR2_CLIENT_ID_DEMOD] = "\x43",
139         [PVR2_CLIENT_ID_MSP3400] = "\x40",
140         [PVR2_CLIENT_ID_SAA7115] = "\x21",
141         [PVR2_CLIENT_ID_WM8775] = "\x1b",
142         [PVR2_CLIENT_ID_CX25840] = "\x44",
143         [PVR2_CLIENT_ID_CS53L32A] = "\x11",
144 };
145
146
147 static const char *ir_scheme_names[] = {
148         [PVR2_IR_SCHEME_NONE] = "none",
149         [PVR2_IR_SCHEME_29XXX] = "29xxx",
150         [PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)",
151         [PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)",
152         [PVR2_IR_SCHEME_ZILOG] = "Zilog",
153 };
154
155
156 /* Define the list of additional controls we'll dynamically construct based
157    on query of the cx2341x module. */
158 struct pvr2_mpeg_ids {
159         const char *strid;
160         int id;
161 };
162 static const struct pvr2_mpeg_ids mpeg_ids[] = {
163         {
164                 .strid = "audio_layer",
165                 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
166         },{
167                 .strid = "audio_bitrate",
168                 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
169         },{
170                 /* Already using audio_mode elsewhere :-( */
171                 .strid = "mpeg_audio_mode",
172                 .id = V4L2_CID_MPEG_AUDIO_MODE,
173         },{
174                 .strid = "mpeg_audio_mode_extension",
175                 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
176         },{
177                 .strid = "audio_emphasis",
178                 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
179         },{
180                 .strid = "audio_crc",
181                 .id = V4L2_CID_MPEG_AUDIO_CRC,
182         },{
183                 .strid = "video_aspect",
184                 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
185         },{
186                 .strid = "video_b_frames",
187                 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
188         },{
189                 .strid = "video_gop_size",
190                 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
191         },{
192                 .strid = "video_gop_closure",
193                 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
194         },{
195                 .strid = "video_bitrate_mode",
196                 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
197         },{
198                 .strid = "video_bitrate",
199                 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
200         },{
201                 .strid = "video_bitrate_peak",
202                 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
203         },{
204                 .strid = "video_temporal_decimation",
205                 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
206         },{
207                 .strid = "stream_type",
208                 .id = V4L2_CID_MPEG_STREAM_TYPE,
209         },{
210                 .strid = "video_spatial_filter_mode",
211                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
212         },{
213                 .strid = "video_spatial_filter",
214                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
215         },{
216                 .strid = "video_luma_spatial_filter_type",
217                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
218         },{
219                 .strid = "video_chroma_spatial_filter_type",
220                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
221         },{
222                 .strid = "video_temporal_filter_mode",
223                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
224         },{
225                 .strid = "video_temporal_filter",
226                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
227         },{
228                 .strid = "video_median_filter_type",
229                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
230         },{
231                 .strid = "video_luma_median_filter_top",
232                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
233         },{
234                 .strid = "video_luma_median_filter_bottom",
235                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
236         },{
237                 .strid = "video_chroma_median_filter_top",
238                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
239         },{
240                 .strid = "video_chroma_median_filter_bottom",
241                 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
242         }
243 };
244 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
245
246
247 static const char *control_values_srate[] = {
248         [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100]   = "44.1 kHz",
249         [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000]   = "48 kHz",
250         [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000]   = "32 kHz",
251 };
252
253
254
255 static const char *control_values_input[] = {
256         [PVR2_CVAL_INPUT_TV]        = "television",  /*xawtv needs this name*/
257         [PVR2_CVAL_INPUT_DTV]       = "dtv",
258         [PVR2_CVAL_INPUT_RADIO]     = "radio",
259         [PVR2_CVAL_INPUT_SVIDEO]    = "s-video",
260         [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
261 };
262
263
264 static const char *control_values_audiomode[] = {
265         [V4L2_TUNER_MODE_MONO]   = "Mono",
266         [V4L2_TUNER_MODE_STEREO] = "Stereo",
267         [V4L2_TUNER_MODE_LANG1]  = "Lang1",
268         [V4L2_TUNER_MODE_LANG2]  = "Lang2",
269         [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
270 };
271
272
273 static const char *control_values_hsm[] = {
274         [PVR2_CVAL_HSM_FAIL] = "Fail",
275         [PVR2_CVAL_HSM_HIGH] = "High",
276         [PVR2_CVAL_HSM_FULL] = "Full",
277 };
278
279
280 static const char *pvr2_state_names[] = {
281         [PVR2_STATE_NONE] =    "none",
282         [PVR2_STATE_DEAD] =    "dead",
283         [PVR2_STATE_COLD] =    "cold",
284         [PVR2_STATE_WARM] =    "warm",
285         [PVR2_STATE_ERROR] =   "error",
286         [PVR2_STATE_READY] =   "ready",
287         [PVR2_STATE_RUN] =     "run",
288 };
289
290
291 struct pvr2_fx2cmd_descdef {
292         unsigned char id;
293         unsigned char *desc;
294 };
295
296 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
297         {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
298         {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
299         {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
300         {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
301         {FX2CMD_REG_WRITE, "write encoder register"},
302         {FX2CMD_REG_READ, "read encoder register"},
303         {FX2CMD_MEMSEL, "encoder memsel"},
304         {FX2CMD_I2C_WRITE, "i2c write"},
305         {FX2CMD_I2C_READ, "i2c read"},
306         {FX2CMD_GET_USB_SPEED, "get USB speed"},
307         {FX2CMD_STREAMING_ON, "stream on"},
308         {FX2CMD_STREAMING_OFF, "stream off"},
309         {FX2CMD_FWPOST1, "fwpost1"},
310         {FX2CMD_POWER_OFF, "power off"},
311         {FX2CMD_POWER_ON, "power on"},
312         {FX2CMD_DEEP_RESET, "deep reset"},
313         {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
314         {FX2CMD_GET_IR_CODE, "get IR code"},
315         {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
316         {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
317         {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
318         {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
319         {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
320         {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
321         {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
322 };
323
324
325 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
326 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
327 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
328 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
329 static void pvr2_hdw_worker_poll(struct work_struct *work);
330 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
331 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
332 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
333 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
334 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
335 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
336 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
337 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
338 static void pvr2_hdw_quiescent_timeout(unsigned long);
339 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
340 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
341 static void pvr2_hdw_encoder_run_timeout(unsigned long);
342 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
343 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
344                                 unsigned int timeout,int probe_fl,
345                                 void *write_data,unsigned int write_len,
346                                 void *read_data,unsigned int read_len);
347 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
348
349
350 static void trace_stbit(const char *name,int val)
351 {
352         pvr2_trace(PVR2_TRACE_STBITS,
353                    "State bit %s <-- %s",
354                    name,(val ? "true" : "false"));
355 }
356
357 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
358 {
359         struct pvr2_hdw *hdw = cptr->hdw;
360         if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
361                 *vp = hdw->freqTable[hdw->freqProgSlot-1];
362         } else {
363                 *vp = 0;
364         }
365         return 0;
366 }
367
368 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
369 {
370         struct pvr2_hdw *hdw = cptr->hdw;
371         unsigned int slotId = hdw->freqProgSlot;
372         if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
373                 hdw->freqTable[slotId-1] = v;
374                 /* Handle side effects correctly - if we're tuned to this
375                    slot, then forgot the slot id relation since the stored
376                    frequency has been changed. */
377                 if (hdw->freqSelector) {
378                         if (hdw->freqSlotRadio == slotId) {
379                                 hdw->freqSlotRadio = 0;
380                         }
381                 } else {
382                         if (hdw->freqSlotTelevision == slotId) {
383                                 hdw->freqSlotTelevision = 0;
384                         }
385                 }
386         }
387         return 0;
388 }
389
390 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
391 {
392         *vp = cptr->hdw->freqProgSlot;
393         return 0;
394 }
395
396 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
397 {
398         struct pvr2_hdw *hdw = cptr->hdw;
399         if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
400                 hdw->freqProgSlot = v;
401         }
402         return 0;
403 }
404
405 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
406 {
407         struct pvr2_hdw *hdw = cptr->hdw;
408         *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
409         return 0;
410 }
411
412 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
413 {
414         unsigned freq = 0;
415         struct pvr2_hdw *hdw = cptr->hdw;
416         if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
417         if (slotId > 0) {
418                 freq = hdw->freqTable[slotId-1];
419                 if (!freq) return 0;
420                 pvr2_hdw_set_cur_freq(hdw,freq);
421         }
422         if (hdw->freqSelector) {
423                 hdw->freqSlotRadio = slotId;
424         } else {
425                 hdw->freqSlotTelevision = slotId;
426         }
427         return 0;
428 }
429
430 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
431 {
432         *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
433         return 0;
434 }
435
436 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
437 {
438         return cptr->hdw->freqDirty != 0;
439 }
440
441 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
442 {
443         cptr->hdw->freqDirty = 0;
444 }
445
446 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
447 {
448         pvr2_hdw_set_cur_freq(cptr->hdw,v);
449         return 0;
450 }
451
452 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
453 {
454         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
455         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
456         if (stat != 0) {
457                 return stat;
458         }
459         *left = cap->bounds.left;
460         return 0;
461 }
462
463 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
464 {
465         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
466         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
467         if (stat != 0) {
468                 return stat;
469         }
470         *left = cap->bounds.left;
471         if (cap->bounds.width > cptr->hdw->cropw_val) {
472                 *left += cap->bounds.width - cptr->hdw->cropw_val;
473         }
474         return 0;
475 }
476
477 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
478 {
479         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
480         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
481         if (stat != 0) {
482                 return stat;
483         }
484         *top = cap->bounds.top;
485         return 0;
486 }
487
488 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
489 {
490         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
491         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
492         if (stat != 0) {
493                 return stat;
494         }
495         *top = cap->bounds.top;
496         if (cap->bounds.height > cptr->hdw->croph_val) {
497                 *top += cap->bounds.height - cptr->hdw->croph_val;
498         }
499         return 0;
500 }
501
502 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *val)
503 {
504         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
505         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
506         if (stat != 0) {
507                 return stat;
508         }
509         *val = 0;
510         if (cap->bounds.width > cptr->hdw->cropl_val) {
511                 *val = cap->bounds.width - cptr->hdw->cropl_val;
512         }
513         return 0;
514 }
515
516 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *val)
517 {
518         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
519         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
520         if (stat != 0) {
521                 return stat;
522         }
523         *val = 0;
524         if (cap->bounds.height > cptr->hdw->cropt_val) {
525                 *val = cap->bounds.height - cptr->hdw->cropt_val;
526         }
527         return 0;
528 }
529
530 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
531 {
532         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
533         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
534         if (stat != 0) {
535                 return stat;
536         }
537         *val = cap->bounds.left;
538         return 0;
539 }
540
541 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
542 {
543         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
544         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
545         if (stat != 0) {
546                 return stat;
547         }
548         *val = cap->bounds.top;
549         return 0;
550 }
551
552 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
553 {
554         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
555         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
556         if (stat != 0) {
557                 return stat;
558         }
559         *val = cap->bounds.width;
560         return 0;
561 }
562
563 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
564 {
565         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
566         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
567         if (stat != 0) {
568                 return stat;
569         }
570         *val = cap->bounds.height;
571         return 0;
572 }
573
574 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
575 {
576         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
577         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
578         if (stat != 0) {
579                 return stat;
580         }
581         *val = cap->defrect.left;
582         return 0;
583 }
584
585 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
586 {
587         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
588         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
589         if (stat != 0) {
590                 return stat;
591         }
592         *val = cap->defrect.top;
593         return 0;
594 }
595
596 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
597 {
598         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
599         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
600         if (stat != 0) {
601                 return stat;
602         }
603         *val = cap->defrect.width;
604         return 0;
605 }
606
607 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
608 {
609         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
610         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
611         if (stat != 0) {
612                 return stat;
613         }
614         *val = cap->defrect.height;
615         return 0;
616 }
617
618 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
619 {
620         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
621         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
622         if (stat != 0) {
623                 return stat;
624         }
625         *val = cap->pixelaspect.numerator;
626         return 0;
627 }
628
629 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
630 {
631         struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
632         int stat = pvr2_hdw_check_cropcap(cptr->hdw);
633         if (stat != 0) {
634                 return stat;
635         }
636         *val = cap->pixelaspect.denominator;
637         return 0;
638 }
639
640 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
641 {
642         /* Actual maximum depends on the video standard in effect. */
643         if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
644                 *vp = 480;
645         } else {
646                 *vp = 576;
647         }
648         return 0;
649 }
650
651 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
652 {
653         /* Actual minimum depends on device digitizer type. */
654         if (cptr->hdw->hdw_desc->flag_has_cx25840) {
655                 *vp = 75;
656         } else {
657                 *vp = 17;
658         }
659         return 0;
660 }
661
662 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
663 {
664         *vp = cptr->hdw->input_val;
665         return 0;
666 }
667
668 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
669 {
670         return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
671 }
672
673 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
674 {
675         return pvr2_hdw_set_input(cptr->hdw,v);
676 }
677
678 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
679 {
680         return cptr->hdw->input_dirty != 0;
681 }
682
683 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
684 {
685         cptr->hdw->input_dirty = 0;
686 }
687
688
689 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
690 {
691         unsigned long fv;
692         struct pvr2_hdw *hdw = cptr->hdw;
693         if (hdw->tuner_signal_stale) {
694                 pvr2_hdw_status_poll(hdw);
695         }
696         fv = hdw->tuner_signal_info.rangehigh;
697         if (!fv) {
698                 /* Safety fallback */
699                 *vp = TV_MAX_FREQ;
700                 return 0;
701         }
702         if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
703                 fv = (fv * 125) / 2;
704         } else {
705                 fv = fv * 62500;
706         }
707         *vp = fv;
708         return 0;
709 }
710
711 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
712 {
713         unsigned long fv;
714         struct pvr2_hdw *hdw = cptr->hdw;
715         if (hdw->tuner_signal_stale) {
716                 pvr2_hdw_status_poll(hdw);
717         }
718         fv = hdw->tuner_signal_info.rangelow;
719         if (!fv) {
720                 /* Safety fallback */
721                 *vp = TV_MIN_FREQ;
722                 return 0;
723         }
724         if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
725                 fv = (fv * 125) / 2;
726         } else {
727                 fv = fv * 62500;
728         }
729         *vp = fv;
730         return 0;
731 }
732
733 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
734 {
735         return cptr->hdw->enc_stale != 0;
736 }
737
738 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
739 {
740         cptr->hdw->enc_stale = 0;
741         cptr->hdw->enc_unsafe_stale = 0;
742 }
743
744 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
745 {
746         int ret;
747         struct v4l2_ext_controls cs;
748         struct v4l2_ext_control c1;
749         memset(&cs,0,sizeof(cs));
750         memset(&c1,0,sizeof(c1));
751         cs.controls = &c1;
752         cs.count = 1;
753         c1.id = cptr->info->v4l_id;
754         ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
755                                 VIDIOC_G_EXT_CTRLS);
756         if (ret) return ret;
757         *vp = c1.value;
758         return 0;
759 }
760
761 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
762 {
763         int ret;
764         struct pvr2_hdw *hdw = cptr->hdw;
765         struct v4l2_ext_controls cs;
766         struct v4l2_ext_control c1;
767         memset(&cs,0,sizeof(cs));
768         memset(&c1,0,sizeof(c1));
769         cs.controls = &c1;
770         cs.count = 1;
771         c1.id = cptr->info->v4l_id;
772         c1.value = v;
773         ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
774                                 hdw->state_encoder_run, &cs,
775                                 VIDIOC_S_EXT_CTRLS);
776         if (ret == -EBUSY) {
777                 /* Oops.  cx2341x is telling us it's not safe to change
778                    this control while we're capturing.  Make a note of this
779                    fact so that the pipeline will be stopped the next time
780                    controls are committed.  Then go on ahead and store this
781                    change anyway. */
782                 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
783                                         0, &cs,
784                                         VIDIOC_S_EXT_CTRLS);
785                 if (!ret) hdw->enc_unsafe_stale = !0;
786         }
787         if (ret) return ret;
788         hdw->enc_stale = !0;
789         return 0;
790 }
791
792 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
793 {
794         struct v4l2_queryctrl qctrl;
795         struct pvr2_ctl_info *info;
796         qctrl.id = cptr->info->v4l_id;
797         cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
798         /* Strip out the const so we can adjust a function pointer.  It's
799            OK to do this here because we know this is a dynamically created
800            control, so the underlying storage for the info pointer is (a)
801            private to us, and (b) not in read-only storage.  Either we do
802            this or we significantly complicate the underlying control
803            implementation. */
804         info = (struct pvr2_ctl_info *)(cptr->info);
805         if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
806                 if (info->set_value) {
807                         info->set_value = NULL;
808                 }
809         } else {
810                 if (!(info->set_value)) {
811                         info->set_value = ctrl_cx2341x_set;
812                 }
813         }
814         return qctrl.flags;
815 }
816
817 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
818 {
819         *vp = cptr->hdw->state_pipeline_req;
820         return 0;
821 }
822
823 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
824 {
825         *vp = cptr->hdw->master_state;
826         return 0;
827 }
828
829 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
830 {
831         int result = pvr2_hdw_is_hsm(cptr->hdw);
832         *vp = PVR2_CVAL_HSM_FULL;
833         if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
834         if (result) *vp = PVR2_CVAL_HSM_HIGH;
835         return 0;
836 }
837
838 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
839 {
840         *vp = cptr->hdw->std_mask_avail;
841         return 0;
842 }
843
844 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
845 {
846         struct pvr2_hdw *hdw = cptr->hdw;
847         v4l2_std_id ns;
848         ns = hdw->std_mask_avail;
849         ns = (ns & ~m) | (v & m);
850         if (ns == hdw->std_mask_avail) return 0;
851         hdw->std_mask_avail = ns;
852         pvr2_hdw_internal_set_std_avail(hdw);
853         pvr2_hdw_internal_find_stdenum(hdw);
854         return 0;
855 }
856
857 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
858                                char *bufPtr,unsigned int bufSize,
859                                unsigned int *len)
860 {
861         *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
862         return 0;
863 }
864
865 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
866                                const char *bufPtr,unsigned int bufSize,
867                                int *mskp,int *valp)
868 {
869         int ret;
870         v4l2_std_id id;
871         ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
872         if (ret < 0) return ret;
873         if (mskp) *mskp = id;
874         if (valp) *valp = id;
875         return 0;
876 }
877
878 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
879 {
880         *vp = cptr->hdw->std_mask_cur;
881         return 0;
882 }
883
884 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
885 {
886         struct pvr2_hdw *hdw = cptr->hdw;
887         v4l2_std_id ns;
888         ns = hdw->std_mask_cur;
889         ns = (ns & ~m) | (v & m);
890         if (ns == hdw->std_mask_cur) return 0;
891         hdw->std_mask_cur = ns;
892         hdw->std_dirty = !0;
893         pvr2_hdw_internal_find_stdenum(hdw);
894         return 0;
895 }
896
897 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
898 {
899         return cptr->hdw->std_dirty != 0;
900 }
901
902 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
903 {
904         cptr->hdw->std_dirty = 0;
905 }
906
907 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
908 {
909         struct pvr2_hdw *hdw = cptr->hdw;
910         pvr2_hdw_status_poll(hdw);
911         *vp = hdw->tuner_signal_info.signal;
912         return 0;
913 }
914
915 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
916 {
917         int val = 0;
918         unsigned int subchan;
919         struct pvr2_hdw *hdw = cptr->hdw;
920         pvr2_hdw_status_poll(hdw);
921         subchan = hdw->tuner_signal_info.rxsubchans;
922         if (subchan & V4L2_TUNER_SUB_MONO) {
923                 val |= (1 << V4L2_TUNER_MODE_MONO);
924         }
925         if (subchan & V4L2_TUNER_SUB_STEREO) {
926                 val |= (1 << V4L2_TUNER_MODE_STEREO);
927         }
928         if (subchan & V4L2_TUNER_SUB_LANG1) {
929                 val |= (1 << V4L2_TUNER_MODE_LANG1);
930         }
931         if (subchan & V4L2_TUNER_SUB_LANG2) {
932                 val |= (1 << V4L2_TUNER_MODE_LANG2);
933         }
934         *vp = val;
935         return 0;
936 }
937
938
939 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
940 {
941         struct pvr2_hdw *hdw = cptr->hdw;
942         if (v < 0) return -EINVAL;
943         if (v > hdw->std_enum_cnt) return -EINVAL;
944         hdw->std_enum_cur = v;
945         if (!v) return 0;
946         v--;
947         if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
948         hdw->std_mask_cur = hdw->std_defs[v].id;
949         hdw->std_dirty = !0;
950         return 0;
951 }
952
953
954 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
955 {
956         *vp = cptr->hdw->std_enum_cur;
957         return 0;
958 }
959
960
961 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
962 {
963         return cptr->hdw->std_dirty != 0;
964 }
965
966
967 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
968 {
969         cptr->hdw->std_dirty = 0;
970 }
971
972
973 #define DEFINT(vmin,vmax) \
974         .type = pvr2_ctl_int, \
975         .def.type_int.min_value = vmin, \
976         .def.type_int.max_value = vmax
977
978 #define DEFENUM(tab) \
979         .type = pvr2_ctl_enum, \
980         .def.type_enum.count = ARRAY_SIZE(tab), \
981         .def.type_enum.value_names = tab
982
983 #define DEFBOOL \
984         .type = pvr2_ctl_bool
985
986 #define DEFMASK(msk,tab) \
987         .type = pvr2_ctl_bitmask, \
988         .def.type_bitmask.valid_bits = msk, \
989         .def.type_bitmask.bit_names = tab
990
991 #define DEFREF(vname) \
992         .set_value = ctrl_set_##vname, \
993         .get_value = ctrl_get_##vname, \
994         .is_dirty = ctrl_isdirty_##vname, \
995         .clear_dirty = ctrl_cleardirty_##vname
996
997
998 #define VCREATE_FUNCS(vname) \
999 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
1000 {*vp = cptr->hdw->vname##_val; return 0;} \
1001 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
1002 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
1003 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
1004 {return cptr->hdw->vname##_dirty != 0;} \
1005 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
1006 {cptr->hdw->vname##_dirty = 0;}
1007
1008 VCREATE_FUNCS(brightness)
1009 VCREATE_FUNCS(contrast)
1010 VCREATE_FUNCS(saturation)
1011 VCREATE_FUNCS(hue)
1012 VCREATE_FUNCS(volume)
1013 VCREATE_FUNCS(balance)
1014 VCREATE_FUNCS(bass)
1015 VCREATE_FUNCS(treble)
1016 VCREATE_FUNCS(mute)
1017 VCREATE_FUNCS(cropl)
1018 VCREATE_FUNCS(cropt)
1019 VCREATE_FUNCS(cropw)
1020 VCREATE_FUNCS(croph)
1021 VCREATE_FUNCS(audiomode)
1022 VCREATE_FUNCS(res_hor)
1023 VCREATE_FUNCS(res_ver)
1024 VCREATE_FUNCS(srate)
1025
1026 /* Table definition of all controls which can be manipulated */
1027 static const struct pvr2_ctl_info control_defs[] = {
1028         {
1029                 .v4l_id = V4L2_CID_BRIGHTNESS,
1030                 .desc = "Brightness",
1031                 .name = "brightness",
1032                 .default_value = 128,
1033                 DEFREF(brightness),
1034                 DEFINT(0,255),
1035         },{
1036                 .v4l_id = V4L2_CID_CONTRAST,
1037                 .desc = "Contrast",
1038                 .name = "contrast",
1039                 .default_value = 68,
1040                 DEFREF(contrast),
1041                 DEFINT(0,127),
1042         },{
1043                 .v4l_id = V4L2_CID_SATURATION,
1044                 .desc = "Saturation",
1045                 .name = "saturation",
1046                 .default_value = 64,
1047                 DEFREF(saturation),
1048                 DEFINT(0,127),
1049         },{
1050                 .v4l_id = V4L2_CID_HUE,
1051                 .desc = "Hue",
1052                 .name = "hue",
1053                 .default_value = 0,
1054                 DEFREF(hue),
1055                 DEFINT(-128,127),
1056         },{
1057                 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1058                 .desc = "Volume",
1059                 .name = "volume",
1060                 .default_value = 62000,
1061                 DEFREF(volume),
1062                 DEFINT(0,65535),
1063         },{
1064                 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1065                 .desc = "Balance",
1066                 .name = "balance",
1067                 .default_value = 0,
1068                 DEFREF(balance),
1069                 DEFINT(-32768,32767),
1070         },{
1071                 .v4l_id = V4L2_CID_AUDIO_BASS,
1072                 .desc = "Bass",
1073                 .name = "bass",
1074                 .default_value = 0,
1075                 DEFREF(bass),
1076                 DEFINT(-32768,32767),
1077         },{
1078                 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1079                 .desc = "Treble",
1080                 .name = "treble",
1081                 .default_value = 0,
1082                 DEFREF(treble),
1083                 DEFINT(-32768,32767),
1084         },{
1085                 .v4l_id = V4L2_CID_AUDIO_MUTE,
1086                 .desc = "Mute",
1087                 .name = "mute",
1088                 .default_value = 0,
1089                 DEFREF(mute),
1090                 DEFBOOL,
1091         }, {
1092                 .desc = "Capture crop left margin",
1093                 .name = "crop_left",
1094                 .internal_id = PVR2_CID_CROPL,
1095                 .default_value = 0,
1096                 DEFREF(cropl),
1097                 DEFINT(-129, 340),
1098                 .get_min_value = ctrl_cropl_min_get,
1099                 .get_max_value = ctrl_cropl_max_get,
1100                 .get_def_value = ctrl_get_cropcapdl,
1101         }, {
1102                 .desc = "Capture crop top margin",
1103                 .name = "crop_top",
1104                 .internal_id = PVR2_CID_CROPT,
1105                 .default_value = 0,
1106                 DEFREF(cropt),
1107                 DEFINT(-35, 544),
1108                 .get_min_value = ctrl_cropt_min_get,
1109                 .get_max_value = ctrl_cropt_max_get,
1110                 .get_def_value = ctrl_get_cropcapdt,
1111         }, {
1112                 .desc = "Capture crop width",
1113                 .name = "crop_width",
1114                 .internal_id = PVR2_CID_CROPW,
1115                 .default_value = 720,
1116                 DEFREF(cropw),
1117                 .get_max_value = ctrl_cropw_max_get,
1118                 .get_def_value = ctrl_get_cropcapdw,
1119         }, {
1120                 .desc = "Capture crop height",
1121                 .name = "crop_height",
1122                 .internal_id = PVR2_CID_CROPH,
1123                 .default_value = 480,
1124                 DEFREF(croph),
1125                 .get_max_value = ctrl_croph_max_get,
1126                 .get_def_value = ctrl_get_cropcapdh,
1127         }, {
1128                 .desc = "Capture capability pixel aspect numerator",
1129                 .name = "cropcap_pixel_numerator",
1130                 .internal_id = PVR2_CID_CROPCAPPAN,
1131                 .get_value = ctrl_get_cropcappan,
1132         }, {
1133                 .desc = "Capture capability pixel aspect denominator",
1134                 .name = "cropcap_pixel_denominator",
1135                 .internal_id = PVR2_CID_CROPCAPPAD,
1136                 .get_value = ctrl_get_cropcappad,
1137         }, {
1138                 .desc = "Capture capability bounds top",
1139                 .name = "cropcap_bounds_top",
1140                 .internal_id = PVR2_CID_CROPCAPBT,
1141                 .get_value = ctrl_get_cropcapbt,
1142         }, {
1143                 .desc = "Capture capability bounds left",
1144                 .name = "cropcap_bounds_left",
1145                 .internal_id = PVR2_CID_CROPCAPBL,
1146                 .get_value = ctrl_get_cropcapbl,
1147         }, {
1148                 .desc = "Capture capability bounds width",
1149                 .name = "cropcap_bounds_width",
1150                 .internal_id = PVR2_CID_CROPCAPBW,
1151                 .get_value = ctrl_get_cropcapbw,
1152         }, {
1153                 .desc = "Capture capability bounds height",
1154                 .name = "cropcap_bounds_height",
1155                 .internal_id = PVR2_CID_CROPCAPBH,
1156                 .get_value = ctrl_get_cropcapbh,
1157         },{
1158                 .desc = "Video Source",
1159                 .name = "input",
1160                 .internal_id = PVR2_CID_INPUT,
1161                 .default_value = PVR2_CVAL_INPUT_TV,
1162                 .check_value = ctrl_check_input,
1163                 DEFREF(input),
1164                 DEFENUM(control_values_input),
1165         },{
1166                 .desc = "Audio Mode",
1167                 .name = "audio_mode",
1168                 .internal_id = PVR2_CID_AUDIOMODE,
1169                 .default_value = V4L2_TUNER_MODE_STEREO,
1170                 DEFREF(audiomode),
1171                 DEFENUM(control_values_audiomode),
1172         },{
1173                 .desc = "Horizontal capture resolution",
1174                 .name = "resolution_hor",
1175                 .internal_id = PVR2_CID_HRES,
1176                 .default_value = 720,
1177                 DEFREF(res_hor),
1178                 DEFINT(19,720),
1179         },{
1180                 .desc = "Vertical capture resolution",
1181                 .name = "resolution_ver",
1182                 .internal_id = PVR2_CID_VRES,
1183                 .default_value = 480,
1184                 DEFREF(res_ver),
1185                 DEFINT(17,576),
1186                 /* Hook in check for video standard and adjust maximum
1187                    depending on the standard. */
1188                 .get_max_value = ctrl_vres_max_get,
1189                 .get_min_value = ctrl_vres_min_get,
1190         },{
1191                 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1192                 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1193                 .desc = "Audio Sampling Frequency",
1194                 .name = "srate",
1195                 DEFREF(srate),
1196                 DEFENUM(control_values_srate),
1197         },{
1198                 .desc = "Tuner Frequency (Hz)",
1199                 .name = "frequency",
1200                 .internal_id = PVR2_CID_FREQUENCY,
1201                 .default_value = 0,
1202                 .set_value = ctrl_freq_set,
1203                 .get_value = ctrl_freq_get,
1204                 .is_dirty = ctrl_freq_is_dirty,
1205                 .clear_dirty = ctrl_freq_clear_dirty,
1206                 DEFINT(0,0),
1207                 /* Hook in check for input value (tv/radio) and adjust
1208                    max/min values accordingly */
1209                 .get_max_value = ctrl_freq_max_get,
1210                 .get_min_value = ctrl_freq_min_get,
1211         },{
1212                 .desc = "Channel",
1213                 .name = "channel",
1214                 .set_value = ctrl_channel_set,
1215                 .get_value = ctrl_channel_get,
1216                 DEFINT(0,FREQTABLE_SIZE),
1217         },{
1218                 .desc = "Channel Program Frequency",
1219                 .name = "freq_table_value",
1220                 .set_value = ctrl_channelfreq_set,
1221                 .get_value = ctrl_channelfreq_get,
1222                 DEFINT(0,0),
1223                 /* Hook in check for input value (tv/radio) and adjust
1224                    max/min values accordingly */
1225                 .get_max_value = ctrl_freq_max_get,
1226                 .get_min_value = ctrl_freq_min_get,
1227         },{
1228                 .desc = "Channel Program ID",
1229                 .name = "freq_table_channel",
1230                 .set_value = ctrl_channelprog_set,
1231                 .get_value = ctrl_channelprog_get,
1232                 DEFINT(0,FREQTABLE_SIZE),
1233         },{
1234                 .desc = "Streaming Enabled",
1235                 .name = "streaming_enabled",
1236                 .get_value = ctrl_streamingenabled_get,
1237                 DEFBOOL,
1238         },{
1239                 .desc = "USB Speed",
1240                 .name = "usb_speed",
1241                 .get_value = ctrl_hsm_get,
1242                 DEFENUM(control_values_hsm),
1243         },{
1244                 .desc = "Master State",
1245                 .name = "master_state",
1246                 .get_value = ctrl_masterstate_get,
1247                 DEFENUM(pvr2_state_names),
1248         },{
1249                 .desc = "Signal Present",
1250                 .name = "signal_present",
1251                 .get_value = ctrl_signal_get,
1252                 DEFINT(0,65535),
1253         },{
1254                 .desc = "Audio Modes Present",
1255                 .name = "audio_modes_present",
1256                 .get_value = ctrl_audio_modes_present_get,
1257                 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1258                    v4l.  Nothing outside of this module cares about this,
1259                    but I reuse it in order to also reuse the
1260                    control_values_audiomode string table. */
1261                 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1262                          (1 << V4L2_TUNER_MODE_STEREO)|
1263                          (1 << V4L2_TUNER_MODE_LANG1)|
1264                          (1 << V4L2_TUNER_MODE_LANG2)),
1265                         control_values_audiomode),
1266         },{
1267                 .desc = "Video Standards Available Mask",
1268                 .name = "video_standard_mask_available",
1269                 .internal_id = PVR2_CID_STDAVAIL,
1270                 .skip_init = !0,
1271                 .get_value = ctrl_stdavail_get,
1272                 .set_value = ctrl_stdavail_set,
1273                 .val_to_sym = ctrl_std_val_to_sym,
1274                 .sym_to_val = ctrl_std_sym_to_val,
1275                 .type = pvr2_ctl_bitmask,
1276         },{
1277                 .desc = "Video Standards In Use Mask",
1278                 .name = "video_standard_mask_active",
1279                 .internal_id = PVR2_CID_STDCUR,
1280                 .skip_init = !0,
1281                 .get_value = ctrl_stdcur_get,
1282                 .set_value = ctrl_stdcur_set,
1283                 .is_dirty = ctrl_stdcur_is_dirty,
1284                 .clear_dirty = ctrl_stdcur_clear_dirty,
1285                 .val_to_sym = ctrl_std_val_to_sym,
1286                 .sym_to_val = ctrl_std_sym_to_val,
1287                 .type = pvr2_ctl_bitmask,
1288         },{
1289                 .desc = "Video Standard Name",
1290                 .name = "video_standard",
1291                 .internal_id = PVR2_CID_STDENUM,
1292                 .skip_init = !0,
1293                 .get_value = ctrl_stdenumcur_get,
1294                 .set_value = ctrl_stdenumcur_set,
1295                 .is_dirty = ctrl_stdenumcur_is_dirty,
1296                 .clear_dirty = ctrl_stdenumcur_clear_dirty,
1297                 .type = pvr2_ctl_enum,
1298         }
1299 };
1300
1301 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1302
1303
1304 const char *pvr2_config_get_name(enum pvr2_config cfg)
1305 {
1306         switch (cfg) {
1307         case pvr2_config_empty: return "empty";
1308         case pvr2_config_mpeg: return "mpeg";
1309         case pvr2_config_vbi: return "vbi";
1310         case pvr2_config_pcm: return "pcm";
1311         case pvr2_config_rawvideo: return "raw video";
1312         }
1313         return "<unknown>";
1314 }
1315
1316
1317 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1318 {
1319         return hdw->usb_dev;
1320 }
1321
1322
1323 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1324 {
1325         return hdw->serial_number;
1326 }
1327
1328
1329 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1330 {
1331         return hdw->bus_info;
1332 }
1333
1334
1335 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1336 {
1337         return hdw->identifier;
1338 }
1339
1340
1341 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1342 {
1343         return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1344 }
1345
1346 /* Set the currently tuned frequency and account for all possible
1347    driver-core side effects of this action. */
1348 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1349 {
1350         if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1351                 if (hdw->freqSelector) {
1352                         /* Swing over to radio frequency selection */
1353                         hdw->freqSelector = 0;
1354                         hdw->freqDirty = !0;
1355                 }
1356                 if (hdw->freqValRadio != val) {
1357                         hdw->freqValRadio = val;
1358                         hdw->freqSlotRadio = 0;
1359                         hdw->freqDirty = !0;
1360                 }
1361         } else {
1362                 if (!(hdw->freqSelector)) {
1363                         /* Swing over to television frequency selection */
1364                         hdw->freqSelector = 1;
1365                         hdw->freqDirty = !0;
1366                 }
1367                 if (hdw->freqValTelevision != val) {
1368                         hdw->freqValTelevision = val;
1369                         hdw->freqSlotTelevision = 0;
1370                         hdw->freqDirty = !0;
1371                 }
1372         }
1373 }
1374
1375 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1376 {
1377         return hdw->unit_number;
1378 }
1379
1380
1381 /* Attempt to locate one of the given set of files.  Messages are logged
1382    appropriate to what has been found.  The return value will be 0 or
1383    greater on success (it will be the index of the file name found) and
1384    fw_entry will be filled in.  Otherwise a negative error is returned on
1385    failure.  If the return value is -ENOENT then no viable firmware file
1386    could be located. */
1387 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1388                                 const struct firmware **fw_entry,
1389                                 const char *fwtypename,
1390                                 unsigned int fwcount,
1391                                 const char *fwnames[])
1392 {
1393         unsigned int idx;
1394         int ret = -EINVAL;
1395         for (idx = 0; idx < fwcount; idx++) {
1396                 ret = request_firmware(fw_entry,
1397                                        fwnames[idx],
1398                                        &hdw->usb_dev->dev);
1399                 if (!ret) {
1400                         trace_firmware("Located %s firmware: %s;"
1401                                        " uploading...",
1402                                        fwtypename,
1403                                        fwnames[idx]);
1404                         return idx;
1405                 }
1406                 if (ret == -ENOENT) continue;
1407                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1408                            "request_firmware fatal error with code=%d",ret);
1409                 return ret;
1410         }
1411         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1412                    "***WARNING***"
1413                    " Device %s firmware"
1414                    " seems to be missing.",
1415                    fwtypename);
1416         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1417                    "Did you install the pvrusb2 firmware files"
1418                    " in their proper location?");
1419         if (fwcount == 1) {
1420                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1421                            "request_firmware unable to locate %s file %s",
1422                            fwtypename,fwnames[0]);
1423         } else {
1424                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1425                            "request_firmware unable to locate"
1426                            " one of the following %s files:",
1427                            fwtypename);
1428                 for (idx = 0; idx < fwcount; idx++) {
1429                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1430                                    "request_firmware: Failed to find %s",
1431                                    fwnames[idx]);
1432                 }
1433         }
1434         return ret;
1435 }
1436
1437
1438 /*
1439  * pvr2_upload_firmware1().
1440  *
1441  * Send the 8051 firmware to the device.  After the upload, arrange for
1442  * device to re-enumerate.
1443  *
1444  * NOTE : the pointer to the firmware data given by request_firmware()
1445  * is not suitable for an usb transaction.
1446  *
1447  */
1448 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1449 {
1450         const struct firmware *fw_entry = NULL;
1451         void  *fw_ptr;
1452         unsigned int pipe;
1453         unsigned int fwsize;
1454         int ret;
1455         u16 address;
1456
1457         if (!hdw->hdw_desc->fx2_firmware.cnt) {
1458                 hdw->fw1_state = FW1_STATE_OK;
1459                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1460                            "Connected device type defines"
1461                            " no firmware to upload; ignoring firmware");
1462                 return -ENOTTY;
1463         }
1464
1465         hdw->fw1_state = FW1_STATE_FAILED; // default result
1466
1467         trace_firmware("pvr2_upload_firmware1");
1468
1469         ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1470                                    hdw->hdw_desc->fx2_firmware.cnt,
1471                                    hdw->hdw_desc->fx2_firmware.lst);
1472         if (ret < 0) {
1473                 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1474                 return ret;
1475         }
1476
1477         usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1478
1479         pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1480         fwsize = fw_entry->size;
1481
1482         if ((fwsize != 0x2000) &&
1483             (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) {
1484                 if (hdw->hdw_desc->flag_fx2_16kb) {
1485                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1486                                    "Wrong fx2 firmware size"
1487                                    " (expected 8192 or 16384, got %u)",
1488                                    fwsize);
1489                 } else {
1490                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1491                                    "Wrong fx2 firmware size"
1492                                    " (expected 8192, got %u)",
1493                                    fwsize);
1494                 }
1495                 release_firmware(fw_entry);
1496                 return -ENOMEM;
1497         }
1498
1499         fw_ptr = kmalloc(0x800, GFP_KERNEL);
1500         if (fw_ptr == NULL){
1501                 release_firmware(fw_entry);
1502                 return -ENOMEM;
1503         }
1504
1505         /* We have to hold the CPU during firmware upload. */
1506         pvr2_hdw_cpureset_assert(hdw,1);
1507
1508         /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1509            chunk. */
1510
1511         ret = 0;
1512         for (address = 0; address < fwsize; address += 0x800) {
1513                 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1514                 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1515                                        0, fw_ptr, 0x800, HZ);
1516         }
1517
1518         trace_firmware("Upload done, releasing device's CPU");
1519
1520         /* Now release the CPU.  It will disconnect and reconnect later. */
1521         pvr2_hdw_cpureset_assert(hdw,0);
1522
1523         kfree(fw_ptr);
1524         release_firmware(fw_entry);
1525
1526         trace_firmware("Upload done (%d bytes sent)",ret);
1527
1528         /* We should have written fwsize bytes */
1529         if (ret == fwsize) {
1530                 hdw->fw1_state = FW1_STATE_RELOAD;
1531                 return 0;
1532         }
1533
1534         return -EIO;
1535 }
1536
1537
1538 /*
1539  * pvr2_upload_firmware2()
1540  *
1541  * This uploads encoder firmware on endpoint 2.
1542  *
1543  */
1544
1545 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1546 {
1547         const struct firmware *fw_entry = NULL;
1548         void  *fw_ptr;
1549         unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1550         int actual_length;
1551         int ret = 0;
1552         int fwidx;
1553         static const char *fw_files[] = {
1554                 CX2341X_FIRM_ENC_FILENAME,
1555         };
1556
1557         if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1558                 return 0;
1559         }
1560
1561         trace_firmware("pvr2_upload_firmware2");
1562
1563         ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1564                                    ARRAY_SIZE(fw_files), fw_files);
1565         if (ret < 0) return ret;
1566         fwidx = ret;
1567         ret = 0;
1568         /* Since we're about to completely reinitialize the encoder,
1569            invalidate our cached copy of its configuration state.  Next
1570            time we configure the encoder, then we'll fully configure it. */
1571         hdw->enc_cur_valid = 0;
1572
1573         /* Encoder is about to be reset so note that as far as we're
1574            concerned now, the encoder has never been run. */
1575         del_timer_sync(&hdw->encoder_run_timer);
1576         if (hdw->state_encoder_runok) {
1577                 hdw->state_encoder_runok = 0;
1578                 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1579         }
1580
1581         /* First prepare firmware loading */
1582         ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1583         ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1584         ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1585         ret |= pvr2_hdw_cmd_deep_reset(hdw);
1586         ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1587         ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1588         ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1589         ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1590         ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1591         ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1592         ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1593         ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1594         ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1595         ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1596         ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1597         ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1598         ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1599         ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1600
1601         if (ret) {
1602                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1603                            "firmware2 upload prep failed, ret=%d",ret);
1604                 release_firmware(fw_entry);
1605                 goto done;
1606         }
1607
1608         /* Now send firmware */
1609
1610         fw_len = fw_entry->size;
1611
1612         if (fw_len % sizeof(u32)) {
1613                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1614                            "size of %s firmware"
1615                            " must be a multiple of %zu bytes",
1616                            fw_files[fwidx],sizeof(u32));
1617                 release_firmware(fw_entry);
1618                 ret = -EINVAL;
1619                 goto done;
1620         }
1621
1622         fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1623         if (fw_ptr == NULL){
1624                 release_firmware(fw_entry);
1625                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1626                            "failed to allocate memory for firmware2 upload");
1627                 ret = -ENOMEM;
1628                 goto done;
1629         }
1630
1631         pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1632
1633         fw_done = 0;
1634         for (fw_done = 0; fw_done < fw_len;) {
1635                 bcnt = fw_len - fw_done;
1636                 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1637                 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1638                 /* Usbsnoop log shows that we must swap bytes... */
1639                 /* Some background info: The data being swapped here is a
1640                    firmware image destined for the mpeg encoder chip that
1641                    lives at the other end of a USB endpoint.  The encoder
1642                    chip always talks in 32 bit chunks and its storage is
1643                    organized into 32 bit words.  However from the file
1644                    system to the encoder chip everything is purely a byte
1645                    stream.  The firmware file's contents are always 32 bit
1646                    swapped from what the encoder expects.  Thus the need
1647                    always exists to swap the bytes regardless of the endian
1648                    type of the host processor and therefore swab32() makes
1649                    the most sense. */
1650                 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1651                         ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1652
1653                 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1654                                     &actual_length, HZ);
1655                 ret |= (actual_length != bcnt);
1656                 if (ret) break;
1657                 fw_done += bcnt;
1658         }
1659
1660         trace_firmware("upload of %s : %i / %i ",
1661                        fw_files[fwidx],fw_done,fw_len);
1662
1663         kfree(fw_ptr);
1664         release_firmware(fw_entry);
1665
1666         if (ret) {
1667                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1668                            "firmware2 upload transfer failure");
1669                 goto done;
1670         }
1671
1672         /* Finish upload */
1673
1674         ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1675         ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1676         ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1677
1678         if (ret) {
1679                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1680                            "firmware2 upload post-proc failure");
1681         }
1682
1683  done:
1684         if (hdw->hdw_desc->signal_routing_scheme ==
1685             PVR2_ROUTING_SCHEME_GOTVIEW) {
1686                 /* Ensure that GPIO 11 is set to output for GOTVIEW
1687                    hardware. */
1688                 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1689         }
1690         return ret;
1691 }
1692
1693
1694 static const char *pvr2_get_state_name(unsigned int st)
1695 {
1696         if (st < ARRAY_SIZE(pvr2_state_names)) {
1697                 return pvr2_state_names[st];
1698         }
1699         return "???";
1700 }
1701
1702 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1703 {
1704         /* Even though we really only care about the video decoder chip at
1705            this point, we'll broadcast stream on/off to all sub-devices
1706            anyway, just in case somebody else wants to hear the
1707            command... */
1708         pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
1709                    (enablefl ? "on" : "off"));
1710         v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1711         v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl);
1712         if (hdw->decoder_client_id) {
1713                 /* We get here if the encoder has been noticed.  Otherwise
1714                    we'll issue a warning to the user (which should
1715                    normally never happen). */
1716                 return 0;
1717         }
1718         if (!hdw->flag_decoder_missed) {
1719                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1720                            "WARNING: No decoder present");
1721                 hdw->flag_decoder_missed = !0;
1722                 trace_stbit("flag_decoder_missed",
1723                             hdw->flag_decoder_missed);
1724         }
1725         return -EIO;
1726 }
1727
1728
1729 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1730 {
1731         return hdw->master_state;
1732 }
1733
1734
1735 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1736 {
1737         if (!hdw->flag_tripped) return 0;
1738         hdw->flag_tripped = 0;
1739         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1740                    "Clearing driver error statuss");
1741         return !0;
1742 }
1743
1744
1745 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1746 {
1747         int fl;
1748         LOCK_TAKE(hdw->big_lock); do {
1749                 fl = pvr2_hdw_untrip_unlocked(hdw);
1750         } while (0); LOCK_GIVE(hdw->big_lock);
1751         if (fl) pvr2_hdw_state_sched(hdw);
1752         return 0;
1753 }
1754
1755
1756
1757
1758 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1759 {
1760         return hdw->state_pipeline_req != 0;
1761 }
1762
1763
1764 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1765 {
1766         int ret,st;
1767         LOCK_TAKE(hdw->big_lock); do {
1768                 pvr2_hdw_untrip_unlocked(hdw);
1769                 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1770                         hdw->state_pipeline_req = enable_flag != 0;
1771                         pvr2_trace(PVR2_TRACE_START_STOP,
1772                                    "/*--TRACE_STREAM--*/ %s",
1773                                    enable_flag ? "enable" : "disable");
1774                 }
1775                 pvr2_hdw_state_sched(hdw);
1776         } while (0); LOCK_GIVE(hdw->big_lock);
1777         if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1778         if (enable_flag) {
1779                 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1780                         if (st != PVR2_STATE_READY) return -EIO;
1781                         if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1782                 }
1783         }
1784         return 0;
1785 }
1786
1787
1788 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1789 {
1790         int fl;
1791         LOCK_TAKE(hdw->big_lock);
1792         if ((fl = (hdw->desired_stream_type != config)) != 0) {
1793                 hdw->desired_stream_type = config;
1794                 hdw->state_pipeline_config = 0;
1795                 trace_stbit("state_pipeline_config",
1796                             hdw->state_pipeline_config);
1797                 pvr2_hdw_state_sched(hdw);
1798         }
1799         LOCK_GIVE(hdw->big_lock);
1800         if (fl) return 0;
1801         return pvr2_hdw_wait(hdw,0);
1802 }
1803
1804
1805 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1806 {
1807         int unit_number = hdw->unit_number;
1808         int tp = -1;
1809         if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1810                 tp = tuner[unit_number];
1811         }
1812         if (tp < 0) return -EINVAL;
1813         hdw->tuner_type = tp;
1814         hdw->tuner_updated = !0;
1815         return 0;
1816 }
1817
1818
1819 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1820 {
1821         int unit_number = hdw->unit_number;
1822         int tp = 0;
1823         if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1824                 tp = video_std[unit_number];
1825                 if (tp) return tp;
1826         }
1827         return 0;
1828 }
1829
1830
1831 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1832 {
1833         int unit_number = hdw->unit_number;
1834         int tp = 0;
1835         if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1836                 tp = tolerance[unit_number];
1837         }
1838         return tp;
1839 }
1840
1841
1842 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1843 {
1844         /* Try a harmless request to fetch the eeprom's address over
1845            endpoint 1.  See what happens.  Only the full FX2 image can
1846            respond to this.  If this probe fails then likely the FX2
1847            firmware needs be loaded. */
1848         int result;
1849         LOCK_TAKE(hdw->ctl_lock); do {
1850                 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1851                 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1852                                            hdw->cmd_buffer,1,
1853                                            hdw->cmd_buffer,1);
1854                 if (result < 0) break;
1855         } while(0); LOCK_GIVE(hdw->ctl_lock);
1856         if (result) {
1857                 pvr2_trace(PVR2_TRACE_INIT,
1858                            "Probe of device endpoint 1 result status %d",
1859                            result);
1860         } else {
1861                 pvr2_trace(PVR2_TRACE_INIT,
1862                            "Probe of device endpoint 1 succeeded");
1863         }
1864         return result == 0;
1865 }
1866
1867 struct pvr2_std_hack {
1868         v4l2_std_id pat;  /* Pattern to match */
1869         v4l2_std_id msk;  /* Which bits we care about */
1870         v4l2_std_id std;  /* What additional standards or default to set */
1871 };
1872
1873 /* This data structure labels specific combinations of standards from
1874    tveeprom that we'll try to recognize.  If we recognize one, then assume
1875    a specified default standard to use.  This is here because tveeprom only
1876    tells us about available standards not the intended default standard (if
1877    any) for the device in question.  We guess the default based on what has
1878    been reported as available.  Note that this is only for guessing a
1879    default - which can always be overridden explicitly - and if the user
1880    has otherwise named a default then that default will always be used in
1881    place of this table. */
1882 static const struct pvr2_std_hack std_eeprom_maps[] = {
1883         {       /* PAL(B/G) */
1884                 .pat = V4L2_STD_B|V4L2_STD_GH,
1885                 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1886         },
1887         {       /* NTSC(M) */
1888                 .pat = V4L2_STD_MN,
1889                 .std = V4L2_STD_NTSC_M,
1890         },
1891         {       /* PAL(I) */
1892                 .pat = V4L2_STD_PAL_I,
1893                 .std = V4L2_STD_PAL_I,
1894         },
1895         {       /* SECAM(L/L') */
1896                 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1897                 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1898         },
1899         {       /* PAL(D/D1/K) */
1900                 .pat = V4L2_STD_DK,
1901                 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1902         },
1903 };
1904
1905 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1906 {
1907         char buf[40];
1908         unsigned int bcnt;
1909         v4l2_std_id std1,std2,std3;
1910
1911         std1 = get_default_standard(hdw);
1912         std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1913
1914         bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1915         pvr2_trace(PVR2_TRACE_STD,
1916                    "Supported video standard(s) reported available"
1917                    " in hardware: %.*s",
1918                    bcnt,buf);
1919
1920         hdw->std_mask_avail = hdw->std_mask_eeprom;
1921
1922         std2 = (std1|std3) & ~hdw->std_mask_avail;
1923         if (std2) {
1924                 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1925                 pvr2_trace(PVR2_TRACE_STD,
1926                            "Expanding supported video standards"
1927                            " to include: %.*s",
1928                            bcnt,buf);
1929                 hdw->std_mask_avail |= std2;
1930         }
1931
1932         pvr2_hdw_internal_set_std_avail(hdw);
1933
1934         if (std1) {
1935                 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1936                 pvr2_trace(PVR2_TRACE_STD,
1937                            "Initial video standard forced to %.*s",
1938                            bcnt,buf);
1939                 hdw->std_mask_cur = std1;
1940                 hdw->std_dirty = !0;
1941                 pvr2_hdw_internal_find_stdenum(hdw);
1942                 return;
1943         }
1944         if (std3) {
1945                 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1946                 pvr2_trace(PVR2_TRACE_STD,
1947                            "Initial video standard"
1948                            " (determined by device type): %.*s",bcnt,buf);
1949                 hdw->std_mask_cur = std3;
1950                 hdw->std_dirty = !0;
1951                 pvr2_hdw_internal_find_stdenum(hdw);
1952                 return;
1953         }
1954
1955         {
1956                 unsigned int idx;
1957                 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1958                         if (std_eeprom_maps[idx].msk ?
1959                             ((std_eeprom_maps[idx].pat ^
1960                              hdw->std_mask_eeprom) &
1961                              std_eeprom_maps[idx].msk) :
1962                             (std_eeprom_maps[idx].pat !=
1963                              hdw->std_mask_eeprom)) continue;
1964                         bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1965                                                   std_eeprom_maps[idx].std);
1966                         pvr2_trace(PVR2_TRACE_STD,
1967                                    "Initial video standard guessed as %.*s",
1968                                    bcnt,buf);
1969                         hdw->std_mask_cur = std_eeprom_maps[idx].std;
1970                         hdw->std_dirty = !0;
1971                         pvr2_hdw_internal_find_stdenum(hdw);
1972                         return;
1973                 }
1974         }
1975
1976         if (hdw->std_enum_cnt > 1) {
1977                 // Autoselect the first listed standard
1978                 hdw->std_enum_cur = 1;
1979                 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1980                 hdw->std_dirty = !0;
1981                 pvr2_trace(PVR2_TRACE_STD,
1982                            "Initial video standard auto-selected to %s",
1983                            hdw->std_defs[hdw->std_enum_cur-1].name);
1984                 return;
1985         }
1986
1987         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1988                    "Unable to select a viable initial video standard");
1989 }
1990
1991
1992 static unsigned int pvr2_copy_i2c_addr_list(
1993         unsigned short *dst, const unsigned char *src,
1994         unsigned int dst_max)
1995 {
1996         unsigned int cnt = 0;
1997         if (!src) return 0;
1998         while (src[cnt] && (cnt + 1) < dst_max) {
1999                 dst[cnt] = src[cnt];
2000                 cnt++;
2001         }
2002         dst[cnt] = I2C_CLIENT_END;
2003         return cnt;
2004 }
2005
2006
2007 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw)
2008 {
2009         /*
2010           Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
2011           for cx25840 causes that module to correctly set up its video
2012           scaling.  This is really a problem in the cx25840 module itself,
2013           but we work around it here.  The problem has not been seen in
2014           ivtv because there VBI is supported and set up.  We don't do VBI
2015           here (at least not yet) and thus we never attempted to even set
2016           it up.
2017         */
2018         struct v4l2_format fmt;
2019         if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) {
2020                 /* We're not using a cx25840 so don't enable the hack */
2021                 return;
2022         }
2023
2024         pvr2_trace(PVR2_TRACE_INIT,
2025                    "Module ID %u:"
2026                    " Executing cx25840 VBI hack",
2027                    hdw->decoder_client_id);
2028         memset(&fmt, 0, sizeof(fmt));
2029         fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
2030         v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
2031                              vbi, s_sliced_fmt, &fmt.fmt.sliced);
2032 }
2033
2034
2035 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
2036                                 const struct pvr2_device_client_desc *cd)
2037 {
2038         const char *fname;
2039         unsigned char mid;
2040         struct v4l2_subdev *sd;
2041         unsigned int i2ccnt;
2042         const unsigned char *p;
2043         /* Arbitrary count - max # i2c addresses we will probe */
2044         unsigned short i2caddr[25];
2045
2046         mid = cd->module_id;
2047         fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
2048         if (!fname) {
2049                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2050                            "Module ID %u for device %s has no name?"
2051                            "  The driver might have a configuration problem.",
2052                            mid,
2053                            hdw->hdw_desc->description);
2054                 return -EINVAL;
2055         }
2056         pvr2_trace(PVR2_TRACE_INIT,
2057                    "Module ID %u (%s) for device %s being loaded...",
2058                    mid, fname,
2059                    hdw->hdw_desc->description);
2060
2061         i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
2062                                          ARRAY_SIZE(i2caddr));
2063         if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
2064                          module_i2c_addresses[mid] : NULL) != NULL)) {
2065                 /* Second chance: Try default i2c address list */
2066                 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2067                                                  ARRAY_SIZE(i2caddr));
2068                 if (i2ccnt) {
2069                         pvr2_trace(PVR2_TRACE_INIT,
2070                                    "Module ID %u:"
2071                                    " Using default i2c address list",
2072                                    mid);
2073                 }
2074         }
2075
2076         if (!i2ccnt) {
2077                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2078                            "Module ID %u (%s) for device %s:"
2079                            " No i2c addresses."
2080                            "  The driver might have a configuration problem.",
2081                            mid, fname, hdw->hdw_desc->description);
2082                 return -EINVAL;
2083         }
2084
2085         if (i2ccnt == 1) {
2086                 pvr2_trace(PVR2_TRACE_INIT,
2087                            "Module ID %u:"
2088                            " Setting up with specified i2c address 0x%x",
2089                            mid, i2caddr[0]);
2090                 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2091                                          fname, i2caddr[0], NULL);
2092         } else {
2093                 pvr2_trace(PVR2_TRACE_INIT,
2094                            "Module ID %u:"
2095                            " Setting up with address probe list",
2096                            mid);
2097                 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2098                                          fname, 0, i2caddr);
2099         }
2100
2101         if (!sd) {
2102                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2103                            "Module ID %u (%s) for device %s failed to load."
2104                            "  Possible missing sub-device kernel module or"
2105                            " initialization failure within module.",
2106                            mid, fname, hdw->hdw_desc->description);
2107                 return -EIO;
2108         }
2109
2110         /* Tag this sub-device instance with the module ID we know about.
2111            In other places we'll use that tag to determine if the instance
2112            requires special handling. */
2113         sd->grp_id = mid;
2114
2115         pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
2116
2117
2118         /* client-specific setup... */
2119         switch (mid) {
2120         case PVR2_CLIENT_ID_CX25840:
2121         case PVR2_CLIENT_ID_SAA7115:
2122                 hdw->decoder_client_id = mid;
2123                 break;
2124         default: break;
2125         }
2126
2127         return 0;
2128 }
2129
2130
2131 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2132 {
2133         unsigned int idx;
2134         const struct pvr2_string_table *cm;
2135         const struct pvr2_device_client_table *ct;
2136         int okFl = !0;
2137
2138         cm = &hdw->hdw_desc->client_modules;
2139         for (idx = 0; idx < cm->cnt; idx++) {
2140                 request_module(cm->lst[idx]);
2141         }
2142
2143         ct = &hdw->hdw_desc->client_table;
2144         for (idx = 0; idx < ct->cnt; idx++) {
2145                 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
2146         }
2147         if (!okFl) {
2148                 hdw->flag_modulefail = !0;
2149                 pvr2_hdw_render_useless(hdw);
2150         }
2151 }
2152
2153
2154 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2155 {
2156         int ret;
2157         unsigned int idx;
2158         struct pvr2_ctrl *cptr;
2159         int reloadFl = 0;
2160         if (hdw->hdw_desc->fx2_firmware.cnt) {
2161                 if (!reloadFl) {
2162                         reloadFl =
2163                                 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
2164                                  == 0);
2165                         if (reloadFl) {
2166                                 pvr2_trace(PVR2_TRACE_INIT,
2167                                            "USB endpoint config looks strange"
2168                                            "; possibly firmware needs to be"
2169                                            " loaded");
2170                         }
2171                 }
2172                 if (!reloadFl) {
2173                         reloadFl = !pvr2_hdw_check_firmware(hdw);
2174                         if (reloadFl) {
2175                                 pvr2_trace(PVR2_TRACE_INIT,
2176                                            "Check for FX2 firmware failed"
2177                                            "; possibly firmware needs to be"
2178                                            " loaded");
2179                         }
2180                 }
2181                 if (reloadFl) {
2182                         if (pvr2_upload_firmware1(hdw) != 0) {
2183                                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2184                                            "Failure uploading firmware1");
2185                         }
2186                         return;
2187                 }
2188         }
2189         hdw->fw1_state = FW1_STATE_OK;
2190
2191         if (!pvr2_hdw_dev_ok(hdw)) return;
2192
2193         hdw->force_dirty = !0;
2194
2195         if (!hdw->hdw_desc->flag_no_powerup) {
2196                 pvr2_hdw_cmd_powerup(hdw);
2197                 if (!pvr2_hdw_dev_ok(hdw)) return;
2198         }
2199
2200         /* Take the IR chip out of reset, if appropriate */
2201         if (hdw->ir_scheme_active == PVR2_IR_SCHEME_ZILOG) {
2202                 pvr2_issue_simple_cmd(hdw,
2203                                       FX2CMD_HCW_ZILOG_RESET |
2204                                       (1 << 8) |
2205                                       ((0) << 16));
2206         }
2207
2208         // This step MUST happen after the earlier powerup step.
2209         pvr2_i2c_core_init(hdw);
2210         if (!pvr2_hdw_dev_ok(hdw)) return;
2211
2212         pvr2_hdw_load_modules(hdw);
2213         if (!pvr2_hdw_dev_ok(hdw)) return;
2214
2215         v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
2216
2217         for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2218                 cptr = hdw->controls + idx;
2219                 if (cptr->info->skip_init) continue;
2220                 if (!cptr->info->set_value) continue;
2221                 cptr->info->set_value(cptr,~0,cptr->info->default_value);
2222         }
2223
2224         pvr2_hdw_cx25840_vbi_hack(hdw);
2225
2226         /* Set up special default values for the television and radio
2227            frequencies here.  It's not really important what these defaults
2228            are, but I set them to something usable in the Chicago area just
2229            to make driver testing a little easier. */
2230
2231         hdw->freqValTelevision = default_tv_freq;
2232         hdw->freqValRadio = default_radio_freq;
2233
2234         // Do not use pvr2_reset_ctl_endpoints() here.  It is not
2235         // thread-safe against the normal pvr2_send_request() mechanism.
2236         // (We should make it thread safe).
2237
2238         if (hdw->hdw_desc->flag_has_hauppauge_rom) {
2239                 ret = pvr2_hdw_get_eeprom_addr(hdw);
2240                 if (!pvr2_hdw_dev_ok(hdw)) return;
2241                 if (ret < 0) {
2242                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2243                                    "Unable to determine location of eeprom,"
2244                                    " skipping");
2245                 } else {
2246                         hdw->eeprom_addr = ret;
2247                         pvr2_eeprom_analyze(hdw);
2248                         if (!pvr2_hdw_dev_ok(hdw)) return;
2249                 }
2250         } else {
2251                 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
2252                 hdw->tuner_updated = !0;
2253                 hdw->std_mask_eeprom = V4L2_STD_ALL;
2254         }
2255
2256         if (hdw->serial_number) {
2257                 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2258                                 "sn-%lu", hdw->serial_number);
2259         } else if (hdw->unit_number >= 0) {
2260                 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2261                                 "unit-%c",
2262                                 hdw->unit_number + 'a');
2263         } else {
2264                 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2265                                 "unit-??");
2266         }
2267         hdw->identifier[idx] = 0;
2268
2269         pvr2_hdw_setup_std(hdw);
2270
2271         if (!get_default_tuner_type(hdw)) {
2272                 pvr2_trace(PVR2_TRACE_INIT,
2273                            "pvr2_hdw_setup: Tuner type overridden to %d",
2274                            hdw->tuner_type);
2275         }
2276
2277
2278         if (!pvr2_hdw_dev_ok(hdw)) return;
2279
2280         if (hdw->hdw_desc->signal_routing_scheme ==
2281             PVR2_ROUTING_SCHEME_GOTVIEW) {
2282                 /* Ensure that GPIO 11 is set to output for GOTVIEW
2283                    hardware. */
2284                 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
2285         }
2286
2287         pvr2_hdw_commit_setup(hdw);
2288
2289         hdw->vid_stream = pvr2_stream_create();
2290         if (!pvr2_hdw_dev_ok(hdw)) return;
2291         pvr2_trace(PVR2_TRACE_INIT,
2292                    "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
2293         if (hdw->vid_stream) {
2294                 idx = get_default_error_tolerance(hdw);
2295                 if (idx) {
2296                         pvr2_trace(PVR2_TRACE_INIT,
2297                                    "pvr2_hdw_setup: video stream %p"
2298                                    " setting tolerance %u",
2299                                    hdw->vid_stream,idx);
2300                 }
2301                 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2302                                   PVR2_VID_ENDPOINT,idx);
2303         }
2304
2305         if (!pvr2_hdw_dev_ok(hdw)) return;
2306
2307         hdw->flag_init_ok = !0;
2308
2309         pvr2_hdw_state_sched(hdw);
2310 }
2311
2312
2313 /* Set up the structure and attempt to put the device into a usable state.
2314    This can be a time-consuming operation, which is why it is not done
2315    internally as part of the create() step. */
2316 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
2317 {
2318         pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
2319         do {
2320                 pvr2_hdw_setup_low(hdw);
2321                 pvr2_trace(PVR2_TRACE_INIT,
2322                            "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2323                            hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
2324                 if (pvr2_hdw_dev_ok(hdw)) {
2325                         if (hdw->flag_init_ok) {
2326                                 pvr2_trace(
2327                                         PVR2_TRACE_INFO,
2328                                         "Device initialization"
2329                                         " completed successfully.");
2330                                 break;
2331                         }
2332                         if (hdw->fw1_state == FW1_STATE_RELOAD) {
2333                                 pvr2_trace(
2334                                         PVR2_TRACE_INFO,
2335                                         "Device microcontroller firmware"
2336                                         " (re)loaded; it should now reset"
2337                                         " and reconnect.");
2338                                 break;
2339                         }
2340                         pvr2_trace(
2341                                 PVR2_TRACE_ERROR_LEGS,
2342                                 "Device initialization was not successful.");
2343                         if (hdw->fw1_state == FW1_STATE_MISSING) {
2344                                 pvr2_trace(
2345                                         PVR2_TRACE_ERROR_LEGS,
2346                                         "Giving up since device"
2347                                         " microcontroller firmware"
2348                                         " appears to be missing.");
2349                                 break;
2350                         }
2351                 }
2352                 if (hdw->flag_modulefail) {
2353                         pvr2_trace(
2354                                 PVR2_TRACE_ERROR_LEGS,
2355                                 "***WARNING*** pvrusb2 driver initialization"
2356                                 " failed due to the failure of one or more"
2357                                 " sub-device kernel modules.");
2358                         pvr2_trace(
2359                                 PVR2_TRACE_ERROR_LEGS,
2360                                 "You need to resolve the failing condition"
2361                                 " before this driver can function.  There"
2362                                 " should be some earlier messages giving more"
2363                                 " information about the problem.");
2364                         break;
2365                 }
2366                 if (procreload) {
2367                         pvr2_trace(
2368                                 PVR2_TRACE_ERROR_LEGS,
2369                                 "Attempting pvrusb2 recovery by reloading"
2370                                 " primary firmware.");
2371                         pvr2_trace(
2372                                 PVR2_TRACE_ERROR_LEGS,
2373                                 "If this works, device should disconnect"
2374                                 " and reconnect in a sane state.");
2375                         hdw->fw1_state = FW1_STATE_UNKNOWN;
2376                         pvr2_upload_firmware1(hdw);
2377                 } else {
2378                         pvr2_trace(
2379                                 PVR2_TRACE_ERROR_LEGS,
2380                                 "***WARNING*** pvrusb2 device hardware"
2381                                 " appears to be jammed"
2382                                 " and I can't clear it.");
2383                         pvr2_trace(
2384                                 PVR2_TRACE_ERROR_LEGS,
2385                                 "You might need to power cycle"
2386                                 " the pvrusb2 device"
2387                                 " in order to recover.");
2388                 }
2389         } while (0);
2390         pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2391 }
2392
2393
2394 /* Perform second stage initialization.  Set callback pointer first so that
2395    we can avoid a possible initialization race (if the kernel thread runs
2396    before the callback has been set). */
2397 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2398                         void (*callback_func)(void *),
2399                         void *callback_data)
2400 {
2401         LOCK_TAKE(hdw->big_lock); do {
2402                 if (hdw->flag_disconnected) {
2403                         /* Handle a race here: If we're already
2404                            disconnected by this point, then give up.  If we
2405                            get past this then we'll remain connected for
2406                            the duration of initialization since the entire
2407                            initialization sequence is now protected by the
2408                            big_lock. */
2409                         break;
2410                 }
2411                 hdw->state_data = callback_data;
2412                 hdw->state_func = callback_func;
2413                 pvr2_hdw_setup(hdw);
2414         } while (0); LOCK_GIVE(hdw->big_lock);
2415         return hdw->flag_init_ok;
2416 }
2417
2418
2419 /* Create, set up, and return a structure for interacting with the
2420    underlying hardware.  */
2421 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2422                                  const struct usb_device_id *devid)
2423 {
2424         unsigned int idx,cnt1,cnt2,m;
2425         struct pvr2_hdw *hdw = NULL;
2426         int valid_std_mask;
2427         struct pvr2_ctrl *cptr;
2428         struct usb_device *usb_dev;
2429         const struct pvr2_device_desc *hdw_desc;
2430         __u8 ifnum;
2431         struct v4l2_queryctrl qctrl;
2432         struct pvr2_ctl_info *ciptr;
2433
2434         usb_dev = interface_to_usbdev(intf);
2435
2436         hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
2437
2438         if (hdw_desc == NULL) {
2439                 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create:"
2440                            " No device description pointer,"
2441                            " unable to continue.");
2442                 pvr2_trace(PVR2_TRACE_INIT, "If you have a new device type,"
2443                            " please contact Mike Isely <isely@pobox.com>"
2444                            " to get it included in the driver\n");
2445                 goto fail;
2446         }
2447
2448         hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
2449         pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2450                    hdw,hdw_desc->description);
2451         pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s",
2452                 hdw_desc->description);
2453         if (hdw_desc->flag_is_experimental) {
2454                 pvr2_trace(PVR2_TRACE_INFO, "**********");
2455                 pvr2_trace(PVR2_TRACE_INFO,
2456                            "WARNING: Support for this device (%s) is"
2457                            " experimental.", hdw_desc->description);
2458                 pvr2_trace(PVR2_TRACE_INFO,
2459                            "Important functionality might not be"
2460                            " entirely working.");
2461                 pvr2_trace(PVR2_TRACE_INFO,
2462                            "Please consider contacting the driver author to"
2463                            " help with further stabilization of the driver.");
2464                 pvr2_trace(PVR2_TRACE_INFO, "**********");
2465         }
2466         if (!hdw) goto fail;
2467
2468         init_timer(&hdw->quiescent_timer);
2469         hdw->quiescent_timer.data = (unsigned long)hdw;
2470         hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
2471
2472         init_timer(&hdw->decoder_stabilization_timer);
2473         hdw->decoder_stabilization_timer.data = (unsigned long)hdw;
2474         hdw->decoder_stabilization_timer.function =
2475                 pvr2_hdw_decoder_stabilization_timeout;
2476
2477         init_timer(&hdw->encoder_wait_timer);
2478         hdw->encoder_wait_timer.data = (unsigned long)hdw;
2479         hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
2480
2481         init_timer(&hdw->encoder_run_timer);
2482         hdw->encoder_run_timer.data = (unsigned long)hdw;
2483         hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
2484
2485         hdw->master_state = PVR2_STATE_DEAD;
2486
2487         init_waitqueue_head(&hdw->state_wait_data);
2488
2489         hdw->tuner_signal_stale = !0;
2490         cx2341x_fill_defaults(&hdw->enc_ctl_state);
2491
2492         /* Calculate which inputs are OK */
2493         m = 0;
2494         if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2495         if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2496                 m |= 1 << PVR2_CVAL_INPUT_DTV;
2497         }
2498         if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2499         if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2500         if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2501         hdw->input_avail_mask = m;
2502         hdw->input_allowed_mask = hdw->input_avail_mask;
2503
2504         /* If not a hybrid device, pathway_state never changes.  So
2505            initialize it here to what it should forever be. */
2506         if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2507                 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2508         } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2509                 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2510         }
2511
2512         hdw->control_cnt = CTRLDEF_COUNT;
2513         hdw->control_cnt += MPEGDEF_COUNT;
2514         hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
2515                                 GFP_KERNEL);
2516         if (!hdw->controls) goto fail;
2517         hdw->hdw_desc = hdw_desc;
2518         hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
2519         for (idx = 0; idx < hdw->control_cnt; idx++) {
2520                 cptr = hdw->controls + idx;
2521                 cptr->hdw = hdw;
2522         }
2523         for (idx = 0; idx < 32; idx++) {
2524                 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2525         }
2526         for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2527                 cptr = hdw->controls + idx;
2528                 cptr->info = control_defs+idx;
2529         }
2530
2531         /* Ensure that default input choice is a valid one. */
2532         m = hdw->input_avail_mask;
2533         if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2534                 if (!((1 << idx) & m)) continue;
2535                 hdw->input_val = idx;
2536                 break;
2537         }
2538
2539         /* Define and configure additional controls from cx2341x module. */
2540         hdw->mpeg_ctrl_info = kzalloc(
2541                 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
2542         if (!hdw->mpeg_ctrl_info) goto fail;
2543         for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2544                 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2545                 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2546                 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2547                 ciptr->name = mpeg_ids[idx].strid;
2548                 ciptr->v4l_id = mpeg_ids[idx].id;
2549                 ciptr->skip_init = !0;
2550                 ciptr->get_value = ctrl_cx2341x_get;
2551                 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2552                 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2553                 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2554                 qctrl.id = ciptr->v4l_id;
2555                 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2556                 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2557                         ciptr->set_value = ctrl_cx2341x_set;
2558                 }
2559                 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2560                         PVR2_CTLD_INFO_DESC_SIZE);
2561                 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2562                 ciptr->default_value = qctrl.default_value;
2563                 switch (qctrl.type) {
2564                 default:
2565                 case V4L2_CTRL_TYPE_INTEGER:
2566                         ciptr->type = pvr2_ctl_int;
2567                         ciptr->def.type_int.min_value = qctrl.minimum;
2568                         ciptr->def.type_int.max_value = qctrl.maximum;
2569                         break;
2570                 case V4L2_CTRL_TYPE_BOOLEAN:
2571                         ciptr->type = pvr2_ctl_bool;
2572                         break;
2573                 case V4L2_CTRL_TYPE_MENU:
2574                         ciptr->type = pvr2_ctl_enum;
2575                         ciptr->def.type_enum.value_names =
2576                                 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2577                                                                 ciptr->v4l_id);
2578                         for (cnt1 = 0;
2579                              ciptr->def.type_enum.value_names[cnt1] != NULL;
2580                              cnt1++) { }
2581                         ciptr->def.type_enum.count = cnt1;
2582                         break;
2583                 }
2584                 cptr->info = ciptr;
2585         }
2586
2587         // Initialize video standard enum dynamic control
2588         cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2589         if (cptr) {
2590                 memcpy(&hdw->std_info_enum,cptr->info,
2591                        sizeof(hdw->std_info_enum));
2592                 cptr->info = &hdw->std_info_enum;
2593
2594         }
2595         // Initialize control data regarding video standard masks
2596         valid_std_mask = pvr2_std_get_usable();
2597         for (idx = 0; idx < 32; idx++) {
2598                 if (!(valid_std_mask & (1 << idx))) continue;
2599                 cnt1 = pvr2_std_id_to_str(
2600                         hdw->std_mask_names[idx],
2601                         sizeof(hdw->std_mask_names[idx])-1,
2602                         1 << idx);
2603                 hdw->std_mask_names[idx][cnt1] = 0;
2604         }
2605         cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2606         if (cptr) {
2607                 memcpy(&hdw->std_info_avail,cptr->info,
2608                        sizeof(hdw->std_info_avail));
2609                 cptr->info = &hdw->std_info_avail;
2610                 hdw->std_info_avail.def.type_bitmask.bit_names =
2611                         hdw->std_mask_ptrs;
2612                 hdw->std_info_avail.def.type_bitmask.valid_bits =
2613                         valid_std_mask;
2614         }
2615         cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2616         if (cptr) {
2617                 memcpy(&hdw->std_info_cur,cptr->info,
2618                        sizeof(hdw->std_info_cur));
2619                 cptr->info = &hdw->std_info_cur;
2620                 hdw->std_info_cur.def.type_bitmask.bit_names =
2621                         hdw->std_mask_ptrs;
2622                 hdw->std_info_avail.def.type_bitmask.valid_bits =
2623                         valid_std_mask;
2624         }
2625
2626         hdw->cropcap_stale = !0;
2627         hdw->eeprom_addr = -1;
2628         hdw->unit_number = -1;
2629         hdw->v4l_minor_number_video = -1;
2630         hdw->v4l_minor_number_vbi = -1;
2631         hdw->v4l_minor_number_radio = -1;
2632         hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2633         if (!hdw->ctl_write_buffer) goto fail;
2634         hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2635         if (!hdw->ctl_read_buffer) goto fail;
2636         hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2637         if (!hdw->ctl_write_urb) goto fail;
2638         hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2639         if (!hdw->ctl_read_urb) goto fail;
2640
2641         if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
2642                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2643                            "Error registering with v4l core, giving up");
2644                 goto fail;
2645         }
2646         mutex_lock(&pvr2_unit_mtx); do {
2647                 for (idx = 0; idx < PVR_NUM; idx++) {
2648                         if (unit_pointers[idx]) continue;
2649                         hdw->unit_number = idx;
2650                         unit_pointers[idx] = hdw;
2651                         break;
2652                 }
2653         } while (0); mutex_unlock(&pvr2_unit_mtx);
2654
2655         cnt1 = 0;
2656         cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2657         cnt1 += cnt2;
2658         if (hdw->unit_number >= 0) {
2659                 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2660                                  ('a' + hdw->unit_number));
2661                 cnt1 += cnt2;
2662         }
2663         if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2664         hdw->name[cnt1] = 0;
2665
2666         hdw->workqueue = create_singlethread_workqueue(hdw->name);
2667         INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2668
2669         pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2670                    hdw->unit_number,hdw->name);
2671
2672         hdw->tuner_type = -1;
2673         hdw->flag_ok = !0;
2674
2675         hdw->usb_intf = intf;
2676         hdw->usb_dev = usb_dev;
2677
2678         usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2679
2680         ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2681         usb_set_interface(hdw->usb_dev,ifnum,0);
2682
2683         mutex_init(&hdw->ctl_lock_mutex);
2684         mutex_init(&hdw->big_lock_mutex);
2685
2686         return hdw;
2687  fail:
2688         if (hdw) {
2689                 del_timer_sync(&hdw->quiescent_timer);
2690                 del_timer_sync(&hdw->decoder_stabilization_timer);
2691                 del_timer_sync(&hdw->encoder_run_timer);
2692                 del_timer_sync(&hdw->encoder_wait_timer);
2693                 if (hdw->workqueue) {
2694                         flush_workqueue(hdw->workqueue);
2695                         destroy_workqueue(hdw->workqueue);
2696                         hdw->workqueue = NULL;
2697                 }
2698                 usb_free_urb(hdw->ctl_read_urb);
2699                 usb_free_urb(hdw->ctl_write_urb);
2700                 kfree(hdw->ctl_read_buffer);
2701                 kfree(hdw->ctl_write_buffer);
2702                 kfree(hdw->controls);
2703                 kfree(hdw->mpeg_ctrl_info);
2704                 kfree(hdw->std_defs);
2705                 kfree(hdw->std_enum_names);
2706                 kfree(hdw);
2707         }
2708         return NULL;
2709 }
2710
2711
2712 /* Remove _all_ associations between this driver and the underlying USB
2713    layer. */
2714 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2715 {
2716         if (hdw->flag_disconnected) return;
2717         pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2718         if (hdw->ctl_read_urb) {
2719                 usb_kill_urb(hdw->ctl_read_urb);
2720                 usb_free_urb(hdw->ctl_read_urb);
2721                 hdw->ctl_read_urb = NULL;
2722         }
2723         if (hdw->ctl_write_urb) {
2724                 usb_kill_urb(hdw->ctl_write_urb);
2725                 usb_free_urb(hdw->ctl_write_urb);
2726                 hdw->ctl_write_urb = NULL;
2727         }
2728         if (hdw->ctl_read_buffer) {
2729                 kfree(hdw->ctl_read_buffer);
2730                 hdw->ctl_read_buffer = NULL;
2731         }
2732         if (hdw->ctl_write_buffer) {
2733                 kfree(hdw->ctl_write_buffer);
2734                 hdw->ctl_write_buffer = NULL;
2735         }
2736         hdw->flag_disconnected = !0;
2737         /* If we don't do this, then there will be a dangling struct device
2738            reference to our disappearing device persisting inside the V4L
2739            core... */
2740         v4l2_device_disconnect(&hdw->v4l2_dev);
2741         hdw->usb_dev = NULL;
2742         hdw->usb_intf = NULL;
2743         pvr2_hdw_render_useless(hdw);
2744 }
2745
2746
2747 /* Destroy hardware interaction structure */
2748 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2749 {
2750         if (!hdw) return;
2751         pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2752         if (hdw->workqueue) {
2753                 flush_workqueue(hdw->workqueue);
2754                 destroy_workqueue(hdw->workqueue);
2755                 hdw->workqueue = NULL;
2756         }
2757         del_timer_sync(&hdw->quiescent_timer);
2758         del_timer_sync(&hdw->decoder_stabilization_timer);
2759         del_timer_sync(&hdw->encoder_run_timer);
2760         del_timer_sync(&hdw->encoder_wait_timer);
2761         if (hdw->fw_buffer) {
2762                 kfree(hdw->fw_buffer);
2763                 hdw->fw_buffer = NULL;
2764         }
2765         if (hdw->vid_stream) {
2766                 pvr2_stream_destroy(hdw->vid_stream);
2767                 hdw->vid_stream = NULL;
2768         }
2769         pvr2_i2c_core_done(hdw);
2770         v4l2_device_unregister(&hdw->v4l2_dev);
2771         pvr2_hdw_remove_usb_stuff(hdw);
2772         mutex_lock(&pvr2_unit_mtx); do {
2773                 if ((hdw->unit_number >= 0) &&
2774                     (hdw->unit_number < PVR_NUM) &&
2775                     (unit_pointers[hdw->unit_number] == hdw)) {
2776                         unit_pointers[hdw->unit_number] = NULL;
2777                 }
2778         } while (0); mutex_unlock(&pvr2_unit_mtx);
2779         kfree(hdw->controls);
2780         kfree(hdw->mpeg_ctrl_info);
2781         kfree(hdw->std_defs);
2782         kfree(hdw->std_enum_names);
2783         kfree(hdw);
2784 }
2785
2786
2787 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2788 {
2789         return (hdw && hdw->flag_ok);
2790 }
2791
2792
2793 /* Called when hardware has been unplugged */
2794 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2795 {
2796         pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2797         LOCK_TAKE(hdw->big_lock);
2798         LOCK_TAKE(hdw->ctl_lock);
2799         pvr2_hdw_remove_usb_stuff(hdw);
2800         LOCK_GIVE(hdw->ctl_lock);
2801         LOCK_GIVE(hdw->big_lock);
2802 }
2803
2804
2805 // Attempt to autoselect an appropriate value for std_enum_cur given
2806 // whatever is currently in std_mask_cur
2807 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2808 {
2809         unsigned int idx;
2810         for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2811                 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2812                         hdw->std_enum_cur = idx;
2813                         return;
2814                 }
2815         }
2816         hdw->std_enum_cur = 0;
2817 }
2818
2819
2820 // Calculate correct set of enumerated standards based on currently known
2821 // set of available standards bits.
2822 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2823 {
2824         struct v4l2_standard *newstd;
2825         unsigned int std_cnt;
2826         unsigned int idx;
2827
2828         newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2829
2830         if (hdw->std_defs) {
2831                 kfree(hdw->std_defs);
2832                 hdw->std_defs = NULL;
2833         }
2834         hdw->std_enum_cnt = 0;
2835         if (hdw->std_enum_names) {
2836                 kfree(hdw->std_enum_names);
2837                 hdw->std_enum_names = NULL;
2838         }
2839
2840         if (!std_cnt) {
2841                 pvr2_trace(
2842                         PVR2_TRACE_ERROR_LEGS,
2843                         "WARNING: Failed to identify any viable standards");
2844         }
2845         hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2846         hdw->std_enum_names[0] = "none";
2847         for (idx = 0; idx < std_cnt; idx++) {
2848                 hdw->std_enum_names[idx+1] =
2849                         newstd[idx].name;
2850         }
2851         // Set up the dynamic control for this standard
2852         hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2853         hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2854         hdw->std_defs = newstd;
2855         hdw->std_enum_cnt = std_cnt+1;
2856         hdw->std_enum_cur = 0;
2857         hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2858 }
2859
2860
2861 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2862                                struct v4l2_standard *std,
2863                                unsigned int idx)
2864 {
2865         int ret = -EINVAL;
2866         if (!idx) return ret;
2867         LOCK_TAKE(hdw->big_lock); do {
2868                 if (idx >= hdw->std_enum_cnt) break;
2869                 idx--;
2870                 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2871                 ret = 0;
2872         } while (0); LOCK_GIVE(hdw->big_lock);
2873         return ret;
2874 }
2875
2876
2877 /* Get the number of defined controls */
2878 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2879 {
2880         return hdw->control_cnt;
2881 }
2882
2883
2884 /* Retrieve a control handle given its index (0..count-1) */
2885 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2886                                              unsigned int idx)
2887 {
2888         if (idx >= hdw->control_cnt) return NULL;
2889         return hdw->controls + idx;
2890 }
2891
2892
2893 /* Retrieve a control handle given its index (0..count-1) */
2894 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2895                                           unsigned int ctl_id)
2896 {
2897         struct pvr2_ctrl *cptr;
2898         unsigned int idx;
2899         int i;
2900
2901         /* This could be made a lot more efficient, but for now... */
2902         for (idx = 0; idx < hdw->control_cnt; idx++) {
2903                 cptr = hdw->controls + idx;
2904                 i = cptr->info->internal_id;
2905                 if (i && (i == ctl_id)) return cptr;
2906         }
2907         return NULL;
2908 }
2909
2910
2911 /* Given a V4L ID, retrieve the control structure associated with it. */
2912 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2913 {
2914         struct pvr2_ctrl *cptr;
2915         unsigned int idx;
2916         int i;
2917
2918         /* This could be made a lot more efficient, but for now... */
2919         for (idx = 0; idx < hdw->control_cnt; idx++) {
2920                 cptr = hdw->controls + idx;
2921                 i = cptr->info->v4l_id;
2922                 if (i && (i == ctl_id)) return cptr;
2923         }
2924         return NULL;
2925 }
2926
2927
2928 /* Given a V4L ID for its immediate predecessor, retrieve the control
2929    structure associated with it. */
2930 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2931                                             unsigned int ctl_id)
2932 {
2933         struct pvr2_ctrl *cptr,*cp2;
2934         unsigned int idx;
2935         int i;
2936
2937         /* This could be made a lot more efficient, but for now... */
2938         cp2 = NULL;
2939         for (idx = 0; idx < hdw->control_cnt; idx++) {
2940                 cptr = hdw->controls + idx;
2941                 i = cptr->info->v4l_id;
2942                 if (!i) continue;
2943                 if (i <= ctl_id) continue;
2944                 if (cp2 && (cp2->info->v4l_id < i)) continue;
2945                 cp2 = cptr;
2946         }
2947         return cp2;
2948         return NULL;
2949 }
2950
2951
2952 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2953 {
2954         switch (tp) {
2955         case pvr2_ctl_int: return "integer";
2956         case pvr2_ctl_enum: return "enum";
2957         case pvr2_ctl_bool: return "boolean";
2958         case pvr2_ctl_bitmask: return "bitmask";
2959         }
2960         return "";
2961 }
2962
2963
2964 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2965                                     const char *name, int val)
2966 {
2967         struct v4l2_control ctrl;
2968         pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2969         memset(&ctrl, 0, sizeof(ctrl));
2970         ctrl.id = id;
2971         ctrl.value = val;
2972         v4l2_device_call_all(&hdw->v4l2_dev, 0, core, s_ctrl, &ctrl);
2973 }
2974
2975 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2976         if ((hdw)->lab##_dirty || (hdw)->force_dirty) {         \
2977                 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2978         }
2979
2980 /* Execute whatever commands are required to update the state of all the
2981    sub-devices so that they match our current control values. */
2982 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2983 {
2984         struct v4l2_subdev *sd;
2985         unsigned int id;
2986         pvr2_subdev_update_func fp;
2987
2988         pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2989
2990         if (hdw->tuner_updated || hdw->force_dirty) {
2991                 struct tuner_setup setup;
2992                 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2993                            hdw->tuner_type);
2994                 if (((int)(hdw->tuner_type)) >= 0) {
2995                         memset(&setup, 0, sizeof(setup));
2996                         setup.addr = ADDR_UNSET;
2997                         setup.type = hdw->tuner_type;
2998                         setup.mode_mask = T_RADIO | T_ANALOG_TV;
2999                         v4l2_device_call_all(&hdw->v4l2_dev, 0,
3000                                              tuner, s_type_addr, &setup);
3001                 }
3002         }
3003
3004         if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
3005                 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
3006                 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3007                         v4l2_device_call_all(&hdw->v4l2_dev, 0,
3008                                              tuner, s_radio);
3009                 } else {
3010                         v4l2_std_id vs;
3011                         vs = hdw->std_mask_cur;
3012                         v4l2_device_call_all(&hdw->v4l2_dev, 0,
3013                                              core, s_std, vs);
3014                         pvr2_hdw_cx25840_vbi_hack(hdw);
3015                 }
3016                 hdw->tuner_signal_stale = !0;
3017                 hdw->cropcap_stale = !0;
3018         }
3019
3020         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
3021         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
3022         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
3023         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
3024         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
3025         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
3026         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
3027         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
3028         PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
3029
3030         if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
3031                 struct v4l2_tuner vt;
3032                 memset(&vt, 0, sizeof(vt));
3033                 vt.audmode = hdw->audiomode_val;
3034                 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
3035         }
3036
3037         if (hdw->freqDirty || hdw->force_dirty) {
3038                 unsigned long fv;
3039                 struct v4l2_frequency freq;
3040                 fv = pvr2_hdw_get_cur_freq(hdw);
3041                 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
3042                 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
3043                 memset(&freq, 0, sizeof(freq));
3044                 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
3045                         /* ((fv * 1000) / 62500) */
3046                         freq.frequency = (fv * 2) / 125;
3047                 } else {
3048                         freq.frequency = fv / 62500;
3049                 }
3050                 /* tuner-core currently doesn't seem to care about this, but
3051                    let's set it anyway for completeness. */
3052                 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3053                         freq.type = V4L2_TUNER_RADIO;
3054                 } else {
3055                         freq.type = V4L2_TUNER_ANALOG_TV;
3056                 }
3057                 freq.tuner = 0;
3058                 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
3059                                      s_frequency, &freq);
3060         }
3061
3062         if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
3063                 struct v4l2_mbus_framefmt fmt;
3064                 memset(&fmt, 0, sizeof(fmt));
3065                 fmt.width = hdw->res_hor_val;
3066                 fmt.height = hdw->res_ver_val;
3067                 fmt.code = V4L2_MBUS_FMT_FIXED;
3068                 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)",
3069                            fmt.width, fmt.height);
3070                 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_mbus_fmt, &fmt);
3071         }
3072
3073         if (hdw->srate_dirty || hdw->force_dirty) {
3074                 u32 val;
3075                 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
3076                            hdw->srate_val);
3077                 switch (hdw->srate_val) {
3078                 default:
3079                 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
3080                         val = 48000;
3081                         break;
3082                 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
3083                         val = 44100;
3084                         break;
3085                 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
3086                         val = 32000;
3087                         break;
3088                 }
3089                 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3090                                      audio, s_clock_freq, val);
3091         }
3092
3093         /* Unable to set crop parameters; there is apparently no equivalent
3094            for VIDIOC_S_CROP */
3095
3096         v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
3097                 id = sd->grp_id;
3098                 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
3099                 fp = pvr2_module_update_functions[id];
3100                 if (!fp) continue;
3101                 (*fp)(hdw, sd);
3102         }
3103
3104         if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
3105                 pvr2_hdw_status_poll(hdw);
3106         }
3107 }
3108
3109
3110 /* Figure out if we need to commit control changes.  If so, mark internal
3111    state flags to indicate this fact and return true.  Otherwise do nothing
3112    else and return false. */
3113 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
3114 {
3115         unsigned int idx;
3116         struct pvr2_ctrl *cptr;
3117         int value;
3118         int commit_flag = hdw->force_dirty;
3119         char buf[100];
3120         unsigned int bcnt,ccnt;
3121
3122         for (idx = 0; idx < hdw->control_cnt; idx++) {
3123                 cptr = hdw->controls + idx;
3124                 if (!cptr->info->is_dirty) continue;
3125                 if (!cptr->info->is_dirty(cptr)) continue;
3126                 commit_flag = !0;
3127
3128                 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
3129                 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
3130                                  cptr->info->name);
3131                 value = 0;
3132                 cptr->info->get_value(cptr,&value);
3133                 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
3134                                                 buf+bcnt,
3135                                                 sizeof(buf)-bcnt,&ccnt);
3136                 bcnt += ccnt;
3137                 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
3138                                   get_ctrl_typename(cptr->info->type));
3139                 pvr2_trace(PVR2_TRACE_CTL,
3140                            "/*--TRACE_COMMIT--*/ %.*s",
3141                            bcnt,buf);
3142         }
3143
3144         if (!commit_flag) {
3145                 /* Nothing has changed */
3146                 return 0;
3147         }
3148
3149         hdw->state_pipeline_config = 0;
3150         trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3151         pvr2_hdw_state_sched(hdw);
3152
3153         return !0;
3154 }
3155
3156
3157 /* Perform all operations needed to commit all control changes.  This must
3158    be performed in synchronization with the pipeline state and is thus
3159    expected to be called as part of the driver's worker thread.  Return
3160    true if commit successful, otherwise return false to indicate that
3161    commit isn't possible at this time. */
3162 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3163 {
3164         unsigned int idx;
3165         struct pvr2_ctrl *cptr;
3166         int disruptive_change;
3167
3168         /* Handle some required side effects when the video standard is
3169            changed.... */
3170         if (hdw->std_dirty) {
3171                 int nvres;
3172                 int gop_size;
3173                 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3174                         nvres = 480;
3175                         gop_size = 15;
3176                 } else {
3177                         nvres = 576;
3178                         gop_size = 12;
3179                 }
3180                 /* Rewrite the vertical resolution to be appropriate to the
3181                    video standard that has been selected. */
3182                 if (nvres != hdw->res_ver_val) {
3183                         hdw->res_ver_val = nvres;
3184                         hdw->res_ver_dirty = !0;
3185                 }
3186                 /* Rewrite the GOP size to be appropriate to the video
3187                    standard that has been selected. */
3188                 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3189                         struct v4l2_ext_controls cs;
3190                         struct v4l2_ext_control c1;
3191                         memset(&cs, 0, sizeof(cs));
3192                         memset(&c1, 0, sizeof(c1));
3193                         cs.controls = &c1;
3194                         cs.count = 1;
3195                         c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3196                         c1.value = gop_size;
3197                         cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3198                                           VIDIOC_S_EXT_CTRLS);
3199                 }
3200         }
3201
3202         if (hdw->input_dirty && hdw->state_pathway_ok &&
3203             (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3204               PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3205              hdw->pathway_state)) {
3206                 /* Change of mode being asked for... */
3207                 hdw->state_pathway_ok = 0;
3208                 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3209         }
3210         if (!hdw->state_pathway_ok) {
3211                 /* Can't commit anything until pathway is ok. */
3212                 return 0;
3213         }
3214         /* The broadcast decoder can only scale down, so if
3215          * res_*_dirty && crop window < output format ==> enlarge crop.
3216          *
3217          * The mpeg encoder receives fields of res_hor_val dots and
3218          * res_ver_val halflines.  Limits: hor<=720, ver<=576.
3219          */
3220         if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3221                 hdw->cropw_val = hdw->res_hor_val;
3222                 hdw->cropw_dirty = !0;
3223         } else if (hdw->cropw_dirty) {
3224                 hdw->res_hor_dirty = !0;           /* must rescale */
3225                 hdw->res_hor_val = min(720, hdw->cropw_val);
3226         }
3227         if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3228                 hdw->croph_val = hdw->res_ver_val;
3229                 hdw->croph_dirty = !0;
3230         } else if (hdw->croph_dirty) {
3231                 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3232                 hdw->res_ver_dirty = !0;
3233                 hdw->res_ver_val = min(nvres, hdw->croph_val);
3234         }
3235
3236         /* If any of the below has changed, then we can't do the update
3237            while the pipeline is running.  Pipeline must be paused first
3238            and decoder -> encoder connection be made quiescent before we
3239            can proceed. */
3240         disruptive_change =
3241                 (hdw->std_dirty ||
3242                  hdw->enc_unsafe_stale ||
3243                  hdw->srate_dirty ||
3244                  hdw->res_ver_dirty ||
3245                  hdw->res_hor_dirty ||
3246                  hdw->cropw_dirty ||
3247                  hdw->croph_dirty ||
3248                  hdw->input_dirty ||
3249                  (hdw->active_stream_type != hdw->desired_stream_type));
3250         if (disruptive_change && !hdw->state_pipeline_idle) {
3251                 /* Pipeline is not idle; we can't proceed.  Arrange to
3252                    cause pipeline to stop so that we can try this again
3253                    later.... */
3254                 hdw->state_pipeline_pause = !0;
3255                 return 0;
3256         }
3257
3258         if (hdw->srate_dirty) {
3259                 /* Write new sample rate into control structure since
3260                  * the master copy is stale.  We must track srate
3261                  * separate from the mpeg control structure because
3262                  * other logic also uses this value. */
3263                 struct v4l2_ext_controls cs;
3264                 struct v4l2_ext_control c1;
3265                 memset(&cs,0,sizeof(cs));
3266                 memset(&c1,0,sizeof(c1));
3267                 cs.controls = &c1;
3268                 cs.count = 1;
3269                 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3270                 c1.value = hdw->srate_val;
3271                 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3272         }
3273
3274         if (hdw->active_stream_type != hdw->desired_stream_type) {
3275                 /* Handle any side effects of stream config here */
3276                 hdw->active_stream_type = hdw->desired_stream_type;
3277         }
3278
3279         if (hdw->hdw_desc->signal_routing_scheme ==
3280             PVR2_ROUTING_SCHEME_GOTVIEW) {
3281                 u32 b;
3282                 /* Handle GOTVIEW audio switching */
3283                 pvr2_hdw_gpio_get_out(hdw,&b);
3284                 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3285                         /* Set GPIO 11 */
3286                         pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3287                 } else {
3288                         /* Clear GPIO 11 */
3289                         pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3290                 }
3291         }
3292
3293         /* Check and update state for all sub-devices. */
3294         pvr2_subdev_update(hdw);
3295
3296         hdw->tuner_updated = 0;
3297         hdw->force_dirty = 0;
3298         for (idx = 0; idx < hdw->control_cnt; idx++) {
3299                 cptr = hdw->controls + idx;
3300                 if (!cptr->info->clear_dirty) continue;
3301                 cptr->info->clear_dirty(cptr);
3302         }
3303
3304         if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3305             hdw->state_encoder_run) {
3306                 /* If encoder isn't running or it can't be touched, then
3307                    this will get worked out later when we start the
3308                    encoder. */
3309                 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3310         }
3311
3312         hdw->state_pipeline_config = !0;
3313         /* Hardware state may have changed in a way to cause the cropping
3314            capabilities to have changed.  So mark it stale, which will
3315            cause a later re-fetch. */
3316         trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3317         return !0;
3318 }
3319
3320
3321 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3322 {
3323         int fl;
3324         LOCK_TAKE(hdw->big_lock);
3325         fl = pvr2_hdw_commit_setup(hdw);
3326         LOCK_GIVE(hdw->big_lock);
3327         if (!fl) return 0;
3328         return pvr2_hdw_wait(hdw,0);
3329 }
3330
3331
3332 static void pvr2_hdw_worker_poll(struct work_struct *work)
3333 {
3334         int fl = 0;
3335         struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3336         LOCK_TAKE(hdw->big_lock); do {
3337                 fl = pvr2_hdw_state_eval(hdw);
3338         } while (0); LOCK_GIVE(hdw->big_lock);
3339         if (fl && hdw->state_func) {
3340                 hdw->state_func(hdw->state_data);
3341         }
3342 }
3343
3344
3345 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3346 {
3347         return wait_event_interruptible(
3348                 hdw->state_wait_data,
3349                 (hdw->state_stale == 0) &&
3350                 (!state || (hdw->master_state != state)));
3351 }
3352
3353
3354 /* Return name for this driver instance */
3355 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3356 {
3357         return hdw->name;
3358 }
3359
3360
3361 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3362 {
3363         return hdw->hdw_desc->description;
3364 }
3365
3366
3367 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3368 {
3369         return hdw->hdw_desc->shortname;
3370 }
3371
3372
3373 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3374 {
3375         int result;
3376         LOCK_TAKE(hdw->ctl_lock); do {
3377                 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3378                 result = pvr2_send_request(hdw,
3379                                            hdw->cmd_buffer,1,
3380                                            hdw->cmd_buffer,1);
3381                 if (result < 0) break;
3382                 result = (hdw->cmd_buffer[0] != 0);
3383         } while(0); LOCK_GIVE(hdw->ctl_lock);
3384         return result;
3385 }
3386
3387
3388 /* Execute poll of tuner status */
3389 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3390 {
3391         LOCK_TAKE(hdw->big_lock); do {
3392                 pvr2_hdw_status_poll(hdw);
3393         } while (0); LOCK_GIVE(hdw->big_lock);
3394 }
3395
3396
3397 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3398 {
3399         if (!hdw->cropcap_stale) {
3400                 return 0;
3401         }
3402         pvr2_hdw_status_poll(hdw);
3403         if (hdw->cropcap_stale) {
3404                 return -EIO;
3405         }
3406         return 0;
3407 }
3408
3409
3410 /* Return information about cropping capabilities */
3411 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3412 {
3413         int stat = 0;
3414         LOCK_TAKE(hdw->big_lock);
3415         stat = pvr2_hdw_check_cropcap(hdw);
3416         if (!stat) {
3417                 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3418         }
3419         LOCK_GIVE(hdw->big_lock);
3420         return stat;
3421 }
3422
3423
3424 /* Return information about the tuner */
3425 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3426 {
3427         LOCK_TAKE(hdw->big_lock); do {
3428                 if (hdw->tuner_signal_stale) {
3429                         pvr2_hdw_status_poll(hdw);
3430                 }
3431                 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3432         } while (0); LOCK_GIVE(hdw->big_lock);
3433         return 0;
3434 }
3435
3436
3437 /* Get handle to video output stream */
3438 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3439 {
3440         return hp->vid_stream;
3441 }
3442
3443
3444 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3445 {
3446         int nr = pvr2_hdw_get_unit_number(hdw);
3447         LOCK_TAKE(hdw->big_lock); do {
3448                 printk(KERN_INFO "pvrusb2: =================  START STATUS CARD #%d  =================\n", nr);
3449                 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3450                 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3451                 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3452                 pvr2_hdw_state_log_state(hdw);
3453                 printk(KERN_INFO "pvrusb2: ==================  END STATUS CARD #%d  ==================\n", nr);
3454         } while (0); LOCK_GIVE(hdw->big_lock);
3455 }
3456
3457
3458 /* Grab EEPROM contents, needed for direct method. */
3459 #define EEPROM_SIZE 8192
3460 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3461 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3462 {
3463         struct i2c_msg msg[2];
3464         u8 *eeprom;
3465         u8 iadd[2];
3466         u8 addr;
3467         u16 eepromSize;
3468         unsigned int offs;
3469         int ret;
3470         int mode16 = 0;
3471         unsigned pcnt,tcnt;
3472         eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3473         if (!eeprom) {
3474                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3475                            "Failed to allocate memory"
3476                            " required to read eeprom");
3477                 return NULL;
3478         }
3479
3480         trace_eeprom("Value for eeprom addr from controller was 0x%x",
3481                      hdw->eeprom_addr);
3482         addr = hdw->eeprom_addr;
3483         /* Seems that if the high bit is set, then the *real* eeprom
3484            address is shifted right now bit position (noticed this in
3485            newer PVR USB2 hardware) */
3486         if (addr & 0x80) addr >>= 1;
3487
3488         /* FX2 documentation states that a 16bit-addressed eeprom is
3489            expected if the I2C address is an odd number (yeah, this is
3490            strange but it's what they do) */
3491         mode16 = (addr & 1);
3492         eepromSize = (mode16 ? EEPROM_SIZE : 256);
3493         trace_eeprom("Examining %d byte eeprom at location 0x%x"
3494                      " using %d bit addressing",eepromSize,addr,
3495                      mode16 ? 16 : 8);
3496
3497         msg[0].addr = addr;
3498         msg[0].flags = 0;
3499         msg[0].len = mode16 ? 2 : 1;
3500         msg[0].buf = iadd;
3501         msg[1].addr = addr;
3502         msg[1].flags = I2C_M_RD;
3503
3504         /* We have to do the actual eeprom data fetch ourselves, because
3505            (1) we're only fetching part of the eeprom, and (2) if we were
3506            getting the whole thing our I2C driver can't grab it in one
3507            pass - which is what tveeprom is otherwise going to attempt */
3508         memset(eeprom,0,EEPROM_SIZE);
3509         for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3510                 pcnt = 16;
3511                 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3512                 offs = tcnt + (eepromSize - EEPROM_SIZE);
3513                 if (mode16) {
3514                         iadd[0] = offs >> 8;
3515                         iadd[1] = offs;
3516                 } else {
3517                         iadd[0] = offs;
3518                 }
3519                 msg[1].len = pcnt;
3520                 msg[1].buf = eeprom+tcnt;
3521                 if ((ret = i2c_transfer(&hdw->i2c_adap,
3522                                         msg,ARRAY_SIZE(msg))) != 2) {
3523                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3524                                    "eeprom fetch set offs err=%d",ret);
3525                         kfree(eeprom);
3526                         return NULL;
3527                 }
3528         }
3529         return eeprom;
3530 }
3531
3532
3533 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3534                                 int mode,
3535                                 int enable_flag)
3536 {
3537         int ret;
3538         u16 address;
3539         unsigned int pipe;
3540         LOCK_TAKE(hdw->big_lock); do {
3541                 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3542
3543                 if (!enable_flag) {
3544                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3545                                    "Cleaning up after CPU firmware fetch");
3546                         kfree(hdw->fw_buffer);
3547                         hdw->fw_buffer = NULL;
3548                         hdw->fw_size = 0;
3549                         if (hdw->fw_cpu_flag) {
3550                                 /* Now release the CPU.  It will disconnect
3551                                    and reconnect later. */
3552                                 pvr2_hdw_cpureset_assert(hdw,0);
3553                         }
3554                         break;
3555                 }
3556
3557                 hdw->fw_cpu_flag = (mode != 2);
3558                 if (hdw->fw_cpu_flag) {
3559                         hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000;
3560                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3561                                    "Preparing to suck out CPU firmware"
3562                                    " (size=%u)", hdw->fw_size);
3563                         hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3564                         if (!hdw->fw_buffer) {
3565                                 hdw->fw_size = 0;
3566                                 break;
3567                         }
3568
3569                         /* We have to hold the CPU during firmware upload. */
3570                         pvr2_hdw_cpureset_assert(hdw,1);
3571
3572                         /* download the firmware from address 0000-1fff in 2048
3573                            (=0x800) bytes chunk. */
3574
3575                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3576                                    "Grabbing CPU firmware");
3577                         pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3578                         for(address = 0; address < hdw->fw_size;
3579                             address += 0x800) {
3580                                 ret = usb_control_msg(hdw->usb_dev,pipe,
3581                                                       0xa0,0xc0,
3582                                                       address,0,
3583                                                       hdw->fw_buffer+address,
3584                                                       0x800,HZ);
3585                                 if (ret < 0) break;
3586                         }
3587
3588                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3589                                    "Done grabbing CPU firmware");
3590                 } else {
3591                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3592                                    "Sucking down EEPROM contents");
3593                         hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3594                         if (!hdw->fw_buffer) {
3595                                 pvr2_trace(PVR2_TRACE_FIRMWARE,
3596                                            "EEPROM content suck failed.");
3597                                 break;
3598                         }
3599                         hdw->fw_size = EEPROM_SIZE;
3600                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3601                                    "Done sucking down EEPROM contents");
3602                 }
3603
3604         } while (0); LOCK_GIVE(hdw->big_lock);
3605 }
3606
3607
3608 /* Return true if we're in a mode for retrieval CPU firmware */
3609 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3610 {
3611         return hdw->fw_buffer != NULL;
3612 }
3613
3614
3615 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3616                        char *buf,unsigned int cnt)
3617 {
3618         int ret = -EINVAL;
3619         LOCK_TAKE(hdw->big_lock); do {
3620                 if (!buf) break;
3621                 if (!cnt) break;
3622
3623                 if (!hdw->fw_buffer) {
3624                         ret = -EIO;
3625                         break;
3626                 }
3627
3628                 if (offs >= hdw->fw_size) {
3629                         pvr2_trace(PVR2_TRACE_FIRMWARE,
3630                                    "Read firmware data offs=%d EOF",
3631                                    offs);
3632                         ret = 0;
3633                         break;
3634                 }
3635
3636                 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3637
3638                 memcpy(buf,hdw->fw_buffer+offs,cnt);
3639
3640                 pvr2_trace(PVR2_TRACE_FIRMWARE,
3641                            "Read firmware data offs=%d cnt=%d",
3642                            offs,cnt);
3643                 ret = cnt;
3644         } while (0); LOCK_GIVE(hdw->big_lock);
3645
3646         return ret;
3647 }
3648
3649
3650 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3651                                   enum pvr2_v4l_type index)
3652 {
3653         switch (index) {
3654         case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3655         case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3656         case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3657         default: return -1;
3658         }
3659 }
3660
3661
3662 /* Store a v4l minor device number */
3663 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3664                                      enum pvr2_v4l_type index,int v)
3665 {
3666         switch (index) {
3667         case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
3668         case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
3669         case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
3670         default: break;
3671         }
3672 }
3673
3674
3675 static void pvr2_ctl_write_complete(struct urb *urb)
3676 {
3677         struct pvr2_hdw *hdw = urb->context;
3678         hdw->ctl_write_pend_flag = 0;
3679         if (hdw->ctl_read_pend_flag) return;
3680         complete(&hdw->ctl_done);
3681 }
3682
3683
3684 static void pvr2_ctl_read_complete(struct urb *urb)
3685 {
3686         struct pvr2_hdw *hdw = urb->context;
3687         hdw->ctl_read_pend_flag = 0;
3688         if (hdw->ctl_write_pend_flag) return;
3689         complete(&hdw->ctl_done);
3690 }
3691
3692
3693 static void pvr2_ctl_timeout(unsigned long data)
3694 {
3695         struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3696         if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3697                 hdw->ctl_timeout_flag = !0;
3698                 if (hdw->ctl_write_pend_flag)
3699                         usb_unlink_urb(hdw->ctl_write_urb);
3700                 if (hdw->ctl_read_pend_flag)
3701                         usb_unlink_urb(hdw->ctl_read_urb);
3702         }
3703 }
3704
3705
3706 /* Issue a command and get a response from the device.  This extended
3707    version includes a probe flag (which if set means that device errors
3708    should not be logged or treated as fatal) and a timeout in jiffies.
3709    This can be used to non-lethally probe the health of endpoint 1. */
3710 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3711                                 unsigned int timeout,int probe_fl,
3712                                 void *write_data,unsigned int write_len,
3713                                 void *read_data,unsigned int read_len)
3714 {
3715         unsigned int idx;
3716         int status = 0;
3717         struct timer_list timer;
3718         if (!hdw->ctl_lock_held) {
3719                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3720                            "Attempted to execute control transfer"
3721                            " without lock!!");
3722                 return -EDEADLK;
3723         }
3724         if (!hdw->flag_ok && !probe_fl) {
3725                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3726                            "Attempted to execute control transfer"
3727                            " when device not ok");
3728                 return -EIO;
3729         }
3730         if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3731                 if (!probe_fl) {
3732                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3733                                    "Attempted to execute control transfer"
3734                                    " when USB is disconnected");
3735                 }
3736                 return -ENOTTY;
3737         }
3738
3739         /* Ensure that we have sane parameters */
3740         if (!write_data) write_len = 0;
3741         if (!read_data) read_len = 0;
3742         if (write_len > PVR2_CTL_BUFFSIZE) {
3743                 pvr2_trace(
3744                         PVR2_TRACE_ERROR_LEGS,
3745                         "Attempted to execute %d byte"
3746                         " control-write transfer (limit=%d)",
3747                         write_len,PVR2_CTL_BUFFSIZE);
3748                 return -EINVAL;
3749         }
3750         if (read_len > PVR2_CTL_BUFFSIZE) {
3751                 pvr2_trace(
3752                         PVR2_TRACE_ERROR_LEGS,
3753                         "Attempted to execute %d byte"
3754                         " control-read transfer (limit=%d)",
3755                         write_len,PVR2_CTL_BUFFSIZE);
3756                 return -EINVAL;
3757         }
3758         if ((!write_len) && (!read_len)) {
3759                 pvr2_trace(
3760                         PVR2_TRACE_ERROR_LEGS,
3761                         "Attempted to execute null control transfer?");
3762                 return -EINVAL;
3763         }
3764
3765
3766         hdw->cmd_debug_state = 1;
3767         if (write_len) {
3768                 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3769         } else {
3770                 hdw->cmd_debug_code = 0;
3771         }
3772         hdw->cmd_debug_write_len = write_len;
3773         hdw->cmd_debug_read_len = read_len;
3774
3775         /* Initialize common stuff */
3776         init_completion(&hdw->ctl_done);
3777         hdw->ctl_timeout_flag = 0;
3778         hdw->ctl_write_pend_flag = 0;
3779         hdw->ctl_read_pend_flag = 0;
3780         init_timer(&timer);
3781         timer.expires = jiffies + timeout;
3782         timer.data = (unsigned long)hdw;
3783         timer.function = pvr2_ctl_timeout;
3784
3785         if (write_len) {
3786                 hdw->cmd_debug_state = 2;
3787                 /* Transfer write data to internal buffer */
3788                 for (idx = 0; idx < write_len; idx++) {
3789                         hdw->ctl_write_buffer[idx] =
3790                                 ((unsigned char *)write_data)[idx];
3791                 }
3792                 /* Initiate a write request */
3793                 usb_fill_bulk_urb(hdw->ctl_write_urb,
3794                                   hdw->usb_dev,
3795                                   usb_sndbulkpipe(hdw->usb_dev,
3796                                                   PVR2_CTL_WRITE_ENDPOINT),
3797                                   hdw->ctl_write_buffer,
3798                                   write_len,
3799                                   pvr2_ctl_write_complete,
3800                                   hdw);
3801                 hdw->ctl_write_urb->actual_length = 0;
3802                 hdw->ctl_write_pend_flag = !0;
3803                 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3804                 if (status < 0) {
3805                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3806                                    "Failed to submit write-control"
3807                                    " URB status=%d",status);
3808                         hdw->ctl_write_pend_flag = 0;
3809                         goto done;
3810                 }
3811         }
3812
3813         if (read_len) {
3814                 hdw->cmd_debug_state = 3;
3815                 memset(hdw->ctl_read_buffer,0x43,read_len);
3816                 /* Initiate a read request */
3817                 usb_fill_bulk_urb(hdw->ctl_read_urb,
3818                                   hdw->usb_dev,
3819                                   usb_rcvbulkpipe(hdw->usb_dev,
3820                                                   PVR2_CTL_READ_ENDPOINT),
3821                                   hdw->ctl_read_buffer,
3822                                   read_len,
3823                                   pvr2_ctl_read_complete,
3824                                   hdw);
3825                 hdw->ctl_read_urb->actual_length = 0;
3826                 hdw->ctl_read_pend_flag = !0;
3827                 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3828                 if (status < 0) {
3829                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3830                                    "Failed to submit read-control"
3831                                    " URB status=%d",status);
3832                         hdw->ctl_read_pend_flag = 0;
3833                         goto done;
3834                 }
3835         }
3836
3837         /* Start timer */
3838         add_timer(&timer);
3839
3840         /* Now wait for all I/O to complete */
3841         hdw->cmd_debug_state = 4;
3842         while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3843                 wait_for_completion(&hdw->ctl_done);
3844         }
3845         hdw->cmd_debug_state = 5;
3846
3847         /* Stop timer */
3848         del_timer_sync(&timer);
3849
3850         hdw->cmd_debug_state = 6;
3851         status = 0;
3852
3853         if (hdw->ctl_timeout_flag) {
3854                 status = -ETIMEDOUT;
3855                 if (!probe_fl) {
3856                         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3857                                    "Timed out control-write");
3858                 }
3859                 goto done;
3860         }
3861
3862         if (write_len) {
3863                 /* Validate results of write request */
3864                 if ((hdw->ctl_write_urb->status != 0) &&
3865                     (hdw->ctl_write_urb->status != -ENOENT) &&
3866                     (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3867                     (hdw->ctl_write_urb->status != -ECONNRESET)) {
3868                         /* USB subsystem is reporting some kind of failure
3869                            on the write */
3870                         status = hdw->ctl_write_urb->status;
3871                         if (!probe_fl) {
3872                                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3873                                            "control-write URB failure,"
3874                                            " status=%d",
3875                                            status);
3876                         }
3877                         goto done;
3878                 }
3879                 if (hdw->ctl_write_urb->actual_length < write_len) {
3880                         /* Failed to write enough data */
3881                         status = -EIO;
3882                         if (!probe_fl) {
3883                                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3884                                            "control-write URB short,"
3885                                            " expected=%d got=%d",
3886                                            write_len,
3887                                            hdw->ctl_write_urb->actual_length);
3888                         }
3889                         goto done;
3890                 }
3891         }
3892         if (read_len) {
3893                 /* Validate results of read request */
3894                 if ((hdw->ctl_read_urb->status != 0) &&
3895                     (hdw->ctl_read_urb->status != -ENOENT) &&
3896                     (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3897                     (hdw->ctl_read_urb->status != -ECONNRESET)) {
3898                         /* USB subsystem is reporting some kind of failure
3899                            on the read */
3900                         status = hdw->ctl_read_urb->status;
3901                         if (!probe_fl) {
3902                                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3903                                            "control-read URB failure,"
3904                                            " status=%d",
3905                                            status);
3906                         }
3907                         goto done;
3908                 }
3909                 if (hdw->ctl_read_urb->actual_length < read_len) {
3910                         /* Failed to read enough data */
3911                         status = -EIO;
3912                         if (!probe_fl) {
3913                                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3914                                            "control-read URB short,"
3915                                            " expected=%d got=%d",
3916                                            read_len,
3917                                            hdw->ctl_read_urb->actual_length);
3918                         }
3919                         goto done;
3920                 }
3921                 /* Transfer retrieved data out from internal buffer */
3922                 for (idx = 0; idx < read_len; idx++) {
3923                         ((unsigned char *)read_data)[idx] =
3924                                 hdw->ctl_read_buffer[idx];
3925                 }
3926         }
3927
3928  done:
3929
3930         hdw->cmd_debug_state = 0;
3931         if ((status < 0) && (!probe_fl)) {
3932                 pvr2_hdw_render_useless(hdw);
3933         }
3934         return status;
3935 }
3936
3937
3938 int pvr2_send_request(struct pvr2_hdw *hdw,
3939                       void *write_data,unsigned int write_len,
3940                       void *read_data,unsigned int read_len)
3941 {
3942         return pvr2_send_request_ex(hdw,HZ*4,0,
3943                                     write_data,write_len,
3944                                     read_data,read_len);
3945 }
3946
3947
3948 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3949 {
3950         int ret;
3951         unsigned int cnt = 1;
3952         unsigned int args = 0;
3953         LOCK_TAKE(hdw->ctl_lock);
3954         hdw->cmd_buffer[0] = cmdcode & 0xffu;
3955         args = (cmdcode >> 8) & 0xffu;
3956         args = (args > 2) ? 2 : args;
3957         if (args) {
3958                 cnt += args;
3959                 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3960                 if (args > 1) {
3961                         hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3962                 }
3963         }
3964         if (pvrusb2_debug & PVR2_TRACE_INIT) {
3965                 unsigned int idx;
3966                 unsigned int ccnt,bcnt;
3967                 char tbuf[50];
3968                 cmdcode &= 0xffu;
3969                 bcnt = 0;
3970                 ccnt = scnprintf(tbuf+bcnt,
3971                                  sizeof(tbuf)-bcnt,
3972                                  "Sending FX2 command 0x%x",cmdcode);
3973                 bcnt += ccnt;
3974                 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3975                         if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3976                                 ccnt = scnprintf(tbuf+bcnt,
3977                                                  sizeof(tbuf)-bcnt,
3978                                                  " \"%s\"",
3979                                                  pvr2_fx2cmd_desc[idx].desc);
3980                                 bcnt += ccnt;
3981                                 break;
3982                         }
3983                 }
3984                 if (args) {
3985                         ccnt = scnprintf(tbuf+bcnt,
3986                                          sizeof(tbuf)-bcnt,
3987                                          " (%u",hdw->cmd_buffer[1]);
3988                         bcnt += ccnt;
3989                         if (args > 1) {
3990                                 ccnt = scnprintf(tbuf+bcnt,
3991                                                  sizeof(tbuf)-bcnt,
3992                                                  ",%u",hdw->cmd_buffer[2]);
3993                                 bcnt += ccnt;
3994                         }
3995                         ccnt = scnprintf(tbuf+bcnt,
3996                                          sizeof(tbuf)-bcnt,
3997                                          ")");
3998                         bcnt += ccnt;
3999                 }
4000                 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
4001         }
4002         ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
4003         LOCK_GIVE(hdw->ctl_lock);
4004         return ret;
4005 }
4006
4007
4008 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
4009 {
4010         int ret;
4011
4012         LOCK_TAKE(hdw->ctl_lock);
4013
4014         hdw->cmd_buffer[0] = FX2CMD_REG_WRITE;  /* write register prefix */
4015         PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
4016         hdw->cmd_buffer[5] = 0;
4017         hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4018         hdw->cmd_buffer[7] = reg & 0xff;
4019
4020
4021         ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
4022
4023         LOCK_GIVE(hdw->ctl_lock);
4024
4025         return ret;
4026 }
4027
4028
4029 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
4030 {
4031         int ret = 0;
4032
4033         LOCK_TAKE(hdw->ctl_lock);
4034
4035         hdw->cmd_buffer[0] = FX2CMD_REG_READ;  /* read register prefix */
4036         hdw->cmd_buffer[1] = 0;
4037         hdw->cmd_buffer[2] = 0;
4038         hdw->cmd_buffer[3] = 0;
4039         hdw->cmd_buffer[4] = 0;
4040         hdw->cmd_buffer[5] = 0;
4041         hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4042         hdw->cmd_buffer[7] = reg & 0xff;
4043
4044         ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
4045         *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
4046
4047         LOCK_GIVE(hdw->ctl_lock);
4048
4049         return ret;
4050 }
4051
4052
4053 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
4054 {
4055         if (!hdw->flag_ok) return;
4056         pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4057                    "Device being rendered inoperable");
4058         if (hdw->vid_stream) {
4059                 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
4060         }
4061         hdw->flag_ok = 0;
4062         trace_stbit("flag_ok",hdw->flag_ok);
4063         pvr2_hdw_state_sched(hdw);
4064 }
4065
4066
4067 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
4068 {
4069         int ret;
4070         pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
4071         ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
4072         if (ret == 0) {
4073                 ret = usb_reset_device(hdw->usb_dev);
4074                 usb_unlock_device(hdw->usb_dev);
4075         } else {
4076                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4077                            "Failed to lock USB device ret=%d",ret);
4078         }
4079         if (init_pause_msec) {
4080                 pvr2_trace(PVR2_TRACE_INFO,
4081                            "Waiting %u msec for hardware to settle",
4082                            init_pause_msec);
4083                 msleep(init_pause_msec);
4084         }
4085
4086 }
4087
4088
4089 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
4090 {
4091         char *da;
4092         unsigned int pipe;
4093         int ret;
4094
4095         if (!hdw->usb_dev) return;
4096
4097         da = kmalloc(16, GFP_KERNEL);
4098
4099         if (da == NULL) {
4100                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4101                            "Unable to allocate memory to control CPU reset");
4102                 return;
4103         }
4104
4105         pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
4106
4107         da[0] = val ? 0x01 : 0x00;
4108
4109         /* Write the CPUCS register on the 8051.  The lsb of the register
4110            is the reset bit; a 1 asserts reset while a 0 clears it. */
4111         pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
4112         ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
4113         if (ret < 0) {
4114                 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4115                            "cpureset_assert(%d) error=%d",val,ret);
4116                 pvr2_hdw_render_useless(hdw);
4117         }
4118
4119         kfree(da);
4120 }
4121
4122
4123 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
4124 {
4125         return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
4126 }
4127
4128
4129 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
4130 {
4131         return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
4132 }
4133
4134
4135 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
4136 {
4137         return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
4138 }
4139
4140
4141 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
4142 {
4143         pvr2_trace(PVR2_TRACE_INIT,
4144                    "Requesting decoder reset");
4145         if (hdw->decoder_client_id) {
4146                 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
4147                                      core, reset, 0);
4148                 pvr2_hdw_cx25840_vbi_hack(hdw);
4149                 return 0;
4150         }
4151         pvr2_trace(PVR2_TRACE_INIT,
4152                    "Unable to reset decoder: nothing attached");
4153         return -ENOTTY;
4154 }
4155
4156
4157 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4158 {
4159         hdw->flag_ok = !0;
4160         return pvr2_issue_simple_cmd(hdw,
4161                                      FX2CMD_HCW_DEMOD_RESETIN |
4162                                      (1 << 8) |
4163                                      ((onoff ? 1 : 0) << 16));
4164 }
4165
4166
4167 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4168 {
4169         hdw->flag_ok = !0;
4170         return pvr2_issue_simple_cmd(hdw,(onoff ?
4171                                           FX2CMD_ONAIR_DTV_POWER_ON :
4172                                           FX2CMD_ONAIR_DTV_POWER_OFF));
4173 }
4174
4175
4176 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4177                                                 int onoff)
4178 {
4179         return pvr2_issue_simple_cmd(hdw,(onoff ?
4180                                           FX2CMD_ONAIR_DTV_STREAMING_ON :
4181                                           FX2CMD_ONAIR_DTV_STREAMING_OFF));
4182 }
4183
4184
4185 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4186 {
4187         int cmode;
4188         /* Compare digital/analog desired setting with current setting.  If
4189            they don't match, fix it... */
4190         cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4191         if (cmode == hdw->pathway_state) {
4192                 /* They match; nothing to do */
4193                 return;
4194         }
4195
4196         switch (hdw->hdw_desc->digital_control_scheme) {
4197         case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4198                 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4199                 if (cmode == PVR2_PATHWAY_ANALOG) {
4200                         /* If moving to analog mode, also force the decoder
4201                            to reset.  If no decoder is attached, then it's
4202                            ok to ignore this because if/when the decoder
4203                            attaches, it will reset itself at that time. */
4204                         pvr2_hdw_cmd_decoder_reset(hdw);
4205                 }
4206                 break;
4207         case PVR2_DIGITAL_SCHEME_ONAIR:
4208                 /* Supposedly we should always have the power on whether in
4209                    digital or analog mode.  But for now do what appears to
4210                    work... */
4211                 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4212                 break;
4213         default: break;
4214         }
4215
4216         pvr2_hdw_untrip_unlocked(hdw);
4217         hdw->pathway_state = cmode;
4218 }
4219
4220
4221 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4222 {
4223         /* change some GPIO data
4224          *
4225          * note: bit d7 of dir appears to control the LED,
4226          * so we shut it off here.
4227          *
4228          */
4229         if (onoff) {
4230                 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4231         } else {
4232                 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4233         }
4234         pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4235 }
4236
4237
4238 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4239
4240 static led_method_func led_methods[] = {
4241         [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4242 };
4243
4244
4245 /* Toggle LED */
4246 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4247 {
4248         unsigned int scheme_id;
4249         led_method_func fp;
4250
4251         if ((!onoff) == (!hdw->led_on)) return;
4252
4253         hdw->led_on = onoff != 0;
4254
4255         scheme_id = hdw->hdw_desc->led_scheme;
4256         if (scheme_id < ARRAY_SIZE(led_methods)) {
4257                 fp = led_methods[scheme_id];
4258         } else {
4259                 fp = NULL;
4260         }
4261
4262         if (fp) (*fp)(hdw,onoff);
4263 }
4264
4265
4266 /* Stop / start video stream transport */
4267 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4268 {
4269         int ret;
4270
4271         /* If we're in analog mode, then just issue the usual analog
4272            command. */
4273         if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4274                 return pvr2_issue_simple_cmd(hdw,
4275                                              (runFl ?
4276                                               FX2CMD_STREAMING_ON :
4277                                               FX2CMD_STREAMING_OFF));
4278                 /*Note: Not reached */
4279         }
4280
4281         if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4282                 /* Whoops, we don't know what mode we're in... */
4283                 return -EINVAL;
4284         }
4285
4286         /* To get here we have to be in digital mode.  The mechanism here
4287            is unfortunately different for different vendors.  So we switch
4288            on the device's digital scheme attribute in order to figure out
4289            what to do. */
4290         switch (hdw->hdw_desc->digital_control_scheme) {
4291         case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4292                 return pvr2_issue_simple_cmd(hdw,
4293                                              (runFl ?
4294                                               FX2CMD_HCW_DTV_STREAMING_ON :
4295                                               FX2CMD_HCW_DTV_STREAMING_OFF));
4296         case PVR2_DIGITAL_SCHEME_ONAIR:
4297                 ret = pvr2_issue_simple_cmd(hdw,
4298                                             (runFl ?
4299                                              FX2CMD_STREAMING_ON :
4300                                              FX2CMD_STREAMING_OFF));
4301                 if (ret) return ret;
4302                 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4303         default:
4304                 return -EINVAL;
4305         }
4306 }
4307
4308
4309 /* Evaluate whether or not state_pathway_ok can change */
4310 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4311 {
4312         if (hdw->state_pathway_ok) {
4313                 /* Nothing to do if pathway is already ok */
4314                 return 0;
4315         }
4316         if (!hdw->state_pipeline_idle) {
4317                 /* Not allowed to change anything if pipeline is not idle */
4318                 return 0;
4319         }
4320         pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4321         hdw->state_pathway_ok = !0;
4322         trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4323         return !0;
4324 }
4325
4326
4327 /* Evaluate whether or not state_encoder_ok can change */
4328 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4329 {
4330         if (hdw->state_encoder_ok) return 0;
4331         if (hdw->flag_tripped) return 0;
4332         if (hdw->state_encoder_run) return 0;
4333         if (hdw->state_encoder_config) return 0;
4334         if (hdw->state_decoder_run) return 0;
4335         if (hdw->state_usbstream_run) return 0;
4336         if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4337                 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4338         } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4339                 return 0;
4340         }
4341
4342         if (pvr2_upload_firmware2(hdw) < 0) {
4343                 hdw->flag_tripped = !0;
4344                 trace_stbit("flag_tripped",hdw->flag_tripped);
4345                 return !0;
4346         }
4347         hdw->state_encoder_ok = !0;
4348         trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4349         return !0;
4350 }
4351
4352
4353 /* Evaluate whether or not state_encoder_config can change */
4354 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4355 {
4356         if (hdw->state_encoder_config) {
4357                 if (hdw->state_encoder_ok) {
4358                         if (hdw->state_pipeline_req &&
4359                             !hdw->state_pipeline_pause) return 0;
4360                 }
4361                 hdw->state_encoder_config = 0;
4362                 hdw->state_encoder_waitok = 0;
4363                 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4364                 /* paranoia - solve race if timer just completed */
4365                 del_timer_sync(&hdw->encoder_wait_timer);
4366         } else {
4367                 if (!hdw->state_pathway_ok ||
4368                     (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4369                     !hdw->state_encoder_ok ||
4370                     !hdw->state_pipeline_idle ||
4371                     hdw->state_pipeline_pause ||
4372                     !hdw->state_pipeline_req ||
4373                     !hdw->state_pipeline_config) {
4374                         /* We must reset the enforced wait interval if
4375                            anything has happened that might have disturbed
4376                            the encoder.  This should be a rare case. */
4377                         if (timer_pending(&hdw->encoder_wait_timer)) {
4378                                 del_timer_sync(&hdw->encoder_wait_timer);
4379                         }
4380                         if (hdw->state_encoder_waitok) {
4381                                 /* Must clear the state - therefore we did
4382                                    something to a state bit and must also
4383                                    return true. */
4384                                 hdw->state_encoder_waitok = 0;
4385                                 trace_stbit("state_encoder_waitok",
4386                                             hdw->state_encoder_waitok);
4387                                 return !0;
4388                         }
4389                         return 0;
4390                 }
4391                 if (!hdw->state_encoder_waitok) {
4392                         if (!timer_pending(&hdw->encoder_wait_timer)) {
4393                                 /* waitok flag wasn't set and timer isn't
4394                                    running.  Check flag once more to avoid
4395                                    a race then start the timer.  This is
4396                                    the point when we measure out a minimal
4397                                    quiet interval before doing something to
4398                                    the encoder. */
4399                                 if (!hdw->state_encoder_waitok) {
4400                                         hdw->encoder_wait_timer.expires =
4401                                                 jiffies +
4402                                                 (HZ * TIME_MSEC_ENCODER_WAIT
4403                                                  / 1000);
4404                                         add_timer(&hdw->encoder_wait_timer);
4405                                 }
4406                         }
4407                         /* We can't continue until we know we have been
4408                            quiet for the interval measured by this
4409                            timer. */
4410                         return 0;
4411                 }
4412                 pvr2_encoder_configure(hdw);
4413                 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4414         }
4415         trace_stbit("state_encoder_config",hdw->state_encoder_config);
4416         return !0;
4417 }
4418
4419
4420 /* Return true if the encoder should not be running. */
4421 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4422 {
4423         if (!hdw->state_encoder_ok) {
4424                 /* Encoder isn't healthy at the moment, so stop it. */
4425                 return !0;
4426         }
4427         if (!hdw->state_pathway_ok) {
4428                 /* Mode is not understood at the moment (i.e. it wants to
4429                    change), so encoder must be stopped. */
4430                 return !0;
4431         }
4432
4433         switch (hdw->pathway_state) {
4434         case PVR2_PATHWAY_ANALOG:
4435                 if (!hdw->state_decoder_run) {
4436                         /* We're in analog mode and the decoder is not
4437                            running; thus the encoder should be stopped as
4438                            well. */
4439                         return !0;
4440                 }
4441                 break;
4442         case PVR2_PATHWAY_DIGITAL:
4443                 if (hdw->state_encoder_runok) {
4444                         /* This is a funny case.  We're in digital mode so
4445                            really the encoder should be stopped.  However
4446                            if it really is running, only kill it after
4447                            runok has been set.  This gives a chance for the
4448                            onair quirk to function (encoder must run
4449                            briefly first, at least once, before onair
4450                            digital streaming can work). */
4451                         return !0;
4452                 }
4453                 break;
4454         default:
4455                 /* Unknown mode; so encoder should be stopped. */
4456                 return !0;
4457         }
4458
4459         /* If we get here, we haven't found a reason to stop the
4460            encoder. */
4461         return 0;
4462 }
4463
4464
4465 /* Return true if the encoder should be running. */
4466 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4467 {
4468         if (!hdw->state_encoder_ok) {
4469                 /* Don't run the encoder if it isn't healthy... */
4470                 return 0;
4471         }
4472         if (!hdw->state_pathway_ok) {
4473                 /* Don't run the encoder if we don't (yet) know what mode
4474                    we need to be in... */
4475                 return 0;
4476         }
4477
4478         switch (hdw->pathway_state) {
4479         case PVR2_PATHWAY_ANALOG:
4480                 if (hdw->state_decoder_run && hdw->state_decoder_ready) {
4481                         /* In analog mode, if the decoder is running, then
4482                            run the encoder. */
4483                         return !0;
4484                 }
4485                 break;
4486         case PVR2_PATHWAY_DIGITAL:
4487                 if ((hdw->hdw_desc->digital_control_scheme ==
4488                      PVR2_DIGITAL_SCHEME_ONAIR) &&
4489                     !hdw->state_encoder_runok) {
4490                         /* This is a quirk.  OnAir hardware won't stream
4491                            digital until the encoder has been run at least
4492                            once, for a minimal period of time (empiricially
4493                            measured to be 1/4 second).  So if we're on
4494                            OnAir hardware and the encoder has never been
4495                            run at all, then start the encoder.  Normal
4496                            state machine logic in the driver will
4497                            automatically handle the remaining bits. */
4498                         return !0;
4499                 }
4500                 break;
4501         default:
4502                 /* For completeness (unknown mode; encoder won't run ever) */
4503                 break;
4504         }
4505         /* If we get here, then we haven't found any reason to run the
4506            encoder, so don't run it. */
4507         return 0;
4508 }
4509
4510
4511 /* Evaluate whether or not state_encoder_run can change */
4512 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4513 {
4514         if (hdw->state_encoder_run) {
4515                 if (!state_check_disable_encoder_run(hdw)) return 0;
4516                 if (hdw->state_encoder_ok) {
4517                         del_timer_sync(&hdw->encoder_run_timer);
4518                         if (pvr2_encoder_stop(hdw) < 0) return !0;
4519                 }
4520                 hdw->state_encoder_run = 0;
4521         } else {
4522                 if (!state_check_enable_encoder_run(hdw)) return 0;
4523                 if (pvr2_encoder_start(hdw) < 0) return !0;
4524                 hdw->state_encoder_run = !0;
4525                 if (!hdw->state_encoder_runok) {
4526                         hdw->encoder_run_timer.expires =
4527                                 jiffies + (HZ * TIME_MSEC_ENCODER_OK / 1000);
4528                         add_timer(&hdw->encoder_run_timer);
4529                 }
4530         }
4531         trace_stbit("state_encoder_run",hdw->state_encoder_run);
4532         return !0;
4533 }
4534
4535
4536 /* Timeout function for quiescent timer. */
4537 static void pvr2_hdw_quiescent_timeout(unsigned long data)
4538 {
4539         struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4540         hdw->state_decoder_quiescent = !0;
4541         trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4542         hdw->state_stale = !0;
4543         queue_work(hdw->workqueue,&hdw->workpoll);
4544 }
4545
4546
4547 /* Timeout function for decoder stabilization timer. */
4548 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data)
4549 {
4550         struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4551         hdw->state_decoder_ready = !0;
4552         trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4553         hdw->state_stale = !0;
4554         queue_work(hdw->workqueue, &hdw->workpoll);
4555 }
4556
4557
4558 /* Timeout function for encoder wait timer. */
4559 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
4560 {
4561         struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4562         hdw->state_encoder_waitok = !0;
4563         trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4564         hdw->state_stale = !0;
4565         queue_work(hdw->workqueue,&hdw->workpoll);
4566 }
4567
4568
4569 /* Timeout function for encoder run timer. */
4570 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
4571 {
4572         struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4573         if (!hdw->state_encoder_runok) {
4574                 hdw->state_encoder_runok = !0;
4575                 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4576                 hdw->state_stale = !0;
4577                 queue_work(hdw->workqueue,&hdw->workpoll);
4578         }
4579 }
4580
4581
4582 /* Evaluate whether or not state_decoder_run can change */
4583 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4584 {
4585         if (hdw->state_decoder_run) {
4586                 if (hdw->state_encoder_ok) {
4587                         if (hdw->state_pipeline_req &&
4588                             !hdw->state_pipeline_pause &&
4589                             hdw->state_pathway_ok) return 0;
4590                 }
4591                 if (!hdw->flag_decoder_missed) {
4592                         pvr2_decoder_enable(hdw,0);
4593                 }
4594                 hdw->state_decoder_quiescent = 0;
4595                 hdw->state_decoder_run = 0;
4596                 /* paranoia - solve race if timer(s) just completed */
4597                 del_timer_sync(&hdw->quiescent_timer);
4598                 /* Kill the stabilization timer, in case we're killing the
4599                    encoder before the previous stabilization interval has
4600                    been properly timed. */
4601                 del_timer_sync(&hdw->decoder_stabilization_timer);
4602                 hdw->state_decoder_ready = 0;
4603         } else {
4604                 if (!hdw->state_decoder_quiescent) {
4605                         if (!timer_pending(&hdw->quiescent_timer)) {
4606                                 /* We don't do something about the
4607                                    quiescent timer until right here because
4608                                    we also want to catch cases where the
4609                                    decoder was already not running (like
4610                                    after initialization) as opposed to
4611                                    knowing that we had just stopped it.
4612                                    The second flag check is here to cover a
4613                                    race - the timer could have run and set
4614                                    this flag just after the previous check
4615                                    but before we did the pending check. */
4616                                 if (!hdw->state_decoder_quiescent) {
4617                                         hdw->quiescent_timer.expires =
4618                                                 jiffies +
4619                                                 (HZ * TIME_MSEC_DECODER_WAIT
4620                                                  / 1000);
4621                                         add_timer(&hdw->quiescent_timer);
4622                                 }
4623                         }
4624                         /* Don't allow decoder to start again until it has
4625                            been quiesced first.  This little detail should
4626                            hopefully further stabilize the encoder. */
4627                         return 0;
4628                 }
4629                 if (!hdw->state_pathway_ok ||
4630                     (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4631                     !hdw->state_pipeline_req ||
4632                     hdw->state_pipeline_pause ||
4633                     !hdw->state_pipeline_config ||
4634                     !hdw->state_encoder_config ||
4635                     !hdw->state_encoder_ok) return 0;
4636                 del_timer_sync(&hdw->quiescent_timer);
4637                 if (hdw->flag_decoder_missed) return 0;
4638                 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4639                 hdw->state_decoder_quiescent = 0;
4640                 hdw->state_decoder_ready = 0;
4641                 hdw->state_decoder_run = !0;
4642                 if (hdw->decoder_client_id == PVR2_CLIENT_ID_SAA7115) {
4643                         hdw->decoder_stabilization_timer.expires =
4644                                 jiffies +
4645                                 (HZ * TIME_MSEC_DECODER_STABILIZATION_WAIT /
4646                                  1000);
4647                         add_timer(&hdw->decoder_stabilization_timer);
4648                 } else {
4649                         hdw->state_decoder_ready = !0;
4650                 }
4651         }
4652         trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4653         trace_stbit("state_decoder_run",hdw->state_decoder_run);
4654         trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4655         return !0;
4656 }
4657
4658
4659 /* Evaluate whether or not state_usbstream_run can change */
4660 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4661 {
4662         if (hdw->state_usbstream_run) {
4663                 int fl = !0;
4664                 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4665                         fl = (hdw->state_encoder_ok &&
4666                               hdw->state_encoder_run);
4667                 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4668                            (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4669                         fl = hdw->state_encoder_ok;
4670                 }
4671                 if (fl &&
4672                     hdw->state_pipeline_req &&
4673                     !hdw->state_pipeline_pause &&
4674                     hdw->state_pathway_ok) {
4675                         return 0;
4676                 }
4677                 pvr2_hdw_cmd_usbstream(hdw,0);
4678                 hdw->state_usbstream_run = 0;
4679         } else {
4680                 if (!hdw->state_pipeline_req ||
4681                     hdw->state_pipeline_pause ||
4682                     !hdw->state_pathway_ok) return 0;
4683                 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4684                         if (!hdw->state_encoder_ok ||
4685                             !hdw->state_encoder_run) return 0;
4686                 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4687                            (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4688                         if (!hdw->state_encoder_ok) return 0;
4689                         if (hdw->state_encoder_run) return 0;
4690                         if (hdw->hdw_desc->digital_control_scheme ==
4691                             PVR2_DIGITAL_SCHEME_ONAIR) {
4692                                 /* OnAir digital receivers won't stream
4693                                    unless the analog encoder has run first.
4694                                    Why?  I have no idea.  But don't even
4695                                    try until we know the analog side is
4696                                    known to have run. */
4697                                 if (!hdw->state_encoder_runok) return 0;
4698                         }
4699                 }
4700                 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4701                 hdw->state_usbstream_run = !0;
4702         }
4703         trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4704         return !0;
4705 }
4706
4707
4708 /* Attempt to configure pipeline, if needed */
4709 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4710 {
4711         if (hdw->state_pipeline_config ||
4712             hdw->state_pipeline_pause) return 0;
4713         pvr2_hdw_commit_execute(hdw);
4714         return !0;
4715 }
4716
4717
4718 /* Update pipeline idle and pipeline pause tracking states based on other
4719    inputs.  This must be called whenever the other relevant inputs have
4720    changed. */
4721 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4722 {
4723         unsigned int st;
4724         int updatedFl = 0;
4725         /* Update pipeline state */
4726         st = !(hdw->state_encoder_run ||
4727                hdw->state_decoder_run ||
4728                hdw->state_usbstream_run ||
4729                (!hdw->state_decoder_quiescent));
4730         if (!st != !hdw->state_pipeline_idle) {
4731                 hdw->state_pipeline_idle = st;
4732                 updatedFl = !0;
4733         }
4734         if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4735                 hdw->state_pipeline_pause = 0;
4736                 updatedFl = !0;
4737         }
4738         return updatedFl;
4739 }
4740
4741
4742 typedef int (*state_eval_func)(struct pvr2_hdw *);
4743
4744 /* Set of functions to be run to evaluate various states in the driver. */
4745 static const state_eval_func eval_funcs[] = {
4746         state_eval_pathway_ok,
4747         state_eval_pipeline_config,
4748         state_eval_encoder_ok,
4749         state_eval_encoder_config,
4750         state_eval_decoder_run,
4751         state_eval_encoder_run,
4752         state_eval_usbstream_run,
4753 };
4754
4755
4756 /* Process various states and return true if we did anything interesting. */
4757 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4758 {
4759         unsigned int i;
4760         int state_updated = 0;
4761         int check_flag;
4762
4763         if (!hdw->state_stale) return 0;
4764         if ((hdw->fw1_state != FW1_STATE_OK) ||
4765             !hdw->flag_ok) {
4766                 hdw->state_stale = 0;
4767                 return !0;
4768         }
4769         /* This loop is the heart of the entire driver.  It keeps trying to
4770            evaluate various bits of driver state until nothing changes for
4771            one full iteration.  Each "bit of state" tracks some global
4772            aspect of the driver, e.g. whether decoder should run, if
4773            pipeline is configured, usb streaming is on, etc.  We separately
4774            evaluate each of those questions based on other driver state to
4775            arrive at the correct running configuration. */
4776         do {
4777                 check_flag = 0;
4778                 state_update_pipeline_state(hdw);
4779                 /* Iterate over each bit of state */
4780                 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4781                         if ((*eval_funcs[i])(hdw)) {
4782                                 check_flag = !0;
4783                                 state_updated = !0;
4784                                 state_update_pipeline_state(hdw);
4785                         }
4786                 }
4787         } while (check_flag && hdw->flag_ok);
4788         hdw->state_stale = 0;
4789         trace_stbit("state_stale",hdw->state_stale);
4790         return state_updated;
4791 }
4792
4793
4794 static unsigned int print_input_mask(unsigned int msk,
4795                                      char *buf,unsigned int acnt)
4796 {
4797         unsigned int idx,ccnt;
4798         unsigned int tcnt = 0;
4799         for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4800                 if (!((1 << idx) & msk)) continue;
4801                 ccnt = scnprintf(buf+tcnt,
4802                                  acnt-tcnt,
4803                                  "%s%s",
4804                                  (tcnt ? ", " : ""),
4805                                  control_values_input[idx]);
4806                 tcnt += ccnt;
4807         }
4808         return tcnt;
4809 }
4810
4811
4812 static const char *pvr2_pathway_state_name(int id)
4813 {
4814         switch (id) {
4815         case PVR2_PATHWAY_ANALOG: return "analog";
4816         case PVR2_PATHWAY_DIGITAL: return "digital";
4817         default: return "unknown";
4818         }
4819 }
4820
4821
4822 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4823                                              char *buf,unsigned int acnt)
4824 {
4825         switch (which) {
4826         case 0:
4827                 return scnprintf(
4828                         buf,acnt,
4829                         "driver:%s%s%s%s%s <mode=%s>",
4830                         (hdw->flag_ok ? " <ok>" : " <fail>"),
4831                         (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4832                         (hdw->flag_disconnected ? " <disconnected>" :
4833                          " <connected>"),
4834                         (hdw->flag_tripped ? " <tripped>" : ""),
4835                         (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4836                         pvr2_pathway_state_name(hdw->pathway_state));
4837
4838         case 1:
4839                 return scnprintf(
4840                         buf,acnt,
4841                         "pipeline:%s%s%s%s",
4842                         (hdw->state_pipeline_idle ? " <idle>" : ""),
4843                         (hdw->state_pipeline_config ?
4844                          " <configok>" : " <stale>"),
4845                         (hdw->state_pipeline_req ? " <req>" : ""),
4846                         (hdw->state_pipeline_pause ? " <pause>" : ""));
4847         case 2:
4848                 return scnprintf(
4849                         buf,acnt,
4850                         "worker:%s%s%s%s%s%s%s",
4851                         (hdw->state_decoder_run ?
4852                          (hdw->state_decoder_ready ?
4853                           "<decode:run>" : " <decode:start>") :
4854                          (hdw->state_decoder_quiescent ?
4855                           "" : " <decode:stop>")),
4856                         (hdw->state_decoder_quiescent ?
4857                          " <decode:quiescent>" : ""),
4858                         (hdw->state_encoder_ok ?
4859                          "" : " <encode:init>"),
4860                         (hdw->state_encoder_run ?
4861                          (hdw->state_encoder_runok ?
4862                           " <encode:run>" :
4863                           " <encode:firstrun>") :
4864                          (hdw->state_encoder_runok ?
4865                           " <encode:stop>" :
4866                           " <encode:virgin>")),
4867                         (hdw->state_encoder_config ?
4868                          " <encode:configok>" :
4869                          (hdw->state_encoder_waitok ?
4870                           "" : " <encode:waitok>")),
4871                         (hdw->state_usbstream_run ?
4872                          " <usb:run>" : " <usb:stop>"),
4873                         (hdw->state_pathway_ok ?
4874                          " <pathway:ok>" : ""));
4875         case 3:
4876                 return scnprintf(
4877                         buf,acnt,
4878                         "state: %s",
4879                         pvr2_get_state_name(hdw->master_state));
4880         case 4: {
4881                 unsigned int tcnt = 0;
4882                 unsigned int ccnt;
4883
4884                 ccnt = scnprintf(buf,
4885                                  acnt,
4886                                  "Hardware supported inputs: ");
4887                 tcnt += ccnt;
4888                 tcnt += print_input_mask(hdw->input_avail_mask,
4889                                          buf+tcnt,
4890                                          acnt-tcnt);
4891                 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4892                         ccnt = scnprintf(buf+tcnt,
4893                                          acnt-tcnt,
4894                                          "; allowed inputs: ");
4895                         tcnt += ccnt;
4896                         tcnt += print_input_mask(hdw->input_allowed_mask,
4897                                                  buf+tcnt,
4898                                                  acnt-tcnt);
4899                 }
4900                 return tcnt;
4901         }
4902         case 5: {
4903                 struct pvr2_stream_stats stats;
4904                 if (!hdw->vid_stream) break;
4905                 pvr2_stream_get_stats(hdw->vid_stream,
4906                                       &stats,
4907                                       0);
4908                 return scnprintf(
4909                         buf,acnt,
4910                         "Bytes streamed=%u"
4911                         " URBs: queued=%u idle=%u ready=%u"
4912                         " processed=%u failed=%u",
4913                         stats.bytes_processed,
4914                         stats.buffers_in_queue,
4915                         stats.buffers_in_idle,
4916                         stats.buffers_in_ready,
4917                         stats.buffers_processed,
4918                         stats.buffers_failed);
4919         }
4920         case 6: {
4921                 unsigned int id = hdw->ir_scheme_active;
4922                 return scnprintf(buf, acnt, "ir scheme: id=%d %s", id,
4923                                  (id >= ARRAY_SIZE(ir_scheme_names) ?
4924                                   "?" : ir_scheme_names[id]));
4925         }
4926         default: break;
4927         }
4928         return 0;
4929 }
4930
4931
4932 /* Generate report containing info about attached sub-devices and attached
4933    i2c clients, including an indication of which attached i2c clients are
4934    actually sub-devices. */
4935 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
4936                                             char *buf, unsigned int acnt)
4937 {
4938         struct v4l2_subdev *sd;
4939         unsigned int tcnt = 0;
4940         unsigned int ccnt;
4941         struct i2c_client *client;
4942         const char *p;
4943         unsigned int id;
4944
4945         ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
4946         tcnt += ccnt;
4947         v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4948                 id = sd->grp_id;
4949                 p = NULL;
4950                 if (id < ARRAY_SIZE(module_names)) p = module_names[id];
4951                 if (p) {
4952                         ccnt = scnprintf(buf + tcnt, acnt - tcnt, "  %s:", p);
4953                         tcnt += ccnt;
4954                 } else {
4955                         ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4956                                          "  (unknown id=%u):", id);
4957                         tcnt += ccnt;
4958                 }
4959                 client = v4l2_get_subdevdata(sd);
4960                 if (client) {
4961                         ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4962                                          " %s @ %02x\n", client->name,
4963                                          client->addr);
4964                         tcnt += ccnt;
4965                 } else {
4966                         ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4967                                          " no i2c client\n");
4968                         tcnt += ccnt;
4969                 }
4970         }
4971         return tcnt;
4972 }
4973
4974
4975 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4976                                    char *buf,unsigned int acnt)
4977 {
4978         unsigned int bcnt,ccnt,idx;
4979         bcnt = 0;
4980         LOCK_TAKE(hdw->big_lock);
4981         for (idx = 0; ; idx++) {
4982                 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4983                 if (!ccnt) break;
4984                 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4985                 if (!acnt) break;
4986                 buf[0] = '\n'; ccnt = 1;
4987                 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4988         }
4989         ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
4990         bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4991         LOCK_GIVE(hdw->big_lock);
4992         return bcnt;
4993 }
4994
4995
4996 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4997 {
4998         char buf[256];
4999         unsigned int idx, ccnt;
5000         unsigned int lcnt, ucnt;
5001
5002         for (idx = 0; ; idx++) {
5003                 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
5004                 if (!ccnt) break;
5005                 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
5006         }
5007         ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
5008         ucnt = 0;
5009         while (ucnt < ccnt) {
5010                 lcnt = 0;
5011                 while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
5012                         lcnt++;
5013                 }
5014                 printk(KERN_INFO "%s %.*s\n", hdw->name, lcnt, buf + ucnt);
5015                 ucnt += lcnt + 1;
5016         }
5017 }
5018
5019
5020 /* Evaluate and update the driver's current state, taking various actions
5021    as appropriate for the update. */
5022 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
5023 {
5024         unsigned int st;
5025         int state_updated = 0;
5026         int callback_flag = 0;
5027         int analog_mode;
5028
5029         pvr2_trace(PVR2_TRACE_STBITS,
5030                    "Drive state check START");
5031         if (pvrusb2_debug & PVR2_TRACE_STBITS) {
5032                 pvr2_hdw_state_log_state(hdw);
5033         }
5034
5035         /* Process all state and get back over disposition */
5036         state_updated = pvr2_hdw_state_update(hdw);
5037
5038         analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
5039
5040         /* Update master state based upon all other states. */
5041         if (!hdw->flag_ok) {
5042                 st = PVR2_STATE_DEAD;
5043         } else if (hdw->fw1_state != FW1_STATE_OK) {
5044                 st = PVR2_STATE_COLD;
5045         } else if ((analog_mode ||
5046                     hdw->hdw_desc->flag_digital_requires_cx23416) &&
5047                    !hdw->state_encoder_ok) {
5048                 st = PVR2_STATE_WARM;
5049         } else if (hdw->flag_tripped ||
5050                    (analog_mode && hdw->flag_decoder_missed)) {
5051                 st = PVR2_STATE_ERROR;
5052         } else if (hdw->state_usbstream_run &&
5053                    (!analog_mode ||
5054                     (hdw->state_encoder_run && hdw->state_decoder_run))) {
5055                 st = PVR2_STATE_RUN;
5056         } else {
5057                 st = PVR2_STATE_READY;
5058         }
5059         if (hdw->master_state != st) {
5060                 pvr2_trace(PVR2_TRACE_STATE,
5061                            "Device state change from %s to %s",
5062                            pvr2_get_state_name(hdw->master_state),
5063                            pvr2_get_state_name(st));
5064                 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
5065                 hdw->master_state = st;
5066                 state_updated = !0;
5067                 callback_flag = !0;
5068         }
5069         if (state_updated) {
5070                 /* Trigger anyone waiting on any state changes here. */
5071                 wake_up(&hdw->state_wait_data);
5072         }
5073
5074         if (pvrusb2_debug & PVR2_TRACE_STBITS) {
5075                 pvr2_hdw_state_log_state(hdw);
5076         }
5077         pvr2_trace(PVR2_TRACE_STBITS,
5078                    "Drive state check DONE callback=%d",callback_flag);
5079
5080         return callback_flag;
5081 }
5082
5083
5084 /* Cause kernel thread to check / update driver state */
5085 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
5086 {
5087         if (hdw->state_stale) return;
5088         hdw->state_stale = !0;
5089         trace_stbit("state_stale",hdw->state_stale);
5090         queue_work(hdw->workqueue,&hdw->workpoll);
5091 }
5092
5093
5094 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
5095 {
5096         return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
5097 }
5098
5099
5100 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
5101 {
5102         return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
5103 }
5104
5105
5106 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
5107 {
5108         return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
5109 }
5110
5111
5112 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
5113 {
5114         u32 cval,nval;
5115         int ret;
5116         if (~msk) {
5117                 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
5118                 if (ret) return ret;
5119                 nval = (cval & ~msk) | (val & msk);
5120                 pvr2_trace(PVR2_TRACE_GPIO,
5121                            "GPIO direction changing 0x%x:0x%x"
5122                            " from 0x%x to 0x%x",
5123                            msk,val,cval,nval);
5124         } else {
5125                 nval = val;
5126                 pvr2_trace(PVR2_TRACE_GPIO,
5127                            "GPIO direction changing to 0x%x",nval);
5128         }
5129         return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
5130 }
5131
5132
5133 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
5134 {
5135         u32 cval,nval;
5136         int ret;
5137         if (~msk) {
5138                 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
5139                 if (ret) return ret;
5140                 nval = (cval & ~msk) | (val & msk);
5141                 pvr2_trace(PVR2_TRACE_GPIO,
5142                            "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5143                            msk,val,cval,nval);
5144         } else {
5145                 nval = val;
5146                 pvr2_trace(PVR2_TRACE_GPIO,
5147                            "GPIO output changing to 0x%x",nval);
5148         }
5149         return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
5150 }
5151
5152
5153 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
5154 {
5155         struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
5156         memset(vtp, 0, sizeof(*vtp));
5157         hdw->tuner_signal_stale = 0;
5158         /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5159            using v4l2-subdev - therefore we can't support that AT ALL right
5160            now.  (Of course, no sub-drivers seem to implement it either.
5161            But now it's a a chicken and egg problem...) */
5162         v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner,
5163                              &hdw->tuner_signal_info);
5164         pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll"
5165                    " type=%u strength=%u audio=0x%x cap=0x%x"
5166                    " low=%u hi=%u",
5167                    vtp->type,
5168                    vtp->signal, vtp->rxsubchans, vtp->capability,
5169                    vtp->rangelow, vtp->rangehigh);
5170
5171         /* We have to do this to avoid getting into constant polling if
5172            there's nobody to answer a poll of cropcap info. */
5173         hdw->cropcap_stale = 0;
5174 }
5175
5176
5177 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5178 {
5179         return hdw->input_avail_mask;
5180 }
5181
5182
5183 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5184 {
5185         return hdw->input_allowed_mask;
5186 }
5187
5188
5189 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5190 {
5191         if (hdw->input_val != v) {
5192                 hdw->input_val = v;
5193                 hdw->input_dirty = !0;
5194         }
5195
5196         /* Handle side effects - if we switch to a mode that needs the RF
5197            tuner, then select the right frequency choice as well and mark
5198            it dirty. */
5199         if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5200                 hdw->freqSelector = 0;
5201                 hdw->freqDirty = !0;
5202         } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5203                    (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5204                 hdw->freqSelector = 1;
5205                 hdw->freqDirty = !0;
5206         }
5207         return 0;
5208 }
5209
5210
5211 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5212                                unsigned int change_mask,
5213                                unsigned int change_val)
5214 {
5215         int ret = 0;
5216         unsigned int nv,m,idx;
5217         LOCK_TAKE(hdw->big_lock);
5218         do {
5219                 nv = hdw->input_allowed_mask & ~change_mask;
5220                 nv |= (change_val & change_mask);
5221                 nv &= hdw->input_avail_mask;
5222                 if (!nv) {
5223                         /* No legal modes left; return error instead. */
5224                         ret = -EPERM;
5225                         break;
5226                 }
5227                 hdw->input_allowed_mask = nv;
5228                 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5229                         /* Current mode is still in the allowed mask, so
5230                            we're done. */
5231                         break;
5232                 }
5233                 /* Select and switch to a mode that is still in the allowed
5234                    mask */
5235                 if (!hdw->input_allowed_mask) {
5236                         /* Nothing legal; give up */
5237                         break;
5238                 }
5239                 m = hdw->input_allowed_mask;
5240                 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5241                         if (!((1 << idx) & m)) continue;
5242                         pvr2_hdw_set_input(hdw,idx);
5243                         break;
5244                 }
5245         } while (0);
5246         LOCK_GIVE(hdw->big_lock);
5247         return ret;
5248 }
5249
5250
5251 /* Find I2C address of eeprom */
5252 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5253 {
5254         int result;
5255         LOCK_TAKE(hdw->ctl_lock); do {
5256                 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5257                 result = pvr2_send_request(hdw,
5258                                            hdw->cmd_buffer,1,
5259                                            hdw->cmd_buffer,1);
5260                 if (result < 0) break;
5261                 result = hdw->cmd_buffer[0];
5262         } while(0); LOCK_GIVE(hdw->ctl_lock);
5263         return result;
5264 }
5265
5266
5267 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
5268                              struct v4l2_dbg_match *match, u64 reg_id,
5269                              int setFl, u64 *val_ptr)
5270 {
5271 #ifdef CONFIG_VIDEO_ADV_DEBUG
5272         struct v4l2_dbg_register req;
5273         int stat = 0;
5274         int okFl = 0;
5275
5276         if (!capable(CAP_SYS_ADMIN)) return -EPERM;
5277
5278         req.match = *match;
5279         req.reg = reg_id;
5280         if (setFl) req.val = *val_ptr;
5281         /* It would be nice to know if a sub-device answered the request */
5282         v4l2_device_call_all(&hdw->v4l2_dev, 0, core, g_register, &req);
5283         if (!setFl) *val_ptr = req.val;
5284         if (okFl) {
5285                 return stat;
5286         }
5287         return -EINVAL;
5288 #else
5289         return -ENOSYS;
5290 #endif
5291 }
5292
5293
5294 /*
5295   Stuff for Emacs to see, in order to encourage consistent editing style:
5296   *** Local Variables: ***
5297   *** mode: c ***
5298   *** fill-column: 75 ***
5299   *** tab-width: 8 ***
5300   *** c-basic-offset: 8 ***
5301   *** End: ***
5302   */