Linux 2.6.34-rc3
[pohmelfs.git] / drivers / media / video / pvrusb2 / pvrusb2-hdw.c
blob712b300f723f04d46ae2cea4e86db09ff457c8c4
1 /*
4 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
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
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.
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
21 #include <linux/errno.h>
22 #include <linux/string.h>
23 #include <linux/slab.h>
24 #include <linux/firmware.h>
25 #include <linux/videodev2.h>
26 #include <media/v4l2-common.h>
27 #include <media/tuner.h>
28 #include "pvrusb2.h"
29 #include "pvrusb2-std.h"
30 #include "pvrusb2-util.h"
31 #include "pvrusb2-hdw.h"
32 #include "pvrusb2-i2c-core.h"
33 #include "pvrusb2-eeprom.h"
34 #include "pvrusb2-hdw-internal.h"
35 #include "pvrusb2-encoder.h"
36 #include "pvrusb2-debug.h"
37 #include "pvrusb2-fx2-cmd.h"
38 #include "pvrusb2-wm8775.h"
39 #include "pvrusb2-video-v4l.h"
40 #include "pvrusb2-cx2584x-v4l.h"
41 #include "pvrusb2-cs53l32a.h"
42 #include "pvrusb2-audio.h"
44 #define TV_MIN_FREQ 55250000L
45 #define TV_MAX_FREQ 850000000L
47 /* This defines a minimum interval that the decoder must remain quiet
48 before we are allowed to start it running. */
49 #define TIME_MSEC_DECODER_WAIT 50
51 /* This defines a minimum interval that the decoder must be allowed to run
52 before we can safely begin using its streaming output. */
53 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
55 /* This defines a minimum interval that the encoder must remain quiet
56 before we are allowed to configure it. */
57 #define TIME_MSEC_ENCODER_WAIT 50
59 /* This defines the minimum interval that the encoder must successfully run
60 before we consider that the encoder has run at least once since its
61 firmware has been loaded. This measurement is in important for cases
62 where we can't do something until we know that the encoder has been run
63 at least once. */
64 #define TIME_MSEC_ENCODER_OK 250
66 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
67 static DEFINE_MUTEX(pvr2_unit_mtx);
69 static int ctlchg;
70 static int procreload;
71 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
72 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
73 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
74 static int init_pause_msec;
76 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
77 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
78 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
79 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
80 module_param(procreload, int, S_IRUGO|S_IWUSR);
81 MODULE_PARM_DESC(procreload,
82 "Attempt init failure recovery with firmware reload");
83 module_param_array(tuner, int, NULL, 0444);
84 MODULE_PARM_DESC(tuner,"specify installed tuner type");
85 module_param_array(video_std, int, NULL, 0444);
86 MODULE_PARM_DESC(video_std,"specify initial video standard");
87 module_param_array(tolerance, int, NULL, 0444);
88 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
90 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
91 static int default_tv_freq = 61250000L;
92 /* 104.3 MHz, a usable FM station for my area */
93 static int default_radio_freq = 104300000L;
95 module_param_named(tv_freq, default_tv_freq, int, 0444);
96 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
97 module_param_named(radio_freq, default_radio_freq, int, 0444);
98 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
100 #define PVR2_CTL_WRITE_ENDPOINT 0x01
101 #define PVR2_CTL_READ_ENDPOINT 0x81
103 #define PVR2_GPIO_IN 0x9008
104 #define PVR2_GPIO_OUT 0x900c
105 #define PVR2_GPIO_DIR 0x9020
107 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
109 #define PVR2_FIRMWARE_ENDPOINT 0x02
111 /* size of a firmware chunk */
112 #define FIRMWARE_CHUNK_SIZE 0x2000
114 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
115 struct v4l2_subdev *);
117 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
118 [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
119 [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
120 [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
121 [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update,
122 [PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update,
125 static const char *module_names[] = {
126 [PVR2_CLIENT_ID_MSP3400] = "msp3400",
127 [PVR2_CLIENT_ID_CX25840] = "cx25840",
128 [PVR2_CLIENT_ID_SAA7115] = "saa7115",
129 [PVR2_CLIENT_ID_TUNER] = "tuner",
130 [PVR2_CLIENT_ID_DEMOD] = "tuner",
131 [PVR2_CLIENT_ID_CS53L32A] = "cs53l32a",
132 [PVR2_CLIENT_ID_WM8775] = "wm8775",
136 static const unsigned char *module_i2c_addresses[] = {
137 [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
138 [PVR2_CLIENT_ID_DEMOD] = "\x43",
139 [PVR2_CLIENT_ID_MSP3400] = "\x40",
140 [PVR2_CLIENT_ID_SAA7115] = "\x21",
141 [PVR2_CLIENT_ID_WM8775] = "\x1b",
142 [PVR2_CLIENT_ID_CX25840] = "\x44",
143 [PVR2_CLIENT_ID_CS53L32A] = "\x11",
147 static const char *ir_scheme_names[] = {
148 [PVR2_IR_SCHEME_NONE] = "none",
149 [PVR2_IR_SCHEME_29XXX] = "29xxx",
150 [PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)",
151 [PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)",
152 [PVR2_IR_SCHEME_ZILOG] = "Zilog",
156 /* Define the list of additional controls we'll dynamically construct based
157 on query of the cx2341x module. */
158 struct pvr2_mpeg_ids {
159 const char *strid;
160 int id;
162 static const struct pvr2_mpeg_ids mpeg_ids[] = {
164 .strid = "audio_layer",
165 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
167 .strid = "audio_bitrate",
168 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
170 /* Already using audio_mode elsewhere :-( */
171 .strid = "mpeg_audio_mode",
172 .id = V4L2_CID_MPEG_AUDIO_MODE,
174 .strid = "mpeg_audio_mode_extension",
175 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
177 .strid = "audio_emphasis",
178 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
180 .strid = "audio_crc",
181 .id = V4L2_CID_MPEG_AUDIO_CRC,
183 .strid = "video_aspect",
184 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
186 .strid = "video_b_frames",
187 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
189 .strid = "video_gop_size",
190 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
192 .strid = "video_gop_closure",
193 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
195 .strid = "video_bitrate_mode",
196 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
198 .strid = "video_bitrate",
199 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
201 .strid = "video_bitrate_peak",
202 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
204 .strid = "video_temporal_decimation",
205 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
207 .strid = "stream_type",
208 .id = V4L2_CID_MPEG_STREAM_TYPE,
210 .strid = "video_spatial_filter_mode",
211 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
213 .strid = "video_spatial_filter",
214 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
216 .strid = "video_luma_spatial_filter_type",
217 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
219 .strid = "video_chroma_spatial_filter_type",
220 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
222 .strid = "video_temporal_filter_mode",
223 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
225 .strid = "video_temporal_filter",
226 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
228 .strid = "video_median_filter_type",
229 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
231 .strid = "video_luma_median_filter_top",
232 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
234 .strid = "video_luma_median_filter_bottom",
235 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
237 .strid = "video_chroma_median_filter_top",
238 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
240 .strid = "video_chroma_median_filter_bottom",
241 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
244 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
247 static const char *control_values_srate[] = {
248 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
249 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
250 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
255 static const char *control_values_input[] = {
256 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
257 [PVR2_CVAL_INPUT_DTV] = "dtv",
258 [PVR2_CVAL_INPUT_RADIO] = "radio",
259 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
260 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
264 static const char *control_values_audiomode[] = {
265 [V4L2_TUNER_MODE_MONO] = "Mono",
266 [V4L2_TUNER_MODE_STEREO] = "Stereo",
267 [V4L2_TUNER_MODE_LANG1] = "Lang1",
268 [V4L2_TUNER_MODE_LANG2] = "Lang2",
269 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
273 static const char *control_values_hsm[] = {
274 [PVR2_CVAL_HSM_FAIL] = "Fail",
275 [PVR2_CVAL_HSM_HIGH] = "High",
276 [PVR2_CVAL_HSM_FULL] = "Full",
280 static const char *pvr2_state_names[] = {
281 [PVR2_STATE_NONE] = "none",
282 [PVR2_STATE_DEAD] = "dead",
283 [PVR2_STATE_COLD] = "cold",
284 [PVR2_STATE_WARM] = "warm",
285 [PVR2_STATE_ERROR] = "error",
286 [PVR2_STATE_READY] = "ready",
287 [PVR2_STATE_RUN] = "run",
291 struct pvr2_fx2cmd_descdef {
292 unsigned char id;
293 unsigned char *desc;
296 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
297 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
298 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
299 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
300 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
301 {FX2CMD_REG_WRITE, "write encoder register"},
302 {FX2CMD_REG_READ, "read encoder register"},
303 {FX2CMD_MEMSEL, "encoder memsel"},
304 {FX2CMD_I2C_WRITE, "i2c write"},
305 {FX2CMD_I2C_READ, "i2c read"},
306 {FX2CMD_GET_USB_SPEED, "get USB speed"},
307 {FX2CMD_STREAMING_ON, "stream on"},
308 {FX2CMD_STREAMING_OFF, "stream off"},
309 {FX2CMD_FWPOST1, "fwpost1"},
310 {FX2CMD_POWER_OFF, "power off"},
311 {FX2CMD_POWER_ON, "power on"},
312 {FX2CMD_DEEP_RESET, "deep reset"},
313 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
314 {FX2CMD_GET_IR_CODE, "get IR code"},
315 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
316 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
317 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
318 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
319 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
320 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
321 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
325 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
326 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
327 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
328 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
329 static void pvr2_hdw_worker_poll(struct work_struct *work);
330 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
331 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
332 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
333 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
334 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
335 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
336 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
337 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
338 static void pvr2_hdw_quiescent_timeout(unsigned long);
339 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
340 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
341 static void pvr2_hdw_encoder_run_timeout(unsigned long);
342 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
343 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
344 unsigned int timeout,int probe_fl,
345 void *write_data,unsigned int write_len,
346 void *read_data,unsigned int read_len);
347 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
350 static void trace_stbit(const char *name,int val)
352 pvr2_trace(PVR2_TRACE_STBITS,
353 "State bit %s <-- %s",
354 name,(val ? "true" : "false"));
357 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
359 struct pvr2_hdw *hdw = cptr->hdw;
360 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
361 *vp = hdw->freqTable[hdw->freqProgSlot-1];
362 } else {
363 *vp = 0;
365 return 0;
368 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
370 struct pvr2_hdw *hdw = cptr->hdw;
371 unsigned int slotId = hdw->freqProgSlot;
372 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
373 hdw->freqTable[slotId-1] = v;
374 /* Handle side effects correctly - if we're tuned to this
375 slot, then forgot the slot id relation since the stored
376 frequency has been changed. */
377 if (hdw->freqSelector) {
378 if (hdw->freqSlotRadio == slotId) {
379 hdw->freqSlotRadio = 0;
381 } else {
382 if (hdw->freqSlotTelevision == slotId) {
383 hdw->freqSlotTelevision = 0;
387 return 0;
390 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
392 *vp = cptr->hdw->freqProgSlot;
393 return 0;
396 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
398 struct pvr2_hdw *hdw = cptr->hdw;
399 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
400 hdw->freqProgSlot = v;
402 return 0;
405 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
407 struct pvr2_hdw *hdw = cptr->hdw;
408 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
409 return 0;
412 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
414 unsigned freq = 0;
415 struct pvr2_hdw *hdw = cptr->hdw;
416 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
417 if (slotId > 0) {
418 freq = hdw->freqTable[slotId-1];
419 if (!freq) return 0;
420 pvr2_hdw_set_cur_freq(hdw,freq);
422 if (hdw->freqSelector) {
423 hdw->freqSlotRadio = slotId;
424 } else {
425 hdw->freqSlotTelevision = slotId;
427 return 0;
430 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
432 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
433 return 0;
436 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
438 return cptr->hdw->freqDirty != 0;
441 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
443 cptr->hdw->freqDirty = 0;
446 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
448 pvr2_hdw_set_cur_freq(cptr->hdw,v);
449 return 0;
452 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
454 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
455 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
456 if (stat != 0) {
457 return stat;
459 *left = cap->bounds.left;
460 return 0;
463 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
465 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
466 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
467 if (stat != 0) {
468 return stat;
470 *left = cap->bounds.left;
471 if (cap->bounds.width > cptr->hdw->cropw_val) {
472 *left += cap->bounds.width - cptr->hdw->cropw_val;
474 return 0;
477 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
479 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
480 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
481 if (stat != 0) {
482 return stat;
484 *top = cap->bounds.top;
485 return 0;
488 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
490 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
491 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
492 if (stat != 0) {
493 return stat;
495 *top = cap->bounds.top;
496 if (cap->bounds.height > cptr->hdw->croph_val) {
497 *top += cap->bounds.height - cptr->hdw->croph_val;
499 return 0;
502 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *val)
504 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
505 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
506 if (stat != 0) {
507 return stat;
509 *val = 0;
510 if (cap->bounds.width > cptr->hdw->cropl_val) {
511 *val = cap->bounds.width - cptr->hdw->cropl_val;
513 return 0;
516 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *val)
518 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
519 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
520 if (stat != 0) {
521 return stat;
523 *val = 0;
524 if (cap->bounds.height > cptr->hdw->cropt_val) {
525 *val = cap->bounds.height - cptr->hdw->cropt_val;
527 return 0;
530 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
532 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
533 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
534 if (stat != 0) {
535 return stat;
537 *val = cap->bounds.left;
538 return 0;
541 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
543 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
544 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
545 if (stat != 0) {
546 return stat;
548 *val = cap->bounds.top;
549 return 0;
552 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
554 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
555 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
556 if (stat != 0) {
557 return stat;
559 *val = cap->bounds.width;
560 return 0;
563 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
565 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
566 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
567 if (stat != 0) {
568 return stat;
570 *val = cap->bounds.height;
571 return 0;
574 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
576 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
577 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
578 if (stat != 0) {
579 return stat;
581 *val = cap->defrect.left;
582 return 0;
585 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
587 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
588 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
589 if (stat != 0) {
590 return stat;
592 *val = cap->defrect.top;
593 return 0;
596 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
598 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
599 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
600 if (stat != 0) {
601 return stat;
603 *val = cap->defrect.width;
604 return 0;
607 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
609 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
610 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
611 if (stat != 0) {
612 return stat;
614 *val = cap->defrect.height;
615 return 0;
618 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
620 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
621 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
622 if (stat != 0) {
623 return stat;
625 *val = cap->pixelaspect.numerator;
626 return 0;
629 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
631 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
632 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
633 if (stat != 0) {
634 return stat;
636 *val = cap->pixelaspect.denominator;
637 return 0;
640 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
642 /* Actual maximum depends on the video standard in effect. */
643 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
644 *vp = 480;
645 } else {
646 *vp = 576;
648 return 0;
651 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
653 /* Actual minimum depends on device digitizer type. */
654 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
655 *vp = 75;
656 } else {
657 *vp = 17;
659 return 0;
662 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
664 *vp = cptr->hdw->input_val;
665 return 0;
668 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
670 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
673 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
675 return pvr2_hdw_set_input(cptr->hdw,v);
678 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
680 return cptr->hdw->input_dirty != 0;
683 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
685 cptr->hdw->input_dirty = 0;
689 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
691 unsigned long fv;
692 struct pvr2_hdw *hdw = cptr->hdw;
693 if (hdw->tuner_signal_stale) {
694 pvr2_hdw_status_poll(hdw);
696 fv = hdw->tuner_signal_info.rangehigh;
697 if (!fv) {
698 /* Safety fallback */
699 *vp = TV_MAX_FREQ;
700 return 0;
702 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
703 fv = (fv * 125) / 2;
704 } else {
705 fv = fv * 62500;
707 *vp = fv;
708 return 0;
711 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
713 unsigned long fv;
714 struct pvr2_hdw *hdw = cptr->hdw;
715 if (hdw->tuner_signal_stale) {
716 pvr2_hdw_status_poll(hdw);
718 fv = hdw->tuner_signal_info.rangelow;
719 if (!fv) {
720 /* Safety fallback */
721 *vp = TV_MIN_FREQ;
722 return 0;
724 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
725 fv = (fv * 125) / 2;
726 } else {
727 fv = fv * 62500;
729 *vp = fv;
730 return 0;
733 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
735 return cptr->hdw->enc_stale != 0;
738 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
740 cptr->hdw->enc_stale = 0;
741 cptr->hdw->enc_unsafe_stale = 0;
744 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
746 int ret;
747 struct v4l2_ext_controls cs;
748 struct v4l2_ext_control c1;
749 memset(&cs,0,sizeof(cs));
750 memset(&c1,0,sizeof(c1));
751 cs.controls = &c1;
752 cs.count = 1;
753 c1.id = cptr->info->v4l_id;
754 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
755 VIDIOC_G_EXT_CTRLS);
756 if (ret) return ret;
757 *vp = c1.value;
758 return 0;
761 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
763 int ret;
764 struct pvr2_hdw *hdw = cptr->hdw;
765 struct v4l2_ext_controls cs;
766 struct v4l2_ext_control c1;
767 memset(&cs,0,sizeof(cs));
768 memset(&c1,0,sizeof(c1));
769 cs.controls = &c1;
770 cs.count = 1;
771 c1.id = cptr->info->v4l_id;
772 c1.value = v;
773 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
774 hdw->state_encoder_run, &cs,
775 VIDIOC_S_EXT_CTRLS);
776 if (ret == -EBUSY) {
777 /* Oops. cx2341x is telling us it's not safe to change
778 this control while we're capturing. Make a note of this
779 fact so that the pipeline will be stopped the next time
780 controls are committed. Then go on ahead and store this
781 change anyway. */
782 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
783 0, &cs,
784 VIDIOC_S_EXT_CTRLS);
785 if (!ret) hdw->enc_unsafe_stale = !0;
787 if (ret) return ret;
788 hdw->enc_stale = !0;
789 return 0;
792 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
794 struct v4l2_queryctrl qctrl;
795 struct pvr2_ctl_info *info;
796 qctrl.id = cptr->info->v4l_id;
797 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
798 /* Strip out the const so we can adjust a function pointer. It's
799 OK to do this here because we know this is a dynamically created
800 control, so the underlying storage for the info pointer is (a)
801 private to us, and (b) not in read-only storage. Either we do
802 this or we significantly complicate the underlying control
803 implementation. */
804 info = (struct pvr2_ctl_info *)(cptr->info);
805 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
806 if (info->set_value) {
807 info->set_value = NULL;
809 } else {
810 if (!(info->set_value)) {
811 info->set_value = ctrl_cx2341x_set;
814 return qctrl.flags;
817 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
819 *vp = cptr->hdw->state_pipeline_req;
820 return 0;
823 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
825 *vp = cptr->hdw->master_state;
826 return 0;
829 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
831 int result = pvr2_hdw_is_hsm(cptr->hdw);
832 *vp = PVR2_CVAL_HSM_FULL;
833 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
834 if (result) *vp = PVR2_CVAL_HSM_HIGH;
835 return 0;
838 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
840 *vp = cptr->hdw->std_mask_avail;
841 return 0;
844 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
846 struct pvr2_hdw *hdw = cptr->hdw;
847 v4l2_std_id ns;
848 ns = hdw->std_mask_avail;
849 ns = (ns & ~m) | (v & m);
850 if (ns == hdw->std_mask_avail) return 0;
851 hdw->std_mask_avail = ns;
852 pvr2_hdw_internal_set_std_avail(hdw);
853 pvr2_hdw_internal_find_stdenum(hdw);
854 return 0;
857 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
858 char *bufPtr,unsigned int bufSize,
859 unsigned int *len)
861 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
862 return 0;
865 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
866 const char *bufPtr,unsigned int bufSize,
867 int *mskp,int *valp)
869 int ret;
870 v4l2_std_id id;
871 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
872 if (ret < 0) return ret;
873 if (mskp) *mskp = id;
874 if (valp) *valp = id;
875 return 0;
878 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
880 *vp = cptr->hdw->std_mask_cur;
881 return 0;
884 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
886 struct pvr2_hdw *hdw = cptr->hdw;
887 v4l2_std_id ns;
888 ns = hdw->std_mask_cur;
889 ns = (ns & ~m) | (v & m);
890 if (ns == hdw->std_mask_cur) return 0;
891 hdw->std_mask_cur = ns;
892 hdw->std_dirty = !0;
893 pvr2_hdw_internal_find_stdenum(hdw);
894 return 0;
897 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
899 return cptr->hdw->std_dirty != 0;
902 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
904 cptr->hdw->std_dirty = 0;
907 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
909 struct pvr2_hdw *hdw = cptr->hdw;
910 pvr2_hdw_status_poll(hdw);
911 *vp = hdw->tuner_signal_info.signal;
912 return 0;
915 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
917 int val = 0;
918 unsigned int subchan;
919 struct pvr2_hdw *hdw = cptr->hdw;
920 pvr2_hdw_status_poll(hdw);
921 subchan = hdw->tuner_signal_info.rxsubchans;
922 if (subchan & V4L2_TUNER_SUB_MONO) {
923 val |= (1 << V4L2_TUNER_MODE_MONO);
925 if (subchan & V4L2_TUNER_SUB_STEREO) {
926 val |= (1 << V4L2_TUNER_MODE_STEREO);
928 if (subchan & V4L2_TUNER_SUB_LANG1) {
929 val |= (1 << V4L2_TUNER_MODE_LANG1);
931 if (subchan & V4L2_TUNER_SUB_LANG2) {
932 val |= (1 << V4L2_TUNER_MODE_LANG2);
934 *vp = val;
935 return 0;
939 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
941 struct pvr2_hdw *hdw = cptr->hdw;
942 if (v < 0) return -EINVAL;
943 if (v > hdw->std_enum_cnt) return -EINVAL;
944 hdw->std_enum_cur = v;
945 if (!v) return 0;
946 v--;
947 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
948 hdw->std_mask_cur = hdw->std_defs[v].id;
949 hdw->std_dirty = !0;
950 return 0;
954 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
956 *vp = cptr->hdw->std_enum_cur;
957 return 0;
961 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
963 return cptr->hdw->std_dirty != 0;
967 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
969 cptr->hdw->std_dirty = 0;
973 #define DEFINT(vmin,vmax) \
974 .type = pvr2_ctl_int, \
975 .def.type_int.min_value = vmin, \
976 .def.type_int.max_value = vmax
978 #define DEFENUM(tab) \
979 .type = pvr2_ctl_enum, \
980 .def.type_enum.count = ARRAY_SIZE(tab), \
981 .def.type_enum.value_names = tab
983 #define DEFBOOL \
984 .type = pvr2_ctl_bool
986 #define DEFMASK(msk,tab) \
987 .type = pvr2_ctl_bitmask, \
988 .def.type_bitmask.valid_bits = msk, \
989 .def.type_bitmask.bit_names = tab
991 #define DEFREF(vname) \
992 .set_value = ctrl_set_##vname, \
993 .get_value = ctrl_get_##vname, \
994 .is_dirty = ctrl_isdirty_##vname, \
995 .clear_dirty = ctrl_cleardirty_##vname
998 #define VCREATE_FUNCS(vname) \
999 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
1000 {*vp = cptr->hdw->vname##_val; return 0;} \
1001 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
1002 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
1003 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
1004 {return cptr->hdw->vname##_dirty != 0;} \
1005 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
1006 {cptr->hdw->vname##_dirty = 0;}
1008 VCREATE_FUNCS(brightness)
1009 VCREATE_FUNCS(contrast)
1010 VCREATE_FUNCS(saturation)
1011 VCREATE_FUNCS(hue)
1012 VCREATE_FUNCS(volume)
1013 VCREATE_FUNCS(balance)
1014 VCREATE_FUNCS(bass)
1015 VCREATE_FUNCS(treble)
1016 VCREATE_FUNCS(mute)
1017 VCREATE_FUNCS(cropl)
1018 VCREATE_FUNCS(cropt)
1019 VCREATE_FUNCS(cropw)
1020 VCREATE_FUNCS(croph)
1021 VCREATE_FUNCS(audiomode)
1022 VCREATE_FUNCS(res_hor)
1023 VCREATE_FUNCS(res_ver)
1024 VCREATE_FUNCS(srate)
1026 /* Table definition of all controls which can be manipulated */
1027 static const struct pvr2_ctl_info control_defs[] = {
1029 .v4l_id = V4L2_CID_BRIGHTNESS,
1030 .desc = "Brightness",
1031 .name = "brightness",
1032 .default_value = 128,
1033 DEFREF(brightness),
1034 DEFINT(0,255),
1036 .v4l_id = V4L2_CID_CONTRAST,
1037 .desc = "Contrast",
1038 .name = "contrast",
1039 .default_value = 68,
1040 DEFREF(contrast),
1041 DEFINT(0,127),
1043 .v4l_id = V4L2_CID_SATURATION,
1044 .desc = "Saturation",
1045 .name = "saturation",
1046 .default_value = 64,
1047 DEFREF(saturation),
1048 DEFINT(0,127),
1050 .v4l_id = V4L2_CID_HUE,
1051 .desc = "Hue",
1052 .name = "hue",
1053 .default_value = 0,
1054 DEFREF(hue),
1055 DEFINT(-128,127),
1057 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1058 .desc = "Volume",
1059 .name = "volume",
1060 .default_value = 62000,
1061 DEFREF(volume),
1062 DEFINT(0,65535),
1064 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1065 .desc = "Balance",
1066 .name = "balance",
1067 .default_value = 0,
1068 DEFREF(balance),
1069 DEFINT(-32768,32767),
1071 .v4l_id = V4L2_CID_AUDIO_BASS,
1072 .desc = "Bass",
1073 .name = "bass",
1074 .default_value = 0,
1075 DEFREF(bass),
1076 DEFINT(-32768,32767),
1078 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1079 .desc = "Treble",
1080 .name = "treble",
1081 .default_value = 0,
1082 DEFREF(treble),
1083 DEFINT(-32768,32767),
1085 .v4l_id = V4L2_CID_AUDIO_MUTE,
1086 .desc = "Mute",
1087 .name = "mute",
1088 .default_value = 0,
1089 DEFREF(mute),
1090 DEFBOOL,
1091 }, {
1092 .desc = "Capture crop left margin",
1093 .name = "crop_left",
1094 .internal_id = PVR2_CID_CROPL,
1095 .default_value = 0,
1096 DEFREF(cropl),
1097 DEFINT(-129, 340),
1098 .get_min_value = ctrl_cropl_min_get,
1099 .get_max_value = ctrl_cropl_max_get,
1100 .get_def_value = ctrl_get_cropcapdl,
1101 }, {
1102 .desc = "Capture crop top margin",
1103 .name = "crop_top",
1104 .internal_id = PVR2_CID_CROPT,
1105 .default_value = 0,
1106 DEFREF(cropt),
1107 DEFINT(-35, 544),
1108 .get_min_value = ctrl_cropt_min_get,
1109 .get_max_value = ctrl_cropt_max_get,
1110 .get_def_value = ctrl_get_cropcapdt,
1111 }, {
1112 .desc = "Capture crop width",
1113 .name = "crop_width",
1114 .internal_id = PVR2_CID_CROPW,
1115 .default_value = 720,
1116 DEFREF(cropw),
1117 .get_max_value = ctrl_cropw_max_get,
1118 .get_def_value = ctrl_get_cropcapdw,
1119 }, {
1120 .desc = "Capture crop height",
1121 .name = "crop_height",
1122 .internal_id = PVR2_CID_CROPH,
1123 .default_value = 480,
1124 DEFREF(croph),
1125 .get_max_value = ctrl_croph_max_get,
1126 .get_def_value = ctrl_get_cropcapdh,
1127 }, {
1128 .desc = "Capture capability pixel aspect numerator",
1129 .name = "cropcap_pixel_numerator",
1130 .internal_id = PVR2_CID_CROPCAPPAN,
1131 .get_value = ctrl_get_cropcappan,
1132 }, {
1133 .desc = "Capture capability pixel aspect denominator",
1134 .name = "cropcap_pixel_denominator",
1135 .internal_id = PVR2_CID_CROPCAPPAD,
1136 .get_value = ctrl_get_cropcappad,
1137 }, {
1138 .desc = "Capture capability bounds top",
1139 .name = "cropcap_bounds_top",
1140 .internal_id = PVR2_CID_CROPCAPBT,
1141 .get_value = ctrl_get_cropcapbt,
1142 }, {
1143 .desc = "Capture capability bounds left",
1144 .name = "cropcap_bounds_left",
1145 .internal_id = PVR2_CID_CROPCAPBL,
1146 .get_value = ctrl_get_cropcapbl,
1147 }, {
1148 .desc = "Capture capability bounds width",
1149 .name = "cropcap_bounds_width",
1150 .internal_id = PVR2_CID_CROPCAPBW,
1151 .get_value = ctrl_get_cropcapbw,
1152 }, {
1153 .desc = "Capture capability bounds height",
1154 .name = "cropcap_bounds_height",
1155 .internal_id = PVR2_CID_CROPCAPBH,
1156 .get_value = ctrl_get_cropcapbh,
1158 .desc = "Video Source",
1159 .name = "input",
1160 .internal_id = PVR2_CID_INPUT,
1161 .default_value = PVR2_CVAL_INPUT_TV,
1162 .check_value = ctrl_check_input,
1163 DEFREF(input),
1164 DEFENUM(control_values_input),
1166 .desc = "Audio Mode",
1167 .name = "audio_mode",
1168 .internal_id = PVR2_CID_AUDIOMODE,
1169 .default_value = V4L2_TUNER_MODE_STEREO,
1170 DEFREF(audiomode),
1171 DEFENUM(control_values_audiomode),
1173 .desc = "Horizontal capture resolution",
1174 .name = "resolution_hor",
1175 .internal_id = PVR2_CID_HRES,
1176 .default_value = 720,
1177 DEFREF(res_hor),
1178 DEFINT(19,720),
1180 .desc = "Vertical capture resolution",
1181 .name = "resolution_ver",
1182 .internal_id = PVR2_CID_VRES,
1183 .default_value = 480,
1184 DEFREF(res_ver),
1185 DEFINT(17,576),
1186 /* Hook in check for video standard and adjust maximum
1187 depending on the standard. */
1188 .get_max_value = ctrl_vres_max_get,
1189 .get_min_value = ctrl_vres_min_get,
1191 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1192 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1193 .desc = "Audio Sampling Frequency",
1194 .name = "srate",
1195 DEFREF(srate),
1196 DEFENUM(control_values_srate),
1198 .desc = "Tuner Frequency (Hz)",
1199 .name = "frequency",
1200 .internal_id = PVR2_CID_FREQUENCY,
1201 .default_value = 0,
1202 .set_value = ctrl_freq_set,
1203 .get_value = ctrl_freq_get,
1204 .is_dirty = ctrl_freq_is_dirty,
1205 .clear_dirty = ctrl_freq_clear_dirty,
1206 DEFINT(0,0),
1207 /* Hook in check for input value (tv/radio) and adjust
1208 max/min values accordingly */
1209 .get_max_value = ctrl_freq_max_get,
1210 .get_min_value = ctrl_freq_min_get,
1212 .desc = "Channel",
1213 .name = "channel",
1214 .set_value = ctrl_channel_set,
1215 .get_value = ctrl_channel_get,
1216 DEFINT(0,FREQTABLE_SIZE),
1218 .desc = "Channel Program Frequency",
1219 .name = "freq_table_value",
1220 .set_value = ctrl_channelfreq_set,
1221 .get_value = ctrl_channelfreq_get,
1222 DEFINT(0,0),
1223 /* Hook in check for input value (tv/radio) and adjust
1224 max/min values accordingly */
1225 .get_max_value = ctrl_freq_max_get,
1226 .get_min_value = ctrl_freq_min_get,
1228 .desc = "Channel Program ID",
1229 .name = "freq_table_channel",
1230 .set_value = ctrl_channelprog_set,
1231 .get_value = ctrl_channelprog_get,
1232 DEFINT(0,FREQTABLE_SIZE),
1234 .desc = "Streaming Enabled",
1235 .name = "streaming_enabled",
1236 .get_value = ctrl_streamingenabled_get,
1237 DEFBOOL,
1239 .desc = "USB Speed",
1240 .name = "usb_speed",
1241 .get_value = ctrl_hsm_get,
1242 DEFENUM(control_values_hsm),
1244 .desc = "Master State",
1245 .name = "master_state",
1246 .get_value = ctrl_masterstate_get,
1247 DEFENUM(pvr2_state_names),
1249 .desc = "Signal Present",
1250 .name = "signal_present",
1251 .get_value = ctrl_signal_get,
1252 DEFINT(0,65535),
1254 .desc = "Audio Modes Present",
1255 .name = "audio_modes_present",
1256 .get_value = ctrl_audio_modes_present_get,
1257 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1258 v4l. Nothing outside of this module cares about this,
1259 but I reuse it in order to also reuse the
1260 control_values_audiomode string table. */
1261 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1262 (1 << V4L2_TUNER_MODE_STEREO)|
1263 (1 << V4L2_TUNER_MODE_LANG1)|
1264 (1 << V4L2_TUNER_MODE_LANG2)),
1265 control_values_audiomode),
1267 .desc = "Video Standards Available Mask",
1268 .name = "video_standard_mask_available",
1269 .internal_id = PVR2_CID_STDAVAIL,
1270 .skip_init = !0,
1271 .get_value = ctrl_stdavail_get,
1272 .set_value = ctrl_stdavail_set,
1273 .val_to_sym = ctrl_std_val_to_sym,
1274 .sym_to_val = ctrl_std_sym_to_val,
1275 .type = pvr2_ctl_bitmask,
1277 .desc = "Video Standards In Use Mask",
1278 .name = "video_standard_mask_active",
1279 .internal_id = PVR2_CID_STDCUR,
1280 .skip_init = !0,
1281 .get_value = ctrl_stdcur_get,
1282 .set_value = ctrl_stdcur_set,
1283 .is_dirty = ctrl_stdcur_is_dirty,
1284 .clear_dirty = ctrl_stdcur_clear_dirty,
1285 .val_to_sym = ctrl_std_val_to_sym,
1286 .sym_to_val = ctrl_std_sym_to_val,
1287 .type = pvr2_ctl_bitmask,
1289 .desc = "Video Standard Name",
1290 .name = "video_standard",
1291 .internal_id = PVR2_CID_STDENUM,
1292 .skip_init = !0,
1293 .get_value = ctrl_stdenumcur_get,
1294 .set_value = ctrl_stdenumcur_set,
1295 .is_dirty = ctrl_stdenumcur_is_dirty,
1296 .clear_dirty = ctrl_stdenumcur_clear_dirty,
1297 .type = pvr2_ctl_enum,
1301 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1304 const char *pvr2_config_get_name(enum pvr2_config cfg)
1306 switch (cfg) {
1307 case pvr2_config_empty: return "empty";
1308 case pvr2_config_mpeg: return "mpeg";
1309 case pvr2_config_vbi: return "vbi";
1310 case pvr2_config_pcm: return "pcm";
1311 case pvr2_config_rawvideo: return "raw video";
1313 return "<unknown>";
1317 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1319 return hdw->usb_dev;
1323 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1325 return hdw->serial_number;
1329 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1331 return hdw->bus_info;
1335 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1337 return hdw->identifier;
1341 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1343 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1346 /* Set the currently tuned frequency and account for all possible
1347 driver-core side effects of this action. */
1348 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1350 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1351 if (hdw->freqSelector) {
1352 /* Swing over to radio frequency selection */
1353 hdw->freqSelector = 0;
1354 hdw->freqDirty = !0;
1356 if (hdw->freqValRadio != val) {
1357 hdw->freqValRadio = val;
1358 hdw->freqSlotRadio = 0;
1359 hdw->freqDirty = !0;
1361 } else {
1362 if (!(hdw->freqSelector)) {
1363 /* Swing over to television frequency selection */
1364 hdw->freqSelector = 1;
1365 hdw->freqDirty = !0;
1367 if (hdw->freqValTelevision != val) {
1368 hdw->freqValTelevision = val;
1369 hdw->freqSlotTelevision = 0;
1370 hdw->freqDirty = !0;
1375 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1377 return hdw->unit_number;
1381 /* Attempt to locate one of the given set of files. Messages are logged
1382 appropriate to what has been found. The return value will be 0 or
1383 greater on success (it will be the index of the file name found) and
1384 fw_entry will be filled in. Otherwise a negative error is returned on
1385 failure. If the return value is -ENOENT then no viable firmware file
1386 could be located. */
1387 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1388 const struct firmware **fw_entry,
1389 const char *fwtypename,
1390 unsigned int fwcount,
1391 const char *fwnames[])
1393 unsigned int idx;
1394 int ret = -EINVAL;
1395 for (idx = 0; idx < fwcount; idx++) {
1396 ret = request_firmware(fw_entry,
1397 fwnames[idx],
1398 &hdw->usb_dev->dev);
1399 if (!ret) {
1400 trace_firmware("Located %s firmware: %s;"
1401 " uploading...",
1402 fwtypename,
1403 fwnames[idx]);
1404 return idx;
1406 if (ret == -ENOENT) continue;
1407 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1408 "request_firmware fatal error with code=%d",ret);
1409 return ret;
1411 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1412 "***WARNING***"
1413 " Device %s firmware"
1414 " seems to be missing.",
1415 fwtypename);
1416 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1417 "Did you install the pvrusb2 firmware files"
1418 " in their proper location?");
1419 if (fwcount == 1) {
1420 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1421 "request_firmware unable to locate %s file %s",
1422 fwtypename,fwnames[0]);
1423 } else {
1424 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1425 "request_firmware unable to locate"
1426 " one of the following %s files:",
1427 fwtypename);
1428 for (idx = 0; idx < fwcount; idx++) {
1429 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1430 "request_firmware: Failed to find %s",
1431 fwnames[idx]);
1434 return ret;
1439 * pvr2_upload_firmware1().
1441 * Send the 8051 firmware to the device. After the upload, arrange for
1442 * device to re-enumerate.
1444 * NOTE : the pointer to the firmware data given by request_firmware()
1445 * is not suitable for an usb transaction.
1448 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1450 const struct firmware *fw_entry = NULL;
1451 void *fw_ptr;
1452 unsigned int pipe;
1453 unsigned int fwsize;
1454 int ret;
1455 u16 address;
1457 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1458 hdw->fw1_state = FW1_STATE_OK;
1459 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1460 "Connected device type defines"
1461 " no firmware to upload; ignoring firmware");
1462 return -ENOTTY;
1465 hdw->fw1_state = FW1_STATE_FAILED; // default result
1467 trace_firmware("pvr2_upload_firmware1");
1469 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1470 hdw->hdw_desc->fx2_firmware.cnt,
1471 hdw->hdw_desc->fx2_firmware.lst);
1472 if (ret < 0) {
1473 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1474 return ret;
1477 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1479 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1480 fwsize = fw_entry->size;
1482 if ((fwsize != 0x2000) &&
1483 (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) {
1484 if (hdw->hdw_desc->flag_fx2_16kb) {
1485 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1486 "Wrong fx2 firmware size"
1487 " (expected 8192 or 16384, got %u)",
1488 fwsize);
1489 } else {
1490 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1491 "Wrong fx2 firmware size"
1492 " (expected 8192, got %u)",
1493 fwsize);
1495 release_firmware(fw_entry);
1496 return -ENOMEM;
1499 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1500 if (fw_ptr == NULL){
1501 release_firmware(fw_entry);
1502 return -ENOMEM;
1505 /* We have to hold the CPU during firmware upload. */
1506 pvr2_hdw_cpureset_assert(hdw,1);
1508 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1509 chunk. */
1511 ret = 0;
1512 for (address = 0; address < fwsize; address += 0x800) {
1513 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1514 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1515 0, fw_ptr, 0x800, HZ);
1518 trace_firmware("Upload done, releasing device's CPU");
1520 /* Now release the CPU. It will disconnect and reconnect later. */
1521 pvr2_hdw_cpureset_assert(hdw,0);
1523 kfree(fw_ptr);
1524 release_firmware(fw_entry);
1526 trace_firmware("Upload done (%d bytes sent)",ret);
1528 /* We should have written fwsize bytes */
1529 if (ret == fwsize) {
1530 hdw->fw1_state = FW1_STATE_RELOAD;
1531 return 0;
1534 return -EIO;
1539 * pvr2_upload_firmware2()
1541 * This uploads encoder firmware on endpoint 2.
1545 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1547 const struct firmware *fw_entry = NULL;
1548 void *fw_ptr;
1549 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1550 int actual_length;
1551 int ret = 0;
1552 int fwidx;
1553 static const char *fw_files[] = {
1554 CX2341X_FIRM_ENC_FILENAME,
1557 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1558 return 0;
1561 trace_firmware("pvr2_upload_firmware2");
1563 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1564 ARRAY_SIZE(fw_files), fw_files);
1565 if (ret < 0) return ret;
1566 fwidx = ret;
1567 ret = 0;
1568 /* Since we're about to completely reinitialize the encoder,
1569 invalidate our cached copy of its configuration state. Next
1570 time we configure the encoder, then we'll fully configure it. */
1571 hdw->enc_cur_valid = 0;
1573 /* Encoder is about to be reset so note that as far as we're
1574 concerned now, the encoder has never been run. */
1575 del_timer_sync(&hdw->encoder_run_timer);
1576 if (hdw->state_encoder_runok) {
1577 hdw->state_encoder_runok = 0;
1578 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1581 /* First prepare firmware loading */
1582 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1583 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1584 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1585 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1586 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1587 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1588 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1589 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1590 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1591 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1592 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1593 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1594 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1595 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1596 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1597 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1598 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1599 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1601 if (ret) {
1602 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1603 "firmware2 upload prep failed, ret=%d",ret);
1604 release_firmware(fw_entry);
1605 goto done;
1608 /* Now send firmware */
1610 fw_len = fw_entry->size;
1612 if (fw_len % sizeof(u32)) {
1613 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1614 "size of %s firmware"
1615 " must be a multiple of %zu bytes",
1616 fw_files[fwidx],sizeof(u32));
1617 release_firmware(fw_entry);
1618 ret = -EINVAL;
1619 goto done;
1622 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1623 if (fw_ptr == NULL){
1624 release_firmware(fw_entry);
1625 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1626 "failed to allocate memory for firmware2 upload");
1627 ret = -ENOMEM;
1628 goto done;
1631 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1633 fw_done = 0;
1634 for (fw_done = 0; fw_done < fw_len;) {
1635 bcnt = fw_len - fw_done;
1636 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1637 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1638 /* Usbsnoop log shows that we must swap bytes... */
1639 /* Some background info: The data being swapped here is a
1640 firmware image destined for the mpeg encoder chip that
1641 lives at the other end of a USB endpoint. The encoder
1642 chip always talks in 32 bit chunks and its storage is
1643 organized into 32 bit words. However from the file
1644 system to the encoder chip everything is purely a byte
1645 stream. The firmware file's contents are always 32 bit
1646 swapped from what the encoder expects. Thus the need
1647 always exists to swap the bytes regardless of the endian
1648 type of the host processor and therefore swab32() makes
1649 the most sense. */
1650 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1651 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1653 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1654 &actual_length, HZ);
1655 ret |= (actual_length != bcnt);
1656 if (ret) break;
1657 fw_done += bcnt;
1660 trace_firmware("upload of %s : %i / %i ",
1661 fw_files[fwidx],fw_done,fw_len);
1663 kfree(fw_ptr);
1664 release_firmware(fw_entry);
1666 if (ret) {
1667 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1668 "firmware2 upload transfer failure");
1669 goto done;
1672 /* Finish upload */
1674 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1675 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1676 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1678 if (ret) {
1679 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1680 "firmware2 upload post-proc failure");
1683 done:
1684 if (hdw->hdw_desc->signal_routing_scheme ==
1685 PVR2_ROUTING_SCHEME_GOTVIEW) {
1686 /* Ensure that GPIO 11 is set to output for GOTVIEW
1687 hardware. */
1688 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1690 return ret;
1694 static const char *pvr2_get_state_name(unsigned int st)
1696 if (st < ARRAY_SIZE(pvr2_state_names)) {
1697 return pvr2_state_names[st];
1699 return "???";
1702 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1704 /* Even though we really only care about the video decoder chip at
1705 this point, we'll broadcast stream on/off to all sub-devices
1706 anyway, just in case somebody else wants to hear the
1707 command... */
1708 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
1709 (enablefl ? "on" : "off"));
1710 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1711 v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl);
1712 if (hdw->decoder_client_id) {
1713 /* We get here if the encoder has been noticed. Otherwise
1714 we'll issue a warning to the user (which should
1715 normally never happen). */
1716 return 0;
1718 if (!hdw->flag_decoder_missed) {
1719 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1720 "WARNING: No decoder present");
1721 hdw->flag_decoder_missed = !0;
1722 trace_stbit("flag_decoder_missed",
1723 hdw->flag_decoder_missed);
1725 return -EIO;
1729 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1731 return hdw->master_state;
1735 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1737 if (!hdw->flag_tripped) return 0;
1738 hdw->flag_tripped = 0;
1739 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1740 "Clearing driver error statuss");
1741 return !0;
1745 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1747 int fl;
1748 LOCK_TAKE(hdw->big_lock); do {
1749 fl = pvr2_hdw_untrip_unlocked(hdw);
1750 } while (0); LOCK_GIVE(hdw->big_lock);
1751 if (fl) pvr2_hdw_state_sched(hdw);
1752 return 0;
1758 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1760 return hdw->state_pipeline_req != 0;
1764 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1766 int ret,st;
1767 LOCK_TAKE(hdw->big_lock); do {
1768 pvr2_hdw_untrip_unlocked(hdw);
1769 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1770 hdw->state_pipeline_req = enable_flag != 0;
1771 pvr2_trace(PVR2_TRACE_START_STOP,
1772 "/*--TRACE_STREAM--*/ %s",
1773 enable_flag ? "enable" : "disable");
1775 pvr2_hdw_state_sched(hdw);
1776 } while (0); LOCK_GIVE(hdw->big_lock);
1777 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1778 if (enable_flag) {
1779 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1780 if (st != PVR2_STATE_READY) return -EIO;
1781 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1784 return 0;
1788 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1790 int fl;
1791 LOCK_TAKE(hdw->big_lock);
1792 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1793 hdw->desired_stream_type = config;
1794 hdw->state_pipeline_config = 0;
1795 trace_stbit("state_pipeline_config",
1796 hdw->state_pipeline_config);
1797 pvr2_hdw_state_sched(hdw);
1799 LOCK_GIVE(hdw->big_lock);
1800 if (fl) return 0;
1801 return pvr2_hdw_wait(hdw,0);
1805 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1807 int unit_number = hdw->unit_number;
1808 int tp = -1;
1809 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1810 tp = tuner[unit_number];
1812 if (tp < 0) return -EINVAL;
1813 hdw->tuner_type = tp;
1814 hdw->tuner_updated = !0;
1815 return 0;
1819 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1821 int unit_number = hdw->unit_number;
1822 int tp = 0;
1823 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1824 tp = video_std[unit_number];
1825 if (tp) return tp;
1827 return 0;
1831 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1833 int unit_number = hdw->unit_number;
1834 int tp = 0;
1835 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1836 tp = tolerance[unit_number];
1838 return tp;
1842 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1844 /* Try a harmless request to fetch the eeprom's address over
1845 endpoint 1. See what happens. Only the full FX2 image can
1846 respond to this. If this probe fails then likely the FX2
1847 firmware needs be loaded. */
1848 int result;
1849 LOCK_TAKE(hdw->ctl_lock); do {
1850 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1851 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1852 hdw->cmd_buffer,1,
1853 hdw->cmd_buffer,1);
1854 if (result < 0) break;
1855 } while(0); LOCK_GIVE(hdw->ctl_lock);
1856 if (result) {
1857 pvr2_trace(PVR2_TRACE_INIT,
1858 "Probe of device endpoint 1 result status %d",
1859 result);
1860 } else {
1861 pvr2_trace(PVR2_TRACE_INIT,
1862 "Probe of device endpoint 1 succeeded");
1864 return result == 0;
1867 struct pvr2_std_hack {
1868 v4l2_std_id pat; /* Pattern to match */
1869 v4l2_std_id msk; /* Which bits we care about */
1870 v4l2_std_id std; /* What additional standards or default to set */
1873 /* This data structure labels specific combinations of standards from
1874 tveeprom that we'll try to recognize. If we recognize one, then assume
1875 a specified default standard to use. This is here because tveeprom only
1876 tells us about available standards not the intended default standard (if
1877 any) for the device in question. We guess the default based on what has
1878 been reported as available. Note that this is only for guessing a
1879 default - which can always be overridden explicitly - and if the user
1880 has otherwise named a default then that default will always be used in
1881 place of this table. */
1882 static const struct pvr2_std_hack std_eeprom_maps[] = {
1883 { /* PAL(B/G) */
1884 .pat = V4L2_STD_B|V4L2_STD_GH,
1885 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1887 { /* NTSC(M) */
1888 .pat = V4L2_STD_MN,
1889 .std = V4L2_STD_NTSC_M,
1891 { /* PAL(I) */
1892 .pat = V4L2_STD_PAL_I,
1893 .std = V4L2_STD_PAL_I,
1895 { /* SECAM(L/L') */
1896 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1897 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1899 { /* PAL(D/D1/K) */
1900 .pat = V4L2_STD_DK,
1901 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1905 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1907 char buf[40];
1908 unsigned int bcnt;
1909 v4l2_std_id std1,std2,std3;
1911 std1 = get_default_standard(hdw);
1912 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1914 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1915 pvr2_trace(PVR2_TRACE_STD,
1916 "Supported video standard(s) reported available"
1917 " in hardware: %.*s",
1918 bcnt,buf);
1920 hdw->std_mask_avail = hdw->std_mask_eeprom;
1922 std2 = (std1|std3) & ~hdw->std_mask_avail;
1923 if (std2) {
1924 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1925 pvr2_trace(PVR2_TRACE_STD,
1926 "Expanding supported video standards"
1927 " to include: %.*s",
1928 bcnt,buf);
1929 hdw->std_mask_avail |= std2;
1932 pvr2_hdw_internal_set_std_avail(hdw);
1934 if (std1) {
1935 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1936 pvr2_trace(PVR2_TRACE_STD,
1937 "Initial video standard forced to %.*s",
1938 bcnt,buf);
1939 hdw->std_mask_cur = std1;
1940 hdw->std_dirty = !0;
1941 pvr2_hdw_internal_find_stdenum(hdw);
1942 return;
1944 if (std3) {
1945 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1946 pvr2_trace(PVR2_TRACE_STD,
1947 "Initial video standard"
1948 " (determined by device type): %.*s",bcnt,buf);
1949 hdw->std_mask_cur = std3;
1950 hdw->std_dirty = !0;
1951 pvr2_hdw_internal_find_stdenum(hdw);
1952 return;
1956 unsigned int idx;
1957 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1958 if (std_eeprom_maps[idx].msk ?
1959 ((std_eeprom_maps[idx].pat ^
1960 hdw->std_mask_eeprom) &
1961 std_eeprom_maps[idx].msk) :
1962 (std_eeprom_maps[idx].pat !=
1963 hdw->std_mask_eeprom)) continue;
1964 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1965 std_eeprom_maps[idx].std);
1966 pvr2_trace(PVR2_TRACE_STD,
1967 "Initial video standard guessed as %.*s",
1968 bcnt,buf);
1969 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1970 hdw->std_dirty = !0;
1971 pvr2_hdw_internal_find_stdenum(hdw);
1972 return;
1976 if (hdw->std_enum_cnt > 1) {
1977 // Autoselect the first listed standard
1978 hdw->std_enum_cur = 1;
1979 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1980 hdw->std_dirty = !0;
1981 pvr2_trace(PVR2_TRACE_STD,
1982 "Initial video standard auto-selected to %s",
1983 hdw->std_defs[hdw->std_enum_cur-1].name);
1984 return;
1987 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1988 "Unable to select a viable initial video standard");
1992 static unsigned int pvr2_copy_i2c_addr_list(
1993 unsigned short *dst, const unsigned char *src,
1994 unsigned int dst_max)
1996 unsigned int cnt = 0;
1997 if (!src) return 0;
1998 while (src[cnt] && (cnt + 1) < dst_max) {
1999 dst[cnt] = src[cnt];
2000 cnt++;
2002 dst[cnt] = I2C_CLIENT_END;
2003 return cnt;
2007 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw)
2010 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
2011 for cx25840 causes that module to correctly set up its video
2012 scaling. This is really a problem in the cx25840 module itself,
2013 but we work around it here. The problem has not been seen in
2014 ivtv because there VBI is supported and set up. We don't do VBI
2015 here (at least not yet) and thus we never attempted to even set
2016 it up.
2018 struct v4l2_format fmt;
2019 if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) {
2020 /* We're not using a cx25840 so don't enable the hack */
2021 return;
2024 pvr2_trace(PVR2_TRACE_INIT,
2025 "Module ID %u:"
2026 " Executing cx25840 VBI hack",
2027 hdw->decoder_client_id);
2028 memset(&fmt, 0, sizeof(fmt));
2029 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
2030 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
2031 video, s_fmt, &fmt);
2035 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
2036 const struct pvr2_device_client_desc *cd)
2038 const char *fname;
2039 unsigned char mid;
2040 struct v4l2_subdev *sd;
2041 unsigned int i2ccnt;
2042 const unsigned char *p;
2043 /* Arbitrary count - max # i2c addresses we will probe */
2044 unsigned short i2caddr[25];
2046 mid = cd->module_id;
2047 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
2048 if (!fname) {
2049 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2050 "Module ID %u for device %s has no name?"
2051 " The driver might have a configuration problem.",
2052 mid,
2053 hdw->hdw_desc->description);
2054 return -EINVAL;
2056 pvr2_trace(PVR2_TRACE_INIT,
2057 "Module ID %u (%s) for device %s being loaded...",
2058 mid, fname,
2059 hdw->hdw_desc->description);
2061 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
2062 ARRAY_SIZE(i2caddr));
2063 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
2064 module_i2c_addresses[mid] : NULL) != NULL)) {
2065 /* Second chance: Try default i2c address list */
2066 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2067 ARRAY_SIZE(i2caddr));
2068 if (i2ccnt) {
2069 pvr2_trace(PVR2_TRACE_INIT,
2070 "Module ID %u:"
2071 " Using default i2c address list",
2072 mid);
2076 if (!i2ccnt) {
2077 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2078 "Module ID %u (%s) for device %s:"
2079 " No i2c addresses."
2080 " The driver might have a configuration problem.",
2081 mid, fname, hdw->hdw_desc->description);
2082 return -EINVAL;
2085 /* Note how the 2nd and 3rd arguments are the same for
2086 * v4l2_i2c_new_subdev(). Why?
2087 * Well the 2nd argument is the module name to load, while the 3rd
2088 * argument is documented in the framework as being the "chipid" -
2089 * and every other place where I can find examples of this, the
2090 * "chipid" appears to just be the module name again. So here we
2091 * just do the same thing. */
2092 if (i2ccnt == 1) {
2093 pvr2_trace(PVR2_TRACE_INIT,
2094 "Module ID %u:"
2095 " Setting up with specified i2c address 0x%x",
2096 mid, i2caddr[0]);
2097 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2098 fname, fname,
2099 i2caddr[0], NULL);
2100 } else {
2101 pvr2_trace(PVR2_TRACE_INIT,
2102 "Module ID %u:"
2103 " Setting up with address probe list",
2104 mid);
2105 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2106 fname, fname,
2107 0, i2caddr);
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;
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;
2124 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
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;
2136 return 0;
2140 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2142 unsigned int idx;
2143 const struct pvr2_string_table *cm;
2144 const struct pvr2_device_client_table *ct;
2145 int okFl = !0;
2147 cm = &hdw->hdw_desc->client_modules;
2148 for (idx = 0; idx < cm->cnt; idx++) {
2149 request_module(cm->lst[idx]);
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;
2156 if (!okFl) {
2157 hdw->flag_modulefail = !0;
2158 pvr2_hdw_render_useless(hdw);
2163 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
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");
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");
2190 if (reloadFl) {
2191 if (pvr2_upload_firmware1(hdw) != 0) {
2192 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2193 "Failure uploading firmware1");
2195 return;
2198 hdw->fw1_state = FW1_STATE_OK;
2200 if (!pvr2_hdw_dev_ok(hdw)) return;
2202 hdw->force_dirty = !0;
2204 if (!hdw->hdw_desc->flag_no_powerup) {
2205 pvr2_hdw_cmd_powerup(hdw);
2206 if (!pvr2_hdw_dev_ok(hdw)) return;
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));
2217 // This step MUST happen after the earlier powerup step.
2218 pvr2_i2c_core_init(hdw);
2219 if (!pvr2_hdw_dev_ok(hdw)) return;
2221 pvr2_hdw_load_modules(hdw);
2222 if (!pvr2_hdw_dev_ok(hdw)) return;
2224 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
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);
2233 pvr2_hdw_cx25840_vbi_hack(hdw);
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. */
2240 hdw->freqValTelevision = default_tv_freq;
2241 hdw->freqValRadio = default_radio_freq;
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).
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;
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;
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-??");
2276 hdw->identifier[idx] = 0;
2278 pvr2_hdw_setup_std(hdw);
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);
2287 if (!pvr2_hdw_dev_ok(hdw)) return;
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);
2296 pvr2_hdw_commit_setup(hdw);
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);
2310 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2311 PVR2_VID_ENDPOINT,idx);
2314 if (!pvr2_hdw_dev_ok(hdw)) return;
2316 hdw->flag_init_ok = !0;
2318 pvr2_hdw_state_sched(hdw);
2322 /* Set up the structure and attempt to put the device into a usable state.
2323 This can be a time-consuming operation, which is why it is not done
2324 internally as part of the create() step. */
2325 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
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;
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;
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;
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;
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.");
2398 } while (0);
2399 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2403 /* Perform second stage initialization. Set callback pointer first so that
2404 we can avoid a possible initialization race (if the kernel thread runs
2405 before the callback has been set). */
2406 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2407 void (*callback_func)(void *),
2408 void *callback_data)
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;
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;
2428 /* Create, set up, and return a structure for interacting with the
2429 underlying hardware. */
2430 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2431 const struct usb_device_id *devid)
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;
2443 usb_dev = interface_to_usbdev(intf);
2445 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
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;
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) goto fail;
2464 init_timer(&hdw->quiescent_timer);
2465 hdw->quiescent_timer.data = (unsigned long)hdw;
2466 hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
2468 init_timer(&hdw->decoder_stabilization_timer);
2469 hdw->decoder_stabilization_timer.data = (unsigned long)hdw;
2470 hdw->decoder_stabilization_timer.function =
2471 pvr2_hdw_decoder_stabilization_timeout;
2473 init_timer(&hdw->encoder_wait_timer);
2474 hdw->encoder_wait_timer.data = (unsigned long)hdw;
2475 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
2477 init_timer(&hdw->encoder_run_timer);
2478 hdw->encoder_run_timer.data = (unsigned long)hdw;
2479 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
2481 hdw->master_state = PVR2_STATE_DEAD;
2483 init_waitqueue_head(&hdw->state_wait_data);
2485 hdw->tuner_signal_stale = !0;
2486 cx2341x_fill_defaults(&hdw->enc_ctl_state);
2488 /* Calculate which inputs are OK */
2489 m = 0;
2490 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2491 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2492 m |= 1 << PVR2_CVAL_INPUT_DTV;
2494 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2495 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2496 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2497 hdw->input_avail_mask = m;
2498 hdw->input_allowed_mask = hdw->input_avail_mask;
2500 /* If not a hybrid device, pathway_state never changes. So
2501 initialize it here to what it should forever be. */
2502 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2503 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2504 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2505 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2508 hdw->control_cnt = CTRLDEF_COUNT;
2509 hdw->control_cnt += MPEGDEF_COUNT;
2510 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
2511 GFP_KERNEL);
2512 if (!hdw->controls) goto fail;
2513 hdw->hdw_desc = hdw_desc;
2514 hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
2515 for (idx = 0; idx < hdw->control_cnt; idx++) {
2516 cptr = hdw->controls + idx;
2517 cptr->hdw = hdw;
2519 for (idx = 0; idx < 32; idx++) {
2520 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2522 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2523 cptr = hdw->controls + idx;
2524 cptr->info = control_defs+idx;
2527 /* Ensure that default input choice is a valid one. */
2528 m = hdw->input_avail_mask;
2529 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2530 if (!((1 << idx) & m)) continue;
2531 hdw->input_val = idx;
2532 break;
2535 /* Define and configure additional controls from cx2341x module. */
2536 hdw->mpeg_ctrl_info = kzalloc(
2537 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
2538 if (!hdw->mpeg_ctrl_info) goto fail;
2539 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2540 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2541 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2542 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2543 ciptr->name = mpeg_ids[idx].strid;
2544 ciptr->v4l_id = mpeg_ids[idx].id;
2545 ciptr->skip_init = !0;
2546 ciptr->get_value = ctrl_cx2341x_get;
2547 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2548 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2549 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2550 qctrl.id = ciptr->v4l_id;
2551 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2552 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2553 ciptr->set_value = ctrl_cx2341x_set;
2555 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2556 PVR2_CTLD_INFO_DESC_SIZE);
2557 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2558 ciptr->default_value = qctrl.default_value;
2559 switch (qctrl.type) {
2560 default:
2561 case V4L2_CTRL_TYPE_INTEGER:
2562 ciptr->type = pvr2_ctl_int;
2563 ciptr->def.type_int.min_value = qctrl.minimum;
2564 ciptr->def.type_int.max_value = qctrl.maximum;
2565 break;
2566 case V4L2_CTRL_TYPE_BOOLEAN:
2567 ciptr->type = pvr2_ctl_bool;
2568 break;
2569 case V4L2_CTRL_TYPE_MENU:
2570 ciptr->type = pvr2_ctl_enum;
2571 ciptr->def.type_enum.value_names =
2572 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2573 ciptr->v4l_id);
2574 for (cnt1 = 0;
2575 ciptr->def.type_enum.value_names[cnt1] != NULL;
2576 cnt1++) { }
2577 ciptr->def.type_enum.count = cnt1;
2578 break;
2580 cptr->info = ciptr;
2583 // Initialize video standard enum dynamic control
2584 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2585 if (cptr) {
2586 memcpy(&hdw->std_info_enum,cptr->info,
2587 sizeof(hdw->std_info_enum));
2588 cptr->info = &hdw->std_info_enum;
2591 // Initialize control data regarding video standard masks
2592 valid_std_mask = pvr2_std_get_usable();
2593 for (idx = 0; idx < 32; idx++) {
2594 if (!(valid_std_mask & (1 << idx))) continue;
2595 cnt1 = pvr2_std_id_to_str(
2596 hdw->std_mask_names[idx],
2597 sizeof(hdw->std_mask_names[idx])-1,
2598 1 << idx);
2599 hdw->std_mask_names[idx][cnt1] = 0;
2601 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2602 if (cptr) {
2603 memcpy(&hdw->std_info_avail,cptr->info,
2604 sizeof(hdw->std_info_avail));
2605 cptr->info = &hdw->std_info_avail;
2606 hdw->std_info_avail.def.type_bitmask.bit_names =
2607 hdw->std_mask_ptrs;
2608 hdw->std_info_avail.def.type_bitmask.valid_bits =
2609 valid_std_mask;
2611 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2612 if (cptr) {
2613 memcpy(&hdw->std_info_cur,cptr->info,
2614 sizeof(hdw->std_info_cur));
2615 cptr->info = &hdw->std_info_cur;
2616 hdw->std_info_cur.def.type_bitmask.bit_names =
2617 hdw->std_mask_ptrs;
2618 hdw->std_info_avail.def.type_bitmask.valid_bits =
2619 valid_std_mask;
2622 hdw->cropcap_stale = !0;
2623 hdw->eeprom_addr = -1;
2624 hdw->unit_number = -1;
2625 hdw->v4l_minor_number_video = -1;
2626 hdw->v4l_minor_number_vbi = -1;
2627 hdw->v4l_minor_number_radio = -1;
2628 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2629 if (!hdw->ctl_write_buffer) goto fail;
2630 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2631 if (!hdw->ctl_read_buffer) goto fail;
2632 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2633 if (!hdw->ctl_write_urb) goto fail;
2634 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2635 if (!hdw->ctl_read_urb) goto fail;
2637 if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
2638 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2639 "Error registering with v4l core, giving up");
2640 goto fail;
2642 mutex_lock(&pvr2_unit_mtx); do {
2643 for (idx = 0; idx < PVR_NUM; idx++) {
2644 if (unit_pointers[idx]) continue;
2645 hdw->unit_number = idx;
2646 unit_pointers[idx] = hdw;
2647 break;
2649 } while (0); mutex_unlock(&pvr2_unit_mtx);
2651 cnt1 = 0;
2652 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2653 cnt1 += cnt2;
2654 if (hdw->unit_number >= 0) {
2655 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2656 ('a' + hdw->unit_number));
2657 cnt1 += cnt2;
2659 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2660 hdw->name[cnt1] = 0;
2662 hdw->workqueue = create_singlethread_workqueue(hdw->name);
2663 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2665 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2666 hdw->unit_number,hdw->name);
2668 hdw->tuner_type = -1;
2669 hdw->flag_ok = !0;
2671 hdw->usb_intf = intf;
2672 hdw->usb_dev = usb_dev;
2674 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2676 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2677 usb_set_interface(hdw->usb_dev,ifnum,0);
2679 mutex_init(&hdw->ctl_lock_mutex);
2680 mutex_init(&hdw->big_lock_mutex);
2682 return hdw;
2683 fail:
2684 if (hdw) {
2685 del_timer_sync(&hdw->quiescent_timer);
2686 del_timer_sync(&hdw->decoder_stabilization_timer);
2687 del_timer_sync(&hdw->encoder_run_timer);
2688 del_timer_sync(&hdw->encoder_wait_timer);
2689 if (hdw->workqueue) {
2690 flush_workqueue(hdw->workqueue);
2691 destroy_workqueue(hdw->workqueue);
2692 hdw->workqueue = NULL;
2694 usb_free_urb(hdw->ctl_read_urb);
2695 usb_free_urb(hdw->ctl_write_urb);
2696 kfree(hdw->ctl_read_buffer);
2697 kfree(hdw->ctl_write_buffer);
2698 kfree(hdw->controls);
2699 kfree(hdw->mpeg_ctrl_info);
2700 kfree(hdw->std_defs);
2701 kfree(hdw->std_enum_names);
2702 kfree(hdw);
2704 return NULL;
2708 /* Remove _all_ associations between this driver and the underlying USB
2709 layer. */
2710 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2712 if (hdw->flag_disconnected) return;
2713 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2714 if (hdw->ctl_read_urb) {
2715 usb_kill_urb(hdw->ctl_read_urb);
2716 usb_free_urb(hdw->ctl_read_urb);
2717 hdw->ctl_read_urb = NULL;
2719 if (hdw->ctl_write_urb) {
2720 usb_kill_urb(hdw->ctl_write_urb);
2721 usb_free_urb(hdw->ctl_write_urb);
2722 hdw->ctl_write_urb = NULL;
2724 if (hdw->ctl_read_buffer) {
2725 kfree(hdw->ctl_read_buffer);
2726 hdw->ctl_read_buffer = NULL;
2728 if (hdw->ctl_write_buffer) {
2729 kfree(hdw->ctl_write_buffer);
2730 hdw->ctl_write_buffer = NULL;
2732 hdw->flag_disconnected = !0;
2733 /* If we don't do this, then there will be a dangling struct device
2734 reference to our disappearing device persisting inside the V4L
2735 core... */
2736 v4l2_device_disconnect(&hdw->v4l2_dev);
2737 hdw->usb_dev = NULL;
2738 hdw->usb_intf = NULL;
2739 pvr2_hdw_render_useless(hdw);
2743 /* Destroy hardware interaction structure */
2744 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2746 if (!hdw) return;
2747 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2748 if (hdw->workqueue) {
2749 flush_workqueue(hdw->workqueue);
2750 destroy_workqueue(hdw->workqueue);
2751 hdw->workqueue = NULL;
2753 del_timer_sync(&hdw->quiescent_timer);
2754 del_timer_sync(&hdw->decoder_stabilization_timer);
2755 del_timer_sync(&hdw->encoder_run_timer);
2756 del_timer_sync(&hdw->encoder_wait_timer);
2757 if (hdw->fw_buffer) {
2758 kfree(hdw->fw_buffer);
2759 hdw->fw_buffer = NULL;
2761 if (hdw->vid_stream) {
2762 pvr2_stream_destroy(hdw->vid_stream);
2763 hdw->vid_stream = NULL;
2765 pvr2_i2c_core_done(hdw);
2766 v4l2_device_unregister(&hdw->v4l2_dev);
2767 pvr2_hdw_remove_usb_stuff(hdw);
2768 mutex_lock(&pvr2_unit_mtx); do {
2769 if ((hdw->unit_number >= 0) &&
2770 (hdw->unit_number < PVR_NUM) &&
2771 (unit_pointers[hdw->unit_number] == hdw)) {
2772 unit_pointers[hdw->unit_number] = NULL;
2774 } while (0); mutex_unlock(&pvr2_unit_mtx);
2775 kfree(hdw->controls);
2776 kfree(hdw->mpeg_ctrl_info);
2777 kfree(hdw->std_defs);
2778 kfree(hdw->std_enum_names);
2779 kfree(hdw);
2783 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2785 return (hdw && hdw->flag_ok);
2789 /* Called when hardware has been unplugged */
2790 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2792 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2793 LOCK_TAKE(hdw->big_lock);
2794 LOCK_TAKE(hdw->ctl_lock);
2795 pvr2_hdw_remove_usb_stuff(hdw);
2796 LOCK_GIVE(hdw->ctl_lock);
2797 LOCK_GIVE(hdw->big_lock);
2801 // Attempt to autoselect an appropriate value for std_enum_cur given
2802 // whatever is currently in std_mask_cur
2803 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2805 unsigned int idx;
2806 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2807 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2808 hdw->std_enum_cur = idx;
2809 return;
2812 hdw->std_enum_cur = 0;
2816 // Calculate correct set of enumerated standards based on currently known
2817 // set of available standards bits.
2818 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2820 struct v4l2_standard *newstd;
2821 unsigned int std_cnt;
2822 unsigned int idx;
2824 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2826 if (hdw->std_defs) {
2827 kfree(hdw->std_defs);
2828 hdw->std_defs = NULL;
2830 hdw->std_enum_cnt = 0;
2831 if (hdw->std_enum_names) {
2832 kfree(hdw->std_enum_names);
2833 hdw->std_enum_names = NULL;
2836 if (!std_cnt) {
2837 pvr2_trace(
2838 PVR2_TRACE_ERROR_LEGS,
2839 "WARNING: Failed to identify any viable standards");
2841 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2842 hdw->std_enum_names[0] = "none";
2843 for (idx = 0; idx < std_cnt; idx++) {
2844 hdw->std_enum_names[idx+1] =
2845 newstd[idx].name;
2847 // Set up the dynamic control for this standard
2848 hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2849 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2850 hdw->std_defs = newstd;
2851 hdw->std_enum_cnt = std_cnt+1;
2852 hdw->std_enum_cur = 0;
2853 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2857 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2858 struct v4l2_standard *std,
2859 unsigned int idx)
2861 int ret = -EINVAL;
2862 if (!idx) return ret;
2863 LOCK_TAKE(hdw->big_lock); do {
2864 if (idx >= hdw->std_enum_cnt) break;
2865 idx--;
2866 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2867 ret = 0;
2868 } while (0); LOCK_GIVE(hdw->big_lock);
2869 return ret;
2873 /* Get the number of defined controls */
2874 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2876 return hdw->control_cnt;
2880 /* Retrieve a control handle given its index (0..count-1) */
2881 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2882 unsigned int idx)
2884 if (idx >= hdw->control_cnt) return NULL;
2885 return hdw->controls + idx;
2889 /* Retrieve a control handle given its index (0..count-1) */
2890 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2891 unsigned int ctl_id)
2893 struct pvr2_ctrl *cptr;
2894 unsigned int idx;
2895 int i;
2897 /* This could be made a lot more efficient, but for now... */
2898 for (idx = 0; idx < hdw->control_cnt; idx++) {
2899 cptr = hdw->controls + idx;
2900 i = cptr->info->internal_id;
2901 if (i && (i == ctl_id)) return cptr;
2903 return NULL;
2907 /* Given a V4L ID, retrieve the control structure associated with it. */
2908 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2910 struct pvr2_ctrl *cptr;
2911 unsigned int idx;
2912 int i;
2914 /* This could be made a lot more efficient, but for now... */
2915 for (idx = 0; idx < hdw->control_cnt; idx++) {
2916 cptr = hdw->controls + idx;
2917 i = cptr->info->v4l_id;
2918 if (i && (i == ctl_id)) return cptr;
2920 return NULL;
2924 /* Given a V4L ID for its immediate predecessor, retrieve the control
2925 structure associated with it. */
2926 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2927 unsigned int ctl_id)
2929 struct pvr2_ctrl *cptr,*cp2;
2930 unsigned int idx;
2931 int i;
2933 /* This could be made a lot more efficient, but for now... */
2934 cp2 = NULL;
2935 for (idx = 0; idx < hdw->control_cnt; idx++) {
2936 cptr = hdw->controls + idx;
2937 i = cptr->info->v4l_id;
2938 if (!i) continue;
2939 if (i <= ctl_id) continue;
2940 if (cp2 && (cp2->info->v4l_id < i)) continue;
2941 cp2 = cptr;
2943 return cp2;
2944 return NULL;
2948 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2950 switch (tp) {
2951 case pvr2_ctl_int: return "integer";
2952 case pvr2_ctl_enum: return "enum";
2953 case pvr2_ctl_bool: return "boolean";
2954 case pvr2_ctl_bitmask: return "bitmask";
2956 return "";
2960 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2961 const char *name, int val)
2963 struct v4l2_control ctrl;
2964 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2965 memset(&ctrl, 0, sizeof(ctrl));
2966 ctrl.id = id;
2967 ctrl.value = val;
2968 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, s_ctrl, &ctrl);
2971 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2972 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2973 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2976 /* Execute whatever commands are required to update the state of all the
2977 sub-devices so that they match our current control values. */
2978 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2980 struct v4l2_subdev *sd;
2981 unsigned int id;
2982 pvr2_subdev_update_func fp;
2984 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2986 if (hdw->tuner_updated || hdw->force_dirty) {
2987 struct tuner_setup setup;
2988 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2989 hdw->tuner_type);
2990 if (((int)(hdw->tuner_type)) >= 0) {
2991 memset(&setup, 0, sizeof(setup));
2992 setup.addr = ADDR_UNSET;
2993 setup.type = hdw->tuner_type;
2994 setup.mode_mask = T_RADIO | T_ANALOG_TV;
2995 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2996 tuner, s_type_addr, &setup);
3000 if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
3001 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
3002 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3003 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3004 tuner, s_radio);
3005 } else {
3006 v4l2_std_id vs;
3007 vs = hdw->std_mask_cur;
3008 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3009 core, s_std, vs);
3010 pvr2_hdw_cx25840_vbi_hack(hdw);
3012 hdw->tuner_signal_stale = !0;
3013 hdw->cropcap_stale = !0;
3016 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
3017 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
3018 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
3019 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
3020 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
3021 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
3022 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
3023 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
3024 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
3026 if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
3027 struct v4l2_tuner vt;
3028 memset(&vt, 0, sizeof(vt));
3029 vt.audmode = hdw->audiomode_val;
3030 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
3033 if (hdw->freqDirty || hdw->force_dirty) {
3034 unsigned long fv;
3035 struct v4l2_frequency freq;
3036 fv = pvr2_hdw_get_cur_freq(hdw);
3037 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
3038 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
3039 memset(&freq, 0, sizeof(freq));
3040 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
3041 /* ((fv * 1000) / 62500) */
3042 freq.frequency = (fv * 2) / 125;
3043 } else {
3044 freq.frequency = fv / 62500;
3046 /* tuner-core currently doesn't seem to care about this, but
3047 let's set it anyway for completeness. */
3048 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3049 freq.type = V4L2_TUNER_RADIO;
3050 } else {
3051 freq.type = V4L2_TUNER_ANALOG_TV;
3053 freq.tuner = 0;
3054 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
3055 s_frequency, &freq);
3058 if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
3059 struct v4l2_format fmt;
3060 memset(&fmt, 0, sizeof(fmt));
3061 fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
3062 fmt.fmt.pix.width = hdw->res_hor_val;
3063 fmt.fmt.pix.height = hdw->res_ver_val;
3064 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)",
3065 fmt.fmt.pix.width, fmt.fmt.pix.height);
3066 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_fmt, &fmt);
3069 if (hdw->srate_dirty || hdw->force_dirty) {
3070 u32 val;
3071 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
3072 hdw->srate_val);
3073 switch (hdw->srate_val) {
3074 default:
3075 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
3076 val = 48000;
3077 break;
3078 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
3079 val = 44100;
3080 break;
3081 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
3082 val = 32000;
3083 break;
3085 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3086 audio, s_clock_freq, val);
3089 /* Unable to set crop parameters; there is apparently no equivalent
3090 for VIDIOC_S_CROP */
3092 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
3093 id = sd->grp_id;
3094 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
3095 fp = pvr2_module_update_functions[id];
3096 if (!fp) continue;
3097 (*fp)(hdw, sd);
3100 if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
3101 pvr2_hdw_status_poll(hdw);
3106 /* Figure out if we need to commit control changes. If so, mark internal
3107 state flags to indicate this fact and return true. Otherwise do nothing
3108 else and return false. */
3109 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
3111 unsigned int idx;
3112 struct pvr2_ctrl *cptr;
3113 int value;
3114 int commit_flag = hdw->force_dirty;
3115 char buf[100];
3116 unsigned int bcnt,ccnt;
3118 for (idx = 0; idx < hdw->control_cnt; idx++) {
3119 cptr = hdw->controls + idx;
3120 if (!cptr->info->is_dirty) continue;
3121 if (!cptr->info->is_dirty(cptr)) continue;
3122 commit_flag = !0;
3124 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
3125 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
3126 cptr->info->name);
3127 value = 0;
3128 cptr->info->get_value(cptr,&value);
3129 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
3130 buf+bcnt,
3131 sizeof(buf)-bcnt,&ccnt);
3132 bcnt += ccnt;
3133 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
3134 get_ctrl_typename(cptr->info->type));
3135 pvr2_trace(PVR2_TRACE_CTL,
3136 "/*--TRACE_COMMIT--*/ %.*s",
3137 bcnt,buf);
3140 if (!commit_flag) {
3141 /* Nothing has changed */
3142 return 0;
3145 hdw->state_pipeline_config = 0;
3146 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3147 pvr2_hdw_state_sched(hdw);
3149 return !0;
3153 /* Perform all operations needed to commit all control changes. This must
3154 be performed in synchronization with the pipeline state and is thus
3155 expected to be called as part of the driver's worker thread. Return
3156 true if commit successful, otherwise return false to indicate that
3157 commit isn't possible at this time. */
3158 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3160 unsigned int idx;
3161 struct pvr2_ctrl *cptr;
3162 int disruptive_change;
3164 /* Handle some required side effects when the video standard is
3165 changed.... */
3166 if (hdw->std_dirty) {
3167 int nvres;
3168 int gop_size;
3169 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3170 nvres = 480;
3171 gop_size = 15;
3172 } else {
3173 nvres = 576;
3174 gop_size = 12;
3176 /* Rewrite the vertical resolution to be appropriate to the
3177 video standard that has been selected. */
3178 if (nvres != hdw->res_ver_val) {
3179 hdw->res_ver_val = nvres;
3180 hdw->res_ver_dirty = !0;
3182 /* Rewrite the GOP size to be appropriate to the video
3183 standard that has been selected. */
3184 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3185 struct v4l2_ext_controls cs;
3186 struct v4l2_ext_control c1;
3187 memset(&cs, 0, sizeof(cs));
3188 memset(&c1, 0, sizeof(c1));
3189 cs.controls = &c1;
3190 cs.count = 1;
3191 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3192 c1.value = gop_size;
3193 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3194 VIDIOC_S_EXT_CTRLS);
3198 if (hdw->input_dirty && hdw->state_pathway_ok &&
3199 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3200 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3201 hdw->pathway_state)) {
3202 /* Change of mode being asked for... */
3203 hdw->state_pathway_ok = 0;
3204 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3206 if (!hdw->state_pathway_ok) {
3207 /* Can't commit anything until pathway is ok. */
3208 return 0;
3210 /* The broadcast decoder can only scale down, so if
3211 * res_*_dirty && crop window < output format ==> enlarge crop.
3213 * The mpeg encoder receives fields of res_hor_val dots and
3214 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3216 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3217 hdw->cropw_val = hdw->res_hor_val;
3218 hdw->cropw_dirty = !0;
3219 } else if (hdw->cropw_dirty) {
3220 hdw->res_hor_dirty = !0; /* must rescale */
3221 hdw->res_hor_val = min(720, hdw->cropw_val);
3223 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3224 hdw->croph_val = hdw->res_ver_val;
3225 hdw->croph_dirty = !0;
3226 } else if (hdw->croph_dirty) {
3227 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3228 hdw->res_ver_dirty = !0;
3229 hdw->res_ver_val = min(nvres, hdw->croph_val);
3232 /* If any of the below has changed, then we can't do the update
3233 while the pipeline is running. Pipeline must be paused first
3234 and decoder -> encoder connection be made quiescent before we
3235 can proceed. */
3236 disruptive_change =
3237 (hdw->std_dirty ||
3238 hdw->enc_unsafe_stale ||
3239 hdw->srate_dirty ||
3240 hdw->res_ver_dirty ||
3241 hdw->res_hor_dirty ||
3242 hdw->cropw_dirty ||
3243 hdw->croph_dirty ||
3244 hdw->input_dirty ||
3245 (hdw->active_stream_type != hdw->desired_stream_type));
3246 if (disruptive_change && !hdw->state_pipeline_idle) {
3247 /* Pipeline is not idle; we can't proceed. Arrange to
3248 cause pipeline to stop so that we can try this again
3249 later.... */
3250 hdw->state_pipeline_pause = !0;
3251 return 0;
3254 if (hdw->srate_dirty) {
3255 /* Write new sample rate into control structure since
3256 * the master copy is stale. We must track srate
3257 * separate from the mpeg control structure because
3258 * other logic also uses this value. */
3259 struct v4l2_ext_controls cs;
3260 struct v4l2_ext_control c1;
3261 memset(&cs,0,sizeof(cs));
3262 memset(&c1,0,sizeof(c1));
3263 cs.controls = &c1;
3264 cs.count = 1;
3265 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3266 c1.value = hdw->srate_val;
3267 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3270 if (hdw->active_stream_type != hdw->desired_stream_type) {
3271 /* Handle any side effects of stream config here */
3272 hdw->active_stream_type = hdw->desired_stream_type;
3275 if (hdw->hdw_desc->signal_routing_scheme ==
3276 PVR2_ROUTING_SCHEME_GOTVIEW) {
3277 u32 b;
3278 /* Handle GOTVIEW audio switching */
3279 pvr2_hdw_gpio_get_out(hdw,&b);
3280 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3281 /* Set GPIO 11 */
3282 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3283 } else {
3284 /* Clear GPIO 11 */
3285 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3289 /* Check and update state for all sub-devices. */
3290 pvr2_subdev_update(hdw);
3292 hdw->tuner_updated = 0;
3293 hdw->force_dirty = 0;
3294 for (idx = 0; idx < hdw->control_cnt; idx++) {
3295 cptr = hdw->controls + idx;
3296 if (!cptr->info->clear_dirty) continue;
3297 cptr->info->clear_dirty(cptr);
3300 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3301 hdw->state_encoder_run) {
3302 /* If encoder isn't running or it can't be touched, then
3303 this will get worked out later when we start the
3304 encoder. */
3305 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3308 hdw->state_pipeline_config = !0;
3309 /* Hardware state may have changed in a way to cause the cropping
3310 capabilities to have changed. So mark it stale, which will
3311 cause a later re-fetch. */
3312 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3313 return !0;
3317 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3319 int fl;
3320 LOCK_TAKE(hdw->big_lock);
3321 fl = pvr2_hdw_commit_setup(hdw);
3322 LOCK_GIVE(hdw->big_lock);
3323 if (!fl) return 0;
3324 return pvr2_hdw_wait(hdw,0);
3328 static void pvr2_hdw_worker_poll(struct work_struct *work)
3330 int fl = 0;
3331 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3332 LOCK_TAKE(hdw->big_lock); do {
3333 fl = pvr2_hdw_state_eval(hdw);
3334 } while (0); LOCK_GIVE(hdw->big_lock);
3335 if (fl && hdw->state_func) {
3336 hdw->state_func(hdw->state_data);
3341 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3343 return wait_event_interruptible(
3344 hdw->state_wait_data,
3345 (hdw->state_stale == 0) &&
3346 (!state || (hdw->master_state != state)));
3350 /* Return name for this driver instance */
3351 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3353 return hdw->name;
3357 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3359 return hdw->hdw_desc->description;
3363 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3365 return hdw->hdw_desc->shortname;
3369 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3371 int result;
3372 LOCK_TAKE(hdw->ctl_lock); do {
3373 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3374 result = pvr2_send_request(hdw,
3375 hdw->cmd_buffer,1,
3376 hdw->cmd_buffer,1);
3377 if (result < 0) break;
3378 result = (hdw->cmd_buffer[0] != 0);
3379 } while(0); LOCK_GIVE(hdw->ctl_lock);
3380 return result;
3384 /* Execute poll of tuner status */
3385 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3387 LOCK_TAKE(hdw->big_lock); do {
3388 pvr2_hdw_status_poll(hdw);
3389 } while (0); LOCK_GIVE(hdw->big_lock);
3393 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3395 if (!hdw->cropcap_stale) {
3396 return 0;
3398 pvr2_hdw_status_poll(hdw);
3399 if (hdw->cropcap_stale) {
3400 return -EIO;
3402 return 0;
3406 /* Return information about cropping capabilities */
3407 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3409 int stat = 0;
3410 LOCK_TAKE(hdw->big_lock);
3411 stat = pvr2_hdw_check_cropcap(hdw);
3412 if (!stat) {
3413 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3415 LOCK_GIVE(hdw->big_lock);
3416 return stat;
3420 /* Return information about the tuner */
3421 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3423 LOCK_TAKE(hdw->big_lock); do {
3424 if (hdw->tuner_signal_stale) {
3425 pvr2_hdw_status_poll(hdw);
3427 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3428 } while (0); LOCK_GIVE(hdw->big_lock);
3429 return 0;
3433 /* Get handle to video output stream */
3434 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3436 return hp->vid_stream;
3440 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3442 int nr = pvr2_hdw_get_unit_number(hdw);
3443 LOCK_TAKE(hdw->big_lock); do {
3444 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
3445 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3446 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3447 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3448 pvr2_hdw_state_log_state(hdw);
3449 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
3450 } while (0); LOCK_GIVE(hdw->big_lock);
3454 /* Grab EEPROM contents, needed for direct method. */
3455 #define EEPROM_SIZE 8192
3456 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3457 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3459 struct i2c_msg msg[2];
3460 u8 *eeprom;
3461 u8 iadd[2];
3462 u8 addr;
3463 u16 eepromSize;
3464 unsigned int offs;
3465 int ret;
3466 int mode16 = 0;
3467 unsigned pcnt,tcnt;
3468 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3469 if (!eeprom) {
3470 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3471 "Failed to allocate memory"
3472 " required to read eeprom");
3473 return NULL;
3476 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3477 hdw->eeprom_addr);
3478 addr = hdw->eeprom_addr;
3479 /* Seems that if the high bit is set, then the *real* eeprom
3480 address is shifted right now bit position (noticed this in
3481 newer PVR USB2 hardware) */
3482 if (addr & 0x80) addr >>= 1;
3484 /* FX2 documentation states that a 16bit-addressed eeprom is
3485 expected if the I2C address is an odd number (yeah, this is
3486 strange but it's what they do) */
3487 mode16 = (addr & 1);
3488 eepromSize = (mode16 ? EEPROM_SIZE : 256);
3489 trace_eeprom("Examining %d byte eeprom at location 0x%x"
3490 " using %d bit addressing",eepromSize,addr,
3491 mode16 ? 16 : 8);
3493 msg[0].addr = addr;
3494 msg[0].flags = 0;
3495 msg[0].len = mode16 ? 2 : 1;
3496 msg[0].buf = iadd;
3497 msg[1].addr = addr;
3498 msg[1].flags = I2C_M_RD;
3500 /* We have to do the actual eeprom data fetch ourselves, because
3501 (1) we're only fetching part of the eeprom, and (2) if we were
3502 getting the whole thing our I2C driver can't grab it in one
3503 pass - which is what tveeprom is otherwise going to attempt */
3504 memset(eeprom,0,EEPROM_SIZE);
3505 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3506 pcnt = 16;
3507 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3508 offs = tcnt + (eepromSize - EEPROM_SIZE);
3509 if (mode16) {
3510 iadd[0] = offs >> 8;
3511 iadd[1] = offs;
3512 } else {
3513 iadd[0] = offs;
3515 msg[1].len = pcnt;
3516 msg[1].buf = eeprom+tcnt;
3517 if ((ret = i2c_transfer(&hdw->i2c_adap,
3518 msg,ARRAY_SIZE(msg))) != 2) {
3519 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3520 "eeprom fetch set offs err=%d",ret);
3521 kfree(eeprom);
3522 return NULL;
3525 return eeprom;
3529 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3530 int mode,
3531 int enable_flag)
3533 int ret;
3534 u16 address;
3535 unsigned int pipe;
3536 LOCK_TAKE(hdw->big_lock); do {
3537 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3539 if (!enable_flag) {
3540 pvr2_trace(PVR2_TRACE_FIRMWARE,
3541 "Cleaning up after CPU firmware fetch");
3542 kfree(hdw->fw_buffer);
3543 hdw->fw_buffer = NULL;
3544 hdw->fw_size = 0;
3545 if (hdw->fw_cpu_flag) {
3546 /* Now release the CPU. It will disconnect
3547 and reconnect later. */
3548 pvr2_hdw_cpureset_assert(hdw,0);
3550 break;
3553 hdw->fw_cpu_flag = (mode != 2);
3554 if (hdw->fw_cpu_flag) {
3555 hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000;
3556 pvr2_trace(PVR2_TRACE_FIRMWARE,
3557 "Preparing to suck out CPU firmware"
3558 " (size=%u)", hdw->fw_size);
3559 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3560 if (!hdw->fw_buffer) {
3561 hdw->fw_size = 0;
3562 break;
3565 /* We have to hold the CPU during firmware upload. */
3566 pvr2_hdw_cpureset_assert(hdw,1);
3568 /* download the firmware from address 0000-1fff in 2048
3569 (=0x800) bytes chunk. */
3571 pvr2_trace(PVR2_TRACE_FIRMWARE,
3572 "Grabbing CPU firmware");
3573 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3574 for(address = 0; address < hdw->fw_size;
3575 address += 0x800) {
3576 ret = usb_control_msg(hdw->usb_dev,pipe,
3577 0xa0,0xc0,
3578 address,0,
3579 hdw->fw_buffer+address,
3580 0x800,HZ);
3581 if (ret < 0) break;
3584 pvr2_trace(PVR2_TRACE_FIRMWARE,
3585 "Done grabbing CPU firmware");
3586 } else {
3587 pvr2_trace(PVR2_TRACE_FIRMWARE,
3588 "Sucking down EEPROM contents");
3589 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3590 if (!hdw->fw_buffer) {
3591 pvr2_trace(PVR2_TRACE_FIRMWARE,
3592 "EEPROM content suck failed.");
3593 break;
3595 hdw->fw_size = EEPROM_SIZE;
3596 pvr2_trace(PVR2_TRACE_FIRMWARE,
3597 "Done sucking down EEPROM contents");
3600 } while (0); LOCK_GIVE(hdw->big_lock);
3604 /* Return true if we're in a mode for retrieval CPU firmware */
3605 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3607 return hdw->fw_buffer != NULL;
3611 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3612 char *buf,unsigned int cnt)
3614 int ret = -EINVAL;
3615 LOCK_TAKE(hdw->big_lock); do {
3616 if (!buf) break;
3617 if (!cnt) break;
3619 if (!hdw->fw_buffer) {
3620 ret = -EIO;
3621 break;
3624 if (offs >= hdw->fw_size) {
3625 pvr2_trace(PVR2_TRACE_FIRMWARE,
3626 "Read firmware data offs=%d EOF",
3627 offs);
3628 ret = 0;
3629 break;
3632 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3634 memcpy(buf,hdw->fw_buffer+offs,cnt);
3636 pvr2_trace(PVR2_TRACE_FIRMWARE,
3637 "Read firmware data offs=%d cnt=%d",
3638 offs,cnt);
3639 ret = cnt;
3640 } while (0); LOCK_GIVE(hdw->big_lock);
3642 return ret;
3646 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3647 enum pvr2_v4l_type index)
3649 switch (index) {
3650 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3651 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3652 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3653 default: return -1;
3658 /* Store a v4l minor device number */
3659 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3660 enum pvr2_v4l_type index,int v)
3662 switch (index) {
3663 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
3664 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
3665 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
3666 default: break;
3671 static void pvr2_ctl_write_complete(struct urb *urb)
3673 struct pvr2_hdw *hdw = urb->context;
3674 hdw->ctl_write_pend_flag = 0;
3675 if (hdw->ctl_read_pend_flag) return;
3676 complete(&hdw->ctl_done);
3680 static void pvr2_ctl_read_complete(struct urb *urb)
3682 struct pvr2_hdw *hdw = urb->context;
3683 hdw->ctl_read_pend_flag = 0;
3684 if (hdw->ctl_write_pend_flag) return;
3685 complete(&hdw->ctl_done);
3689 static void pvr2_ctl_timeout(unsigned long data)
3691 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3692 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3693 hdw->ctl_timeout_flag = !0;
3694 if (hdw->ctl_write_pend_flag)
3695 usb_unlink_urb(hdw->ctl_write_urb);
3696 if (hdw->ctl_read_pend_flag)
3697 usb_unlink_urb(hdw->ctl_read_urb);
3702 /* Issue a command and get a response from the device. This extended
3703 version includes a probe flag (which if set means that device errors
3704 should not be logged or treated as fatal) and a timeout in jiffies.
3705 This can be used to non-lethally probe the health of endpoint 1. */
3706 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3707 unsigned int timeout,int probe_fl,
3708 void *write_data,unsigned int write_len,
3709 void *read_data,unsigned int read_len)
3711 unsigned int idx;
3712 int status = 0;
3713 struct timer_list timer;
3714 if (!hdw->ctl_lock_held) {
3715 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3716 "Attempted to execute control transfer"
3717 " without lock!!");
3718 return -EDEADLK;
3720 if (!hdw->flag_ok && !probe_fl) {
3721 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3722 "Attempted to execute control transfer"
3723 " when device not ok");
3724 return -EIO;
3726 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3727 if (!probe_fl) {
3728 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3729 "Attempted to execute control transfer"
3730 " when USB is disconnected");
3732 return -ENOTTY;
3735 /* Ensure that we have sane parameters */
3736 if (!write_data) write_len = 0;
3737 if (!read_data) read_len = 0;
3738 if (write_len > PVR2_CTL_BUFFSIZE) {
3739 pvr2_trace(
3740 PVR2_TRACE_ERROR_LEGS,
3741 "Attempted to execute %d byte"
3742 " control-write transfer (limit=%d)",
3743 write_len,PVR2_CTL_BUFFSIZE);
3744 return -EINVAL;
3746 if (read_len > PVR2_CTL_BUFFSIZE) {
3747 pvr2_trace(
3748 PVR2_TRACE_ERROR_LEGS,
3749 "Attempted to execute %d byte"
3750 " control-read transfer (limit=%d)",
3751 write_len,PVR2_CTL_BUFFSIZE);
3752 return -EINVAL;
3754 if ((!write_len) && (!read_len)) {
3755 pvr2_trace(
3756 PVR2_TRACE_ERROR_LEGS,
3757 "Attempted to execute null control transfer?");
3758 return -EINVAL;
3762 hdw->cmd_debug_state = 1;
3763 if (write_len) {
3764 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3765 } else {
3766 hdw->cmd_debug_code = 0;
3768 hdw->cmd_debug_write_len = write_len;
3769 hdw->cmd_debug_read_len = read_len;
3771 /* Initialize common stuff */
3772 init_completion(&hdw->ctl_done);
3773 hdw->ctl_timeout_flag = 0;
3774 hdw->ctl_write_pend_flag = 0;
3775 hdw->ctl_read_pend_flag = 0;
3776 init_timer(&timer);
3777 timer.expires = jiffies + timeout;
3778 timer.data = (unsigned long)hdw;
3779 timer.function = pvr2_ctl_timeout;
3781 if (write_len) {
3782 hdw->cmd_debug_state = 2;
3783 /* Transfer write data to internal buffer */
3784 for (idx = 0; idx < write_len; idx++) {
3785 hdw->ctl_write_buffer[idx] =
3786 ((unsigned char *)write_data)[idx];
3788 /* Initiate a write request */
3789 usb_fill_bulk_urb(hdw->ctl_write_urb,
3790 hdw->usb_dev,
3791 usb_sndbulkpipe(hdw->usb_dev,
3792 PVR2_CTL_WRITE_ENDPOINT),
3793 hdw->ctl_write_buffer,
3794 write_len,
3795 pvr2_ctl_write_complete,
3796 hdw);
3797 hdw->ctl_write_urb->actual_length = 0;
3798 hdw->ctl_write_pend_flag = !0;
3799 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3800 if (status < 0) {
3801 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3802 "Failed to submit write-control"
3803 " URB status=%d",status);
3804 hdw->ctl_write_pend_flag = 0;
3805 goto done;
3809 if (read_len) {
3810 hdw->cmd_debug_state = 3;
3811 memset(hdw->ctl_read_buffer,0x43,read_len);
3812 /* Initiate a read request */
3813 usb_fill_bulk_urb(hdw->ctl_read_urb,
3814 hdw->usb_dev,
3815 usb_rcvbulkpipe(hdw->usb_dev,
3816 PVR2_CTL_READ_ENDPOINT),
3817 hdw->ctl_read_buffer,
3818 read_len,
3819 pvr2_ctl_read_complete,
3820 hdw);
3821 hdw->ctl_read_urb->actual_length = 0;
3822 hdw->ctl_read_pend_flag = !0;
3823 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3824 if (status < 0) {
3825 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3826 "Failed to submit read-control"
3827 " URB status=%d",status);
3828 hdw->ctl_read_pend_flag = 0;
3829 goto done;
3833 /* Start timer */
3834 add_timer(&timer);
3836 /* Now wait for all I/O to complete */
3837 hdw->cmd_debug_state = 4;
3838 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3839 wait_for_completion(&hdw->ctl_done);
3841 hdw->cmd_debug_state = 5;
3843 /* Stop timer */
3844 del_timer_sync(&timer);
3846 hdw->cmd_debug_state = 6;
3847 status = 0;
3849 if (hdw->ctl_timeout_flag) {
3850 status = -ETIMEDOUT;
3851 if (!probe_fl) {
3852 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3853 "Timed out control-write");
3855 goto done;
3858 if (write_len) {
3859 /* Validate results of write request */
3860 if ((hdw->ctl_write_urb->status != 0) &&
3861 (hdw->ctl_write_urb->status != -ENOENT) &&
3862 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3863 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3864 /* USB subsystem is reporting some kind of failure
3865 on the write */
3866 status = hdw->ctl_write_urb->status;
3867 if (!probe_fl) {
3868 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3869 "control-write URB failure,"
3870 " status=%d",
3871 status);
3873 goto done;
3875 if (hdw->ctl_write_urb->actual_length < write_len) {
3876 /* Failed to write enough data */
3877 status = -EIO;
3878 if (!probe_fl) {
3879 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3880 "control-write URB short,"
3881 " expected=%d got=%d",
3882 write_len,
3883 hdw->ctl_write_urb->actual_length);
3885 goto done;
3888 if (read_len) {
3889 /* Validate results of read request */
3890 if ((hdw->ctl_read_urb->status != 0) &&
3891 (hdw->ctl_read_urb->status != -ENOENT) &&
3892 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3893 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3894 /* USB subsystem is reporting some kind of failure
3895 on the read */
3896 status = hdw->ctl_read_urb->status;
3897 if (!probe_fl) {
3898 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3899 "control-read URB failure,"
3900 " status=%d",
3901 status);
3903 goto done;
3905 if (hdw->ctl_read_urb->actual_length < read_len) {
3906 /* Failed to read enough data */
3907 status = -EIO;
3908 if (!probe_fl) {
3909 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3910 "control-read URB short,"
3911 " expected=%d got=%d",
3912 read_len,
3913 hdw->ctl_read_urb->actual_length);
3915 goto done;
3917 /* Transfer retrieved data out from internal buffer */
3918 for (idx = 0; idx < read_len; idx++) {
3919 ((unsigned char *)read_data)[idx] =
3920 hdw->ctl_read_buffer[idx];
3924 done:
3926 hdw->cmd_debug_state = 0;
3927 if ((status < 0) && (!probe_fl)) {
3928 pvr2_hdw_render_useless(hdw);
3930 return status;
3934 int pvr2_send_request(struct pvr2_hdw *hdw,
3935 void *write_data,unsigned int write_len,
3936 void *read_data,unsigned int read_len)
3938 return pvr2_send_request_ex(hdw,HZ*4,0,
3939 write_data,write_len,
3940 read_data,read_len);
3944 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3946 int ret;
3947 unsigned int cnt = 1;
3948 unsigned int args = 0;
3949 LOCK_TAKE(hdw->ctl_lock);
3950 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3951 args = (cmdcode >> 8) & 0xffu;
3952 args = (args > 2) ? 2 : args;
3953 if (args) {
3954 cnt += args;
3955 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3956 if (args > 1) {
3957 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3960 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3961 unsigned int idx;
3962 unsigned int ccnt,bcnt;
3963 char tbuf[50];
3964 cmdcode &= 0xffu;
3965 bcnt = 0;
3966 ccnt = scnprintf(tbuf+bcnt,
3967 sizeof(tbuf)-bcnt,
3968 "Sending FX2 command 0x%x",cmdcode);
3969 bcnt += ccnt;
3970 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3971 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3972 ccnt = scnprintf(tbuf+bcnt,
3973 sizeof(tbuf)-bcnt,
3974 " \"%s\"",
3975 pvr2_fx2cmd_desc[idx].desc);
3976 bcnt += ccnt;
3977 break;
3980 if (args) {
3981 ccnt = scnprintf(tbuf+bcnt,
3982 sizeof(tbuf)-bcnt,
3983 " (%u",hdw->cmd_buffer[1]);
3984 bcnt += ccnt;
3985 if (args > 1) {
3986 ccnt = scnprintf(tbuf+bcnt,
3987 sizeof(tbuf)-bcnt,
3988 ",%u",hdw->cmd_buffer[2]);
3989 bcnt += ccnt;
3991 ccnt = scnprintf(tbuf+bcnt,
3992 sizeof(tbuf)-bcnt,
3993 ")");
3994 bcnt += ccnt;
3996 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3998 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3999 LOCK_GIVE(hdw->ctl_lock);
4000 return ret;
4004 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
4006 int ret;
4008 LOCK_TAKE(hdw->ctl_lock);
4010 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
4011 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
4012 hdw->cmd_buffer[5] = 0;
4013 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4014 hdw->cmd_buffer[7] = reg & 0xff;
4017 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
4019 LOCK_GIVE(hdw->ctl_lock);
4021 return ret;
4025 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
4027 int ret = 0;
4029 LOCK_TAKE(hdw->ctl_lock);
4031 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
4032 hdw->cmd_buffer[1] = 0;
4033 hdw->cmd_buffer[2] = 0;
4034 hdw->cmd_buffer[3] = 0;
4035 hdw->cmd_buffer[4] = 0;
4036 hdw->cmd_buffer[5] = 0;
4037 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4038 hdw->cmd_buffer[7] = reg & 0xff;
4040 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
4041 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
4043 LOCK_GIVE(hdw->ctl_lock);
4045 return ret;
4049 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
4051 if (!hdw->flag_ok) return;
4052 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4053 "Device being rendered inoperable");
4054 if (hdw->vid_stream) {
4055 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
4057 hdw->flag_ok = 0;
4058 trace_stbit("flag_ok",hdw->flag_ok);
4059 pvr2_hdw_state_sched(hdw);
4063 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
4065 int ret;
4066 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
4067 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
4068 if (ret == 0) {
4069 ret = usb_reset_device(hdw->usb_dev);
4070 usb_unlock_device(hdw->usb_dev);
4071 } else {
4072 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4073 "Failed to lock USB device ret=%d",ret);
4075 if (init_pause_msec) {
4076 pvr2_trace(PVR2_TRACE_INFO,
4077 "Waiting %u msec for hardware to settle",
4078 init_pause_msec);
4079 msleep(init_pause_msec);
4085 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
4087 char da[1];
4088 unsigned int pipe;
4089 int ret;
4091 if (!hdw->usb_dev) return;
4093 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
4095 da[0] = val ? 0x01 : 0x00;
4097 /* Write the CPUCS register on the 8051. The lsb of the register
4098 is the reset bit; a 1 asserts reset while a 0 clears it. */
4099 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
4100 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
4101 if (ret < 0) {
4102 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4103 "cpureset_assert(%d) error=%d",val,ret);
4104 pvr2_hdw_render_useless(hdw);
4109 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
4111 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
4115 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
4117 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
4121 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
4123 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
4127 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
4129 pvr2_trace(PVR2_TRACE_INIT,
4130 "Requesting decoder reset");
4131 if (hdw->decoder_client_id) {
4132 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
4133 core, reset, 0);
4134 pvr2_hdw_cx25840_vbi_hack(hdw);
4135 return 0;
4137 pvr2_trace(PVR2_TRACE_INIT,
4138 "Unable to reset decoder: nothing attached");
4139 return -ENOTTY;
4143 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4145 hdw->flag_ok = !0;
4146 return pvr2_issue_simple_cmd(hdw,
4147 FX2CMD_HCW_DEMOD_RESETIN |
4148 (1 << 8) |
4149 ((onoff ? 1 : 0) << 16));
4153 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4155 hdw->flag_ok = !0;
4156 return pvr2_issue_simple_cmd(hdw,(onoff ?
4157 FX2CMD_ONAIR_DTV_POWER_ON :
4158 FX2CMD_ONAIR_DTV_POWER_OFF));
4162 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4163 int onoff)
4165 return pvr2_issue_simple_cmd(hdw,(onoff ?
4166 FX2CMD_ONAIR_DTV_STREAMING_ON :
4167 FX2CMD_ONAIR_DTV_STREAMING_OFF));
4171 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4173 int cmode;
4174 /* Compare digital/analog desired setting with current setting. If
4175 they don't match, fix it... */
4176 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4177 if (cmode == hdw->pathway_state) {
4178 /* They match; nothing to do */
4179 return;
4182 switch (hdw->hdw_desc->digital_control_scheme) {
4183 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4184 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4185 if (cmode == PVR2_PATHWAY_ANALOG) {
4186 /* If moving to analog mode, also force the decoder
4187 to reset. If no decoder is attached, then it's
4188 ok to ignore this because if/when the decoder
4189 attaches, it will reset itself at that time. */
4190 pvr2_hdw_cmd_decoder_reset(hdw);
4192 break;
4193 case PVR2_DIGITAL_SCHEME_ONAIR:
4194 /* Supposedly we should always have the power on whether in
4195 digital or analog mode. But for now do what appears to
4196 work... */
4197 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4198 break;
4199 default: break;
4202 pvr2_hdw_untrip_unlocked(hdw);
4203 hdw->pathway_state = cmode;
4207 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4209 /* change some GPIO data
4211 * note: bit d7 of dir appears to control the LED,
4212 * so we shut it off here.
4215 if (onoff) {
4216 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4217 } else {
4218 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4220 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4224 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4226 static led_method_func led_methods[] = {
4227 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4231 /* Toggle LED */
4232 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4234 unsigned int scheme_id;
4235 led_method_func fp;
4237 if ((!onoff) == (!hdw->led_on)) return;
4239 hdw->led_on = onoff != 0;
4241 scheme_id = hdw->hdw_desc->led_scheme;
4242 if (scheme_id < ARRAY_SIZE(led_methods)) {
4243 fp = led_methods[scheme_id];
4244 } else {
4245 fp = NULL;
4248 if (fp) (*fp)(hdw,onoff);
4252 /* Stop / start video stream transport */
4253 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4255 int ret;
4257 /* If we're in analog mode, then just issue the usual analog
4258 command. */
4259 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4260 return pvr2_issue_simple_cmd(hdw,
4261 (runFl ?
4262 FX2CMD_STREAMING_ON :
4263 FX2CMD_STREAMING_OFF));
4264 /*Note: Not reached */
4267 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4268 /* Whoops, we don't know what mode we're in... */
4269 return -EINVAL;
4272 /* To get here we have to be in digital mode. The mechanism here
4273 is unfortunately different for different vendors. So we switch
4274 on the device's digital scheme attribute in order to figure out
4275 what to do. */
4276 switch (hdw->hdw_desc->digital_control_scheme) {
4277 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4278 return pvr2_issue_simple_cmd(hdw,
4279 (runFl ?
4280 FX2CMD_HCW_DTV_STREAMING_ON :
4281 FX2CMD_HCW_DTV_STREAMING_OFF));
4282 case PVR2_DIGITAL_SCHEME_ONAIR:
4283 ret = pvr2_issue_simple_cmd(hdw,
4284 (runFl ?
4285 FX2CMD_STREAMING_ON :
4286 FX2CMD_STREAMING_OFF));
4287 if (ret) return ret;
4288 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4289 default:
4290 return -EINVAL;
4295 /* Evaluate whether or not state_pathway_ok can change */
4296 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4298 if (hdw->state_pathway_ok) {
4299 /* Nothing to do if pathway is already ok */
4300 return 0;
4302 if (!hdw->state_pipeline_idle) {
4303 /* Not allowed to change anything if pipeline is not idle */
4304 return 0;
4306 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4307 hdw->state_pathway_ok = !0;
4308 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4309 return !0;
4313 /* Evaluate whether or not state_encoder_ok can change */
4314 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4316 if (hdw->state_encoder_ok) return 0;
4317 if (hdw->flag_tripped) return 0;
4318 if (hdw->state_encoder_run) return 0;
4319 if (hdw->state_encoder_config) return 0;
4320 if (hdw->state_decoder_run) return 0;
4321 if (hdw->state_usbstream_run) return 0;
4322 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4323 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4324 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4325 return 0;
4328 if (pvr2_upload_firmware2(hdw) < 0) {
4329 hdw->flag_tripped = !0;
4330 trace_stbit("flag_tripped",hdw->flag_tripped);
4331 return !0;
4333 hdw->state_encoder_ok = !0;
4334 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4335 return !0;
4339 /* Evaluate whether or not state_encoder_config can change */
4340 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4342 if (hdw->state_encoder_config) {
4343 if (hdw->state_encoder_ok) {
4344 if (hdw->state_pipeline_req &&
4345 !hdw->state_pipeline_pause) return 0;
4347 hdw->state_encoder_config = 0;
4348 hdw->state_encoder_waitok = 0;
4349 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4350 /* paranoia - solve race if timer just completed */
4351 del_timer_sync(&hdw->encoder_wait_timer);
4352 } else {
4353 if (!hdw->state_pathway_ok ||
4354 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4355 !hdw->state_encoder_ok ||
4356 !hdw->state_pipeline_idle ||
4357 hdw->state_pipeline_pause ||
4358 !hdw->state_pipeline_req ||
4359 !hdw->state_pipeline_config) {
4360 /* We must reset the enforced wait interval if
4361 anything has happened that might have disturbed
4362 the encoder. This should be a rare case. */
4363 if (timer_pending(&hdw->encoder_wait_timer)) {
4364 del_timer_sync(&hdw->encoder_wait_timer);
4366 if (hdw->state_encoder_waitok) {
4367 /* Must clear the state - therefore we did
4368 something to a state bit and must also
4369 return true. */
4370 hdw->state_encoder_waitok = 0;
4371 trace_stbit("state_encoder_waitok",
4372 hdw->state_encoder_waitok);
4373 return !0;
4375 return 0;
4377 if (!hdw->state_encoder_waitok) {
4378 if (!timer_pending(&hdw->encoder_wait_timer)) {
4379 /* waitok flag wasn't set and timer isn't
4380 running. Check flag once more to avoid
4381 a race then start the timer. This is
4382 the point when we measure out a minimal
4383 quiet interval before doing something to
4384 the encoder. */
4385 if (!hdw->state_encoder_waitok) {
4386 hdw->encoder_wait_timer.expires =
4387 jiffies +
4388 (HZ * TIME_MSEC_ENCODER_WAIT
4389 / 1000);
4390 add_timer(&hdw->encoder_wait_timer);
4393 /* We can't continue until we know we have been
4394 quiet for the interval measured by this
4395 timer. */
4396 return 0;
4398 pvr2_encoder_configure(hdw);
4399 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4401 trace_stbit("state_encoder_config",hdw->state_encoder_config);
4402 return !0;
4406 /* Return true if the encoder should not be running. */
4407 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4409 if (!hdw->state_encoder_ok) {
4410 /* Encoder isn't healthy at the moment, so stop it. */
4411 return !0;
4413 if (!hdw->state_pathway_ok) {
4414 /* Mode is not understood at the moment (i.e. it wants to
4415 change), so encoder must be stopped. */
4416 return !0;
4419 switch (hdw->pathway_state) {
4420 case PVR2_PATHWAY_ANALOG:
4421 if (!hdw->state_decoder_run) {
4422 /* We're in analog mode and the decoder is not
4423 running; thus the encoder should be stopped as
4424 well. */
4425 return !0;
4427 break;
4428 case PVR2_PATHWAY_DIGITAL:
4429 if (hdw->state_encoder_runok) {
4430 /* This is a funny case. We're in digital mode so
4431 really the encoder should be stopped. However
4432 if it really is running, only kill it after
4433 runok has been set. This gives a chance for the
4434 onair quirk to function (encoder must run
4435 briefly first, at least once, before onair
4436 digital streaming can work). */
4437 return !0;
4439 break;
4440 default:
4441 /* Unknown mode; so encoder should be stopped. */
4442 return !0;
4445 /* If we get here, we haven't found a reason to stop the
4446 encoder. */
4447 return 0;
4451 /* Return true if the encoder should be running. */
4452 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4454 if (!hdw->state_encoder_ok) {
4455 /* Don't run the encoder if it isn't healthy... */
4456 return 0;
4458 if (!hdw->state_pathway_ok) {
4459 /* Don't run the encoder if we don't (yet) know what mode
4460 we need to be in... */
4461 return 0;
4464 switch (hdw->pathway_state) {
4465 case PVR2_PATHWAY_ANALOG:
4466 if (hdw->state_decoder_run && hdw->state_decoder_ready) {
4467 /* In analog mode, if the decoder is running, then
4468 run the encoder. */
4469 return !0;
4471 break;
4472 case PVR2_PATHWAY_DIGITAL:
4473 if ((hdw->hdw_desc->digital_control_scheme ==
4474 PVR2_DIGITAL_SCHEME_ONAIR) &&
4475 !hdw->state_encoder_runok) {
4476 /* This is a quirk. OnAir hardware won't stream
4477 digital until the encoder has been run at least
4478 once, for a minimal period of time (empiricially
4479 measured to be 1/4 second). So if we're on
4480 OnAir hardware and the encoder has never been
4481 run at all, then start the encoder. Normal
4482 state machine logic in the driver will
4483 automatically handle the remaining bits. */
4484 return !0;
4486 break;
4487 default:
4488 /* For completeness (unknown mode; encoder won't run ever) */
4489 break;
4491 /* If we get here, then we haven't found any reason to run the
4492 encoder, so don't run it. */
4493 return 0;
4497 /* Evaluate whether or not state_encoder_run can change */
4498 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4500 if (hdw->state_encoder_run) {
4501 if (!state_check_disable_encoder_run(hdw)) return 0;
4502 if (hdw->state_encoder_ok) {
4503 del_timer_sync(&hdw->encoder_run_timer);
4504 if (pvr2_encoder_stop(hdw) < 0) return !0;
4506 hdw->state_encoder_run = 0;
4507 } else {
4508 if (!state_check_enable_encoder_run(hdw)) return 0;
4509 if (pvr2_encoder_start(hdw) < 0) return !0;
4510 hdw->state_encoder_run = !0;
4511 if (!hdw->state_encoder_runok) {
4512 hdw->encoder_run_timer.expires =
4513 jiffies + (HZ * TIME_MSEC_ENCODER_OK / 1000);
4514 add_timer(&hdw->encoder_run_timer);
4517 trace_stbit("state_encoder_run",hdw->state_encoder_run);
4518 return !0;
4522 /* Timeout function for quiescent timer. */
4523 static void pvr2_hdw_quiescent_timeout(unsigned long data)
4525 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4526 hdw->state_decoder_quiescent = !0;
4527 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4528 hdw->state_stale = !0;
4529 queue_work(hdw->workqueue,&hdw->workpoll);
4533 /* Timeout function for decoder stabilization timer. */
4534 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data)
4536 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4537 hdw->state_decoder_ready = !0;
4538 trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4539 hdw->state_stale = !0;
4540 queue_work(hdw->workqueue, &hdw->workpoll);
4544 /* Timeout function for encoder wait timer. */
4545 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
4547 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4548 hdw->state_encoder_waitok = !0;
4549 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4550 hdw->state_stale = !0;
4551 queue_work(hdw->workqueue,&hdw->workpoll);
4555 /* Timeout function for encoder run timer. */
4556 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
4558 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4559 if (!hdw->state_encoder_runok) {
4560 hdw->state_encoder_runok = !0;
4561 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4562 hdw->state_stale = !0;
4563 queue_work(hdw->workqueue,&hdw->workpoll);
4568 /* Evaluate whether or not state_decoder_run can change */
4569 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4571 if (hdw->state_decoder_run) {
4572 if (hdw->state_encoder_ok) {
4573 if (hdw->state_pipeline_req &&
4574 !hdw->state_pipeline_pause &&
4575 hdw->state_pathway_ok) return 0;
4577 if (!hdw->flag_decoder_missed) {
4578 pvr2_decoder_enable(hdw,0);
4580 hdw->state_decoder_quiescent = 0;
4581 hdw->state_decoder_run = 0;
4582 /* paranoia - solve race if timer(s) just completed */
4583 del_timer_sync(&hdw->quiescent_timer);
4584 /* Kill the stabilization timer, in case we're killing the
4585 encoder before the previous stabilization interval has
4586 been properly timed. */
4587 del_timer_sync(&hdw->decoder_stabilization_timer);
4588 hdw->state_decoder_ready = 0;
4589 } else {
4590 if (!hdw->state_decoder_quiescent) {
4591 if (!timer_pending(&hdw->quiescent_timer)) {
4592 /* We don't do something about the
4593 quiescent timer until right here because
4594 we also want to catch cases where the
4595 decoder was already not running (like
4596 after initialization) as opposed to
4597 knowing that we had just stopped it.
4598 The second flag check is here to cover a
4599 race - the timer could have run and set
4600 this flag just after the previous check
4601 but before we did the pending check. */
4602 if (!hdw->state_decoder_quiescent) {
4603 hdw->quiescent_timer.expires =
4604 jiffies +
4605 (HZ * TIME_MSEC_DECODER_WAIT
4606 / 1000);
4607 add_timer(&hdw->quiescent_timer);
4610 /* Don't allow decoder to start again until it has
4611 been quiesced first. This little detail should
4612 hopefully further stabilize the encoder. */
4613 return 0;
4615 if (!hdw->state_pathway_ok ||
4616 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4617 !hdw->state_pipeline_req ||
4618 hdw->state_pipeline_pause ||
4619 !hdw->state_pipeline_config ||
4620 !hdw->state_encoder_config ||
4621 !hdw->state_encoder_ok) return 0;
4622 del_timer_sync(&hdw->quiescent_timer);
4623 if (hdw->flag_decoder_missed) return 0;
4624 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4625 hdw->state_decoder_quiescent = 0;
4626 hdw->state_decoder_ready = 0;
4627 hdw->state_decoder_run = !0;
4628 if (hdw->decoder_client_id == PVR2_CLIENT_ID_SAA7115) {
4629 hdw->decoder_stabilization_timer.expires =
4630 jiffies +
4631 (HZ * TIME_MSEC_DECODER_STABILIZATION_WAIT /
4632 1000);
4633 add_timer(&hdw->decoder_stabilization_timer);
4634 } else {
4635 hdw->state_decoder_ready = !0;
4638 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4639 trace_stbit("state_decoder_run",hdw->state_decoder_run);
4640 trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4641 return !0;
4645 /* Evaluate whether or not state_usbstream_run can change */
4646 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4648 if (hdw->state_usbstream_run) {
4649 int fl = !0;
4650 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4651 fl = (hdw->state_encoder_ok &&
4652 hdw->state_encoder_run);
4653 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4654 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4655 fl = hdw->state_encoder_ok;
4657 if (fl &&
4658 hdw->state_pipeline_req &&
4659 !hdw->state_pipeline_pause &&
4660 hdw->state_pathway_ok) {
4661 return 0;
4663 pvr2_hdw_cmd_usbstream(hdw,0);
4664 hdw->state_usbstream_run = 0;
4665 } else {
4666 if (!hdw->state_pipeline_req ||
4667 hdw->state_pipeline_pause ||
4668 !hdw->state_pathway_ok) return 0;
4669 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4670 if (!hdw->state_encoder_ok ||
4671 !hdw->state_encoder_run) return 0;
4672 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4673 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4674 if (!hdw->state_encoder_ok) return 0;
4675 if (hdw->state_encoder_run) return 0;
4676 if (hdw->hdw_desc->digital_control_scheme ==
4677 PVR2_DIGITAL_SCHEME_ONAIR) {
4678 /* OnAir digital receivers won't stream
4679 unless the analog encoder has run first.
4680 Why? I have no idea. But don't even
4681 try until we know the analog side is
4682 known to have run. */
4683 if (!hdw->state_encoder_runok) return 0;
4686 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4687 hdw->state_usbstream_run = !0;
4689 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4690 return !0;
4694 /* Attempt to configure pipeline, if needed */
4695 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4697 if (hdw->state_pipeline_config ||
4698 hdw->state_pipeline_pause) return 0;
4699 pvr2_hdw_commit_execute(hdw);
4700 return !0;
4704 /* Update pipeline idle and pipeline pause tracking states based on other
4705 inputs. This must be called whenever the other relevant inputs have
4706 changed. */
4707 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4709 unsigned int st;
4710 int updatedFl = 0;
4711 /* Update pipeline state */
4712 st = !(hdw->state_encoder_run ||
4713 hdw->state_decoder_run ||
4714 hdw->state_usbstream_run ||
4715 (!hdw->state_decoder_quiescent));
4716 if (!st != !hdw->state_pipeline_idle) {
4717 hdw->state_pipeline_idle = st;
4718 updatedFl = !0;
4720 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4721 hdw->state_pipeline_pause = 0;
4722 updatedFl = !0;
4724 return updatedFl;
4728 typedef int (*state_eval_func)(struct pvr2_hdw *);
4730 /* Set of functions to be run to evaluate various states in the driver. */
4731 static const state_eval_func eval_funcs[] = {
4732 state_eval_pathway_ok,
4733 state_eval_pipeline_config,
4734 state_eval_encoder_ok,
4735 state_eval_encoder_config,
4736 state_eval_decoder_run,
4737 state_eval_encoder_run,
4738 state_eval_usbstream_run,
4742 /* Process various states and return true if we did anything interesting. */
4743 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4745 unsigned int i;
4746 int state_updated = 0;
4747 int check_flag;
4749 if (!hdw->state_stale) return 0;
4750 if ((hdw->fw1_state != FW1_STATE_OK) ||
4751 !hdw->flag_ok) {
4752 hdw->state_stale = 0;
4753 return !0;
4755 /* This loop is the heart of the entire driver. It keeps trying to
4756 evaluate various bits of driver state until nothing changes for
4757 one full iteration. Each "bit of state" tracks some global
4758 aspect of the driver, e.g. whether decoder should run, if
4759 pipeline is configured, usb streaming is on, etc. We separately
4760 evaluate each of those questions based on other driver state to
4761 arrive at the correct running configuration. */
4762 do {
4763 check_flag = 0;
4764 state_update_pipeline_state(hdw);
4765 /* Iterate over each bit of state */
4766 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4767 if ((*eval_funcs[i])(hdw)) {
4768 check_flag = !0;
4769 state_updated = !0;
4770 state_update_pipeline_state(hdw);
4773 } while (check_flag && hdw->flag_ok);
4774 hdw->state_stale = 0;
4775 trace_stbit("state_stale",hdw->state_stale);
4776 return state_updated;
4780 static unsigned int print_input_mask(unsigned int msk,
4781 char *buf,unsigned int acnt)
4783 unsigned int idx,ccnt;
4784 unsigned int tcnt = 0;
4785 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4786 if (!((1 << idx) & msk)) continue;
4787 ccnt = scnprintf(buf+tcnt,
4788 acnt-tcnt,
4789 "%s%s",
4790 (tcnt ? ", " : ""),
4791 control_values_input[idx]);
4792 tcnt += ccnt;
4794 return tcnt;
4798 static const char *pvr2_pathway_state_name(int id)
4800 switch (id) {
4801 case PVR2_PATHWAY_ANALOG: return "analog";
4802 case PVR2_PATHWAY_DIGITAL: return "digital";
4803 default: return "unknown";
4808 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4809 char *buf,unsigned int acnt)
4811 switch (which) {
4812 case 0:
4813 return scnprintf(
4814 buf,acnt,
4815 "driver:%s%s%s%s%s <mode=%s>",
4816 (hdw->flag_ok ? " <ok>" : " <fail>"),
4817 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4818 (hdw->flag_disconnected ? " <disconnected>" :
4819 " <connected>"),
4820 (hdw->flag_tripped ? " <tripped>" : ""),
4821 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4822 pvr2_pathway_state_name(hdw->pathway_state));
4824 case 1:
4825 return scnprintf(
4826 buf,acnt,
4827 "pipeline:%s%s%s%s",
4828 (hdw->state_pipeline_idle ? " <idle>" : ""),
4829 (hdw->state_pipeline_config ?
4830 " <configok>" : " <stale>"),
4831 (hdw->state_pipeline_req ? " <req>" : ""),
4832 (hdw->state_pipeline_pause ? " <pause>" : ""));
4833 case 2:
4834 return scnprintf(
4835 buf,acnt,
4836 "worker:%s%s%s%s%s%s%s",
4837 (hdw->state_decoder_run ?
4838 (hdw->state_decoder_ready ?
4839 "<decode:run>" : " <decode:start>") :
4840 (hdw->state_decoder_quiescent ?
4841 "" : " <decode:stop>")),
4842 (hdw->state_decoder_quiescent ?
4843 " <decode:quiescent>" : ""),
4844 (hdw->state_encoder_ok ?
4845 "" : " <encode:init>"),
4846 (hdw->state_encoder_run ?
4847 (hdw->state_encoder_runok ?
4848 " <encode:run>" :
4849 " <encode:firstrun>") :
4850 (hdw->state_encoder_runok ?
4851 " <encode:stop>" :
4852 " <encode:virgin>")),
4853 (hdw->state_encoder_config ?
4854 " <encode:configok>" :
4855 (hdw->state_encoder_waitok ?
4856 "" : " <encode:waitok>")),
4857 (hdw->state_usbstream_run ?
4858 " <usb:run>" : " <usb:stop>"),
4859 (hdw->state_pathway_ok ?
4860 " <pathway:ok>" : ""));
4861 case 3:
4862 return scnprintf(
4863 buf,acnt,
4864 "state: %s",
4865 pvr2_get_state_name(hdw->master_state));
4866 case 4: {
4867 unsigned int tcnt = 0;
4868 unsigned int ccnt;
4870 ccnt = scnprintf(buf,
4871 acnt,
4872 "Hardware supported inputs: ");
4873 tcnt += ccnt;
4874 tcnt += print_input_mask(hdw->input_avail_mask,
4875 buf+tcnt,
4876 acnt-tcnt);
4877 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4878 ccnt = scnprintf(buf+tcnt,
4879 acnt-tcnt,
4880 "; allowed inputs: ");
4881 tcnt += ccnt;
4882 tcnt += print_input_mask(hdw->input_allowed_mask,
4883 buf+tcnt,
4884 acnt-tcnt);
4886 return tcnt;
4888 case 5: {
4889 struct pvr2_stream_stats stats;
4890 if (!hdw->vid_stream) break;
4891 pvr2_stream_get_stats(hdw->vid_stream,
4892 &stats,
4894 return scnprintf(
4895 buf,acnt,
4896 "Bytes streamed=%u"
4897 " URBs: queued=%u idle=%u ready=%u"
4898 " processed=%u failed=%u",
4899 stats.bytes_processed,
4900 stats.buffers_in_queue,
4901 stats.buffers_in_idle,
4902 stats.buffers_in_ready,
4903 stats.buffers_processed,
4904 stats.buffers_failed);
4906 case 6: {
4907 unsigned int id = hdw->ir_scheme_active;
4908 return scnprintf(buf, acnt, "ir scheme: id=%d %s", id,
4909 (id >= ARRAY_SIZE(ir_scheme_names) ?
4910 "?" : ir_scheme_names[id]));
4912 default: break;
4914 return 0;
4918 /* Generate report containing info about attached sub-devices and attached
4919 i2c clients, including an indication of which attached i2c clients are
4920 actually sub-devices. */
4921 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
4922 char *buf, unsigned int acnt)
4924 struct v4l2_subdev *sd;
4925 unsigned int tcnt = 0;
4926 unsigned int ccnt;
4927 struct i2c_client *client;
4928 const char *p;
4929 unsigned int id;
4931 ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
4932 tcnt += ccnt;
4933 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4934 id = sd->grp_id;
4935 p = NULL;
4936 if (id < ARRAY_SIZE(module_names)) p = module_names[id];
4937 if (p) {
4938 ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s:", p);
4939 tcnt += ccnt;
4940 } else {
4941 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4942 " (unknown id=%u):", id);
4943 tcnt += ccnt;
4945 client = v4l2_get_subdevdata(sd);
4946 if (client) {
4947 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4948 " %s @ %02x\n", client->name,
4949 client->addr);
4950 tcnt += ccnt;
4951 } else {
4952 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4953 " no i2c client\n");
4954 tcnt += ccnt;
4957 return tcnt;
4961 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4962 char *buf,unsigned int acnt)
4964 unsigned int bcnt,ccnt,idx;
4965 bcnt = 0;
4966 LOCK_TAKE(hdw->big_lock);
4967 for (idx = 0; ; idx++) {
4968 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4969 if (!ccnt) break;
4970 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4971 if (!acnt) break;
4972 buf[0] = '\n'; ccnt = 1;
4973 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4975 ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
4976 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4977 LOCK_GIVE(hdw->big_lock);
4978 return bcnt;
4982 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4984 char buf[256];
4985 unsigned int idx, ccnt;
4986 unsigned int lcnt, ucnt;
4988 for (idx = 0; ; idx++) {
4989 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4990 if (!ccnt) break;
4991 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4993 ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
4994 ucnt = 0;
4995 while (ucnt < ccnt) {
4996 lcnt = 0;
4997 while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
4998 lcnt++;
5000 printk(KERN_INFO "%s %.*s\n", hdw->name, lcnt, buf + ucnt);
5001 ucnt += lcnt + 1;
5006 /* Evaluate and update the driver's current state, taking various actions
5007 as appropriate for the update. */
5008 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
5010 unsigned int st;
5011 int state_updated = 0;
5012 int callback_flag = 0;
5013 int analog_mode;
5015 pvr2_trace(PVR2_TRACE_STBITS,
5016 "Drive state check START");
5017 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
5018 pvr2_hdw_state_log_state(hdw);
5021 /* Process all state and get back over disposition */
5022 state_updated = pvr2_hdw_state_update(hdw);
5024 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
5026 /* Update master state based upon all other states. */
5027 if (!hdw->flag_ok) {
5028 st = PVR2_STATE_DEAD;
5029 } else if (hdw->fw1_state != FW1_STATE_OK) {
5030 st = PVR2_STATE_COLD;
5031 } else if ((analog_mode ||
5032 hdw->hdw_desc->flag_digital_requires_cx23416) &&
5033 !hdw->state_encoder_ok) {
5034 st = PVR2_STATE_WARM;
5035 } else if (hdw->flag_tripped ||
5036 (analog_mode && hdw->flag_decoder_missed)) {
5037 st = PVR2_STATE_ERROR;
5038 } else if (hdw->state_usbstream_run &&
5039 (!analog_mode ||
5040 (hdw->state_encoder_run && hdw->state_decoder_run))) {
5041 st = PVR2_STATE_RUN;
5042 } else {
5043 st = PVR2_STATE_READY;
5045 if (hdw->master_state != st) {
5046 pvr2_trace(PVR2_TRACE_STATE,
5047 "Device state change from %s to %s",
5048 pvr2_get_state_name(hdw->master_state),
5049 pvr2_get_state_name(st));
5050 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
5051 hdw->master_state = st;
5052 state_updated = !0;
5053 callback_flag = !0;
5055 if (state_updated) {
5056 /* Trigger anyone waiting on any state changes here. */
5057 wake_up(&hdw->state_wait_data);
5060 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
5061 pvr2_hdw_state_log_state(hdw);
5063 pvr2_trace(PVR2_TRACE_STBITS,
5064 "Drive state check DONE callback=%d",callback_flag);
5066 return callback_flag;
5070 /* Cause kernel thread to check / update driver state */
5071 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
5073 if (hdw->state_stale) return;
5074 hdw->state_stale = !0;
5075 trace_stbit("state_stale",hdw->state_stale);
5076 queue_work(hdw->workqueue,&hdw->workpoll);
5080 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
5082 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
5086 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
5088 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
5092 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
5094 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
5098 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
5100 u32 cval,nval;
5101 int ret;
5102 if (~msk) {
5103 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
5104 if (ret) return ret;
5105 nval = (cval & ~msk) | (val & msk);
5106 pvr2_trace(PVR2_TRACE_GPIO,
5107 "GPIO direction changing 0x%x:0x%x"
5108 " from 0x%x to 0x%x",
5109 msk,val,cval,nval);
5110 } else {
5111 nval = val;
5112 pvr2_trace(PVR2_TRACE_GPIO,
5113 "GPIO direction changing to 0x%x",nval);
5115 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
5119 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
5121 u32 cval,nval;
5122 int ret;
5123 if (~msk) {
5124 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
5125 if (ret) return ret;
5126 nval = (cval & ~msk) | (val & msk);
5127 pvr2_trace(PVR2_TRACE_GPIO,
5128 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5129 msk,val,cval,nval);
5130 } else {
5131 nval = val;
5132 pvr2_trace(PVR2_TRACE_GPIO,
5133 "GPIO output changing to 0x%x",nval);
5135 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
5139 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
5141 struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
5142 memset(vtp, 0, sizeof(*vtp));
5143 hdw->tuner_signal_stale = 0;
5144 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5145 using v4l2-subdev - therefore we can't support that AT ALL right
5146 now. (Of course, no sub-drivers seem to implement it either.
5147 But now it's a a chicken and egg problem...) */
5148 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner,
5149 &hdw->tuner_signal_info);
5150 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll"
5151 " type=%u strength=%u audio=0x%x cap=0x%x"
5152 " low=%u hi=%u",
5153 vtp->type,
5154 vtp->signal, vtp->rxsubchans, vtp->capability,
5155 vtp->rangelow, vtp->rangehigh);
5157 /* We have to do this to avoid getting into constant polling if
5158 there's nobody to answer a poll of cropcap info. */
5159 hdw->cropcap_stale = 0;
5163 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5165 return hdw->input_avail_mask;
5169 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5171 return hdw->input_allowed_mask;
5175 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5177 if (hdw->input_val != v) {
5178 hdw->input_val = v;
5179 hdw->input_dirty = !0;
5182 /* Handle side effects - if we switch to a mode that needs the RF
5183 tuner, then select the right frequency choice as well and mark
5184 it dirty. */
5185 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5186 hdw->freqSelector = 0;
5187 hdw->freqDirty = !0;
5188 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5189 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5190 hdw->freqSelector = 1;
5191 hdw->freqDirty = !0;
5193 return 0;
5197 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5198 unsigned int change_mask,
5199 unsigned int change_val)
5201 int ret = 0;
5202 unsigned int nv,m,idx;
5203 LOCK_TAKE(hdw->big_lock);
5204 do {
5205 nv = hdw->input_allowed_mask & ~change_mask;
5206 nv |= (change_val & change_mask);
5207 nv &= hdw->input_avail_mask;
5208 if (!nv) {
5209 /* No legal modes left; return error instead. */
5210 ret = -EPERM;
5211 break;
5213 hdw->input_allowed_mask = nv;
5214 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5215 /* Current mode is still in the allowed mask, so
5216 we're done. */
5217 break;
5219 /* Select and switch to a mode that is still in the allowed
5220 mask */
5221 if (!hdw->input_allowed_mask) {
5222 /* Nothing legal; give up */
5223 break;
5225 m = hdw->input_allowed_mask;
5226 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5227 if (!((1 << idx) & m)) continue;
5228 pvr2_hdw_set_input(hdw,idx);
5229 break;
5231 } while (0);
5232 LOCK_GIVE(hdw->big_lock);
5233 return ret;
5237 /* Find I2C address of eeprom */
5238 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5240 int result;
5241 LOCK_TAKE(hdw->ctl_lock); do {
5242 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5243 result = pvr2_send_request(hdw,
5244 hdw->cmd_buffer,1,
5245 hdw->cmd_buffer,1);
5246 if (result < 0) break;
5247 result = hdw->cmd_buffer[0];
5248 } while(0); LOCK_GIVE(hdw->ctl_lock);
5249 return result;
5253 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
5254 struct v4l2_dbg_match *match, u64 reg_id,
5255 int setFl, u64 *val_ptr)
5257 #ifdef CONFIG_VIDEO_ADV_DEBUG
5258 struct v4l2_dbg_register req;
5259 int stat = 0;
5260 int okFl = 0;
5262 if (!capable(CAP_SYS_ADMIN)) return -EPERM;
5264 req.match = *match;
5265 req.reg = reg_id;
5266 if (setFl) req.val = *val_ptr;
5267 /* It would be nice to know if a sub-device answered the request */
5268 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, g_register, &req);
5269 if (!setFl) *val_ptr = req.val;
5270 if (okFl) {
5271 return stat;
5273 return -EINVAL;
5274 #else
5275 return -ENOSYS;
5276 #endif
5281 Stuff for Emacs to see, in order to encourage consistent editing style:
5282 *** Local Variables: ***
5283 *** mode: c ***
5284 *** fill-column: 75 ***
5285 *** tab-width: 8 ***
5286 *** c-basic-offset: 8 ***
5287 *** End: ***