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