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