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