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.
17 #include <linux/errno.h>
18 #include <linux/string.h>
19 #include <linux/slab.h>
20 #include <linux/module.h>
21 #include <linux/firmware.h>
22 #include <linux/videodev2.h>
23 #include <media/v4l2-common.h>
24 #include <media/tuner.h>
26 #include "pvrusb2-std.h"
27 #include "pvrusb2-util.h"
28 #include "pvrusb2-hdw.h"
29 #include "pvrusb2-i2c-core.h"
30 #include "pvrusb2-eeprom.h"
31 #include "pvrusb2-hdw-internal.h"
32 #include "pvrusb2-encoder.h"
33 #include "pvrusb2-debug.h"
34 #include "pvrusb2-fx2-cmd.h"
35 #include "pvrusb2-wm8775.h"
36 #include "pvrusb2-video-v4l.h"
37 #include "pvrusb2-cx2584x-v4l.h"
38 #include "pvrusb2-cs53l32a.h"
39 #include "pvrusb2-audio.h"
41 #define TV_MIN_FREQ 55250000L
42 #define TV_MAX_FREQ 850000000L
44 /* This defines a minimum interval that the decoder must remain quiet
45 before we are allowed to start it running. */
46 #define TIME_MSEC_DECODER_WAIT 50
48 /* This defines a minimum interval that the decoder must be allowed to run
49 before we can safely begin using its streaming output. */
50 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
52 /* This defines a minimum interval that the encoder must remain quiet
53 before we are allowed to configure it. */
54 #define TIME_MSEC_ENCODER_WAIT 50
56 /* This defines the minimum interval that the encoder must successfully run
57 before we consider that the encoder has run at least once since its
58 firmware has been loaded. This measurement is in important for cases
59 where we can't do something until we know that the encoder has been run
61 #define TIME_MSEC_ENCODER_OK 250
63 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
64 static DEFINE_MUTEX(pvr2_unit_mtx);
67 static int procreload;
68 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
69 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
70 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
71 static int init_pause_msec;
73 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
74 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
75 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
76 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
77 module_param(procreload, int, S_IRUGO|S_IWUSR);
78 MODULE_PARM_DESC(procreload,
79 "Attempt init failure recovery with firmware reload");
80 module_param_array(tuner, int, NULL, 0444);
81 MODULE_PARM_DESC(tuner,"specify installed tuner type");
82 module_param_array(video_std, int, NULL, 0444);
83 MODULE_PARM_DESC(video_std,"specify initial video standard");
84 module_param_array(tolerance, int, NULL, 0444);
85 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
87 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
88 static int default_tv_freq = 61250000L;
89 /* 104.3 MHz, a usable FM station for my area */
90 static int default_radio_freq = 104300000L;
92 module_param_named(tv_freq, default_tv_freq, int, 0444);
93 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
94 module_param_named(radio_freq, default_radio_freq, int, 0444);
95 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
97 #define PVR2_CTL_WRITE_ENDPOINT 0x01
98 #define PVR2_CTL_READ_ENDPOINT 0x81
100 #define PVR2_GPIO_IN 0x9008
101 #define PVR2_GPIO_OUT 0x900c
102 #define PVR2_GPIO_DIR 0x9020
104 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
106 #define PVR2_FIRMWARE_ENDPOINT 0x02
108 /* size of a firmware chunk */
109 #define FIRMWARE_CHUNK_SIZE 0x2000
111 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
112 struct v4l2_subdev *);
114 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
115 [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
116 [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
117 [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
118 [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update,
119 [PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update,
122 static const char *module_names[] = {
123 [PVR2_CLIENT_ID_MSP3400] = "msp3400",
124 [PVR2_CLIENT_ID_CX25840] = "cx25840",
125 [PVR2_CLIENT_ID_SAA7115] = "saa7115",
126 [PVR2_CLIENT_ID_TUNER] = "tuner",
127 [PVR2_CLIENT_ID_DEMOD] = "tuner",
128 [PVR2_CLIENT_ID_CS53L32A] = "cs53l32a",
129 [PVR2_CLIENT_ID_WM8775] = "wm8775",
133 static const unsigned char *module_i2c_addresses[] = {
134 [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
135 [PVR2_CLIENT_ID_DEMOD] = "\x43",
136 [PVR2_CLIENT_ID_MSP3400] = "\x40",
137 [PVR2_CLIENT_ID_SAA7115] = "\x21",
138 [PVR2_CLIENT_ID_WM8775] = "\x1b",
139 [PVR2_CLIENT_ID_CX25840] = "\x44",
140 [PVR2_CLIENT_ID_CS53L32A] = "\x11",
144 static const char *ir_scheme_names[] = {
145 [PVR2_IR_SCHEME_NONE] = "none",
146 [PVR2_IR_SCHEME_29XXX] = "29xxx",
147 [PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)",
148 [PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)",
149 [PVR2_IR_SCHEME_ZILOG] = "Zilog",
153 /* Define the list of additional controls we'll dynamically construct based
154 on query of the cx2341x module. */
155 struct pvr2_mpeg_ids {
159 static const struct pvr2_mpeg_ids mpeg_ids[] = {
161 .strid = "audio_layer",
162 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
164 .strid = "audio_bitrate",
165 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
167 /* Already using audio_mode elsewhere :-( */
168 .strid = "mpeg_audio_mode",
169 .id = V4L2_CID_MPEG_AUDIO_MODE,
171 .strid = "mpeg_audio_mode_extension",
172 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
174 .strid = "audio_emphasis",
175 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
177 .strid = "audio_crc",
178 .id = V4L2_CID_MPEG_AUDIO_CRC,
180 .strid = "video_aspect",
181 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
183 .strid = "video_b_frames",
184 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
186 .strid = "video_gop_size",
187 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
189 .strid = "video_gop_closure",
190 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
192 .strid = "video_bitrate_mode",
193 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
195 .strid = "video_bitrate",
196 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
198 .strid = "video_bitrate_peak",
199 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
201 .strid = "video_temporal_decimation",
202 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
204 .strid = "stream_type",
205 .id = V4L2_CID_MPEG_STREAM_TYPE,
207 .strid = "video_spatial_filter_mode",
208 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
210 .strid = "video_spatial_filter",
211 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
213 .strid = "video_luma_spatial_filter_type",
214 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
216 .strid = "video_chroma_spatial_filter_type",
217 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
219 .strid = "video_temporal_filter_mode",
220 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
222 .strid = "video_temporal_filter",
223 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
225 .strid = "video_median_filter_type",
226 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
228 .strid = "video_luma_median_filter_top",
229 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
231 .strid = "video_luma_median_filter_bottom",
232 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
234 .strid = "video_chroma_median_filter_top",
235 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
237 .strid = "video_chroma_median_filter_bottom",
238 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
241 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
244 static const char *control_values_srate[] = {
245 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
246 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
247 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
252 static const char *control_values_input[] = {
253 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
254 [PVR2_CVAL_INPUT_DTV] = "dtv",
255 [PVR2_CVAL_INPUT_RADIO] = "radio",
256 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
257 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
261 static const char *control_values_audiomode[] = {
262 [V4L2_TUNER_MODE_MONO] = "Mono",
263 [V4L2_TUNER_MODE_STEREO] = "Stereo",
264 [V4L2_TUNER_MODE_LANG1] = "Lang1",
265 [V4L2_TUNER_MODE_LANG2] = "Lang2",
266 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
270 static const char *control_values_hsm[] = {
271 [PVR2_CVAL_HSM_FAIL] = "Fail",
272 [PVR2_CVAL_HSM_HIGH] = "High",
273 [PVR2_CVAL_HSM_FULL] = "Full",
277 static const char *pvr2_state_names[] = {
278 [PVR2_STATE_NONE] = "none",
279 [PVR2_STATE_DEAD] = "dead",
280 [PVR2_STATE_COLD] = "cold",
281 [PVR2_STATE_WARM] = "warm",
282 [PVR2_STATE_ERROR] = "error",
283 [PVR2_STATE_READY] = "ready",
284 [PVR2_STATE_RUN] = "run",
288 struct pvr2_fx2cmd_descdef {
293 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
294 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
295 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
296 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
297 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
298 {FX2CMD_REG_WRITE, "write encoder register"},
299 {FX2CMD_REG_READ, "read encoder register"},
300 {FX2CMD_MEMSEL, "encoder memsel"},
301 {FX2CMD_I2C_WRITE, "i2c write"},
302 {FX2CMD_I2C_READ, "i2c read"},
303 {FX2CMD_GET_USB_SPEED, "get USB speed"},
304 {FX2CMD_STREAMING_ON, "stream on"},
305 {FX2CMD_STREAMING_OFF, "stream off"},
306 {FX2CMD_FWPOST1, "fwpost1"},
307 {FX2CMD_POWER_OFF, "power off"},
308 {FX2CMD_POWER_ON, "power on"},
309 {FX2CMD_DEEP_RESET, "deep reset"},
310 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
311 {FX2CMD_GET_IR_CODE, "get IR code"},
312 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
313 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
314 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
315 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
316 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
317 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
318 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
322 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
323 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
324 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
325 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
326 static void pvr2_hdw_worker_poll(struct work_struct *work);
327 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
328 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
329 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
330 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
331 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
332 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
333 static void pvr2_hdw_quiescent_timeout(unsigned long);
334 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
335 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
336 static void pvr2_hdw_encoder_run_timeout(unsigned long);
337 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
338 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
339 unsigned int timeout,int probe_fl,
340 void *write_data,unsigned int write_len,
341 void *read_data,unsigned int read_len);
342 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
343 static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw);
345 static void trace_stbit(const char *name,int val)
347 pvr2_trace(PVR2_TRACE_STBITS,
348 "State bit %s <-- %s",
349 name,(val ? "true" : "false"));
352 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
354 struct pvr2_hdw *hdw = cptr->hdw;
355 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
356 *vp = hdw->freqTable[hdw->freqProgSlot-1];
363 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
365 struct pvr2_hdw *hdw = cptr->hdw;
366 unsigned int slotId = hdw->freqProgSlot;
367 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
368 hdw->freqTable[slotId-1] = v;
369 /* Handle side effects correctly - if we're tuned to this
370 slot, then forgot the slot id relation since the stored
371 frequency has been changed. */
372 if (hdw->freqSelector) {
373 if (hdw->freqSlotRadio == slotId) {
374 hdw->freqSlotRadio = 0;
377 if (hdw->freqSlotTelevision == slotId) {
378 hdw->freqSlotTelevision = 0;
385 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
387 *vp = cptr->hdw->freqProgSlot;
391 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
393 struct pvr2_hdw *hdw = cptr->hdw;
394 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
395 hdw->freqProgSlot = v;
400 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
402 struct pvr2_hdw *hdw = cptr->hdw;
403 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
407 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
410 struct pvr2_hdw *hdw = cptr->hdw;
411 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
413 freq = hdw->freqTable[slotId-1];
415 pvr2_hdw_set_cur_freq(hdw,freq);
417 if (hdw->freqSelector) {
418 hdw->freqSlotRadio = slotId;
420 hdw->freqSlotTelevision = slotId;
425 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
427 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
431 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
433 return cptr->hdw->freqDirty != 0;
436 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
438 cptr->hdw->freqDirty = 0;
441 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
443 pvr2_hdw_set_cur_freq(cptr->hdw,v);
447 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
449 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
450 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
454 *left = cap->bounds.left;
458 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
460 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
461 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
465 *left = cap->bounds.left;
466 if (cap->bounds.width > cptr->hdw->cropw_val) {
467 *left += cap->bounds.width - cptr->hdw->cropw_val;
472 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
474 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
475 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
479 *top = cap->bounds.top;
483 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
485 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
486 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
490 *top = cap->bounds.top;
491 if (cap->bounds.height > cptr->hdw->croph_val) {
492 *top += cap->bounds.height - cptr->hdw->croph_val;
497 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *width)
499 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
500 int stat, bleftend, cleft;
502 stat = pvr2_hdw_check_cropcap(cptr->hdw);
506 bleftend = cap->bounds.left+cap->bounds.width;
507 cleft = cptr->hdw->cropl_val;
509 *width = cleft < bleftend ? bleftend-cleft : 0;
513 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *height)
515 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
516 int stat, btopend, ctop;
518 stat = pvr2_hdw_check_cropcap(cptr->hdw);
522 btopend = cap->bounds.top+cap->bounds.height;
523 ctop = cptr->hdw->cropt_val;
525 *height = ctop < btopend ? btopend-ctop : 0;
529 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
531 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
532 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
536 *val = cap->bounds.left;
540 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
542 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
543 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
547 *val = cap->bounds.top;
551 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
553 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
554 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
558 *val = cap->bounds.width;
562 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
564 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
565 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
569 *val = cap->bounds.height;
573 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
575 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
576 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
580 *val = cap->defrect.left;
584 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
586 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
587 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
591 *val = cap->defrect.top;
595 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
597 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
598 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
602 *val = cap->defrect.width;
606 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
608 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
609 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
613 *val = cap->defrect.height;
617 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
619 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
620 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
624 *val = cap->pixelaspect.numerator;
628 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
630 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
631 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
635 *val = cap->pixelaspect.denominator;
639 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
641 /* Actual maximum depends on the video standard in effect. */
642 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
650 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
652 /* Actual minimum depends on device digitizer type. */
653 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
661 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
663 *vp = cptr->hdw->input_val;
667 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
669 if (v < 0 || v > PVR2_CVAL_INPUT_MAX)
671 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
674 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
676 return pvr2_hdw_set_input(cptr->hdw,v);
679 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
681 return cptr->hdw->input_dirty != 0;
684 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
686 cptr->hdw->input_dirty = 0;
690 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
693 struct pvr2_hdw *hdw = cptr->hdw;
694 if (hdw->tuner_signal_stale) {
695 pvr2_hdw_status_poll(hdw);
697 fv = hdw->tuner_signal_info.rangehigh;
699 /* Safety fallback */
703 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
712 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
715 struct pvr2_hdw *hdw = cptr->hdw;
716 if (hdw->tuner_signal_stale) {
717 pvr2_hdw_status_poll(hdw);
719 fv = hdw->tuner_signal_info.rangelow;
721 /* Safety fallback */
725 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
734 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
736 return cptr->hdw->enc_stale != 0;
739 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
741 cptr->hdw->enc_stale = 0;
742 cptr->hdw->enc_unsafe_stale = 0;
745 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
748 struct v4l2_ext_controls cs;
749 struct v4l2_ext_control c1;
750 memset(&cs,0,sizeof(cs));
751 memset(&c1,0,sizeof(c1));
754 c1.id = cptr->info->v4l_id;
755 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
762 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
765 struct pvr2_hdw *hdw = cptr->hdw;
766 struct v4l2_ext_controls cs;
767 struct v4l2_ext_control c1;
768 memset(&cs,0,sizeof(cs));
769 memset(&c1,0,sizeof(c1));
772 c1.id = cptr->info->v4l_id;
774 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
775 hdw->state_encoder_run, &cs,
778 /* Oops. cx2341x is telling us it's not safe to change
779 this control while we're capturing. Make a note of this
780 fact so that the pipeline will be stopped the next time
781 controls are committed. Then go on ahead and store this
783 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
786 if (!ret) hdw->enc_unsafe_stale = !0;
793 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
795 struct v4l2_queryctrl qctrl;
796 struct pvr2_ctl_info *info;
797 qctrl.id = cptr->info->v4l_id;
798 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
799 /* Strip out the const so we can adjust a function pointer. It's
800 OK to do this here because we know this is a dynamically created
801 control, so the underlying storage for the info pointer is (a)
802 private to us, and (b) not in read-only storage. Either we do
803 this or we significantly complicate the underlying control
805 info = (struct pvr2_ctl_info *)(cptr->info);
806 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
807 if (info->set_value) {
808 info->set_value = NULL;
811 if (!(info->set_value)) {
812 info->set_value = ctrl_cx2341x_set;
818 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
820 *vp = cptr->hdw->state_pipeline_req;
824 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
826 *vp = cptr->hdw->master_state;
830 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
832 int result = pvr2_hdw_is_hsm(cptr->hdw);
833 *vp = PVR2_CVAL_HSM_FULL;
834 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
835 if (result) *vp = PVR2_CVAL_HSM_HIGH;
839 static int ctrl_stddetect_get(struct pvr2_ctrl *cptr, int *vp)
841 *vp = pvr2_hdw_get_detected_std(cptr->hdw);
845 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
847 *vp = cptr->hdw->std_mask_avail;
851 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
853 struct pvr2_hdw *hdw = cptr->hdw;
855 ns = hdw->std_mask_avail;
856 ns = (ns & ~m) | (v & m);
857 if (ns == hdw->std_mask_avail) return 0;
858 hdw->std_mask_avail = ns;
859 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
863 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
864 char *bufPtr,unsigned int bufSize,
867 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
871 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
872 const char *bufPtr,unsigned int bufSize,
877 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
878 if (ret < 0) return ret;
879 if (mskp) *mskp = id;
880 if (valp) *valp = id;
884 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
886 *vp = cptr->hdw->std_mask_cur;
890 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
892 struct pvr2_hdw *hdw = cptr->hdw;
894 ns = hdw->std_mask_cur;
895 ns = (ns & ~m) | (v & m);
896 if (ns == hdw->std_mask_cur) return 0;
897 hdw->std_mask_cur = ns;
902 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
904 return cptr->hdw->std_dirty != 0;
907 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
909 cptr->hdw->std_dirty = 0;
912 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
914 struct pvr2_hdw *hdw = cptr->hdw;
915 pvr2_hdw_status_poll(hdw);
916 *vp = hdw->tuner_signal_info.signal;
920 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
923 unsigned int subchan;
924 struct pvr2_hdw *hdw = cptr->hdw;
925 pvr2_hdw_status_poll(hdw);
926 subchan = hdw->tuner_signal_info.rxsubchans;
927 if (subchan & V4L2_TUNER_SUB_MONO) {
928 val |= (1 << V4L2_TUNER_MODE_MONO);
930 if (subchan & V4L2_TUNER_SUB_STEREO) {
931 val |= (1 << V4L2_TUNER_MODE_STEREO);
933 if (subchan & V4L2_TUNER_SUB_LANG1) {
934 val |= (1 << V4L2_TUNER_MODE_LANG1);
936 if (subchan & V4L2_TUNER_SUB_LANG2) {
937 val |= (1 << V4L2_TUNER_MODE_LANG2);
944 #define DEFINT(vmin,vmax) \
945 .type = pvr2_ctl_int, \
946 .def.type_int.min_value = vmin, \
947 .def.type_int.max_value = vmax
949 #define DEFENUM(tab) \
950 .type = pvr2_ctl_enum, \
951 .def.type_enum.count = ARRAY_SIZE(tab), \
952 .def.type_enum.value_names = tab
955 .type = pvr2_ctl_bool
957 #define DEFMASK(msk,tab) \
958 .type = pvr2_ctl_bitmask, \
959 .def.type_bitmask.valid_bits = msk, \
960 .def.type_bitmask.bit_names = tab
962 #define DEFREF(vname) \
963 .set_value = ctrl_set_##vname, \
964 .get_value = ctrl_get_##vname, \
965 .is_dirty = ctrl_isdirty_##vname, \
966 .clear_dirty = ctrl_cleardirty_##vname
969 #define VCREATE_FUNCS(vname) \
970 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
971 {*vp = cptr->hdw->vname##_val; return 0;} \
972 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
973 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
974 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
975 {return cptr->hdw->vname##_dirty != 0;} \
976 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
977 {cptr->hdw->vname##_dirty = 0;}
979 VCREATE_FUNCS(brightness)
980 VCREATE_FUNCS(contrast)
981 VCREATE_FUNCS(saturation)
983 VCREATE_FUNCS(volume)
984 VCREATE_FUNCS(balance)
986 VCREATE_FUNCS(treble)
992 VCREATE_FUNCS(audiomode)
993 VCREATE_FUNCS(res_hor)
994 VCREATE_FUNCS(res_ver)
997 /* Table definition of all controls which can be manipulated */
998 static const struct pvr2_ctl_info control_defs[] = {
1000 .v4l_id = V4L2_CID_BRIGHTNESS,
1001 .desc = "Brightness",
1002 .name = "brightness",
1003 .default_value = 128,
1007 .v4l_id = V4L2_CID_CONTRAST,
1010 .default_value = 68,
1014 .v4l_id = V4L2_CID_SATURATION,
1015 .desc = "Saturation",
1016 .name = "saturation",
1017 .default_value = 64,
1021 .v4l_id = V4L2_CID_HUE,
1028 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1031 .default_value = 62000,
1035 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1040 DEFINT(-32768,32767),
1042 .v4l_id = V4L2_CID_AUDIO_BASS,
1047 DEFINT(-32768,32767),
1049 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1054 DEFINT(-32768,32767),
1056 .v4l_id = V4L2_CID_AUDIO_MUTE,
1063 .desc = "Capture crop left margin",
1064 .name = "crop_left",
1065 .internal_id = PVR2_CID_CROPL,
1069 .get_min_value = ctrl_cropl_min_get,
1070 .get_max_value = ctrl_cropl_max_get,
1071 .get_def_value = ctrl_get_cropcapdl,
1073 .desc = "Capture crop top margin",
1075 .internal_id = PVR2_CID_CROPT,
1079 .get_min_value = ctrl_cropt_min_get,
1080 .get_max_value = ctrl_cropt_max_get,
1081 .get_def_value = ctrl_get_cropcapdt,
1083 .desc = "Capture crop width",
1084 .name = "crop_width",
1085 .internal_id = PVR2_CID_CROPW,
1086 .default_value = 720,
1089 .get_max_value = ctrl_cropw_max_get,
1090 .get_def_value = ctrl_get_cropcapdw,
1092 .desc = "Capture crop height",
1093 .name = "crop_height",
1094 .internal_id = PVR2_CID_CROPH,
1095 .default_value = 480,
1098 .get_max_value = ctrl_croph_max_get,
1099 .get_def_value = ctrl_get_cropcapdh,
1101 .desc = "Capture capability pixel aspect numerator",
1102 .name = "cropcap_pixel_numerator",
1103 .internal_id = PVR2_CID_CROPCAPPAN,
1104 .get_value = ctrl_get_cropcappan,
1106 .desc = "Capture capability pixel aspect denominator",
1107 .name = "cropcap_pixel_denominator",
1108 .internal_id = PVR2_CID_CROPCAPPAD,
1109 .get_value = ctrl_get_cropcappad,
1111 .desc = "Capture capability bounds top",
1112 .name = "cropcap_bounds_top",
1113 .internal_id = PVR2_CID_CROPCAPBT,
1114 .get_value = ctrl_get_cropcapbt,
1116 .desc = "Capture capability bounds left",
1117 .name = "cropcap_bounds_left",
1118 .internal_id = PVR2_CID_CROPCAPBL,
1119 .get_value = ctrl_get_cropcapbl,
1121 .desc = "Capture capability bounds width",
1122 .name = "cropcap_bounds_width",
1123 .internal_id = PVR2_CID_CROPCAPBW,
1124 .get_value = ctrl_get_cropcapbw,
1126 .desc = "Capture capability bounds height",
1127 .name = "cropcap_bounds_height",
1128 .internal_id = PVR2_CID_CROPCAPBH,
1129 .get_value = ctrl_get_cropcapbh,
1131 .desc = "Video Source",
1133 .internal_id = PVR2_CID_INPUT,
1134 .default_value = PVR2_CVAL_INPUT_TV,
1135 .check_value = ctrl_check_input,
1137 DEFENUM(control_values_input),
1139 .desc = "Audio Mode",
1140 .name = "audio_mode",
1141 .internal_id = PVR2_CID_AUDIOMODE,
1142 .default_value = V4L2_TUNER_MODE_STEREO,
1144 DEFENUM(control_values_audiomode),
1146 .desc = "Horizontal capture resolution",
1147 .name = "resolution_hor",
1148 .internal_id = PVR2_CID_HRES,
1149 .default_value = 720,
1153 .desc = "Vertical capture resolution",
1154 .name = "resolution_ver",
1155 .internal_id = PVR2_CID_VRES,
1156 .default_value = 480,
1159 /* Hook in check for video standard and adjust maximum
1160 depending on the standard. */
1161 .get_max_value = ctrl_vres_max_get,
1162 .get_min_value = ctrl_vres_min_get,
1164 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1165 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1166 .desc = "Audio Sampling Frequency",
1169 DEFENUM(control_values_srate),
1171 .desc = "Tuner Frequency (Hz)",
1172 .name = "frequency",
1173 .internal_id = PVR2_CID_FREQUENCY,
1175 .set_value = ctrl_freq_set,
1176 .get_value = ctrl_freq_get,
1177 .is_dirty = ctrl_freq_is_dirty,
1178 .clear_dirty = ctrl_freq_clear_dirty,
1180 /* Hook in check for input value (tv/radio) and adjust
1181 max/min values accordingly */
1182 .get_max_value = ctrl_freq_max_get,
1183 .get_min_value = ctrl_freq_min_get,
1187 .set_value = ctrl_channel_set,
1188 .get_value = ctrl_channel_get,
1189 DEFINT(0,FREQTABLE_SIZE),
1191 .desc = "Channel Program Frequency",
1192 .name = "freq_table_value",
1193 .set_value = ctrl_channelfreq_set,
1194 .get_value = ctrl_channelfreq_get,
1196 /* Hook in check for input value (tv/radio) and adjust
1197 max/min values accordingly */
1198 .get_max_value = ctrl_freq_max_get,
1199 .get_min_value = ctrl_freq_min_get,
1201 .desc = "Channel Program ID",
1202 .name = "freq_table_channel",
1203 .set_value = ctrl_channelprog_set,
1204 .get_value = ctrl_channelprog_get,
1205 DEFINT(0,FREQTABLE_SIZE),
1207 .desc = "Streaming Enabled",
1208 .name = "streaming_enabled",
1209 .get_value = ctrl_streamingenabled_get,
1212 .desc = "USB Speed",
1213 .name = "usb_speed",
1214 .get_value = ctrl_hsm_get,
1215 DEFENUM(control_values_hsm),
1217 .desc = "Master State",
1218 .name = "master_state",
1219 .get_value = ctrl_masterstate_get,
1220 DEFENUM(pvr2_state_names),
1222 .desc = "Signal Present",
1223 .name = "signal_present",
1224 .get_value = ctrl_signal_get,
1227 .desc = "Audio Modes Present",
1228 .name = "audio_modes_present",
1229 .get_value = ctrl_audio_modes_present_get,
1230 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1231 v4l. Nothing outside of this module cares about this,
1232 but I reuse it in order to also reuse the
1233 control_values_audiomode string table. */
1234 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1235 (1 << V4L2_TUNER_MODE_STEREO)|
1236 (1 << V4L2_TUNER_MODE_LANG1)|
1237 (1 << V4L2_TUNER_MODE_LANG2)),
1238 control_values_audiomode),
1240 .desc = "Video Standards Available Mask",
1241 .name = "video_standard_mask_available",
1242 .internal_id = PVR2_CID_STDAVAIL,
1244 .get_value = ctrl_stdavail_get,
1245 .set_value = ctrl_stdavail_set,
1246 .val_to_sym = ctrl_std_val_to_sym,
1247 .sym_to_val = ctrl_std_sym_to_val,
1248 .type = pvr2_ctl_bitmask,
1250 .desc = "Video Standards In Use Mask",
1251 .name = "video_standard_mask_active",
1252 .internal_id = PVR2_CID_STDCUR,
1254 .get_value = ctrl_stdcur_get,
1255 .set_value = ctrl_stdcur_set,
1256 .is_dirty = ctrl_stdcur_is_dirty,
1257 .clear_dirty = ctrl_stdcur_clear_dirty,
1258 .val_to_sym = ctrl_std_val_to_sym,
1259 .sym_to_val = ctrl_std_sym_to_val,
1260 .type = pvr2_ctl_bitmask,
1262 .desc = "Video Standards Detected Mask",
1263 .name = "video_standard_mask_detected",
1264 .internal_id = PVR2_CID_STDDETECT,
1266 .get_value = ctrl_stddetect_get,
1267 .val_to_sym = ctrl_std_val_to_sym,
1268 .sym_to_val = ctrl_std_sym_to_val,
1269 .type = pvr2_ctl_bitmask,
1273 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1276 const char *pvr2_config_get_name(enum pvr2_config cfg)
1279 case pvr2_config_empty: return "empty";
1280 case pvr2_config_mpeg: return "mpeg";
1281 case pvr2_config_vbi: return "vbi";
1282 case pvr2_config_pcm: return "pcm";
1283 case pvr2_config_rawvideo: return "raw video";
1289 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1291 return hdw->usb_dev;
1295 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1297 return hdw->serial_number;
1301 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1303 return hdw->bus_info;
1307 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1309 return hdw->identifier;
1313 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1315 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1318 /* Set the currently tuned frequency and account for all possible
1319 driver-core side effects of this action. */
1320 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1322 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1323 if (hdw->freqSelector) {
1324 /* Swing over to radio frequency selection */
1325 hdw->freqSelector = 0;
1326 hdw->freqDirty = !0;
1328 if (hdw->freqValRadio != val) {
1329 hdw->freqValRadio = val;
1330 hdw->freqSlotRadio = 0;
1331 hdw->freqDirty = !0;
1334 if (!(hdw->freqSelector)) {
1335 /* Swing over to television frequency selection */
1336 hdw->freqSelector = 1;
1337 hdw->freqDirty = !0;
1339 if (hdw->freqValTelevision != val) {
1340 hdw->freqValTelevision = val;
1341 hdw->freqSlotTelevision = 0;
1342 hdw->freqDirty = !0;
1347 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1349 return hdw->unit_number;
1353 /* Attempt to locate one of the given set of files. Messages are logged
1354 appropriate to what has been found. The return value will be 0 or
1355 greater on success (it will be the index of the file name found) and
1356 fw_entry will be filled in. Otherwise a negative error is returned on
1357 failure. If the return value is -ENOENT then no viable firmware file
1358 could be located. */
1359 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1360 const struct firmware **fw_entry,
1361 const char *fwtypename,
1362 unsigned int fwcount,
1363 const char *fwnames[])
1367 for (idx = 0; idx < fwcount; idx++) {
1368 ret = reject_firmware(fw_entry,
1370 &hdw->usb_dev->dev);
1372 trace_firmware("Located %s firmware: %s; uploading...",
1377 if (ret == -ENOENT) continue;
1378 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1379 "request_firmware fatal error with code=%d",ret);
1382 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1383 "***WARNING*** Device %s firmware seems to be missing.",
1385 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1386 "Did you install the pvrusb2 firmware files in their proper location?");
1388 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1389 "request_firmware unable to locate %s file %s",
1390 fwtypename,fwnames[0]);
1392 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1393 "request_firmware unable to locate one of the following %s files:",
1395 for (idx = 0; idx < fwcount; idx++) {
1396 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1397 "reject_firmware: Failed to find %s",
1406 * pvr2_upload_firmware1().
1408 * Send the 8051 firmware to the device. After the upload, arrange for
1409 * device to re-enumerate.
1411 * NOTE : the pointer to the firmware data given by reject_firmware()
1412 * is not suitable for an usb transaction.
1415 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1417 const struct firmware *fw_entry = NULL;
1420 unsigned int fwsize;
1424 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1425 hdw->fw1_state = FW1_STATE_OK;
1426 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1427 "Connected device type defines no firmware to upload; ignoring firmware");
1431 hdw->fw1_state = FW1_STATE_FAILED; // default result
1433 trace_firmware("pvr2_upload_firmware1");
1435 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1436 hdw->hdw_desc->fx2_firmware.cnt,
1437 hdw->hdw_desc->fx2_firmware.lst);
1439 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1443 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1445 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1446 fwsize = fw_entry->size;
1448 if ((fwsize != 0x2000) &&
1449 (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) {
1450 if (hdw->hdw_desc->flag_fx2_16kb) {
1451 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1452 "Wrong fx2 firmware size (expected 8192 or 16384, got %u)",
1455 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1456 "Wrong fx2 firmware size (expected 8192, got %u)",
1459 release_firmware(fw_entry);
1463 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1464 if (fw_ptr == NULL){
1465 release_firmware(fw_entry);
1469 /* We have to hold the CPU during firmware upload. */
1470 pvr2_hdw_cpureset_assert(hdw,1);
1472 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1476 for (address = 0; address < fwsize; address += 0x800) {
1477 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1478 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1479 0, fw_ptr, 0x800, 1000);
1482 trace_firmware("Upload done, releasing device's CPU");
1484 /* Now release the CPU. It will disconnect and reconnect later. */
1485 pvr2_hdw_cpureset_assert(hdw,0);
1488 release_firmware(fw_entry);
1490 trace_firmware("Upload done (%d bytes sent)",ret);
1492 /* We should have written fwsize bytes */
1493 if (ret == fwsize) {
1494 hdw->fw1_state = FW1_STATE_RELOAD;
1503 * pvr2_upload_firmware2()
1505 * This uploads encoder firmware on endpoint 2.
1509 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1511 const struct firmware *fw_entry = NULL;
1513 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1517 static const char *fw_files[] = {
1518 CX2341X_FIRM_ENC_FILENAME,
1521 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1525 trace_firmware("pvr2_upload_firmware2");
1527 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1528 ARRAY_SIZE(fw_files), fw_files);
1529 if (ret < 0) return ret;
1532 /* Since we're about to completely reinitialize the encoder,
1533 invalidate our cached copy of its configuration state. Next
1534 time we configure the encoder, then we'll fully configure it. */
1535 hdw->enc_cur_valid = 0;
1537 /* Encoder is about to be reset so note that as far as we're
1538 concerned now, the encoder has never been run. */
1539 del_timer_sync(&hdw->encoder_run_timer);
1540 if (hdw->state_encoder_runok) {
1541 hdw->state_encoder_runok = 0;
1542 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1545 /* First prepare firmware loading */
1546 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1547 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1548 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1549 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1550 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1551 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1552 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1553 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1554 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1555 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1556 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1557 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1558 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1559 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1560 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1561 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1562 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1563 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1566 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1567 "firmware2 upload prep failed, ret=%d",ret);
1568 release_firmware(fw_entry);
1572 /* Now send firmware */
1574 fw_len = fw_entry->size;
1576 if (fw_len % sizeof(u32)) {
1577 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1578 "size of %s firmware must be a multiple of %zu bytes",
1579 fw_files[fwidx],sizeof(u32));
1580 release_firmware(fw_entry);
1585 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1586 if (fw_ptr == NULL){
1587 release_firmware(fw_entry);
1588 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1589 "failed to allocate memory for firmware2 upload");
1594 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1597 for (fw_done = 0; fw_done < fw_len;) {
1598 bcnt = fw_len - fw_done;
1599 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1600 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1601 /* Usbsnoop log shows that we must swap bytes... */
1602 /* Some background info: The data being swapped here is a
1603 firmware image destined for the mpeg encoder chip that
1604 lives at the other end of a USB endpoint. The encoder
1605 chip always talks in 32 bit chunks and its storage is
1606 organized into 32 bit words. However from the file
1607 system to the encoder chip everything is purely a byte
1608 stream. The firmware file's contents are always 32 bit
1609 swapped from what the encoder expects. Thus the need
1610 always exists to swap the bytes regardless of the endian
1611 type of the host processor and therefore swab32() makes
1613 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1614 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1616 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1617 &actual_length, 1000);
1618 ret |= (actual_length != bcnt);
1623 trace_firmware("upload of %s : %i / %i ",
1624 fw_files[fwidx],fw_done,fw_len);
1627 release_firmware(fw_entry);
1630 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1631 "firmware2 upload transfer failure");
1637 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1638 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1639 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1642 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1643 "firmware2 upload post-proc failure");
1647 if (hdw->hdw_desc->signal_routing_scheme ==
1648 PVR2_ROUTING_SCHEME_GOTVIEW) {
1649 /* Ensure that GPIO 11 is set to output for GOTVIEW
1651 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1657 static const char *pvr2_get_state_name(unsigned int st)
1659 if (st < ARRAY_SIZE(pvr2_state_names)) {
1660 return pvr2_state_names[st];
1665 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1667 /* Even though we really only care about the video decoder chip at
1668 this point, we'll broadcast stream on/off to all sub-devices
1669 anyway, just in case somebody else wants to hear the
1671 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
1672 (enablefl ? "on" : "off"));
1673 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1674 v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl);
1675 if (hdw->decoder_client_id) {
1676 /* We get here if the encoder has been noticed. Otherwise
1677 we'll issue a warning to the user (which should
1678 normally never happen). */
1681 if (!hdw->flag_decoder_missed) {
1682 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1683 "***WARNING*** No decoder present");
1684 hdw->flag_decoder_missed = !0;
1685 trace_stbit("flag_decoder_missed",
1686 hdw->flag_decoder_missed);
1692 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1694 return hdw->master_state;
1698 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1700 if (!hdw->flag_tripped) return 0;
1701 hdw->flag_tripped = 0;
1702 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1703 "Clearing driver error statuss");
1708 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1711 LOCK_TAKE(hdw->big_lock); do {
1712 fl = pvr2_hdw_untrip_unlocked(hdw);
1713 } while (0); LOCK_GIVE(hdw->big_lock);
1714 if (fl) pvr2_hdw_state_sched(hdw);
1721 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1723 return hdw->state_pipeline_req != 0;
1727 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1730 LOCK_TAKE(hdw->big_lock); do {
1731 pvr2_hdw_untrip_unlocked(hdw);
1732 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1733 hdw->state_pipeline_req = enable_flag != 0;
1734 pvr2_trace(PVR2_TRACE_START_STOP,
1735 "/*--TRACE_STREAM--*/ %s",
1736 enable_flag ? "enable" : "disable");
1738 pvr2_hdw_state_sched(hdw);
1739 } while (0); LOCK_GIVE(hdw->big_lock);
1740 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1742 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1743 if (st != PVR2_STATE_READY) return -EIO;
1744 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1751 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1754 LOCK_TAKE(hdw->big_lock);
1755 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1756 hdw->desired_stream_type = config;
1757 hdw->state_pipeline_config = 0;
1758 trace_stbit("state_pipeline_config",
1759 hdw->state_pipeline_config);
1760 pvr2_hdw_state_sched(hdw);
1762 LOCK_GIVE(hdw->big_lock);
1764 return pvr2_hdw_wait(hdw,0);
1768 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1770 int unit_number = hdw->unit_number;
1772 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1773 tp = tuner[unit_number];
1775 if (tp < 0) return -EINVAL;
1776 hdw->tuner_type = tp;
1777 hdw->tuner_updated = !0;
1782 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1784 int unit_number = hdw->unit_number;
1786 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1787 tp = video_std[unit_number];
1794 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1796 int unit_number = hdw->unit_number;
1798 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1799 tp = tolerance[unit_number];
1805 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1807 /* Try a harmless request to fetch the eeprom's address over
1808 endpoint 1. See what happens. Only the full FX2 image can
1809 respond to this. If this probe fails then likely the FX2
1810 firmware needs be loaded. */
1812 LOCK_TAKE(hdw->ctl_lock); do {
1813 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1814 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1817 if (result < 0) break;
1818 } while(0); LOCK_GIVE(hdw->ctl_lock);
1820 pvr2_trace(PVR2_TRACE_INIT,
1821 "Probe of device endpoint 1 result status %d",
1824 pvr2_trace(PVR2_TRACE_INIT,
1825 "Probe of device endpoint 1 succeeded");
1830 struct pvr2_std_hack {
1831 v4l2_std_id pat; /* Pattern to match */
1832 v4l2_std_id msk; /* Which bits we care about */
1833 v4l2_std_id std; /* What additional standards or default to set */
1836 /* This data structure labels specific combinations of standards from
1837 tveeprom that we'll try to recognize. If we recognize one, then assume
1838 a specified default standard to use. This is here because tveeprom only
1839 tells us about available standards not the intended default standard (if
1840 any) for the device in question. We guess the default based on what has
1841 been reported as available. Note that this is only for guessing a
1842 default - which can always be overridden explicitly - and if the user
1843 has otherwise named a default then that default will always be used in
1844 place of this table. */
1845 static const struct pvr2_std_hack std_eeprom_maps[] = {
1847 .pat = V4L2_STD_B|V4L2_STD_GH,
1848 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1852 .std = V4L2_STD_NTSC_M,
1855 .pat = V4L2_STD_PAL_I,
1856 .std = V4L2_STD_PAL_I,
1859 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1860 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1864 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1868 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1872 v4l2_std_id std1,std2,std3;
1874 std1 = get_default_standard(hdw);
1875 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1877 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1878 pvr2_trace(PVR2_TRACE_STD,
1879 "Supported video standard(s) reported available in hardware: %.*s",
1882 hdw->std_mask_avail = hdw->std_mask_eeprom;
1884 std2 = (std1|std3) & ~hdw->std_mask_avail;
1886 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1887 pvr2_trace(PVR2_TRACE_STD,
1888 "Expanding supported video standards to include: %.*s",
1890 hdw->std_mask_avail |= std2;
1893 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
1896 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1897 pvr2_trace(PVR2_TRACE_STD,
1898 "Initial video standard forced to %.*s",
1900 hdw->std_mask_cur = std1;
1901 hdw->std_dirty = !0;
1905 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1906 pvr2_trace(PVR2_TRACE_STD,
1907 "Initial video standard (determined by device type): %.*s",
1909 hdw->std_mask_cur = std3;
1910 hdw->std_dirty = !0;
1916 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1917 if (std_eeprom_maps[idx].msk ?
1918 ((std_eeprom_maps[idx].pat ^
1919 hdw->std_mask_eeprom) &
1920 std_eeprom_maps[idx].msk) :
1921 (std_eeprom_maps[idx].pat !=
1922 hdw->std_mask_eeprom)) continue;
1923 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1924 std_eeprom_maps[idx].std);
1925 pvr2_trace(PVR2_TRACE_STD,
1926 "Initial video standard guessed as %.*s",
1928 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1929 hdw->std_dirty = !0;
1937 static unsigned int pvr2_copy_i2c_addr_list(
1938 unsigned short *dst, const unsigned char *src,
1939 unsigned int dst_max)
1941 unsigned int cnt = 0;
1943 while (src[cnt] && (cnt + 1) < dst_max) {
1944 dst[cnt] = src[cnt];
1947 dst[cnt] = I2C_CLIENT_END;
1952 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw)
1955 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
1956 for cx25840 causes that module to correctly set up its video
1957 scaling. This is really a problem in the cx25840 module itself,
1958 but we work around it here. The problem has not been seen in
1959 ivtv because there VBI is supported and set up. We don't do VBI
1960 here (at least not yet) and thus we never attempted to even set
1963 struct v4l2_format fmt;
1964 if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) {
1965 /* We're not using a cx25840 so don't enable the hack */
1969 pvr2_trace(PVR2_TRACE_INIT,
1970 "Module ID %u: Executing cx25840 VBI hack",
1971 hdw->decoder_client_id);
1972 memset(&fmt, 0, sizeof(fmt));
1973 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
1974 fmt.fmt.sliced.service_lines[0][21] = V4L2_SLICED_CAPTION_525;
1975 fmt.fmt.sliced.service_lines[1][21] = V4L2_SLICED_CAPTION_525;
1976 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
1977 vbi, s_sliced_fmt, &fmt.fmt.sliced);
1981 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
1982 const struct pvr2_device_client_desc *cd)
1986 struct v4l2_subdev *sd;
1987 unsigned int i2ccnt;
1988 const unsigned char *p;
1989 /* Arbitrary count - max # i2c addresses we will probe */
1990 unsigned short i2caddr[25];
1992 mid = cd->module_id;
1993 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
1995 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1996 "Module ID %u for device %s has no name? The driver might have a configuration problem.",
1998 hdw->hdw_desc->description);
2001 pvr2_trace(PVR2_TRACE_INIT,
2002 "Module ID %u (%s) for device %s being loaded...",
2004 hdw->hdw_desc->description);
2006 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
2007 ARRAY_SIZE(i2caddr));
2008 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
2009 module_i2c_addresses[mid] : NULL) != NULL)) {
2010 /* Second chance: Try default i2c address list */
2011 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2012 ARRAY_SIZE(i2caddr));
2014 pvr2_trace(PVR2_TRACE_INIT,
2015 "Module ID %u: Using default i2c address list",
2021 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2022 "Module ID %u (%s) for device %s: No i2c addresses. The driver might have a configuration problem.",
2023 mid, fname, hdw->hdw_desc->description);
2028 pvr2_trace(PVR2_TRACE_INIT,
2029 "Module ID %u: Setting up with specified i2c address 0x%x",
2031 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2032 fname, i2caddr[0], NULL);
2034 pvr2_trace(PVR2_TRACE_INIT,
2035 "Module ID %u: Setting up with address probe list",
2037 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2042 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2043 "Module ID %u (%s) for device %s failed to load. Possible missing sub-device kernel module or initialization failure within module.",
2044 mid, fname, hdw->hdw_desc->description);
2048 /* Tag this sub-device instance with the module ID we know about.
2049 In other places we'll use that tag to determine if the instance
2050 requires special handling. */
2053 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
2056 /* client-specific setup... */
2058 case PVR2_CLIENT_ID_CX25840:
2059 case PVR2_CLIENT_ID_SAA7115:
2060 hdw->decoder_client_id = mid;
2069 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2072 const struct pvr2_string_table *cm;
2073 const struct pvr2_device_client_table *ct;
2076 cm = &hdw->hdw_desc->client_modules;
2077 for (idx = 0; idx < cm->cnt; idx++) {
2078 request_module(cm->lst[idx]);
2081 ct = &hdw->hdw_desc->client_table;
2082 for (idx = 0; idx < ct->cnt; idx++) {
2083 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
2086 hdw->flag_modulefail = !0;
2087 pvr2_hdw_render_useless(hdw);
2092 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2096 struct pvr2_ctrl *cptr;
2098 if (hdw->hdw_desc->fx2_firmware.cnt) {
2101 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
2104 pvr2_trace(PVR2_TRACE_INIT,
2105 "USB endpoint config looks strange; possibly firmware needs to be loaded");
2109 reloadFl = !pvr2_hdw_check_firmware(hdw);
2111 pvr2_trace(PVR2_TRACE_INIT,
2112 "Check for FX2 firmware failed; possibly firmware needs to be loaded");
2116 if (pvr2_upload_firmware1(hdw) != 0) {
2117 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2118 "Failure uploading firmware1");
2123 hdw->fw1_state = FW1_STATE_OK;
2125 if (!pvr2_hdw_dev_ok(hdw)) return;
2127 hdw->force_dirty = !0;
2129 if (!hdw->hdw_desc->flag_no_powerup) {
2130 pvr2_hdw_cmd_powerup(hdw);
2131 if (!pvr2_hdw_dev_ok(hdw)) return;
2134 /* Take the IR chip out of reset, if appropriate */
2135 if (hdw->ir_scheme_active == PVR2_IR_SCHEME_ZILOG) {
2136 pvr2_issue_simple_cmd(hdw,
2137 FX2CMD_HCW_ZILOG_RESET |
2142 // This step MUST happen after the earlier powerup step.
2143 pvr2_i2c_core_init(hdw);
2144 if (!pvr2_hdw_dev_ok(hdw)) return;
2146 pvr2_hdw_load_modules(hdw);
2147 if (!pvr2_hdw_dev_ok(hdw)) return;
2149 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
2151 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2152 cptr = hdw->controls + idx;
2153 if (cptr->info->skip_init) continue;
2154 if (!cptr->info->set_value) continue;
2155 cptr->info->set_value(cptr,~0,cptr->info->default_value);
2158 pvr2_hdw_cx25840_vbi_hack(hdw);
2160 /* Set up special default values for the television and radio
2161 frequencies here. It's not really important what these defaults
2162 are, but I set them to something usable in the Chicago area just
2163 to make driver testing a little easier. */
2165 hdw->freqValTelevision = default_tv_freq;
2166 hdw->freqValRadio = default_radio_freq;
2168 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2169 // thread-safe against the normal pvr2_send_request() mechanism.
2170 // (We should make it thread safe).
2172 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
2173 ret = pvr2_hdw_get_eeprom_addr(hdw);
2174 if (!pvr2_hdw_dev_ok(hdw)) return;
2176 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2177 "Unable to determine location of eeprom, skipping");
2179 hdw->eeprom_addr = ret;
2180 pvr2_eeprom_analyze(hdw);
2181 if (!pvr2_hdw_dev_ok(hdw)) return;
2184 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
2185 hdw->tuner_updated = !0;
2186 hdw->std_mask_eeprom = V4L2_STD_ALL;
2189 if (hdw->serial_number) {
2190 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2191 "sn-%lu", hdw->serial_number);
2192 } else if (hdw->unit_number >= 0) {
2193 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2195 hdw->unit_number + 'a');
2197 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2200 hdw->identifier[idx] = 0;
2202 pvr2_hdw_setup_std(hdw);
2204 if (!get_default_tuner_type(hdw)) {
2205 pvr2_trace(PVR2_TRACE_INIT,
2206 "pvr2_hdw_setup: Tuner type overridden to %d",
2211 if (!pvr2_hdw_dev_ok(hdw)) return;
2213 if (hdw->hdw_desc->signal_routing_scheme ==
2214 PVR2_ROUTING_SCHEME_GOTVIEW) {
2215 /* Ensure that GPIO 11 is set to output for GOTVIEW
2217 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
2220 pvr2_hdw_commit_setup(hdw);
2222 hdw->vid_stream = pvr2_stream_create();
2223 if (!pvr2_hdw_dev_ok(hdw)) return;
2224 pvr2_trace(PVR2_TRACE_INIT,
2225 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
2226 if (hdw->vid_stream) {
2227 idx = get_default_error_tolerance(hdw);
2229 pvr2_trace(PVR2_TRACE_INIT,
2230 "pvr2_hdw_setup: video stream %p setting tolerance %u",
2231 hdw->vid_stream,idx);
2233 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2234 PVR2_VID_ENDPOINT,idx);
2237 if (!pvr2_hdw_dev_ok(hdw)) return;
2239 hdw->flag_init_ok = !0;
2241 pvr2_hdw_state_sched(hdw);
2245 /* Set up the structure and attempt to put the device into a usable state.
2246 This can be a time-consuming operation, which is why it is not done
2247 internally as part of the create() step. */
2248 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
2250 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
2252 pvr2_hdw_setup_low(hdw);
2253 pvr2_trace(PVR2_TRACE_INIT,
2254 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2255 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
2256 if (pvr2_hdw_dev_ok(hdw)) {
2257 if (hdw->flag_init_ok) {
2260 "Device initialization completed successfully.");
2263 if (hdw->fw1_state == FW1_STATE_RELOAD) {
2266 "Device microcontroller firmware (re)loaded; it should now reset and reconnect.");
2270 PVR2_TRACE_ERROR_LEGS,
2271 "Device initialization was not successful.");
2272 if (hdw->fw1_state == FW1_STATE_MISSING) {
2274 PVR2_TRACE_ERROR_LEGS,
2275 "Giving up since device microcontroller firmware appears to be missing.");
2279 if (hdw->flag_modulefail) {
2281 PVR2_TRACE_ERROR_LEGS,
2282 "***WARNING*** pvrusb2 driver initialization failed due to the failure of one or more sub-device kernel modules.");
2284 PVR2_TRACE_ERROR_LEGS,
2285 "You need to resolve the failing condition before this driver can function. There should be some earlier messages giving more information about the problem.");
2290 PVR2_TRACE_ERROR_LEGS,
2291 "Attempting pvrusb2 recovery by reloading primary firmware.");
2293 PVR2_TRACE_ERROR_LEGS,
2294 "If this works, device should disconnect and reconnect in a sane state.");
2295 hdw->fw1_state = FW1_STATE_UNKNOWN;
2296 pvr2_upload_firmware1(hdw);
2299 PVR2_TRACE_ERROR_LEGS,
2300 "***WARNING*** pvrusb2 device hardware appears to be jammed and I can't clear it.");
2302 PVR2_TRACE_ERROR_LEGS,
2303 "You might need to power cycle the pvrusb2 device in order to recover.");
2306 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2310 /* Perform second stage initialization. Set callback pointer first so that
2311 we can avoid a possible initialization race (if the kernel thread runs
2312 before the callback has been set). */
2313 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2314 void (*callback_func)(void *),
2315 void *callback_data)
2317 LOCK_TAKE(hdw->big_lock); do {
2318 if (hdw->flag_disconnected) {
2319 /* Handle a race here: If we're already
2320 disconnected by this point, then give up. If we
2321 get past this then we'll remain connected for
2322 the duration of initialization since the entire
2323 initialization sequence is now protected by the
2327 hdw->state_data = callback_data;
2328 hdw->state_func = callback_func;
2329 pvr2_hdw_setup(hdw);
2330 } while (0); LOCK_GIVE(hdw->big_lock);
2331 return hdw->flag_init_ok;
2335 /* Create, set up, and return a structure for interacting with the
2336 underlying hardware. */
2337 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2338 const struct usb_device_id *devid)
2340 unsigned int idx,cnt1,cnt2,m;
2341 struct pvr2_hdw *hdw = NULL;
2343 struct pvr2_ctrl *cptr;
2344 struct usb_device *usb_dev;
2345 const struct pvr2_device_desc *hdw_desc;
2347 struct v4l2_queryctrl qctrl;
2348 struct pvr2_ctl_info *ciptr;
2350 usb_dev = interface_to_usbdev(intf);
2352 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
2354 if (hdw_desc == NULL) {
2355 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create: No device description pointer, unable to continue.");
2356 pvr2_trace(PVR2_TRACE_INIT, "If you have a new device type, please contact Mike Isely <isely@pobox.com> to get it included in the driver\n");
2360 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
2361 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2362 hdw,hdw_desc->description);
2363 pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s",
2364 hdw_desc->description);
2365 if (hdw_desc->flag_is_experimental) {
2366 pvr2_trace(PVR2_TRACE_INFO, "**********");
2367 pvr2_trace(PVR2_TRACE_INFO,
2368 "***WARNING*** Support for this device (%s) is experimental.",
2369 hdw_desc->description);
2370 pvr2_trace(PVR2_TRACE_INFO,
2371 "Important functionality might not be entirely working.");
2372 pvr2_trace(PVR2_TRACE_INFO,
2373 "Please consider contacting the driver author to help with further stabilization of the driver.");
2374 pvr2_trace(PVR2_TRACE_INFO, "**********");
2376 if (!hdw) goto fail;
2378 setup_timer(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout,
2379 (unsigned long)hdw);
2381 setup_timer(&hdw->decoder_stabilization_timer,
2382 pvr2_hdw_decoder_stabilization_timeout,
2383 (unsigned long)hdw);
2385 setup_timer(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout,
2386 (unsigned long)hdw);
2388 setup_timer(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout,
2389 (unsigned long)hdw);
2391 hdw->master_state = PVR2_STATE_DEAD;
2393 init_waitqueue_head(&hdw->state_wait_data);
2395 hdw->tuner_signal_stale = !0;
2396 cx2341x_fill_defaults(&hdw->enc_ctl_state);
2398 /* Calculate which inputs are OK */
2400 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2401 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2402 m |= 1 << PVR2_CVAL_INPUT_DTV;
2404 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2405 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2406 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2407 hdw->input_avail_mask = m;
2408 hdw->input_allowed_mask = hdw->input_avail_mask;
2410 /* If not a hybrid device, pathway_state never changes. So
2411 initialize it here to what it should forever be. */
2412 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2413 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2414 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2415 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2418 hdw->control_cnt = CTRLDEF_COUNT;
2419 hdw->control_cnt += MPEGDEF_COUNT;
2420 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
2422 if (!hdw->controls) goto fail;
2423 hdw->hdw_desc = hdw_desc;
2424 hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
2425 for (idx = 0; idx < hdw->control_cnt; idx++) {
2426 cptr = hdw->controls + idx;
2429 for (idx = 0; idx < 32; idx++) {
2430 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2432 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2433 cptr = hdw->controls + idx;
2434 cptr->info = control_defs+idx;
2437 /* Ensure that default input choice is a valid one. */
2438 m = hdw->input_avail_mask;
2439 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2440 if (!((1 << idx) & m)) continue;
2441 hdw->input_val = idx;
2445 /* Define and configure additional controls from cx2341x module. */
2446 hdw->mpeg_ctrl_info = kcalloc(MPEGDEF_COUNT,
2447 sizeof(*(hdw->mpeg_ctrl_info)),
2449 if (!hdw->mpeg_ctrl_info) goto fail;
2450 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2451 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2452 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2453 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2454 ciptr->name = mpeg_ids[idx].strid;
2455 ciptr->v4l_id = mpeg_ids[idx].id;
2456 ciptr->skip_init = !0;
2457 ciptr->get_value = ctrl_cx2341x_get;
2458 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2459 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2460 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2461 qctrl.id = ciptr->v4l_id;
2462 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2463 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2464 ciptr->set_value = ctrl_cx2341x_set;
2466 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2467 PVR2_CTLD_INFO_DESC_SIZE);
2468 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2469 ciptr->default_value = qctrl.default_value;
2470 switch (qctrl.type) {
2472 case V4L2_CTRL_TYPE_INTEGER:
2473 ciptr->type = pvr2_ctl_int;
2474 ciptr->def.type_int.min_value = qctrl.minimum;
2475 ciptr->def.type_int.max_value = qctrl.maximum;
2477 case V4L2_CTRL_TYPE_BOOLEAN:
2478 ciptr->type = pvr2_ctl_bool;
2480 case V4L2_CTRL_TYPE_MENU:
2481 ciptr->type = pvr2_ctl_enum;
2482 ciptr->def.type_enum.value_names =
2483 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2486 ciptr->def.type_enum.value_names[cnt1] != NULL;
2488 ciptr->def.type_enum.count = cnt1;
2494 // Initialize control data regarding video standard masks
2495 valid_std_mask = pvr2_std_get_usable();
2496 for (idx = 0; idx < 32; idx++) {
2497 if (!(valid_std_mask & (1 << idx))) continue;
2498 cnt1 = pvr2_std_id_to_str(
2499 hdw->std_mask_names[idx],
2500 sizeof(hdw->std_mask_names[idx])-1,
2502 hdw->std_mask_names[idx][cnt1] = 0;
2504 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2506 memcpy(&hdw->std_info_avail,cptr->info,
2507 sizeof(hdw->std_info_avail));
2508 cptr->info = &hdw->std_info_avail;
2509 hdw->std_info_avail.def.type_bitmask.bit_names =
2511 hdw->std_info_avail.def.type_bitmask.valid_bits =
2514 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2516 memcpy(&hdw->std_info_cur,cptr->info,
2517 sizeof(hdw->std_info_cur));
2518 cptr->info = &hdw->std_info_cur;
2519 hdw->std_info_cur.def.type_bitmask.bit_names =
2521 hdw->std_info_cur.def.type_bitmask.valid_bits =
2524 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDDETECT);
2526 memcpy(&hdw->std_info_detect,cptr->info,
2527 sizeof(hdw->std_info_detect));
2528 cptr->info = &hdw->std_info_detect;
2529 hdw->std_info_detect.def.type_bitmask.bit_names =
2531 hdw->std_info_detect.def.type_bitmask.valid_bits =
2535 hdw->cropcap_stale = !0;
2536 hdw->eeprom_addr = -1;
2537 hdw->unit_number = -1;
2538 hdw->v4l_minor_number_video = -1;
2539 hdw->v4l_minor_number_vbi = -1;
2540 hdw->v4l_minor_number_radio = -1;
2541 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2542 if (!hdw->ctl_write_buffer) goto fail;
2543 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2544 if (!hdw->ctl_read_buffer) goto fail;
2545 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2546 if (!hdw->ctl_write_urb) goto fail;
2547 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2548 if (!hdw->ctl_read_urb) goto fail;
2550 if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
2551 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2552 "Error registering with v4l core, giving up");
2555 mutex_lock(&pvr2_unit_mtx);
2557 for (idx = 0; idx < PVR_NUM; idx++) {
2558 if (unit_pointers[idx]) continue;
2559 hdw->unit_number = idx;
2560 unit_pointers[idx] = hdw;
2564 mutex_unlock(&pvr2_unit_mtx);
2567 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2569 if (hdw->unit_number >= 0) {
2570 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2571 ('a' + hdw->unit_number));
2574 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2575 hdw->name[cnt1] = 0;
2577 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2579 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2580 hdw->unit_number,hdw->name);
2582 hdw->tuner_type = -1;
2585 hdw->usb_intf = intf;
2586 hdw->usb_dev = usb_dev;
2588 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2590 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2591 usb_set_interface(hdw->usb_dev,ifnum,0);
2593 mutex_init(&hdw->ctl_lock_mutex);
2594 mutex_init(&hdw->big_lock_mutex);
2599 del_timer_sync(&hdw->quiescent_timer);
2600 del_timer_sync(&hdw->decoder_stabilization_timer);
2601 del_timer_sync(&hdw->encoder_run_timer);
2602 del_timer_sync(&hdw->encoder_wait_timer);
2603 flush_work(&hdw->workpoll);
2604 usb_free_urb(hdw->ctl_read_urb);
2605 usb_free_urb(hdw->ctl_write_urb);
2606 kfree(hdw->ctl_read_buffer);
2607 kfree(hdw->ctl_write_buffer);
2608 kfree(hdw->controls);
2609 kfree(hdw->mpeg_ctrl_info);
2616 /* Remove _all_ associations between this driver and the underlying USB
2618 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2620 if (hdw->flag_disconnected) return;
2621 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2622 if (hdw->ctl_read_urb) {
2623 usb_kill_urb(hdw->ctl_read_urb);
2624 usb_free_urb(hdw->ctl_read_urb);
2625 hdw->ctl_read_urb = NULL;
2627 if (hdw->ctl_write_urb) {
2628 usb_kill_urb(hdw->ctl_write_urb);
2629 usb_free_urb(hdw->ctl_write_urb);
2630 hdw->ctl_write_urb = NULL;
2632 if (hdw->ctl_read_buffer) {
2633 kfree(hdw->ctl_read_buffer);
2634 hdw->ctl_read_buffer = NULL;
2636 if (hdw->ctl_write_buffer) {
2637 kfree(hdw->ctl_write_buffer);
2638 hdw->ctl_write_buffer = NULL;
2640 hdw->flag_disconnected = !0;
2641 /* If we don't do this, then there will be a dangling struct device
2642 reference to our disappearing device persisting inside the V4L
2644 v4l2_device_disconnect(&hdw->v4l2_dev);
2645 hdw->usb_dev = NULL;
2646 hdw->usb_intf = NULL;
2647 pvr2_hdw_render_useless(hdw);
2650 void pvr2_hdw_set_v4l2_dev(struct pvr2_hdw *hdw, struct video_device *vdev)
2652 vdev->v4l2_dev = &hdw->v4l2_dev;
2655 /* Destroy hardware interaction structure */
2656 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2659 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2660 flush_work(&hdw->workpoll);
2661 del_timer_sync(&hdw->quiescent_timer);
2662 del_timer_sync(&hdw->decoder_stabilization_timer);
2663 del_timer_sync(&hdw->encoder_run_timer);
2664 del_timer_sync(&hdw->encoder_wait_timer);
2665 if (hdw->fw_buffer) {
2666 kfree(hdw->fw_buffer);
2667 hdw->fw_buffer = NULL;
2669 if (hdw->vid_stream) {
2670 pvr2_stream_destroy(hdw->vid_stream);
2671 hdw->vid_stream = NULL;
2673 v4l2_device_unregister(&hdw->v4l2_dev);
2674 pvr2_hdw_disconnect(hdw);
2675 mutex_lock(&pvr2_unit_mtx);
2677 if ((hdw->unit_number >= 0) &&
2678 (hdw->unit_number < PVR_NUM) &&
2679 (unit_pointers[hdw->unit_number] == hdw)) {
2680 unit_pointers[hdw->unit_number] = NULL;
2683 mutex_unlock(&pvr2_unit_mtx);
2684 kfree(hdw->controls);
2685 kfree(hdw->mpeg_ctrl_info);
2690 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2692 return (hdw && hdw->flag_ok);
2696 /* Called when hardware has been unplugged */
2697 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2699 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2700 LOCK_TAKE(hdw->big_lock);
2701 pvr2_i2c_core_done(hdw);
2702 LOCK_TAKE(hdw->ctl_lock);
2703 pvr2_hdw_remove_usb_stuff(hdw);
2704 LOCK_GIVE(hdw->ctl_lock);
2705 LOCK_GIVE(hdw->big_lock);
2709 /* Get the number of defined controls */
2710 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2712 return hdw->control_cnt;
2716 /* Retrieve a control handle given its index (0..count-1) */
2717 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2720 if (idx >= hdw->control_cnt) return NULL;
2721 return hdw->controls + idx;
2725 /* Retrieve a control handle given its index (0..count-1) */
2726 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2727 unsigned int ctl_id)
2729 struct pvr2_ctrl *cptr;
2733 /* This could be made a lot more efficient, but for now... */
2734 for (idx = 0; idx < hdw->control_cnt; idx++) {
2735 cptr = hdw->controls + idx;
2736 i = cptr->info->internal_id;
2737 if (i && (i == ctl_id)) return cptr;
2743 /* Given a V4L ID, retrieve the control structure associated with it. */
2744 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2746 struct pvr2_ctrl *cptr;
2750 /* This could be made a lot more efficient, but for now... */
2751 for (idx = 0; idx < hdw->control_cnt; idx++) {
2752 cptr = hdw->controls + idx;
2753 i = cptr->info->v4l_id;
2754 if (i && (i == ctl_id)) return cptr;
2760 /* Given a V4L ID for its immediate predecessor, retrieve the control
2761 structure associated with it. */
2762 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2763 unsigned int ctl_id)
2765 struct pvr2_ctrl *cptr,*cp2;
2769 /* This could be made a lot more efficient, but for now... */
2771 for (idx = 0; idx < hdw->control_cnt; idx++) {
2772 cptr = hdw->controls + idx;
2773 i = cptr->info->v4l_id;
2775 if (i <= ctl_id) continue;
2776 if (cp2 && (cp2->info->v4l_id < i)) continue;
2784 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2787 case pvr2_ctl_int: return "integer";
2788 case pvr2_ctl_enum: return "enum";
2789 case pvr2_ctl_bool: return "boolean";
2790 case pvr2_ctl_bitmask: return "bitmask";
2796 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2797 const char *name, int val)
2799 struct v4l2_control ctrl;
2800 struct v4l2_subdev *sd;
2802 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2803 memset(&ctrl, 0, sizeof(ctrl));
2807 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev)
2808 v4l2_s_ctrl(NULL, sd->ctrl_handler, &ctrl);
2811 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2812 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2813 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2816 static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw)
2819 std = (v4l2_std_id)hdw->std_mask_avail;
2820 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2821 video, querystd, &std);
2825 /* Execute whatever commands are required to update the state of all the
2826 sub-devices so that they match our current control values. */
2827 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2829 struct v4l2_subdev *sd;
2831 pvr2_subdev_update_func fp;
2833 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2835 if (hdw->tuner_updated || hdw->force_dirty) {
2836 struct tuner_setup setup;
2837 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2839 if (((int)(hdw->tuner_type)) >= 0) {
2840 memset(&setup, 0, sizeof(setup));
2841 setup.addr = ADDR_UNSET;
2842 setup.type = hdw->tuner_type;
2843 setup.mode_mask = T_RADIO | T_ANALOG_TV;
2844 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2845 tuner, s_type_addr, &setup);
2849 if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
2850 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
2851 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2852 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2856 vs = hdw->std_mask_cur;
2857 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2859 pvr2_hdw_cx25840_vbi_hack(hdw);
2861 hdw->tuner_signal_stale = !0;
2862 hdw->cropcap_stale = !0;
2865 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
2866 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
2867 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
2868 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
2869 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
2870 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
2871 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
2872 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
2873 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
2875 if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
2876 struct v4l2_tuner vt;
2877 memset(&vt, 0, sizeof(vt));
2878 vt.type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
2879 V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
2880 vt.audmode = hdw->audiomode_val;
2881 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
2884 if (hdw->freqDirty || hdw->force_dirty) {
2886 struct v4l2_frequency freq;
2887 fv = pvr2_hdw_get_cur_freq(hdw);
2888 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
2889 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
2890 memset(&freq, 0, sizeof(freq));
2891 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
2892 /* ((fv * 1000) / 62500) */
2893 freq.frequency = (fv * 2) / 125;
2895 freq.frequency = fv / 62500;
2897 /* tuner-core currently doesn't seem to care about this, but
2898 let's set it anyway for completeness. */
2899 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2900 freq.type = V4L2_TUNER_RADIO;
2902 freq.type = V4L2_TUNER_ANALOG_TV;
2905 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
2906 s_frequency, &freq);
2909 if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
2910 struct v4l2_subdev_format format = {
2911 .which = V4L2_SUBDEV_FORMAT_ACTIVE,
2914 format.format.width = hdw->res_hor_val;
2915 format.format.height = hdw->res_ver_val;
2916 format.format.code = MEDIA_BUS_FMT_FIXED;
2917 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)",
2918 format.format.width, format.format.height);
2919 v4l2_device_call_all(&hdw->v4l2_dev, 0, pad, set_fmt,
2923 if (hdw->srate_dirty || hdw->force_dirty) {
2925 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
2927 switch (hdw->srate_val) {
2929 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
2932 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
2935 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
2939 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2940 audio, s_clock_freq, val);
2943 /* Unable to set crop parameters; there is apparently no equivalent
2944 for VIDIOC_S_CROP */
2946 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
2948 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
2949 fp = pvr2_module_update_functions[id];
2954 if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
2955 pvr2_hdw_status_poll(hdw);
2960 /* Figure out if we need to commit control changes. If so, mark internal
2961 state flags to indicate this fact and return true. Otherwise do nothing
2962 else and return false. */
2963 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
2966 struct pvr2_ctrl *cptr;
2968 int commit_flag = hdw->force_dirty;
2970 unsigned int bcnt,ccnt;
2972 for (idx = 0; idx < hdw->control_cnt; idx++) {
2973 cptr = hdw->controls + idx;
2974 if (!cptr->info->is_dirty) continue;
2975 if (!cptr->info->is_dirty(cptr)) continue;
2978 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
2979 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
2982 cptr->info->get_value(cptr,&value);
2983 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
2985 sizeof(buf)-bcnt,&ccnt);
2987 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
2988 get_ctrl_typename(cptr->info->type));
2989 pvr2_trace(PVR2_TRACE_CTL,
2990 "/*--TRACE_COMMIT--*/ %.*s",
2995 /* Nothing has changed */
2999 hdw->state_pipeline_config = 0;
3000 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3001 pvr2_hdw_state_sched(hdw);
3007 /* Perform all operations needed to commit all control changes. This must
3008 be performed in synchronization with the pipeline state and is thus
3009 expected to be called as part of the driver's worker thread. Return
3010 true if commit successful, otherwise return false to indicate that
3011 commit isn't possible at this time. */
3012 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3015 struct pvr2_ctrl *cptr;
3016 int disruptive_change;
3018 if (hdw->input_dirty && hdw->state_pathway_ok &&
3019 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3020 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3021 hdw->pathway_state)) {
3022 /* Change of mode being asked for... */
3023 hdw->state_pathway_ok = 0;
3024 trace_stbit("state_pathway_ok", hdw->state_pathway_ok);
3026 if (!hdw->state_pathway_ok) {
3027 /* Can't commit anything until pathway is ok. */
3031 /* Handle some required side effects when the video standard is
3033 if (hdw->std_dirty) {
3036 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3043 /* Rewrite the vertical resolution to be appropriate to the
3044 video standard that has been selected. */
3045 if (nvres != hdw->res_ver_val) {
3046 hdw->res_ver_val = nvres;
3047 hdw->res_ver_dirty = !0;
3049 /* Rewrite the GOP size to be appropriate to the video
3050 standard that has been selected. */
3051 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3052 struct v4l2_ext_controls cs;
3053 struct v4l2_ext_control c1;
3054 memset(&cs, 0, sizeof(cs));
3055 memset(&c1, 0, sizeof(c1));
3058 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3059 c1.value = gop_size;
3060 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3061 VIDIOC_S_EXT_CTRLS);
3065 /* The broadcast decoder can only scale down, so if
3066 * res_*_dirty && crop window < output format ==> enlarge crop.
3068 * The mpeg encoder receives fields of res_hor_val dots and
3069 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3071 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3072 hdw->cropw_val = hdw->res_hor_val;
3073 hdw->cropw_dirty = !0;
3074 } else if (hdw->cropw_dirty) {
3075 hdw->res_hor_dirty = !0; /* must rescale */
3076 hdw->res_hor_val = min(720, hdw->cropw_val);
3078 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3079 hdw->croph_val = hdw->res_ver_val;
3080 hdw->croph_dirty = !0;
3081 } else if (hdw->croph_dirty) {
3082 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3083 hdw->res_ver_dirty = !0;
3084 hdw->res_ver_val = min(nvres, hdw->croph_val);
3087 /* If any of the below has changed, then we can't do the update
3088 while the pipeline is running. Pipeline must be paused first
3089 and decoder -> encoder connection be made quiescent before we
3093 hdw->enc_unsafe_stale ||
3095 hdw->res_ver_dirty ||
3096 hdw->res_hor_dirty ||
3100 (hdw->active_stream_type != hdw->desired_stream_type));
3101 if (disruptive_change && !hdw->state_pipeline_idle) {
3102 /* Pipeline is not idle; we can't proceed. Arrange to
3103 cause pipeline to stop so that we can try this again
3105 hdw->state_pipeline_pause = !0;
3109 if (hdw->srate_dirty) {
3110 /* Write new sample rate into control structure since
3111 * the master copy is stale. We must track srate
3112 * separate from the mpeg control structure because
3113 * other logic also uses this value. */
3114 struct v4l2_ext_controls cs;
3115 struct v4l2_ext_control c1;
3116 memset(&cs,0,sizeof(cs));
3117 memset(&c1,0,sizeof(c1));
3120 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3121 c1.value = hdw->srate_val;
3122 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3125 if (hdw->active_stream_type != hdw->desired_stream_type) {
3126 /* Handle any side effects of stream config here */
3127 hdw->active_stream_type = hdw->desired_stream_type;
3130 if (hdw->hdw_desc->signal_routing_scheme ==
3131 PVR2_ROUTING_SCHEME_GOTVIEW) {
3133 /* Handle GOTVIEW audio switching */
3134 pvr2_hdw_gpio_get_out(hdw,&b);
3135 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3137 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3140 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3144 /* Check and update state for all sub-devices. */
3145 pvr2_subdev_update(hdw);
3147 hdw->tuner_updated = 0;
3148 hdw->force_dirty = 0;
3149 for (idx = 0; idx < hdw->control_cnt; idx++) {
3150 cptr = hdw->controls + idx;
3151 if (!cptr->info->clear_dirty) continue;
3152 cptr->info->clear_dirty(cptr);
3155 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3156 hdw->state_encoder_run) {
3157 /* If encoder isn't running or it can't be touched, then
3158 this will get worked out later when we start the
3160 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3163 hdw->state_pipeline_config = !0;
3164 /* Hardware state may have changed in a way to cause the cropping
3165 capabilities to have changed. So mark it stale, which will
3166 cause a later re-fetch. */
3167 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3172 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3175 LOCK_TAKE(hdw->big_lock);
3176 fl = pvr2_hdw_commit_setup(hdw);
3177 LOCK_GIVE(hdw->big_lock);
3179 return pvr2_hdw_wait(hdw,0);
3183 static void pvr2_hdw_worker_poll(struct work_struct *work)
3186 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3187 LOCK_TAKE(hdw->big_lock); do {
3188 fl = pvr2_hdw_state_eval(hdw);
3189 } while (0); LOCK_GIVE(hdw->big_lock);
3190 if (fl && hdw->state_func) {
3191 hdw->state_func(hdw->state_data);
3196 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3198 return wait_event_interruptible(
3199 hdw->state_wait_data,
3200 (hdw->state_stale == 0) &&
3201 (!state || (hdw->master_state != state)));
3205 /* Return name for this driver instance */
3206 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3212 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3214 return hdw->hdw_desc->description;
3218 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3220 return hdw->hdw_desc->shortname;
3224 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3227 LOCK_TAKE(hdw->ctl_lock); do {
3228 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3229 result = pvr2_send_request(hdw,
3232 if (result < 0) break;
3233 result = (hdw->cmd_buffer[0] != 0);
3234 } while(0); LOCK_GIVE(hdw->ctl_lock);
3239 /* Execute poll of tuner status */
3240 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3242 LOCK_TAKE(hdw->big_lock); do {
3243 pvr2_hdw_status_poll(hdw);
3244 } while (0); LOCK_GIVE(hdw->big_lock);
3248 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3250 if (!hdw->cropcap_stale) {
3253 pvr2_hdw_status_poll(hdw);
3254 if (hdw->cropcap_stale) {
3261 /* Return information about cropping capabilities */
3262 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3265 LOCK_TAKE(hdw->big_lock);
3266 stat = pvr2_hdw_check_cropcap(hdw);
3268 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3270 LOCK_GIVE(hdw->big_lock);
3275 /* Return information about the tuner */
3276 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3278 LOCK_TAKE(hdw->big_lock); do {
3279 if (hdw->tuner_signal_stale) {
3280 pvr2_hdw_status_poll(hdw);
3282 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3283 } while (0); LOCK_GIVE(hdw->big_lock);
3288 /* Get handle to video output stream */
3289 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3291 return hp->vid_stream;
3295 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3297 int nr = pvr2_hdw_get_unit_number(hdw);
3298 LOCK_TAKE(hdw->big_lock);
3300 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
3301 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3302 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3303 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3304 pvr2_hdw_state_log_state(hdw);
3305 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
3307 LOCK_GIVE(hdw->big_lock);
3311 /* Grab EEPROM contents, needed for direct method. */
3312 #define EEPROM_SIZE 8192
3313 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3314 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3316 struct i2c_msg msg[2];
3325 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3327 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3328 "Failed to allocate memory required to read eeprom");
3332 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3334 addr = hdw->eeprom_addr;
3335 /* Seems that if the high bit is set, then the *real* eeprom
3336 address is shifted right now bit position (noticed this in
3337 newer PVR USB2 hardware) */
3338 if (addr & 0x80) addr >>= 1;
3340 /* FX2 documentation states that a 16bit-addressed eeprom is
3341 expected if the I2C address is an odd number (yeah, this is
3342 strange but it's what they do) */
3343 mode16 = (addr & 1);
3344 eepromSize = (mode16 ? EEPROM_SIZE : 256);
3345 trace_eeprom("Examining %d byte eeprom at location 0x%x using %d bit addressing",
3351 msg[0].len = mode16 ? 2 : 1;
3354 msg[1].flags = I2C_M_RD;
3356 /* We have to do the actual eeprom data fetch ourselves, because
3357 (1) we're only fetching part of the eeprom, and (2) if we were
3358 getting the whole thing our I2C driver can't grab it in one
3359 pass - which is what tveeprom is otherwise going to attempt */
3360 memset(eeprom,0,EEPROM_SIZE);
3361 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3363 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3364 offs = tcnt + (eepromSize - EEPROM_SIZE);
3366 iadd[0] = offs >> 8;
3372 msg[1].buf = eeprom+tcnt;
3373 if ((ret = i2c_transfer(&hdw->i2c_adap,
3374 msg,ARRAY_SIZE(msg))) != 2) {
3375 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3376 "eeprom fetch set offs err=%d",ret);
3385 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3392 LOCK_TAKE(hdw->big_lock); do {
3393 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3396 pvr2_trace(PVR2_TRACE_FIRMWARE,
3397 "Cleaning up after CPU firmware fetch");
3398 kfree(hdw->fw_buffer);
3399 hdw->fw_buffer = NULL;
3401 if (hdw->fw_cpu_flag) {
3402 /* Now release the CPU. It will disconnect
3403 and reconnect later. */
3404 pvr2_hdw_cpureset_assert(hdw,0);
3409 hdw->fw_cpu_flag = (mode != 2);
3410 if (hdw->fw_cpu_flag) {
3411 hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000;
3412 pvr2_trace(PVR2_TRACE_FIRMWARE,
3413 "Preparing to suck out CPU firmware (size=%u)",
3415 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3416 if (!hdw->fw_buffer) {
3421 /* We have to hold the CPU during firmware upload. */
3422 pvr2_hdw_cpureset_assert(hdw,1);
3424 /* download the firmware from address 0000-1fff in 2048
3425 (=0x800) bytes chunk. */
3427 pvr2_trace(PVR2_TRACE_FIRMWARE,
3428 "Grabbing CPU firmware");
3429 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3430 for(address = 0; address < hdw->fw_size;
3432 ret = usb_control_msg(hdw->usb_dev,pipe,
3435 hdw->fw_buffer+address,
3440 pvr2_trace(PVR2_TRACE_FIRMWARE,
3441 "Done grabbing CPU firmware");
3443 pvr2_trace(PVR2_TRACE_FIRMWARE,
3444 "Sucking down EEPROM contents");
3445 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3446 if (!hdw->fw_buffer) {
3447 pvr2_trace(PVR2_TRACE_FIRMWARE,
3448 "EEPROM content suck failed.");
3451 hdw->fw_size = EEPROM_SIZE;
3452 pvr2_trace(PVR2_TRACE_FIRMWARE,
3453 "Done sucking down EEPROM contents");
3456 } while (0); LOCK_GIVE(hdw->big_lock);
3460 /* Return true if we're in a mode for retrieval CPU firmware */
3461 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3463 return hdw->fw_buffer != NULL;
3467 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3468 char *buf,unsigned int cnt)
3471 LOCK_TAKE(hdw->big_lock); do {
3475 if (!hdw->fw_buffer) {
3480 if (offs >= hdw->fw_size) {
3481 pvr2_trace(PVR2_TRACE_FIRMWARE,
3482 "Read firmware data offs=%d EOF",
3488 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3490 memcpy(buf,hdw->fw_buffer+offs,cnt);
3492 pvr2_trace(PVR2_TRACE_FIRMWARE,
3493 "Read firmware data offs=%d cnt=%d",
3496 } while (0); LOCK_GIVE(hdw->big_lock);
3502 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3503 enum pvr2_v4l_type index)
3506 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3507 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3508 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3514 /* Store a v4l minor device number */
3515 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3516 enum pvr2_v4l_type index,int v)
3519 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;break;
3520 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;break;
3521 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;break;
3527 static void pvr2_ctl_write_complete(struct urb *urb)
3529 struct pvr2_hdw *hdw = urb->context;
3530 hdw->ctl_write_pend_flag = 0;
3531 if (hdw->ctl_read_pend_flag) return;
3532 complete(&hdw->ctl_done);
3536 static void pvr2_ctl_read_complete(struct urb *urb)
3538 struct pvr2_hdw *hdw = urb->context;
3539 hdw->ctl_read_pend_flag = 0;
3540 if (hdw->ctl_write_pend_flag) return;
3541 complete(&hdw->ctl_done);
3545 static void pvr2_ctl_timeout(unsigned long data)
3547 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3548 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3549 hdw->ctl_timeout_flag = !0;
3550 if (hdw->ctl_write_pend_flag)
3551 usb_unlink_urb(hdw->ctl_write_urb);
3552 if (hdw->ctl_read_pend_flag)
3553 usb_unlink_urb(hdw->ctl_read_urb);
3558 /* Issue a command and get a response from the device. This extended
3559 version includes a probe flag (which if set means that device errors
3560 should not be logged or treated as fatal) and a timeout in jiffies.
3561 This can be used to non-lethally probe the health of endpoint 1. */
3562 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3563 unsigned int timeout,int probe_fl,
3564 void *write_data,unsigned int write_len,
3565 void *read_data,unsigned int read_len)
3569 struct timer_list timer;
3570 if (!hdw->ctl_lock_held) {
3571 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3572 "Attempted to execute control transfer without lock!!");
3575 if (!hdw->flag_ok && !probe_fl) {
3576 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3577 "Attempted to execute control transfer when device not ok");
3580 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3582 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3583 "Attempted to execute control transfer when USB is disconnected");
3588 /* Ensure that we have sane parameters */
3589 if (!write_data) write_len = 0;
3590 if (!read_data) read_len = 0;
3591 if (write_len > PVR2_CTL_BUFFSIZE) {
3593 PVR2_TRACE_ERROR_LEGS,
3594 "Attempted to execute %d byte control-write transfer (limit=%d)",
3595 write_len,PVR2_CTL_BUFFSIZE);
3598 if (read_len > PVR2_CTL_BUFFSIZE) {
3600 PVR2_TRACE_ERROR_LEGS,
3601 "Attempted to execute %d byte control-read transfer (limit=%d)",
3602 write_len,PVR2_CTL_BUFFSIZE);
3605 if ((!write_len) && (!read_len)) {
3607 PVR2_TRACE_ERROR_LEGS,
3608 "Attempted to execute null control transfer?");
3613 hdw->cmd_debug_state = 1;
3614 if (write_len && write_data)
3615 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3617 hdw->cmd_debug_code = 0;
3618 hdw->cmd_debug_write_len = write_len;
3619 hdw->cmd_debug_read_len = read_len;
3621 /* Initialize common stuff */
3622 init_completion(&hdw->ctl_done);
3623 hdw->ctl_timeout_flag = 0;
3624 hdw->ctl_write_pend_flag = 0;
3625 hdw->ctl_read_pend_flag = 0;
3626 setup_timer(&timer, pvr2_ctl_timeout, (unsigned long)hdw);
3627 timer.expires = jiffies + timeout;
3629 if (write_len && write_data) {
3630 hdw->cmd_debug_state = 2;
3631 /* Transfer write data to internal buffer */
3632 for (idx = 0; idx < write_len; idx++) {
3633 hdw->ctl_write_buffer[idx] =
3634 ((unsigned char *)write_data)[idx];
3636 /* Initiate a write request */
3637 usb_fill_bulk_urb(hdw->ctl_write_urb,
3639 usb_sndbulkpipe(hdw->usb_dev,
3640 PVR2_CTL_WRITE_ENDPOINT),
3641 hdw->ctl_write_buffer,
3643 pvr2_ctl_write_complete,
3645 hdw->ctl_write_urb->actual_length = 0;
3646 hdw->ctl_write_pend_flag = !0;
3647 if (usb_urb_ep_type_check(hdw->ctl_write_urb)) {
3649 PVR2_TRACE_ERROR_LEGS,
3650 "Invalid write control endpoint");
3653 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3655 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3656 "Failed to submit write-control URB status=%d",
3658 hdw->ctl_write_pend_flag = 0;
3664 hdw->cmd_debug_state = 3;
3665 memset(hdw->ctl_read_buffer,0x43,read_len);
3666 /* Initiate a read request */
3667 usb_fill_bulk_urb(hdw->ctl_read_urb,
3669 usb_rcvbulkpipe(hdw->usb_dev,
3670 PVR2_CTL_READ_ENDPOINT),
3671 hdw->ctl_read_buffer,
3673 pvr2_ctl_read_complete,
3675 hdw->ctl_read_urb->actual_length = 0;
3676 hdw->ctl_read_pend_flag = !0;
3677 if (usb_urb_ep_type_check(hdw->ctl_read_urb)) {
3679 PVR2_TRACE_ERROR_LEGS,
3680 "Invalid read control endpoint");
3683 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3685 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3686 "Failed to submit read-control URB status=%d",
3688 hdw->ctl_read_pend_flag = 0;
3696 /* Now wait for all I/O to complete */
3697 hdw->cmd_debug_state = 4;
3698 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3699 wait_for_completion(&hdw->ctl_done);
3701 hdw->cmd_debug_state = 5;
3704 del_timer_sync(&timer);
3706 hdw->cmd_debug_state = 6;
3709 if (hdw->ctl_timeout_flag) {
3710 status = -ETIMEDOUT;
3712 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3713 "Timed out control-write");
3719 /* Validate results of write request */
3720 if ((hdw->ctl_write_urb->status != 0) &&
3721 (hdw->ctl_write_urb->status != -ENOENT) &&
3722 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3723 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3724 /* USB subsystem is reporting some kind of failure
3726 status = hdw->ctl_write_urb->status;
3728 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3729 "control-write URB failure, status=%d",
3734 if (hdw->ctl_write_urb->actual_length < write_len) {
3735 /* Failed to write enough data */
3738 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3739 "control-write URB short, expected=%d got=%d",
3741 hdw->ctl_write_urb->actual_length);
3746 if (read_len && read_data) {
3747 /* Validate results of read request */
3748 if ((hdw->ctl_read_urb->status != 0) &&
3749 (hdw->ctl_read_urb->status != -ENOENT) &&
3750 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3751 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3752 /* USB subsystem is reporting some kind of failure
3754 status = hdw->ctl_read_urb->status;
3756 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3757 "control-read URB failure, status=%d",
3762 if (hdw->ctl_read_urb->actual_length < read_len) {
3763 /* Failed to read enough data */
3766 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3767 "control-read URB short, expected=%d got=%d",
3769 hdw->ctl_read_urb->actual_length);
3773 /* Transfer retrieved data out from internal buffer */
3774 for (idx = 0; idx < read_len; idx++) {
3775 ((unsigned char *)read_data)[idx] =
3776 hdw->ctl_read_buffer[idx];
3782 hdw->cmd_debug_state = 0;
3783 if ((status < 0) && (!probe_fl)) {
3784 pvr2_hdw_render_useless(hdw);
3790 int pvr2_send_request(struct pvr2_hdw *hdw,
3791 void *write_data,unsigned int write_len,
3792 void *read_data,unsigned int read_len)
3794 return pvr2_send_request_ex(hdw,HZ*4,0,
3795 write_data,write_len,
3796 read_data,read_len);
3800 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3803 unsigned int cnt = 1;
3804 unsigned int args = 0;
3805 LOCK_TAKE(hdw->ctl_lock);
3806 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3807 args = (cmdcode >> 8) & 0xffu;
3808 args = (args > 2) ? 2 : args;
3811 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3813 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3816 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3818 unsigned int ccnt,bcnt;
3822 ccnt = scnprintf(tbuf+bcnt,
3824 "Sending FX2 command 0x%x",cmdcode);
3826 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3827 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3828 ccnt = scnprintf(tbuf+bcnt,
3831 pvr2_fx2cmd_desc[idx].desc);
3837 ccnt = scnprintf(tbuf+bcnt,
3839 " (%u",hdw->cmd_buffer[1]);
3842 ccnt = scnprintf(tbuf+bcnt,
3844 ",%u",hdw->cmd_buffer[2]);
3847 ccnt = scnprintf(tbuf+bcnt,
3852 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3854 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3855 LOCK_GIVE(hdw->ctl_lock);
3860 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3864 LOCK_TAKE(hdw->ctl_lock);
3866 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
3867 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
3868 hdw->cmd_buffer[5] = 0;
3869 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3870 hdw->cmd_buffer[7] = reg & 0xff;
3873 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
3875 LOCK_GIVE(hdw->ctl_lock);
3881 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
3885 LOCK_TAKE(hdw->ctl_lock);
3887 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
3888 hdw->cmd_buffer[1] = 0;
3889 hdw->cmd_buffer[2] = 0;
3890 hdw->cmd_buffer[3] = 0;
3891 hdw->cmd_buffer[4] = 0;
3892 hdw->cmd_buffer[5] = 0;
3893 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3894 hdw->cmd_buffer[7] = reg & 0xff;
3896 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
3897 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
3899 LOCK_GIVE(hdw->ctl_lock);
3905 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
3907 if (!hdw->flag_ok) return;
3908 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3909 "Device being rendered inoperable");
3910 if (hdw->vid_stream) {
3911 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
3914 trace_stbit("flag_ok",hdw->flag_ok);
3915 pvr2_hdw_state_sched(hdw);
3919 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
3922 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
3923 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
3925 ret = usb_reset_device(hdw->usb_dev);
3926 usb_unlock_device(hdw->usb_dev);
3928 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3929 "Failed to lock USB device ret=%d",ret);
3931 if (init_pause_msec) {
3932 pvr2_trace(PVR2_TRACE_INFO,
3933 "Waiting %u msec for hardware to settle",
3935 msleep(init_pause_msec);
3941 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
3947 if (!hdw->usb_dev) return;
3949 da = kmalloc(16, GFP_KERNEL);
3952 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3953 "Unable to allocate memory to control CPU reset");
3957 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
3959 da[0] = val ? 0x01 : 0x00;
3961 /* Write the CPUCS register on the 8051. The lsb of the register
3962 is the reset bit; a 1 asserts reset while a 0 clears it. */
3963 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
3964 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,1000);
3966 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3967 "cpureset_assert(%d) error=%d",val,ret);
3968 pvr2_hdw_render_useless(hdw);
3975 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
3977 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
3981 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
3983 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
3988 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
3990 pvr2_trace(PVR2_TRACE_INIT,
3991 "Requesting decoder reset");
3992 if (hdw->decoder_client_id) {
3993 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
3995 pvr2_hdw_cx25840_vbi_hack(hdw);
3998 pvr2_trace(PVR2_TRACE_INIT,
3999 "Unable to reset decoder: nothing attached");
4004 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4007 return pvr2_issue_simple_cmd(hdw,
4008 FX2CMD_HCW_DEMOD_RESETIN |
4010 ((onoff ? 1 : 0) << 16));
4014 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4017 return pvr2_issue_simple_cmd(hdw,(onoff ?
4018 FX2CMD_ONAIR_DTV_POWER_ON :
4019 FX2CMD_ONAIR_DTV_POWER_OFF));
4023 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4026 return pvr2_issue_simple_cmd(hdw,(onoff ?
4027 FX2CMD_ONAIR_DTV_STREAMING_ON :
4028 FX2CMD_ONAIR_DTV_STREAMING_OFF));
4032 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4035 /* Compare digital/analog desired setting with current setting. If
4036 they don't match, fix it... */
4037 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4038 if (cmode == hdw->pathway_state) {
4039 /* They match; nothing to do */
4043 switch (hdw->hdw_desc->digital_control_scheme) {
4044 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4045 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4046 if (cmode == PVR2_PATHWAY_ANALOG) {
4047 /* If moving to analog mode, also force the decoder
4048 to reset. If no decoder is attached, then it's
4049 ok to ignore this because if/when the decoder
4050 attaches, it will reset itself at that time. */
4051 pvr2_hdw_cmd_decoder_reset(hdw);
4054 case PVR2_DIGITAL_SCHEME_ONAIR:
4055 /* Supposedly we should always have the power on whether in
4056 digital or analog mode. But for now do what appears to
4058 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4063 pvr2_hdw_untrip_unlocked(hdw);
4064 hdw->pathway_state = cmode;
4068 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4070 /* change some GPIO data
4072 * note: bit d7 of dir appears to control the LED,
4073 * so we shut it off here.
4077 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4079 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4081 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4085 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4087 static led_method_func led_methods[] = {
4088 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4093 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4095 unsigned int scheme_id;
4098 if ((!onoff) == (!hdw->led_on)) return;
4100 hdw->led_on = onoff != 0;
4102 scheme_id = hdw->hdw_desc->led_scheme;
4103 if (scheme_id < ARRAY_SIZE(led_methods)) {
4104 fp = led_methods[scheme_id];
4109 if (fp) (*fp)(hdw,onoff);
4113 /* Stop / start video stream transport */
4114 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4118 /* If we're in analog mode, then just issue the usual analog
4120 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4121 return pvr2_issue_simple_cmd(hdw,
4123 FX2CMD_STREAMING_ON :
4124 FX2CMD_STREAMING_OFF));
4125 /*Note: Not reached */
4128 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4129 /* Whoops, we don't know what mode we're in... */
4133 /* To get here we have to be in digital mode. The mechanism here
4134 is unfortunately different for different vendors. So we switch
4135 on the device's digital scheme attribute in order to figure out
4137 switch (hdw->hdw_desc->digital_control_scheme) {
4138 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4139 return pvr2_issue_simple_cmd(hdw,
4141 FX2CMD_HCW_DTV_STREAMING_ON :
4142 FX2CMD_HCW_DTV_STREAMING_OFF));
4143 case PVR2_DIGITAL_SCHEME_ONAIR:
4144 ret = pvr2_issue_simple_cmd(hdw,
4146 FX2CMD_STREAMING_ON :
4147 FX2CMD_STREAMING_OFF));
4148 if (ret) return ret;
4149 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4156 /* Evaluate whether or not state_pathway_ok can change */
4157 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4159 if (hdw->state_pathway_ok) {
4160 /* Nothing to do if pathway is already ok */
4163 if (!hdw->state_pipeline_idle) {
4164 /* Not allowed to change anything if pipeline is not idle */
4167 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4168 hdw->state_pathway_ok = !0;
4169 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4174 /* Evaluate whether or not state_encoder_ok can change */
4175 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4177 if (hdw->state_encoder_ok) return 0;
4178 if (hdw->flag_tripped) return 0;
4179 if (hdw->state_encoder_run) return 0;
4180 if (hdw->state_encoder_config) return 0;
4181 if (hdw->state_decoder_run) return 0;
4182 if (hdw->state_usbstream_run) return 0;
4183 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4184 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4185 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4189 if (pvr2_upload_firmware2(hdw) < 0) {
4190 hdw->flag_tripped = !0;
4191 trace_stbit("flag_tripped",hdw->flag_tripped);
4194 hdw->state_encoder_ok = !0;
4195 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4200 /* Evaluate whether or not state_encoder_config can change */
4201 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4203 if (hdw->state_encoder_config) {
4204 if (hdw->state_encoder_ok) {
4205 if (hdw->state_pipeline_req &&
4206 !hdw->state_pipeline_pause) return 0;
4208 hdw->state_encoder_config = 0;
4209 hdw->state_encoder_waitok = 0;
4210 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4211 /* paranoia - solve race if timer just completed */
4212 del_timer_sync(&hdw->encoder_wait_timer);
4214 if (!hdw->state_pathway_ok ||
4215 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4216 !hdw->state_encoder_ok ||
4217 !hdw->state_pipeline_idle ||
4218 hdw->state_pipeline_pause ||
4219 !hdw->state_pipeline_req ||
4220 !hdw->state_pipeline_config) {
4221 /* We must reset the enforced wait interval if
4222 anything has happened that might have disturbed
4223 the encoder. This should be a rare case. */
4224 if (timer_pending(&hdw->encoder_wait_timer)) {
4225 del_timer_sync(&hdw->encoder_wait_timer);
4227 if (hdw->state_encoder_waitok) {
4228 /* Must clear the state - therefore we did
4229 something to a state bit and must also
4231 hdw->state_encoder_waitok = 0;
4232 trace_stbit("state_encoder_waitok",
4233 hdw->state_encoder_waitok);
4238 if (!hdw->state_encoder_waitok) {
4239 if (!timer_pending(&hdw->encoder_wait_timer)) {
4240 /* waitok flag wasn't set and timer isn't
4241 running. Check flag once more to avoid
4242 a race then start the timer. This is
4243 the point when we measure out a minimal
4244 quiet interval before doing something to
4246 if (!hdw->state_encoder_waitok) {
4247 hdw->encoder_wait_timer.expires =
4248 jiffies + msecs_to_jiffies(
4249 TIME_MSEC_ENCODER_WAIT);
4250 add_timer(&hdw->encoder_wait_timer);
4253 /* We can't continue until we know we have been
4254 quiet for the interval measured by this
4258 pvr2_encoder_configure(hdw);
4259 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4261 trace_stbit("state_encoder_config",hdw->state_encoder_config);
4266 /* Return true if the encoder should not be running. */
4267 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4269 if (!hdw->state_encoder_ok) {
4270 /* Encoder isn't healthy at the moment, so stop it. */
4273 if (!hdw->state_pathway_ok) {
4274 /* Mode is not understood at the moment (i.e. it wants to
4275 change), so encoder must be stopped. */
4279 switch (hdw->pathway_state) {
4280 case PVR2_PATHWAY_ANALOG:
4281 if (!hdw->state_decoder_run) {
4282 /* We're in analog mode and the decoder is not
4283 running; thus the encoder should be stopped as
4288 case PVR2_PATHWAY_DIGITAL:
4289 if (hdw->state_encoder_runok) {
4290 /* This is a funny case. We're in digital mode so
4291 really the encoder should be stopped. However
4292 if it really is running, only kill it after
4293 runok has been set. This gives a chance for the
4294 onair quirk to function (encoder must run
4295 briefly first, at least once, before onair
4296 digital streaming can work). */
4301 /* Unknown mode; so encoder should be stopped. */
4305 /* If we get here, we haven't found a reason to stop the
4311 /* Return true if the encoder should be running. */
4312 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4314 if (!hdw->state_encoder_ok) {
4315 /* Don't run the encoder if it isn't healthy... */
4318 if (!hdw->state_pathway_ok) {
4319 /* Don't run the encoder if we don't (yet) know what mode
4320 we need to be in... */
4324 switch (hdw->pathway_state) {
4325 case PVR2_PATHWAY_ANALOG:
4326 if (hdw->state_decoder_run && hdw->state_decoder_ready) {
4327 /* In analog mode, if the decoder is running, then
4332 case PVR2_PATHWAY_DIGITAL:
4333 if ((hdw->hdw_desc->digital_control_scheme ==
4334 PVR2_DIGITAL_SCHEME_ONAIR) &&
4335 !hdw->state_encoder_runok) {
4336 /* This is a quirk. OnAir hardware won't stream
4337 digital until the encoder has been run at least
4338 once, for a minimal period of time (empiricially
4339 measured to be 1/4 second). So if we're on
4340 OnAir hardware and the encoder has never been
4341 run at all, then start the encoder. Normal
4342 state machine logic in the driver will
4343 automatically handle the remaining bits. */
4348 /* For completeness (unknown mode; encoder won't run ever) */
4351 /* If we get here, then we haven't found any reason to run the
4352 encoder, so don't run it. */
4357 /* Evaluate whether or not state_encoder_run can change */
4358 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4360 if (hdw->state_encoder_run) {
4361 if (!state_check_disable_encoder_run(hdw)) return 0;
4362 if (hdw->state_encoder_ok) {
4363 del_timer_sync(&hdw->encoder_run_timer);
4364 if (pvr2_encoder_stop(hdw) < 0) return !0;
4366 hdw->state_encoder_run = 0;
4368 if (!state_check_enable_encoder_run(hdw)) return 0;
4369 if (pvr2_encoder_start(hdw) < 0) return !0;
4370 hdw->state_encoder_run = !0;
4371 if (!hdw->state_encoder_runok) {
4372 hdw->encoder_run_timer.expires = jiffies +
4373 msecs_to_jiffies(TIME_MSEC_ENCODER_OK);
4374 add_timer(&hdw->encoder_run_timer);
4377 trace_stbit("state_encoder_run",hdw->state_encoder_run);
4382 /* Timeout function for quiescent timer. */
4383 static void pvr2_hdw_quiescent_timeout(unsigned long data)
4385 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4386 hdw->state_decoder_quiescent = !0;
4387 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4388 hdw->state_stale = !0;
4389 schedule_work(&hdw->workpoll);
4393 /* Timeout function for decoder stabilization timer. */
4394 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data)
4396 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4397 hdw->state_decoder_ready = !0;
4398 trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4399 hdw->state_stale = !0;
4400 schedule_work(&hdw->workpoll);
4404 /* Timeout function for encoder wait timer. */
4405 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
4407 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4408 hdw->state_encoder_waitok = !0;
4409 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4410 hdw->state_stale = !0;
4411 schedule_work(&hdw->workpoll);
4415 /* Timeout function for encoder run timer. */
4416 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
4418 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4419 if (!hdw->state_encoder_runok) {
4420 hdw->state_encoder_runok = !0;
4421 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4422 hdw->state_stale = !0;
4423 schedule_work(&hdw->workpoll);
4428 /* Evaluate whether or not state_decoder_run can change */
4429 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4431 if (hdw->state_decoder_run) {
4432 if (hdw->state_encoder_ok) {
4433 if (hdw->state_pipeline_req &&
4434 !hdw->state_pipeline_pause &&
4435 hdw->state_pathway_ok) return 0;
4437 if (!hdw->flag_decoder_missed) {
4438 pvr2_decoder_enable(hdw,0);
4440 hdw->state_decoder_quiescent = 0;
4441 hdw->state_decoder_run = 0;
4442 /* paranoia - solve race if timer(s) just completed */
4443 del_timer_sync(&hdw->quiescent_timer);
4444 /* Kill the stabilization timer, in case we're killing the
4445 encoder before the previous stabilization interval has
4446 been properly timed. */
4447 del_timer_sync(&hdw->decoder_stabilization_timer);
4448 hdw->state_decoder_ready = 0;
4450 if (!hdw->state_decoder_quiescent) {
4451 if (!timer_pending(&hdw->quiescent_timer)) {
4452 /* We don't do something about the
4453 quiescent timer until right here because
4454 we also want to catch cases where the
4455 decoder was already not running (like
4456 after initialization) as opposed to
4457 knowing that we had just stopped it.
4458 The second flag check is here to cover a
4459 race - the timer could have run and set
4460 this flag just after the previous check
4461 but before we did the pending check. */
4462 if (!hdw->state_decoder_quiescent) {
4463 hdw->quiescent_timer.expires =
4464 jiffies + msecs_to_jiffies(
4465 TIME_MSEC_DECODER_WAIT);
4466 add_timer(&hdw->quiescent_timer);
4469 /* Don't allow decoder to start again until it has
4470 been quiesced first. This little detail should
4471 hopefully further stabilize the encoder. */
4474 if (!hdw->state_pathway_ok ||
4475 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4476 !hdw->state_pipeline_req ||
4477 hdw->state_pipeline_pause ||
4478 !hdw->state_pipeline_config ||
4479 !hdw->state_encoder_config ||
4480 !hdw->state_encoder_ok) return 0;
4481 del_timer_sync(&hdw->quiescent_timer);
4482 if (hdw->flag_decoder_missed) return 0;
4483 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4484 hdw->state_decoder_quiescent = 0;
4485 hdw->state_decoder_ready = 0;
4486 hdw->state_decoder_run = !0;
4487 if (hdw->decoder_client_id == PVR2_CLIENT_ID_SAA7115) {
4488 hdw->decoder_stabilization_timer.expires =
4489 jiffies + msecs_to_jiffies(
4490 TIME_MSEC_DECODER_STABILIZATION_WAIT);
4491 add_timer(&hdw->decoder_stabilization_timer);
4493 hdw->state_decoder_ready = !0;
4496 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4497 trace_stbit("state_decoder_run",hdw->state_decoder_run);
4498 trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4503 /* Evaluate whether or not state_usbstream_run can change */
4504 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4506 if (hdw->state_usbstream_run) {
4508 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4509 fl = (hdw->state_encoder_ok &&
4510 hdw->state_encoder_run);
4511 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4512 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4513 fl = hdw->state_encoder_ok;
4516 hdw->state_pipeline_req &&
4517 !hdw->state_pipeline_pause &&
4518 hdw->state_pathway_ok) {
4521 pvr2_hdw_cmd_usbstream(hdw,0);
4522 hdw->state_usbstream_run = 0;
4524 if (!hdw->state_pipeline_req ||
4525 hdw->state_pipeline_pause ||
4526 !hdw->state_pathway_ok) return 0;
4527 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4528 if (!hdw->state_encoder_ok ||
4529 !hdw->state_encoder_run) return 0;
4530 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4531 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4532 if (!hdw->state_encoder_ok) return 0;
4533 if (hdw->state_encoder_run) return 0;
4534 if (hdw->hdw_desc->digital_control_scheme ==
4535 PVR2_DIGITAL_SCHEME_ONAIR) {
4536 /* OnAir digital receivers won't stream
4537 unless the analog encoder has run first.
4538 Why? I have no idea. But don't even
4539 try until we know the analog side is
4540 known to have run. */
4541 if (!hdw->state_encoder_runok) return 0;
4544 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4545 hdw->state_usbstream_run = !0;
4547 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4552 /* Attempt to configure pipeline, if needed */
4553 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4555 if (hdw->state_pipeline_config ||
4556 hdw->state_pipeline_pause) return 0;
4557 pvr2_hdw_commit_execute(hdw);
4562 /* Update pipeline idle and pipeline pause tracking states based on other
4563 inputs. This must be called whenever the other relevant inputs have
4565 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4569 /* Update pipeline state */
4570 st = !(hdw->state_encoder_run ||
4571 hdw->state_decoder_run ||
4572 hdw->state_usbstream_run ||
4573 (!hdw->state_decoder_quiescent));
4574 if (!st != !hdw->state_pipeline_idle) {
4575 hdw->state_pipeline_idle = st;
4578 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4579 hdw->state_pipeline_pause = 0;
4586 typedef int (*state_eval_func)(struct pvr2_hdw *);
4588 /* Set of functions to be run to evaluate various states in the driver. */
4589 static const state_eval_func eval_funcs[] = {
4590 state_eval_pathway_ok,
4591 state_eval_pipeline_config,
4592 state_eval_encoder_ok,
4593 state_eval_encoder_config,
4594 state_eval_decoder_run,
4595 state_eval_encoder_run,
4596 state_eval_usbstream_run,
4600 /* Process various states and return true if we did anything interesting. */
4601 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4604 int state_updated = 0;
4607 if (!hdw->state_stale) return 0;
4608 if ((hdw->fw1_state != FW1_STATE_OK) ||
4610 hdw->state_stale = 0;
4613 /* This loop is the heart of the entire driver. It keeps trying to
4614 evaluate various bits of driver state until nothing changes for
4615 one full iteration. Each "bit of state" tracks some global
4616 aspect of the driver, e.g. whether decoder should run, if
4617 pipeline is configured, usb streaming is on, etc. We separately
4618 evaluate each of those questions based on other driver state to
4619 arrive at the correct running configuration. */
4622 state_update_pipeline_state(hdw);
4623 /* Iterate over each bit of state */
4624 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4625 if ((*eval_funcs[i])(hdw)) {
4628 state_update_pipeline_state(hdw);
4631 } while (check_flag && hdw->flag_ok);
4632 hdw->state_stale = 0;
4633 trace_stbit("state_stale",hdw->state_stale);
4634 return state_updated;
4638 static unsigned int print_input_mask(unsigned int msk,
4639 char *buf,unsigned int acnt)
4641 unsigned int idx,ccnt;
4642 unsigned int tcnt = 0;
4643 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4644 if (!((1 << idx) & msk)) continue;
4645 ccnt = scnprintf(buf+tcnt,
4649 control_values_input[idx]);
4656 static const char *pvr2_pathway_state_name(int id)
4659 case PVR2_PATHWAY_ANALOG: return "analog";
4660 case PVR2_PATHWAY_DIGITAL: return "digital";
4661 default: return "unknown";
4666 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4667 char *buf,unsigned int acnt)
4673 "driver:%s%s%s%s%s <mode=%s>",
4674 (hdw->flag_ok ? " <ok>" : " <fail>"),
4675 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4676 (hdw->flag_disconnected ? " <disconnected>" :
4678 (hdw->flag_tripped ? " <tripped>" : ""),
4679 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4680 pvr2_pathway_state_name(hdw->pathway_state));
4685 "pipeline:%s%s%s%s",
4686 (hdw->state_pipeline_idle ? " <idle>" : ""),
4687 (hdw->state_pipeline_config ?
4688 " <configok>" : " <stale>"),
4689 (hdw->state_pipeline_req ? " <req>" : ""),
4690 (hdw->state_pipeline_pause ? " <pause>" : ""));
4694 "worker:%s%s%s%s%s%s%s",
4695 (hdw->state_decoder_run ?
4696 (hdw->state_decoder_ready ?
4697 "<decode:run>" : " <decode:start>") :
4698 (hdw->state_decoder_quiescent ?
4699 "" : " <decode:stop>")),
4700 (hdw->state_decoder_quiescent ?
4701 " <decode:quiescent>" : ""),
4702 (hdw->state_encoder_ok ?
4703 "" : " <encode:init>"),
4704 (hdw->state_encoder_run ?
4705 (hdw->state_encoder_runok ?
4707 " <encode:firstrun>") :
4708 (hdw->state_encoder_runok ?
4710 " <encode:virgin>")),
4711 (hdw->state_encoder_config ?
4712 " <encode:configok>" :
4713 (hdw->state_encoder_waitok ?
4714 "" : " <encode:waitok>")),
4715 (hdw->state_usbstream_run ?
4716 " <usb:run>" : " <usb:stop>"),
4717 (hdw->state_pathway_ok ?
4718 " <pathway:ok>" : ""));
4723 pvr2_get_state_name(hdw->master_state));
4725 unsigned int tcnt = 0;
4728 ccnt = scnprintf(buf,
4730 "Hardware supported inputs: ");
4732 tcnt += print_input_mask(hdw->input_avail_mask,
4735 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4736 ccnt = scnprintf(buf+tcnt,
4738 "; allowed inputs: ");
4740 tcnt += print_input_mask(hdw->input_allowed_mask,
4747 struct pvr2_stream_stats stats;
4748 if (!hdw->vid_stream) break;
4749 pvr2_stream_get_stats(hdw->vid_stream,
4754 "Bytes streamed=%u URBs: queued=%u idle=%u ready=%u processed=%u failed=%u",
4755 stats.bytes_processed,
4756 stats.buffers_in_queue,
4757 stats.buffers_in_idle,
4758 stats.buffers_in_ready,
4759 stats.buffers_processed,
4760 stats.buffers_failed);
4763 unsigned int id = hdw->ir_scheme_active;
4764 return scnprintf(buf, acnt, "ir scheme: id=%d %s", id,
4765 (id >= ARRAY_SIZE(ir_scheme_names) ?
4766 "?" : ir_scheme_names[id]));
4774 /* Generate report containing info about attached sub-devices and attached
4775 i2c clients, including an indication of which attached i2c clients are
4776 actually sub-devices. */
4777 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
4778 char *buf, unsigned int acnt)
4780 struct v4l2_subdev *sd;
4781 unsigned int tcnt = 0;
4783 struct i2c_client *client;
4787 ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
4789 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4792 if (id < ARRAY_SIZE(module_names)) p = module_names[id];
4794 ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s:", p);
4797 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4798 " (unknown id=%u):", id);
4801 client = v4l2_get_subdevdata(sd);
4803 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4804 " %s @ %02x\n", client->name,
4808 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4809 " no i2c client\n");
4817 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4818 char *buf,unsigned int acnt)
4820 unsigned int bcnt,ccnt,idx;
4822 LOCK_TAKE(hdw->big_lock);
4823 for (idx = 0; ; idx++) {
4824 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4826 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4828 buf[0] = '\n'; ccnt = 1;
4829 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4831 ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
4832 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4833 LOCK_GIVE(hdw->big_lock);
4838 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4841 unsigned int idx, ccnt;
4842 unsigned int lcnt, ucnt;
4844 for (idx = 0; ; idx++) {
4845 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4847 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4849 ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
4850 if (ccnt >= sizeof(buf))
4854 while (ucnt < ccnt) {
4856 while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
4859 printk(KERN_INFO "%s %.*s\n", hdw->name, lcnt, buf + ucnt);
4865 /* Evaluate and update the driver's current state, taking various actions
4866 as appropriate for the update. */
4867 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4870 int state_updated = 0;
4871 int callback_flag = 0;
4874 pvr2_trace(PVR2_TRACE_STBITS,
4875 "Drive state check START");
4876 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4877 pvr2_hdw_state_log_state(hdw);
4880 /* Process all state and get back over disposition */
4881 state_updated = pvr2_hdw_state_update(hdw);
4883 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4885 /* Update master state based upon all other states. */
4886 if (!hdw->flag_ok) {
4887 st = PVR2_STATE_DEAD;
4888 } else if (hdw->fw1_state != FW1_STATE_OK) {
4889 st = PVR2_STATE_COLD;
4890 } else if ((analog_mode ||
4891 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4892 !hdw->state_encoder_ok) {
4893 st = PVR2_STATE_WARM;
4894 } else if (hdw->flag_tripped ||
4895 (analog_mode && hdw->flag_decoder_missed)) {
4896 st = PVR2_STATE_ERROR;
4897 } else if (hdw->state_usbstream_run &&
4899 (hdw->state_encoder_run && hdw->state_decoder_run))) {
4900 st = PVR2_STATE_RUN;
4902 st = PVR2_STATE_READY;
4904 if (hdw->master_state != st) {
4905 pvr2_trace(PVR2_TRACE_STATE,
4906 "Device state change from %s to %s",
4907 pvr2_get_state_name(hdw->master_state),
4908 pvr2_get_state_name(st));
4909 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
4910 hdw->master_state = st;
4914 if (state_updated) {
4915 /* Trigger anyone waiting on any state changes here. */
4916 wake_up(&hdw->state_wait_data);
4919 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4920 pvr2_hdw_state_log_state(hdw);
4922 pvr2_trace(PVR2_TRACE_STBITS,
4923 "Drive state check DONE callback=%d",callback_flag);
4925 return callback_flag;
4929 /* Cause kernel thread to check / update driver state */
4930 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
4932 if (hdw->state_stale) return;
4933 hdw->state_stale = !0;
4934 trace_stbit("state_stale",hdw->state_stale);
4935 schedule_work(&hdw->workpoll);
4939 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
4941 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
4945 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
4947 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
4951 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
4953 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
4957 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
4962 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
4963 if (ret) return ret;
4964 nval = (cval & ~msk) | (val & msk);
4965 pvr2_trace(PVR2_TRACE_GPIO,
4966 "GPIO direction changing 0x%x:0x%x from 0x%x to 0x%x",
4970 pvr2_trace(PVR2_TRACE_GPIO,
4971 "GPIO direction changing to 0x%x",nval);
4973 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
4977 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
4982 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
4983 if (ret) return ret;
4984 nval = (cval & ~msk) | (val & msk);
4985 pvr2_trace(PVR2_TRACE_GPIO,
4986 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
4990 pvr2_trace(PVR2_TRACE_GPIO,
4991 "GPIO output changing to 0x%x",nval);
4993 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
4997 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
4999 struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
5000 memset(vtp, 0, sizeof(*vtp));
5001 vtp->type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
5002 V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
5003 hdw->tuner_signal_stale = 0;
5004 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5005 using v4l2-subdev - therefore we can't support that AT ALL right
5006 now. (Of course, no sub-drivers seem to implement it either.
5007 But now it's a a chicken and egg problem...) */
5008 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner, vtp);
5009 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll type=%u strength=%u audio=0x%x cap=0x%x low=%u hi=%u",
5011 vtp->signal, vtp->rxsubchans, vtp->capability,
5012 vtp->rangelow, vtp->rangehigh);
5014 /* We have to do this to avoid getting into constant polling if
5015 there's nobody to answer a poll of cropcap info. */
5016 hdw->cropcap_stale = 0;
5020 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5022 return hdw->input_avail_mask;
5026 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5028 return hdw->input_allowed_mask;
5032 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5034 if (hdw->input_val != v) {
5036 hdw->input_dirty = !0;
5039 /* Handle side effects - if we switch to a mode that needs the RF
5040 tuner, then select the right frequency choice as well and mark
5042 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5043 hdw->freqSelector = 0;
5044 hdw->freqDirty = !0;
5045 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5046 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5047 hdw->freqSelector = 1;
5048 hdw->freqDirty = !0;
5054 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5055 unsigned int change_mask,
5056 unsigned int change_val)
5059 unsigned int nv,m,idx;
5060 LOCK_TAKE(hdw->big_lock);
5062 nv = hdw->input_allowed_mask & ~change_mask;
5063 nv |= (change_val & change_mask);
5064 nv &= hdw->input_avail_mask;
5066 /* No legal modes left; return error instead. */
5070 hdw->input_allowed_mask = nv;
5071 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5072 /* Current mode is still in the allowed mask, so
5076 /* Select and switch to a mode that is still in the allowed
5078 if (!hdw->input_allowed_mask) {
5079 /* Nothing legal; give up */
5082 m = hdw->input_allowed_mask;
5083 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5084 if (!((1 << idx) & m)) continue;
5085 pvr2_hdw_set_input(hdw,idx);
5089 LOCK_GIVE(hdw->big_lock);
5094 /* Find I2C address of eeprom */
5095 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5098 LOCK_TAKE(hdw->ctl_lock); do {
5099 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5100 result = pvr2_send_request(hdw,
5103 if (result < 0) break;
5104 result = hdw->cmd_buffer[0];
5105 } while(0); LOCK_GIVE(hdw->ctl_lock);