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