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