4 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <linux/errno.h>
22 #include <linux/string.h>
23 #include <linux/slab.h>
24 #include <linux/firmware.h>
25 #include <linux/videodev2.h>
26 #include <media/v4l2-common.h>
27 #include <media/tuner.h>
29 #include "pvrusb2-std.h"
30 #include "pvrusb2-util.h"
31 #include "pvrusb2-hdw.h"
32 #include "pvrusb2-i2c-core.h"
33 #include "pvrusb2-eeprom.h"
34 #include "pvrusb2-hdw-internal.h"
35 #include "pvrusb2-encoder.h"
36 #include "pvrusb2-debug.h"
37 #include "pvrusb2-fx2-cmd.h"
38 #include "pvrusb2-wm8775.h"
39 #include "pvrusb2-video-v4l.h"
40 #include "pvrusb2-cx2584x-v4l.h"
41 #include "pvrusb2-cs53l32a.h"
42 #include "pvrusb2-audio.h"
44 #define TV_MIN_FREQ 55250000L
45 #define TV_MAX_FREQ 850000000L
47 /* This defines a minimum interval that the decoder must remain quiet
48 before we are allowed to start it running. */
49 #define TIME_MSEC_DECODER_WAIT 50
51 /* This defines a minimum interval that the encoder must remain quiet
52 before we are allowed to configure it. I had this originally set to
53 50msec, but Martin Dauskardt <martin.dauskardt@gmx.de> reports that
54 things work better when it's set to 100msec. */
55 #define TIME_MSEC_ENCODER_WAIT 100
57 /* This defines the minimum interval that the encoder must successfully run
58 before we consider that the encoder has run at least once since its
59 firmware has been loaded. This measurement is in important for cases
60 where we can't do something until we know that the encoder has been run
62 #define TIME_MSEC_ENCODER_OK 250
64 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
65 static DEFINE_MUTEX(pvr2_unit_mtx);
68 static int procreload;
69 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
70 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
71 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
72 static int init_pause_msec;
74 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
75 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
76 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
77 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
78 module_param(procreload, int, S_IRUGO|S_IWUSR);
79 MODULE_PARM_DESC(procreload,
80 "Attempt init failure recovery with firmware reload");
81 module_param_array(tuner, int, NULL, 0444);
82 MODULE_PARM_DESC(tuner,"specify installed tuner type");
83 module_param_array(video_std, int, NULL, 0444);
84 MODULE_PARM_DESC(video_std,"specify initial video standard");
85 module_param_array(tolerance, int, NULL, 0444);
86 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
88 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
89 static int default_tv_freq = 61250000L;
90 /* 104.3 MHz, a usable FM station for my area */
91 static int default_radio_freq = 104300000L;
93 module_param_named(tv_freq, default_tv_freq, int, 0444);
94 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
95 module_param_named(radio_freq, default_radio_freq, int, 0444);
96 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
98 #define PVR2_CTL_WRITE_ENDPOINT 0x01
99 #define PVR2_CTL_READ_ENDPOINT 0x81
101 #define PVR2_GPIO_IN 0x9008
102 #define PVR2_GPIO_OUT 0x900c
103 #define PVR2_GPIO_DIR 0x9020
105 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
107 #define PVR2_FIRMWARE_ENDPOINT 0x02
109 /* size of a firmware chunk */
110 #define FIRMWARE_CHUNK_SIZE 0x2000
112 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
113 struct v4l2_subdev *);
115 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
116 [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
117 [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
118 [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
119 [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update,
120 [PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update,
123 static const char *module_names[] = {
124 [PVR2_CLIENT_ID_MSP3400] = "msp3400",
125 [PVR2_CLIENT_ID_CX25840] = "cx25840",
126 [PVR2_CLIENT_ID_SAA7115] = "saa7115",
127 [PVR2_CLIENT_ID_TUNER] = "tuner",
128 [PVR2_CLIENT_ID_DEMOD] = "tuner",
129 [PVR2_CLIENT_ID_CS53L32A] = "cs53l32a",
130 [PVR2_CLIENT_ID_WM8775] = "wm8775",
134 static const unsigned char *module_i2c_addresses[] = {
135 [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
136 [PVR2_CLIENT_ID_DEMOD] = "\x43",
137 [PVR2_CLIENT_ID_MSP3400] = "\x40",
138 [PVR2_CLIENT_ID_SAA7115] = "\x21",
139 [PVR2_CLIENT_ID_WM8775] = "\x1b",
140 [PVR2_CLIENT_ID_CX25840] = "\x44",
141 [PVR2_CLIENT_ID_CS53L32A] = "\x11",
145 static const char *ir_scheme_names[] = {
146 [PVR2_IR_SCHEME_NONE] = "none",
147 [PVR2_IR_SCHEME_29XXX] = "29xxx",
148 [PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)",
149 [PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)",
150 [PVR2_IR_SCHEME_ZILOG] = "Zilog",
154 /* Define the list of additional controls we'll dynamically construct based
155 on query of the cx2341x module. */
156 struct pvr2_mpeg_ids {
160 static const struct pvr2_mpeg_ids mpeg_ids[] = {
162 .strid = "audio_layer",
163 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
165 .strid = "audio_bitrate",
166 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
168 /* Already using audio_mode elsewhere :-( */
169 .strid = "mpeg_audio_mode",
170 .id = V4L2_CID_MPEG_AUDIO_MODE,
172 .strid = "mpeg_audio_mode_extension",
173 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
175 .strid = "audio_emphasis",
176 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
178 .strid = "audio_crc",
179 .id = V4L2_CID_MPEG_AUDIO_CRC,
181 .strid = "video_aspect",
182 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
184 .strid = "video_b_frames",
185 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
187 .strid = "video_gop_size",
188 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
190 .strid = "video_gop_closure",
191 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
193 .strid = "video_bitrate_mode",
194 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
196 .strid = "video_bitrate",
197 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
199 .strid = "video_bitrate_peak",
200 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
202 .strid = "video_temporal_decimation",
203 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
205 .strid = "stream_type",
206 .id = V4L2_CID_MPEG_STREAM_TYPE,
208 .strid = "video_spatial_filter_mode",
209 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
211 .strid = "video_spatial_filter",
212 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
214 .strid = "video_luma_spatial_filter_type",
215 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
217 .strid = "video_chroma_spatial_filter_type",
218 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
220 .strid = "video_temporal_filter_mode",
221 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
223 .strid = "video_temporal_filter",
224 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
226 .strid = "video_median_filter_type",
227 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
229 .strid = "video_luma_median_filter_top",
230 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
232 .strid = "video_luma_median_filter_bottom",
233 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
235 .strid = "video_chroma_median_filter_top",
236 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
238 .strid = "video_chroma_median_filter_bottom",
239 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
242 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
245 static const char *control_values_srate[] = {
246 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
247 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
248 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
253 static const char *control_values_input[] = {
254 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
255 [PVR2_CVAL_INPUT_DTV] = "dtv",
256 [PVR2_CVAL_INPUT_RADIO] = "radio",
257 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
258 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
262 static const char *control_values_audiomode[] = {
263 [V4L2_TUNER_MODE_MONO] = "Mono",
264 [V4L2_TUNER_MODE_STEREO] = "Stereo",
265 [V4L2_TUNER_MODE_LANG1] = "Lang1",
266 [V4L2_TUNER_MODE_LANG2] = "Lang2",
267 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
271 static const char *control_values_hsm[] = {
272 [PVR2_CVAL_HSM_FAIL] = "Fail",
273 [PVR2_CVAL_HSM_HIGH] = "High",
274 [PVR2_CVAL_HSM_FULL] = "Full",
278 static const char *pvr2_state_names[] = {
279 [PVR2_STATE_NONE] = "none",
280 [PVR2_STATE_DEAD] = "dead",
281 [PVR2_STATE_COLD] = "cold",
282 [PVR2_STATE_WARM] = "warm",
283 [PVR2_STATE_ERROR] = "error",
284 [PVR2_STATE_READY] = "ready",
285 [PVR2_STATE_RUN] = "run",
289 struct pvr2_fx2cmd_descdef {
294 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
295 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
296 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
297 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
298 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
299 {FX2CMD_REG_WRITE, "write encoder register"},
300 {FX2CMD_REG_READ, "read encoder register"},
301 {FX2CMD_MEMSEL, "encoder memsel"},
302 {FX2CMD_I2C_WRITE, "i2c write"},
303 {FX2CMD_I2C_READ, "i2c read"},
304 {FX2CMD_GET_USB_SPEED, "get USB speed"},
305 {FX2CMD_STREAMING_ON, "stream on"},
306 {FX2CMD_STREAMING_OFF, "stream off"},
307 {FX2CMD_FWPOST1, "fwpost1"},
308 {FX2CMD_POWER_OFF, "power off"},
309 {FX2CMD_POWER_ON, "power on"},
310 {FX2CMD_DEEP_RESET, "deep reset"},
311 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
312 {FX2CMD_GET_IR_CODE, "get IR code"},
313 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
314 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
315 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
316 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
317 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
318 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
319 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
323 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
324 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
325 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
326 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
327 static void pvr2_hdw_worker_poll(struct work_struct *work);
328 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
329 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
330 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
331 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
332 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
333 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
334 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
335 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
336 static void pvr2_hdw_quiescent_timeout(unsigned long);
337 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
338 static void pvr2_hdw_encoder_run_timeout(unsigned long);
339 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
340 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
341 unsigned int timeout,int probe_fl,
342 void *write_data,unsigned int write_len,
343 void *read_data,unsigned int read_len);
344 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
347 static void trace_stbit(const char *name,int val)
349 pvr2_trace(PVR2_TRACE_STBITS,
350 "State bit %s <-- %s",
351 name,(val ? "true" : "false"));
354 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
356 struct pvr2_hdw *hdw = cptr->hdw;
357 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
358 *vp = hdw->freqTable[hdw->freqProgSlot-1];
365 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
367 struct pvr2_hdw *hdw = cptr->hdw;
368 unsigned int slotId = hdw->freqProgSlot;
369 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
370 hdw->freqTable[slotId-1] = v;
371 /* Handle side effects correctly - if we're tuned to this
372 slot, then forgot the slot id relation since the stored
373 frequency has been changed. */
374 if (hdw->freqSelector) {
375 if (hdw->freqSlotRadio == slotId) {
376 hdw->freqSlotRadio = 0;
379 if (hdw->freqSlotTelevision == slotId) {
380 hdw->freqSlotTelevision = 0;
387 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
389 *vp = cptr->hdw->freqProgSlot;
393 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
395 struct pvr2_hdw *hdw = cptr->hdw;
396 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
397 hdw->freqProgSlot = v;
402 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
404 struct pvr2_hdw *hdw = cptr->hdw;
405 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
409 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
412 struct pvr2_hdw *hdw = cptr->hdw;
413 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
415 freq = hdw->freqTable[slotId-1];
417 pvr2_hdw_set_cur_freq(hdw,freq);
419 if (hdw->freqSelector) {
420 hdw->freqSlotRadio = slotId;
422 hdw->freqSlotTelevision = slotId;
427 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
429 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
433 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
435 return cptr->hdw->freqDirty != 0;
438 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
440 cptr->hdw->freqDirty = 0;
443 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
445 pvr2_hdw_set_cur_freq(cptr->hdw,v);
449 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
451 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
452 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
456 *left = cap->bounds.left;
460 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
462 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
463 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
467 *left = cap->bounds.left;
468 if (cap->bounds.width > cptr->hdw->cropw_val) {
469 *left += cap->bounds.width - cptr->hdw->cropw_val;
474 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
476 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
477 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
481 *top = cap->bounds.top;
485 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
487 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
488 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
492 *top = cap->bounds.top;
493 if (cap->bounds.height > cptr->hdw->croph_val) {
494 *top += cap->bounds.height - cptr->hdw->croph_val;
499 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *val)
501 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
502 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
507 if (cap->bounds.width > cptr->hdw->cropl_val) {
508 *val = cap->bounds.width - cptr->hdw->cropl_val;
513 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *val)
515 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
516 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
521 if (cap->bounds.height > cptr->hdw->cropt_val) {
522 *val = cap->bounds.height - cptr->hdw->cropt_val;
527 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
529 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
530 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
534 *val = cap->bounds.left;
538 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
540 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
541 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
545 *val = cap->bounds.top;
549 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
551 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
552 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
556 *val = cap->bounds.width;
560 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
562 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
563 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
567 *val = cap->bounds.height;
571 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
573 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
574 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
578 *val = cap->defrect.left;
582 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
584 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
585 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
589 *val = cap->defrect.top;
593 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
595 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
596 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
600 *val = cap->defrect.width;
604 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
606 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
607 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
611 *val = cap->defrect.height;
615 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
617 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
618 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
622 *val = cap->pixelaspect.numerator;
626 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
628 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
629 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
633 *val = cap->pixelaspect.denominator;
637 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
639 /* Actual maximum depends on the video standard in effect. */
640 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
648 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
650 /* Actual minimum depends on device digitizer type. */
651 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
659 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
661 *vp = cptr->hdw->input_val;
665 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
667 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
670 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
672 return pvr2_hdw_set_input(cptr->hdw,v);
675 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
677 return cptr->hdw->input_dirty != 0;
680 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
682 cptr->hdw->input_dirty = 0;
686 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
689 struct pvr2_hdw *hdw = cptr->hdw;
690 if (hdw->tuner_signal_stale) {
691 pvr2_hdw_status_poll(hdw);
693 fv = hdw->tuner_signal_info.rangehigh;
695 /* Safety fallback */
699 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
708 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
711 struct pvr2_hdw *hdw = cptr->hdw;
712 if (hdw->tuner_signal_stale) {
713 pvr2_hdw_status_poll(hdw);
715 fv = hdw->tuner_signal_info.rangelow;
717 /* Safety fallback */
721 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
730 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
732 return cptr->hdw->enc_stale != 0;
735 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
737 cptr->hdw->enc_stale = 0;
738 cptr->hdw->enc_unsafe_stale = 0;
741 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
744 struct v4l2_ext_controls cs;
745 struct v4l2_ext_control c1;
746 memset(&cs,0,sizeof(cs));
747 memset(&c1,0,sizeof(c1));
750 c1.id = cptr->info->v4l_id;
751 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
758 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
761 struct pvr2_hdw *hdw = cptr->hdw;
762 struct v4l2_ext_controls cs;
763 struct v4l2_ext_control c1;
764 memset(&cs,0,sizeof(cs));
765 memset(&c1,0,sizeof(c1));
768 c1.id = cptr->info->v4l_id;
770 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
771 hdw->state_encoder_run, &cs,
774 /* Oops. cx2341x is telling us it's not safe to change
775 this control while we're capturing. Make a note of this
776 fact so that the pipeline will be stopped the next time
777 controls are committed. Then go on ahead and store this
779 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
782 if (!ret) hdw->enc_unsafe_stale = !0;
789 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
791 struct v4l2_queryctrl qctrl;
792 struct pvr2_ctl_info *info;
793 qctrl.id = cptr->info->v4l_id;
794 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
795 /* Strip out the const so we can adjust a function pointer. It's
796 OK to do this here because we know this is a dynamically created
797 control, so the underlying storage for the info pointer is (a)
798 private to us, and (b) not in read-only storage. Either we do
799 this or we significantly complicate the underlying control
801 info = (struct pvr2_ctl_info *)(cptr->info);
802 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
803 if (info->set_value) {
804 info->set_value = NULL;
807 if (!(info->set_value)) {
808 info->set_value = ctrl_cx2341x_set;
814 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
816 *vp = cptr->hdw->state_pipeline_req;
820 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
822 *vp = cptr->hdw->master_state;
826 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
828 int result = pvr2_hdw_is_hsm(cptr->hdw);
829 *vp = PVR2_CVAL_HSM_FULL;
830 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
831 if (result) *vp = PVR2_CVAL_HSM_HIGH;
835 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
837 *vp = cptr->hdw->std_mask_avail;
841 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
843 struct pvr2_hdw *hdw = cptr->hdw;
845 ns = hdw->std_mask_avail;
846 ns = (ns & ~m) | (v & m);
847 if (ns == hdw->std_mask_avail) return 0;
848 hdw->std_mask_avail = ns;
849 pvr2_hdw_internal_set_std_avail(hdw);
850 pvr2_hdw_internal_find_stdenum(hdw);
854 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
855 char *bufPtr,unsigned int bufSize,
858 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
862 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
863 const char *bufPtr,unsigned int bufSize,
868 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
869 if (ret < 0) return ret;
870 if (mskp) *mskp = id;
871 if (valp) *valp = id;
875 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
877 *vp = cptr->hdw->std_mask_cur;
881 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
883 struct pvr2_hdw *hdw = cptr->hdw;
885 ns = hdw->std_mask_cur;
886 ns = (ns & ~m) | (v & m);
887 if (ns == hdw->std_mask_cur) return 0;
888 hdw->std_mask_cur = ns;
890 pvr2_hdw_internal_find_stdenum(hdw);
894 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
896 return cptr->hdw->std_dirty != 0;
899 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
901 cptr->hdw->std_dirty = 0;
904 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
906 struct pvr2_hdw *hdw = cptr->hdw;
907 pvr2_hdw_status_poll(hdw);
908 *vp = hdw->tuner_signal_info.signal;
912 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
915 unsigned int subchan;
916 struct pvr2_hdw *hdw = cptr->hdw;
917 pvr2_hdw_status_poll(hdw);
918 subchan = hdw->tuner_signal_info.rxsubchans;
919 if (subchan & V4L2_TUNER_SUB_MONO) {
920 val |= (1 << V4L2_TUNER_MODE_MONO);
922 if (subchan & V4L2_TUNER_SUB_STEREO) {
923 val |= (1 << V4L2_TUNER_MODE_STEREO);
925 if (subchan & V4L2_TUNER_SUB_LANG1) {
926 val |= (1 << V4L2_TUNER_MODE_LANG1);
928 if (subchan & V4L2_TUNER_SUB_LANG2) {
929 val |= (1 << V4L2_TUNER_MODE_LANG2);
936 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
938 struct pvr2_hdw *hdw = cptr->hdw;
939 if (v < 0) return -EINVAL;
940 if (v > hdw->std_enum_cnt) return -EINVAL;
941 hdw->std_enum_cur = v;
944 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
945 hdw->std_mask_cur = hdw->std_defs[v].id;
951 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
953 *vp = cptr->hdw->std_enum_cur;
958 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
960 return cptr->hdw->std_dirty != 0;
964 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
966 cptr->hdw->std_dirty = 0;
970 #define DEFINT(vmin,vmax) \
971 .type = pvr2_ctl_int, \
972 .def.type_int.min_value = vmin, \
973 .def.type_int.max_value = vmax
975 #define DEFENUM(tab) \
976 .type = pvr2_ctl_enum, \
977 .def.type_enum.count = ARRAY_SIZE(tab), \
978 .def.type_enum.value_names = tab
981 .type = pvr2_ctl_bool
983 #define DEFMASK(msk,tab) \
984 .type = pvr2_ctl_bitmask, \
985 .def.type_bitmask.valid_bits = msk, \
986 .def.type_bitmask.bit_names = tab
988 #define DEFREF(vname) \
989 .set_value = ctrl_set_##vname, \
990 .get_value = ctrl_get_##vname, \
991 .is_dirty = ctrl_isdirty_##vname, \
992 .clear_dirty = ctrl_cleardirty_##vname
995 #define VCREATE_FUNCS(vname) \
996 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
997 {*vp = cptr->hdw->vname##_val; return 0;} \
998 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
999 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
1000 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
1001 {return cptr->hdw->vname##_dirty != 0;} \
1002 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
1003 {cptr->hdw->vname##_dirty = 0;}
1005 VCREATE_FUNCS(brightness)
1006 VCREATE_FUNCS(contrast)
1007 VCREATE_FUNCS(saturation)
1009 VCREATE_FUNCS(volume)
1010 VCREATE_FUNCS(balance)
1012 VCREATE_FUNCS(treble)
1014 VCREATE_FUNCS(cropl)
1015 VCREATE_FUNCS(cropt)
1016 VCREATE_FUNCS(cropw)
1017 VCREATE_FUNCS(croph)
1018 VCREATE_FUNCS(audiomode)
1019 VCREATE_FUNCS(res_hor)
1020 VCREATE_FUNCS(res_ver)
1021 VCREATE_FUNCS(srate)
1023 /* Table definition of all controls which can be manipulated */
1024 static const struct pvr2_ctl_info control_defs[] = {
1026 .v4l_id = V4L2_CID_BRIGHTNESS,
1027 .desc = "Brightness",
1028 .name = "brightness",
1029 .default_value = 128,
1033 .v4l_id = V4L2_CID_CONTRAST,
1036 .default_value = 68,
1040 .v4l_id = V4L2_CID_SATURATION,
1041 .desc = "Saturation",
1042 .name = "saturation",
1043 .default_value = 64,
1047 .v4l_id = V4L2_CID_HUE,
1054 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1057 .default_value = 62000,
1061 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1066 DEFINT(-32768,32767),
1068 .v4l_id = V4L2_CID_AUDIO_BASS,
1073 DEFINT(-32768,32767),
1075 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1080 DEFINT(-32768,32767),
1082 .v4l_id = V4L2_CID_AUDIO_MUTE,
1089 .desc = "Capture crop left margin",
1090 .name = "crop_left",
1091 .internal_id = PVR2_CID_CROPL,
1095 .get_min_value = ctrl_cropl_min_get,
1096 .get_max_value = ctrl_cropl_max_get,
1097 .get_def_value = ctrl_get_cropcapdl,
1099 .desc = "Capture crop top margin",
1101 .internal_id = PVR2_CID_CROPT,
1105 .get_min_value = ctrl_cropt_min_get,
1106 .get_max_value = ctrl_cropt_max_get,
1107 .get_def_value = ctrl_get_cropcapdt,
1109 .desc = "Capture crop width",
1110 .name = "crop_width",
1111 .internal_id = PVR2_CID_CROPW,
1112 .default_value = 720,
1114 .get_max_value = ctrl_cropw_max_get,
1115 .get_def_value = ctrl_get_cropcapdw,
1117 .desc = "Capture crop height",
1118 .name = "crop_height",
1119 .internal_id = PVR2_CID_CROPH,
1120 .default_value = 480,
1122 .get_max_value = ctrl_croph_max_get,
1123 .get_def_value = ctrl_get_cropcapdh,
1125 .desc = "Capture capability pixel aspect numerator",
1126 .name = "cropcap_pixel_numerator",
1127 .internal_id = PVR2_CID_CROPCAPPAN,
1128 .get_value = ctrl_get_cropcappan,
1130 .desc = "Capture capability pixel aspect denominator",
1131 .name = "cropcap_pixel_denominator",
1132 .internal_id = PVR2_CID_CROPCAPPAD,
1133 .get_value = ctrl_get_cropcappad,
1135 .desc = "Capture capability bounds top",
1136 .name = "cropcap_bounds_top",
1137 .internal_id = PVR2_CID_CROPCAPBT,
1138 .get_value = ctrl_get_cropcapbt,
1140 .desc = "Capture capability bounds left",
1141 .name = "cropcap_bounds_left",
1142 .internal_id = PVR2_CID_CROPCAPBL,
1143 .get_value = ctrl_get_cropcapbl,
1145 .desc = "Capture capability bounds width",
1146 .name = "cropcap_bounds_width",
1147 .internal_id = PVR2_CID_CROPCAPBW,
1148 .get_value = ctrl_get_cropcapbw,
1150 .desc = "Capture capability bounds height",
1151 .name = "cropcap_bounds_height",
1152 .internal_id = PVR2_CID_CROPCAPBH,
1153 .get_value = ctrl_get_cropcapbh,
1155 .desc = "Video Source",
1157 .internal_id = PVR2_CID_INPUT,
1158 .default_value = PVR2_CVAL_INPUT_TV,
1159 .check_value = ctrl_check_input,
1161 DEFENUM(control_values_input),
1163 .desc = "Audio Mode",
1164 .name = "audio_mode",
1165 .internal_id = PVR2_CID_AUDIOMODE,
1166 .default_value = V4L2_TUNER_MODE_STEREO,
1168 DEFENUM(control_values_audiomode),
1170 .desc = "Horizontal capture resolution",
1171 .name = "resolution_hor",
1172 .internal_id = PVR2_CID_HRES,
1173 .default_value = 720,
1177 .desc = "Vertical capture resolution",
1178 .name = "resolution_ver",
1179 .internal_id = PVR2_CID_VRES,
1180 .default_value = 480,
1183 /* Hook in check for video standard and adjust maximum
1184 depending on the standard. */
1185 .get_max_value = ctrl_vres_max_get,
1186 .get_min_value = ctrl_vres_min_get,
1188 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1189 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1190 .desc = "Audio Sampling Frequency",
1193 DEFENUM(control_values_srate),
1195 .desc = "Tuner Frequency (Hz)",
1196 .name = "frequency",
1197 .internal_id = PVR2_CID_FREQUENCY,
1199 .set_value = ctrl_freq_set,
1200 .get_value = ctrl_freq_get,
1201 .is_dirty = ctrl_freq_is_dirty,
1202 .clear_dirty = ctrl_freq_clear_dirty,
1204 /* Hook in check for input value (tv/radio) and adjust
1205 max/min values accordingly */
1206 .get_max_value = ctrl_freq_max_get,
1207 .get_min_value = ctrl_freq_min_get,
1211 .set_value = ctrl_channel_set,
1212 .get_value = ctrl_channel_get,
1213 DEFINT(0,FREQTABLE_SIZE),
1215 .desc = "Channel Program Frequency",
1216 .name = "freq_table_value",
1217 .set_value = ctrl_channelfreq_set,
1218 .get_value = ctrl_channelfreq_get,
1220 /* Hook in check for input value (tv/radio) and adjust
1221 max/min values accordingly */
1222 .get_max_value = ctrl_freq_max_get,
1223 .get_min_value = ctrl_freq_min_get,
1225 .desc = "Channel Program ID",
1226 .name = "freq_table_channel",
1227 .set_value = ctrl_channelprog_set,
1228 .get_value = ctrl_channelprog_get,
1229 DEFINT(0,FREQTABLE_SIZE),
1231 .desc = "Streaming Enabled",
1232 .name = "streaming_enabled",
1233 .get_value = ctrl_streamingenabled_get,
1236 .desc = "USB Speed",
1237 .name = "usb_speed",
1238 .get_value = ctrl_hsm_get,
1239 DEFENUM(control_values_hsm),
1241 .desc = "Master State",
1242 .name = "master_state",
1243 .get_value = ctrl_masterstate_get,
1244 DEFENUM(pvr2_state_names),
1246 .desc = "Signal Present",
1247 .name = "signal_present",
1248 .get_value = ctrl_signal_get,
1251 .desc = "Audio Modes Present",
1252 .name = "audio_modes_present",
1253 .get_value = ctrl_audio_modes_present_get,
1254 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1255 v4l. Nothing outside of this module cares about this,
1256 but I reuse it in order to also reuse the
1257 control_values_audiomode string table. */
1258 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1259 (1 << V4L2_TUNER_MODE_STEREO)|
1260 (1 << V4L2_TUNER_MODE_LANG1)|
1261 (1 << V4L2_TUNER_MODE_LANG2)),
1262 control_values_audiomode),
1264 .desc = "Video Standards Available Mask",
1265 .name = "video_standard_mask_available",
1266 .internal_id = PVR2_CID_STDAVAIL,
1268 .get_value = ctrl_stdavail_get,
1269 .set_value = ctrl_stdavail_set,
1270 .val_to_sym = ctrl_std_val_to_sym,
1271 .sym_to_val = ctrl_std_sym_to_val,
1272 .type = pvr2_ctl_bitmask,
1274 .desc = "Video Standards In Use Mask",
1275 .name = "video_standard_mask_active",
1276 .internal_id = PVR2_CID_STDCUR,
1278 .get_value = ctrl_stdcur_get,
1279 .set_value = ctrl_stdcur_set,
1280 .is_dirty = ctrl_stdcur_is_dirty,
1281 .clear_dirty = ctrl_stdcur_clear_dirty,
1282 .val_to_sym = ctrl_std_val_to_sym,
1283 .sym_to_val = ctrl_std_sym_to_val,
1284 .type = pvr2_ctl_bitmask,
1286 .desc = "Video Standard Name",
1287 .name = "video_standard",
1288 .internal_id = PVR2_CID_STDENUM,
1290 .get_value = ctrl_stdenumcur_get,
1291 .set_value = ctrl_stdenumcur_set,
1292 .is_dirty = ctrl_stdenumcur_is_dirty,
1293 .clear_dirty = ctrl_stdenumcur_clear_dirty,
1294 .type = pvr2_ctl_enum,
1298 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1301 const char *pvr2_config_get_name(enum pvr2_config cfg)
1304 case pvr2_config_empty: return "empty";
1305 case pvr2_config_mpeg: return "mpeg";
1306 case pvr2_config_vbi: return "vbi";
1307 case pvr2_config_pcm: return "pcm";
1308 case pvr2_config_rawvideo: return "raw video";
1314 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1316 return hdw->usb_dev;
1320 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1322 return hdw->serial_number;
1326 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1328 return hdw->bus_info;
1332 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1334 return hdw->identifier;
1338 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1340 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1343 /* Set the currently tuned frequency and account for all possible
1344 driver-core side effects of this action. */
1345 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1347 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1348 if (hdw->freqSelector) {
1349 /* Swing over to radio frequency selection */
1350 hdw->freqSelector = 0;
1351 hdw->freqDirty = !0;
1353 if (hdw->freqValRadio != val) {
1354 hdw->freqValRadio = val;
1355 hdw->freqSlotRadio = 0;
1356 hdw->freqDirty = !0;
1359 if (!(hdw->freqSelector)) {
1360 /* Swing over to television frequency selection */
1361 hdw->freqSelector = 1;
1362 hdw->freqDirty = !0;
1364 if (hdw->freqValTelevision != val) {
1365 hdw->freqValTelevision = val;
1366 hdw->freqSlotTelevision = 0;
1367 hdw->freqDirty = !0;
1372 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1374 return hdw->unit_number;
1378 /* Attempt to locate one of the given set of files. Messages are logged
1379 appropriate to what has been found. The return value will be 0 or
1380 greater on success (it will be the index of the file name found) and
1381 fw_entry will be filled in. Otherwise a negative error is returned on
1382 failure. If the return value is -ENOENT then no viable firmware file
1383 could be located. */
1384 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1385 const struct firmware **fw_entry,
1386 const char *fwtypename,
1387 unsigned int fwcount,
1388 const char *fwnames[])
1392 for (idx = 0; idx < fwcount; idx++) {
1393 ret = request_firmware(fw_entry,
1395 &hdw->usb_dev->dev);
1397 trace_firmware("Located %s firmware: %s;"
1403 if (ret == -ENOENT) continue;
1404 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1405 "request_firmware fatal error with code=%d",ret);
1408 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1410 " Device %s firmware"
1411 " seems to be missing.",
1413 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1414 "Did you install the pvrusb2 firmware files"
1415 " in their proper location?");
1417 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1418 "request_firmware unable to locate %s file %s",
1419 fwtypename,fwnames[0]);
1421 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1422 "request_firmware unable to locate"
1423 " one of the following %s files:",
1425 for (idx = 0; idx < fwcount; idx++) {
1426 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1427 "request_firmware: Failed to find %s",
1436 * pvr2_upload_firmware1().
1438 * Send the 8051 firmware to the device. After the upload, arrange for
1439 * device to re-enumerate.
1441 * NOTE : the pointer to the firmware data given by request_firmware()
1442 * is not suitable for an usb transaction.
1445 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1447 const struct firmware *fw_entry = NULL;
1450 unsigned int fwsize;
1454 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1455 hdw->fw1_state = FW1_STATE_OK;
1456 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1457 "Connected device type defines"
1458 " no firmware to upload; ignoring firmware");
1462 hdw->fw1_state = FW1_STATE_FAILED; // default result
1464 trace_firmware("pvr2_upload_firmware1");
1466 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1467 hdw->hdw_desc->fx2_firmware.cnt,
1468 hdw->hdw_desc->fx2_firmware.lst);
1470 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1474 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1476 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1477 fwsize = fw_entry->size;
1479 if ((fwsize != 0x2000) &&
1480 (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) {
1481 if (hdw->hdw_desc->flag_fx2_16kb) {
1482 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1483 "Wrong fx2 firmware size"
1484 " (expected 8192 or 16384, got %u)",
1487 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1488 "Wrong fx2 firmware size"
1489 " (expected 8192, got %u)",
1492 release_firmware(fw_entry);
1496 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1497 if (fw_ptr == NULL){
1498 release_firmware(fw_entry);
1502 /* We have to hold the CPU during firmware upload. */
1503 pvr2_hdw_cpureset_assert(hdw,1);
1505 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1509 for (address = 0; address < fwsize; address += 0x800) {
1510 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1511 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1512 0, fw_ptr, 0x800, HZ);
1515 trace_firmware("Upload done, releasing device's CPU");
1517 /* Now release the CPU. It will disconnect and reconnect later. */
1518 pvr2_hdw_cpureset_assert(hdw,0);
1521 release_firmware(fw_entry);
1523 trace_firmware("Upload done (%d bytes sent)",ret);
1525 /* We should have written fwsize bytes */
1526 if (ret == fwsize) {
1527 hdw->fw1_state = FW1_STATE_RELOAD;
1536 * pvr2_upload_firmware2()
1538 * This uploads encoder firmware on endpoint 2.
1542 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1544 const struct firmware *fw_entry = NULL;
1546 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1550 static const char *fw_files[] = {
1551 CX2341X_FIRM_ENC_FILENAME,
1554 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1558 trace_firmware("pvr2_upload_firmware2");
1560 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1561 ARRAY_SIZE(fw_files), fw_files);
1562 if (ret < 0) return ret;
1565 /* Since we're about to completely reinitialize the encoder,
1566 invalidate our cached copy of its configuration state. Next
1567 time we configure the encoder, then we'll fully configure it. */
1568 hdw->enc_cur_valid = 0;
1570 /* Encoder is about to be reset so note that as far as we're
1571 concerned now, the encoder has never been run. */
1572 del_timer_sync(&hdw->encoder_run_timer);
1573 if (hdw->state_encoder_runok) {
1574 hdw->state_encoder_runok = 0;
1575 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1578 /* First prepare firmware loading */
1579 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1580 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1581 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1582 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1583 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1584 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1585 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1586 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1587 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1588 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1589 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1590 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1591 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1592 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1593 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1594 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1595 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1596 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1599 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1600 "firmware2 upload prep failed, ret=%d",ret);
1601 release_firmware(fw_entry);
1605 /* Now send firmware */
1607 fw_len = fw_entry->size;
1609 if (fw_len % sizeof(u32)) {
1610 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1611 "size of %s firmware"
1612 " must be a multiple of %zu bytes",
1613 fw_files[fwidx],sizeof(u32));
1614 release_firmware(fw_entry);
1619 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1620 if (fw_ptr == NULL){
1621 release_firmware(fw_entry);
1622 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1623 "failed to allocate memory for firmware2 upload");
1628 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1631 for (fw_done = 0; fw_done < fw_len;) {
1632 bcnt = fw_len - fw_done;
1633 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1634 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1635 /* Usbsnoop log shows that we must swap bytes... */
1636 /* Some background info: The data being swapped here is a
1637 firmware image destined for the mpeg encoder chip that
1638 lives at the other end of a USB endpoint. The encoder
1639 chip always talks in 32 bit chunks and its storage is
1640 organized into 32 bit words. However from the file
1641 system to the encoder chip everything is purely a byte
1642 stream. The firmware file's contents are always 32 bit
1643 swapped from what the encoder expects. Thus the need
1644 always exists to swap the bytes regardless of the endian
1645 type of the host processor and therefore swab32() makes
1647 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1648 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1650 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1651 &actual_length, HZ);
1652 ret |= (actual_length != bcnt);
1657 trace_firmware("upload of %s : %i / %i ",
1658 fw_files[fwidx],fw_done,fw_len);
1661 release_firmware(fw_entry);
1664 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1665 "firmware2 upload transfer failure");
1671 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1672 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1673 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1676 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1677 "firmware2 upload post-proc failure");
1681 if (hdw->hdw_desc->signal_routing_scheme ==
1682 PVR2_ROUTING_SCHEME_GOTVIEW) {
1683 /* Ensure that GPIO 11 is set to output for GOTVIEW
1685 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1691 static const char *pvr2_get_state_name(unsigned int st)
1693 if (st < ARRAY_SIZE(pvr2_state_names)) {
1694 return pvr2_state_names[st];
1699 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1701 /* Even though we really only care about the video decoder chip at
1702 this point, we'll broadcast stream on/off to all sub-devices
1703 anyway, just in case somebody else wants to hear the
1705 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
1706 (enablefl ? "on" : "off"));
1707 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1708 v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl);
1709 if (hdw->decoder_client_id) {
1710 /* We get here if the encoder has been noticed. Otherwise
1711 we'll issue a warning to the user (which should
1712 normally never happen). */
1715 if (!hdw->flag_decoder_missed) {
1716 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1717 "WARNING: No decoder present");
1718 hdw->flag_decoder_missed = !0;
1719 trace_stbit("flag_decoder_missed",
1720 hdw->flag_decoder_missed);
1726 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1728 return hdw->master_state;
1732 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1734 if (!hdw->flag_tripped) return 0;
1735 hdw->flag_tripped = 0;
1736 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1737 "Clearing driver error statuss");
1742 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1745 LOCK_TAKE(hdw->big_lock); do {
1746 fl = pvr2_hdw_untrip_unlocked(hdw);
1747 } while (0); LOCK_GIVE(hdw->big_lock);
1748 if (fl) pvr2_hdw_state_sched(hdw);
1755 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1757 return hdw->state_pipeline_req != 0;
1761 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1764 LOCK_TAKE(hdw->big_lock); do {
1765 pvr2_hdw_untrip_unlocked(hdw);
1766 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1767 hdw->state_pipeline_req = enable_flag != 0;
1768 pvr2_trace(PVR2_TRACE_START_STOP,
1769 "/*--TRACE_STREAM--*/ %s",
1770 enable_flag ? "enable" : "disable");
1772 pvr2_hdw_state_sched(hdw);
1773 } while (0); LOCK_GIVE(hdw->big_lock);
1774 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1776 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1777 if (st != PVR2_STATE_READY) return -EIO;
1778 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1785 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1788 LOCK_TAKE(hdw->big_lock);
1789 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1790 hdw->desired_stream_type = config;
1791 hdw->state_pipeline_config = 0;
1792 trace_stbit("state_pipeline_config",
1793 hdw->state_pipeline_config);
1794 pvr2_hdw_state_sched(hdw);
1796 LOCK_GIVE(hdw->big_lock);
1798 return pvr2_hdw_wait(hdw,0);
1802 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1804 int unit_number = hdw->unit_number;
1806 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1807 tp = tuner[unit_number];
1809 if (tp < 0) return -EINVAL;
1810 hdw->tuner_type = tp;
1811 hdw->tuner_updated = !0;
1816 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1818 int unit_number = hdw->unit_number;
1820 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1821 tp = video_std[unit_number];
1828 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1830 int unit_number = hdw->unit_number;
1832 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1833 tp = tolerance[unit_number];
1839 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1841 /* Try a harmless request to fetch the eeprom's address over
1842 endpoint 1. See what happens. Only the full FX2 image can
1843 respond to this. If this probe fails then likely the FX2
1844 firmware needs be loaded. */
1846 LOCK_TAKE(hdw->ctl_lock); do {
1847 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1848 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1851 if (result < 0) break;
1852 } while(0); LOCK_GIVE(hdw->ctl_lock);
1854 pvr2_trace(PVR2_TRACE_INIT,
1855 "Probe of device endpoint 1 result status %d",
1858 pvr2_trace(PVR2_TRACE_INIT,
1859 "Probe of device endpoint 1 succeeded");
1864 struct pvr2_std_hack {
1865 v4l2_std_id pat; /* Pattern to match */
1866 v4l2_std_id msk; /* Which bits we care about */
1867 v4l2_std_id std; /* What additional standards or default to set */
1870 /* This data structure labels specific combinations of standards from
1871 tveeprom that we'll try to recognize. If we recognize one, then assume
1872 a specified default standard to use. This is here because tveeprom only
1873 tells us about available standards not the intended default standard (if
1874 any) for the device in question. We guess the default based on what has
1875 been reported as available. Note that this is only for guessing a
1876 default - which can always be overridden explicitly - and if the user
1877 has otherwise named a default then that default will always be used in
1878 place of this table. */
1879 static const struct pvr2_std_hack std_eeprom_maps[] = {
1881 .pat = V4L2_STD_B|V4L2_STD_GH,
1882 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1886 .std = V4L2_STD_NTSC_M,
1889 .pat = V4L2_STD_PAL_I,
1890 .std = V4L2_STD_PAL_I,
1893 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1894 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1898 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1902 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1906 v4l2_std_id std1,std2,std3;
1908 std1 = get_default_standard(hdw);
1909 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1911 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1912 pvr2_trace(PVR2_TRACE_STD,
1913 "Supported video standard(s) reported available"
1914 " in hardware: %.*s",
1917 hdw->std_mask_avail = hdw->std_mask_eeprom;
1919 std2 = (std1|std3) & ~hdw->std_mask_avail;
1921 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1922 pvr2_trace(PVR2_TRACE_STD,
1923 "Expanding supported video standards"
1924 " to include: %.*s",
1926 hdw->std_mask_avail |= std2;
1929 pvr2_hdw_internal_set_std_avail(hdw);
1932 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1933 pvr2_trace(PVR2_TRACE_STD,
1934 "Initial video standard forced to %.*s",
1936 hdw->std_mask_cur = std1;
1937 hdw->std_dirty = !0;
1938 pvr2_hdw_internal_find_stdenum(hdw);
1942 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1943 pvr2_trace(PVR2_TRACE_STD,
1944 "Initial video standard"
1945 " (determined by device type): %.*s",bcnt,buf);
1946 hdw->std_mask_cur = std3;
1947 hdw->std_dirty = !0;
1948 pvr2_hdw_internal_find_stdenum(hdw);
1954 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1955 if (std_eeprom_maps[idx].msk ?
1956 ((std_eeprom_maps[idx].pat ^
1957 hdw->std_mask_eeprom) &
1958 std_eeprom_maps[idx].msk) :
1959 (std_eeprom_maps[idx].pat !=
1960 hdw->std_mask_eeprom)) continue;
1961 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1962 std_eeprom_maps[idx].std);
1963 pvr2_trace(PVR2_TRACE_STD,
1964 "Initial video standard guessed as %.*s",
1966 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1967 hdw->std_dirty = !0;
1968 pvr2_hdw_internal_find_stdenum(hdw);
1973 if (hdw->std_enum_cnt > 1) {
1974 // Autoselect the first listed standard
1975 hdw->std_enum_cur = 1;
1976 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1977 hdw->std_dirty = !0;
1978 pvr2_trace(PVR2_TRACE_STD,
1979 "Initial video standard auto-selected to %s",
1980 hdw->std_defs[hdw->std_enum_cur-1].name);
1984 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1985 "Unable to select a viable initial video standard");
1989 static unsigned int pvr2_copy_i2c_addr_list(
1990 unsigned short *dst, const unsigned char *src,
1991 unsigned int dst_max)
1993 unsigned int cnt = 0;
1995 while (src[cnt] && (cnt + 1) < dst_max) {
1996 dst[cnt] = src[cnt];
1999 dst[cnt] = I2C_CLIENT_END;
2004 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw)
2007 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
2008 for cx25840 causes that module to correctly set up its video
2009 scaling. This is really a problem in the cx25840 module itself,
2010 but we work around it here. The problem has not been seen in
2011 ivtv because there VBI is supported and set up. We don't do VBI
2012 here (at least not yet) and thus we never attempted to even set
2015 struct v4l2_format fmt;
2016 if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) {
2017 /* We're not using a cx25840 so don't enable the hack */
2021 pvr2_trace(PVR2_TRACE_INIT,
2023 " Executing cx25840 VBI hack",
2024 hdw->decoder_client_id);
2025 memset(&fmt, 0, sizeof(fmt));
2026 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
2027 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
2028 video, s_fmt, &fmt);
2032 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
2033 const struct pvr2_device_client_desc *cd)
2037 struct v4l2_subdev *sd;
2038 unsigned int i2ccnt;
2039 const unsigned char *p;
2040 /* Arbitrary count - max # i2c addresses we will probe */
2041 unsigned short i2caddr[25];
2043 mid = cd->module_id;
2044 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
2046 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2047 "Module ID %u for device %s has no name?"
2048 " The driver might have a configuration problem.",
2050 hdw->hdw_desc->description);
2053 pvr2_trace(PVR2_TRACE_INIT,
2054 "Module ID %u (%s) for device %s being loaded...",
2056 hdw->hdw_desc->description);
2058 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
2059 ARRAY_SIZE(i2caddr));
2060 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
2061 module_i2c_addresses[mid] : NULL) != NULL)) {
2062 /* Second chance: Try default i2c address list */
2063 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2064 ARRAY_SIZE(i2caddr));
2066 pvr2_trace(PVR2_TRACE_INIT,
2068 " Using default i2c address list",
2074 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2075 "Module ID %u (%s) for device %s:"
2076 " No i2c addresses."
2077 " The driver might have a configuration problem.",
2078 mid, fname, hdw->hdw_desc->description);
2082 /* Note how the 2nd and 3rd arguments are the same for
2083 * v4l2_i2c_new_subdev(). Why?
2084 * Well the 2nd argument is the module name to load, while the 3rd
2085 * argument is documented in the framework as being the "chipid" -
2086 * and every other place where I can find examples of this, the
2087 * "chipid" appears to just be the module name again. So here we
2088 * just do the same thing. */
2090 pvr2_trace(PVR2_TRACE_INIT,
2092 " Setting up with specified i2c address 0x%x",
2094 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2098 pvr2_trace(PVR2_TRACE_INIT,
2100 " Setting up with address probe list",
2102 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2108 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2109 "Module ID %u (%s) for device %s failed to load."
2110 " Possible missing sub-device kernel module or"
2111 " initialization failure within module.",
2112 mid, fname, hdw->hdw_desc->description);
2116 /* Tag this sub-device instance with the module ID we know about.
2117 In other places we'll use that tag to determine if the instance
2118 requires special handling. */
2121 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
2124 /* client-specific setup... */
2126 case PVR2_CLIENT_ID_CX25840:
2127 case PVR2_CLIENT_ID_SAA7115:
2128 hdw->decoder_client_id = mid;
2137 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2140 const struct pvr2_string_table *cm;
2141 const struct pvr2_device_client_table *ct;
2144 cm = &hdw->hdw_desc->client_modules;
2145 for (idx = 0; idx < cm->cnt; idx++) {
2146 request_module(cm->lst[idx]);
2149 ct = &hdw->hdw_desc->client_table;
2150 for (idx = 0; idx < ct->cnt; idx++) {
2151 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
2154 hdw->flag_modulefail = !0;
2155 pvr2_hdw_render_useless(hdw);
2160 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2164 struct pvr2_ctrl *cptr;
2166 if (hdw->hdw_desc->fx2_firmware.cnt) {
2169 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
2172 pvr2_trace(PVR2_TRACE_INIT,
2173 "USB endpoint config looks strange"
2174 "; possibly firmware needs to be"
2179 reloadFl = !pvr2_hdw_check_firmware(hdw);
2181 pvr2_trace(PVR2_TRACE_INIT,
2182 "Check for FX2 firmware failed"
2183 "; possibly firmware needs to be"
2188 if (pvr2_upload_firmware1(hdw) != 0) {
2189 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2190 "Failure uploading firmware1");
2195 hdw->fw1_state = FW1_STATE_OK;
2197 if (!pvr2_hdw_dev_ok(hdw)) return;
2199 hdw->force_dirty = !0;
2201 if (!hdw->hdw_desc->flag_no_powerup) {
2202 pvr2_hdw_cmd_powerup(hdw);
2203 if (!pvr2_hdw_dev_ok(hdw)) return;
2206 /* Take the IR chip out of reset, if appropriate */
2207 if (hdw->ir_scheme_active == PVR2_IR_SCHEME_ZILOG) {
2208 pvr2_issue_simple_cmd(hdw,
2209 FX2CMD_HCW_ZILOG_RESET |
2214 // This step MUST happen after the earlier powerup step.
2215 pvr2_i2c_core_init(hdw);
2216 if (!pvr2_hdw_dev_ok(hdw)) return;
2218 pvr2_hdw_load_modules(hdw);
2219 if (!pvr2_hdw_dev_ok(hdw)) return;
2221 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
2223 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2224 cptr = hdw->controls + idx;
2225 if (cptr->info->skip_init) continue;
2226 if (!cptr->info->set_value) continue;
2227 cptr->info->set_value(cptr,~0,cptr->info->default_value);
2230 pvr2_hdw_cx25840_vbi_hack(hdw);
2232 /* Set up special default values for the television and radio
2233 frequencies here. It's not really important what these defaults
2234 are, but I set them to something usable in the Chicago area just
2235 to make driver testing a little easier. */
2237 hdw->freqValTelevision = default_tv_freq;
2238 hdw->freqValRadio = default_radio_freq;
2240 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2241 // thread-safe against the normal pvr2_send_request() mechanism.
2242 // (We should make it thread safe).
2244 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
2245 ret = pvr2_hdw_get_eeprom_addr(hdw);
2246 if (!pvr2_hdw_dev_ok(hdw)) return;
2248 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2249 "Unable to determine location of eeprom,"
2252 hdw->eeprom_addr = ret;
2253 pvr2_eeprom_analyze(hdw);
2254 if (!pvr2_hdw_dev_ok(hdw)) return;
2257 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
2258 hdw->tuner_updated = !0;
2259 hdw->std_mask_eeprom = V4L2_STD_ALL;
2262 if (hdw->serial_number) {
2263 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2264 "sn-%lu", hdw->serial_number);
2265 } else if (hdw->unit_number >= 0) {
2266 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2268 hdw->unit_number + 'a');
2270 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2273 hdw->identifier[idx] = 0;
2275 pvr2_hdw_setup_std(hdw);
2277 if (!get_default_tuner_type(hdw)) {
2278 pvr2_trace(PVR2_TRACE_INIT,
2279 "pvr2_hdw_setup: Tuner type overridden to %d",
2284 if (!pvr2_hdw_dev_ok(hdw)) return;
2286 if (hdw->hdw_desc->signal_routing_scheme ==
2287 PVR2_ROUTING_SCHEME_GOTVIEW) {
2288 /* Ensure that GPIO 11 is set to output for GOTVIEW
2290 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
2293 pvr2_hdw_commit_setup(hdw);
2295 hdw->vid_stream = pvr2_stream_create();
2296 if (!pvr2_hdw_dev_ok(hdw)) return;
2297 pvr2_trace(PVR2_TRACE_INIT,
2298 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
2299 if (hdw->vid_stream) {
2300 idx = get_default_error_tolerance(hdw);
2302 pvr2_trace(PVR2_TRACE_INIT,
2303 "pvr2_hdw_setup: video stream %p"
2304 " setting tolerance %u",
2305 hdw->vid_stream,idx);
2307 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2308 PVR2_VID_ENDPOINT,idx);
2311 if (!pvr2_hdw_dev_ok(hdw)) return;
2313 hdw->flag_init_ok = !0;
2315 pvr2_hdw_state_sched(hdw);
2319 /* Set up the structure and attempt to put the device into a usable state.
2320 This can be a time-consuming operation, which is why it is not done
2321 internally as part of the create() step. */
2322 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
2324 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
2326 pvr2_hdw_setup_low(hdw);
2327 pvr2_trace(PVR2_TRACE_INIT,
2328 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2329 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
2330 if (pvr2_hdw_dev_ok(hdw)) {
2331 if (hdw->flag_init_ok) {
2334 "Device initialization"
2335 " completed successfully.");
2338 if (hdw->fw1_state == FW1_STATE_RELOAD) {
2341 "Device microcontroller firmware"
2342 " (re)loaded; it should now reset"
2347 PVR2_TRACE_ERROR_LEGS,
2348 "Device initialization was not successful.");
2349 if (hdw->fw1_state == FW1_STATE_MISSING) {
2351 PVR2_TRACE_ERROR_LEGS,
2352 "Giving up since device"
2353 " microcontroller firmware"
2354 " appears to be missing.");
2358 if (hdw->flag_modulefail) {
2360 PVR2_TRACE_ERROR_LEGS,
2361 "***WARNING*** pvrusb2 driver initialization"
2362 " failed due to the failure of one or more"
2363 " sub-device kernel modules.");
2365 PVR2_TRACE_ERROR_LEGS,
2366 "You need to resolve the failing condition"
2367 " before this driver can function. There"
2368 " should be some earlier messages giving more"
2369 " information about the problem.");
2374 PVR2_TRACE_ERROR_LEGS,
2375 "Attempting pvrusb2 recovery by reloading"
2376 " primary firmware.");
2378 PVR2_TRACE_ERROR_LEGS,
2379 "If this works, device should disconnect"
2380 " and reconnect in a sane state.");
2381 hdw->fw1_state = FW1_STATE_UNKNOWN;
2382 pvr2_upload_firmware1(hdw);
2385 PVR2_TRACE_ERROR_LEGS,
2386 "***WARNING*** pvrusb2 device hardware"
2387 " appears to be jammed"
2388 " and I can't clear it.");
2390 PVR2_TRACE_ERROR_LEGS,
2391 "You might need to power cycle"
2392 " the pvrusb2 device"
2393 " in order to recover.");
2396 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2400 /* Perform second stage initialization. Set callback pointer first so that
2401 we can avoid a possible initialization race (if the kernel thread runs
2402 before the callback has been set). */
2403 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2404 void (*callback_func)(void *),
2405 void *callback_data)
2407 LOCK_TAKE(hdw->big_lock); do {
2408 if (hdw->flag_disconnected) {
2409 /* Handle a race here: If we're already
2410 disconnected by this point, then give up. If we
2411 get past this then we'll remain connected for
2412 the duration of initialization since the entire
2413 initialization sequence is now protected by the
2417 hdw->state_data = callback_data;
2418 hdw->state_func = callback_func;
2419 pvr2_hdw_setup(hdw);
2420 } while (0); LOCK_GIVE(hdw->big_lock);
2421 return hdw->flag_init_ok;
2425 /* Create, set up, and return a structure for interacting with the
2426 underlying hardware. */
2427 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2428 const struct usb_device_id *devid)
2430 unsigned int idx,cnt1,cnt2,m;
2431 struct pvr2_hdw *hdw = NULL;
2433 struct pvr2_ctrl *cptr;
2434 struct usb_device *usb_dev;
2435 const struct pvr2_device_desc *hdw_desc;
2437 struct v4l2_queryctrl qctrl;
2438 struct pvr2_ctl_info *ciptr;
2440 usb_dev = interface_to_usbdev(intf);
2442 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
2444 if (hdw_desc == NULL) {
2445 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create:"
2446 " No device description pointer,"
2447 " unable to continue.");
2448 pvr2_trace(PVR2_TRACE_INIT, "If you have a new device type,"
2449 " please contact Mike Isely <isely@pobox.com>"
2450 " to get it included in the driver\n");
2454 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
2455 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2456 hdw,hdw_desc->description);
2457 pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s",
2458 hdw_desc->description);
2459 if (!hdw) goto fail;
2461 init_timer(&hdw->quiescent_timer);
2462 hdw->quiescent_timer.data = (unsigned long)hdw;
2463 hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
2465 init_timer(&hdw->encoder_wait_timer);
2466 hdw->encoder_wait_timer.data = (unsigned long)hdw;
2467 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
2469 init_timer(&hdw->encoder_run_timer);
2470 hdw->encoder_run_timer.data = (unsigned long)hdw;
2471 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
2473 hdw->master_state = PVR2_STATE_DEAD;
2475 init_waitqueue_head(&hdw->state_wait_data);
2477 hdw->tuner_signal_stale = !0;
2478 cx2341x_fill_defaults(&hdw->enc_ctl_state);
2480 /* Calculate which inputs are OK */
2482 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2483 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2484 m |= 1 << PVR2_CVAL_INPUT_DTV;
2486 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2487 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2488 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2489 hdw->input_avail_mask = m;
2490 hdw->input_allowed_mask = hdw->input_avail_mask;
2492 /* If not a hybrid device, pathway_state never changes. So
2493 initialize it here to what it should forever be. */
2494 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2495 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2496 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2497 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2500 hdw->control_cnt = CTRLDEF_COUNT;
2501 hdw->control_cnt += MPEGDEF_COUNT;
2502 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
2504 if (!hdw->controls) goto fail;
2505 hdw->hdw_desc = hdw_desc;
2506 hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
2507 for (idx = 0; idx < hdw->control_cnt; idx++) {
2508 cptr = hdw->controls + idx;
2511 for (idx = 0; idx < 32; idx++) {
2512 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2514 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2515 cptr = hdw->controls + idx;
2516 cptr->info = control_defs+idx;
2519 /* Ensure that default input choice is a valid one. */
2520 m = hdw->input_avail_mask;
2521 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2522 if (!((1 << idx) & m)) continue;
2523 hdw->input_val = idx;
2527 /* Define and configure additional controls from cx2341x module. */
2528 hdw->mpeg_ctrl_info = kzalloc(
2529 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
2530 if (!hdw->mpeg_ctrl_info) goto fail;
2531 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2532 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2533 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2534 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2535 ciptr->name = mpeg_ids[idx].strid;
2536 ciptr->v4l_id = mpeg_ids[idx].id;
2537 ciptr->skip_init = !0;
2538 ciptr->get_value = ctrl_cx2341x_get;
2539 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2540 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2541 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2542 qctrl.id = ciptr->v4l_id;
2543 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2544 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2545 ciptr->set_value = ctrl_cx2341x_set;
2547 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2548 PVR2_CTLD_INFO_DESC_SIZE);
2549 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2550 ciptr->default_value = qctrl.default_value;
2551 switch (qctrl.type) {
2553 case V4L2_CTRL_TYPE_INTEGER:
2554 ciptr->type = pvr2_ctl_int;
2555 ciptr->def.type_int.min_value = qctrl.minimum;
2556 ciptr->def.type_int.max_value = qctrl.maximum;
2558 case V4L2_CTRL_TYPE_BOOLEAN:
2559 ciptr->type = pvr2_ctl_bool;
2561 case V4L2_CTRL_TYPE_MENU:
2562 ciptr->type = pvr2_ctl_enum;
2563 ciptr->def.type_enum.value_names =
2564 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2567 ciptr->def.type_enum.value_names[cnt1] != NULL;
2569 ciptr->def.type_enum.count = cnt1;
2575 // Initialize video standard enum dynamic control
2576 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2578 memcpy(&hdw->std_info_enum,cptr->info,
2579 sizeof(hdw->std_info_enum));
2580 cptr->info = &hdw->std_info_enum;
2583 // Initialize control data regarding video standard masks
2584 valid_std_mask = pvr2_std_get_usable();
2585 for (idx = 0; idx < 32; idx++) {
2586 if (!(valid_std_mask & (1 << idx))) continue;
2587 cnt1 = pvr2_std_id_to_str(
2588 hdw->std_mask_names[idx],
2589 sizeof(hdw->std_mask_names[idx])-1,
2591 hdw->std_mask_names[idx][cnt1] = 0;
2593 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2595 memcpy(&hdw->std_info_avail,cptr->info,
2596 sizeof(hdw->std_info_avail));
2597 cptr->info = &hdw->std_info_avail;
2598 hdw->std_info_avail.def.type_bitmask.bit_names =
2600 hdw->std_info_avail.def.type_bitmask.valid_bits =
2603 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2605 memcpy(&hdw->std_info_cur,cptr->info,
2606 sizeof(hdw->std_info_cur));
2607 cptr->info = &hdw->std_info_cur;
2608 hdw->std_info_cur.def.type_bitmask.bit_names =
2610 hdw->std_info_avail.def.type_bitmask.valid_bits =
2614 hdw->cropcap_stale = !0;
2615 hdw->eeprom_addr = -1;
2616 hdw->unit_number = -1;
2617 hdw->v4l_minor_number_video = -1;
2618 hdw->v4l_minor_number_vbi = -1;
2619 hdw->v4l_minor_number_radio = -1;
2620 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2621 if (!hdw->ctl_write_buffer) goto fail;
2622 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2623 if (!hdw->ctl_read_buffer) goto fail;
2624 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2625 if (!hdw->ctl_write_urb) goto fail;
2626 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2627 if (!hdw->ctl_read_urb) goto fail;
2629 if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
2630 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2631 "Error registering with v4l core, giving up");
2634 mutex_lock(&pvr2_unit_mtx); do {
2635 for (idx = 0; idx < PVR_NUM; idx++) {
2636 if (unit_pointers[idx]) continue;
2637 hdw->unit_number = idx;
2638 unit_pointers[idx] = hdw;
2641 } while (0); mutex_unlock(&pvr2_unit_mtx);
2644 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2646 if (hdw->unit_number >= 0) {
2647 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2648 ('a' + hdw->unit_number));
2651 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2652 hdw->name[cnt1] = 0;
2654 hdw->workqueue = create_singlethread_workqueue(hdw->name);
2655 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2657 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2658 hdw->unit_number,hdw->name);
2660 hdw->tuner_type = -1;
2663 hdw->usb_intf = intf;
2664 hdw->usb_dev = usb_dev;
2666 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2668 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2669 usb_set_interface(hdw->usb_dev,ifnum,0);
2671 mutex_init(&hdw->ctl_lock_mutex);
2672 mutex_init(&hdw->big_lock_mutex);
2677 del_timer_sync(&hdw->quiescent_timer);
2678 del_timer_sync(&hdw->encoder_run_timer);
2679 del_timer_sync(&hdw->encoder_wait_timer);
2680 if (hdw->workqueue) {
2681 flush_workqueue(hdw->workqueue);
2682 destroy_workqueue(hdw->workqueue);
2683 hdw->workqueue = NULL;
2685 usb_free_urb(hdw->ctl_read_urb);
2686 usb_free_urb(hdw->ctl_write_urb);
2687 kfree(hdw->ctl_read_buffer);
2688 kfree(hdw->ctl_write_buffer);
2689 kfree(hdw->controls);
2690 kfree(hdw->mpeg_ctrl_info);
2691 kfree(hdw->std_defs);
2692 kfree(hdw->std_enum_names);
2699 /* Remove _all_ associations between this driver and the underlying USB
2701 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2703 if (hdw->flag_disconnected) return;
2704 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2705 if (hdw->ctl_read_urb) {
2706 usb_kill_urb(hdw->ctl_read_urb);
2707 usb_free_urb(hdw->ctl_read_urb);
2708 hdw->ctl_read_urb = NULL;
2710 if (hdw->ctl_write_urb) {
2711 usb_kill_urb(hdw->ctl_write_urb);
2712 usb_free_urb(hdw->ctl_write_urb);
2713 hdw->ctl_write_urb = NULL;
2715 if (hdw->ctl_read_buffer) {
2716 kfree(hdw->ctl_read_buffer);
2717 hdw->ctl_read_buffer = NULL;
2719 if (hdw->ctl_write_buffer) {
2720 kfree(hdw->ctl_write_buffer);
2721 hdw->ctl_write_buffer = NULL;
2723 hdw->flag_disconnected = !0;
2724 /* If we don't do this, then there will be a dangling struct device
2725 reference to our disappearing device persisting inside the V4L
2727 v4l2_device_disconnect(&hdw->v4l2_dev);
2728 hdw->usb_dev = NULL;
2729 hdw->usb_intf = NULL;
2730 pvr2_hdw_render_useless(hdw);
2734 /* Destroy hardware interaction structure */
2735 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2738 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2739 if (hdw->workqueue) {
2740 flush_workqueue(hdw->workqueue);
2741 destroy_workqueue(hdw->workqueue);
2742 hdw->workqueue = NULL;
2744 del_timer_sync(&hdw->quiescent_timer);
2745 del_timer_sync(&hdw->encoder_run_timer);
2746 del_timer_sync(&hdw->encoder_wait_timer);
2747 if (hdw->fw_buffer) {
2748 kfree(hdw->fw_buffer);
2749 hdw->fw_buffer = NULL;
2751 if (hdw->vid_stream) {
2752 pvr2_stream_destroy(hdw->vid_stream);
2753 hdw->vid_stream = NULL;
2755 pvr2_i2c_core_done(hdw);
2756 v4l2_device_unregister(&hdw->v4l2_dev);
2757 pvr2_hdw_remove_usb_stuff(hdw);
2758 mutex_lock(&pvr2_unit_mtx); do {
2759 if ((hdw->unit_number >= 0) &&
2760 (hdw->unit_number < PVR_NUM) &&
2761 (unit_pointers[hdw->unit_number] == hdw)) {
2762 unit_pointers[hdw->unit_number] = NULL;
2764 } while (0); mutex_unlock(&pvr2_unit_mtx);
2765 kfree(hdw->controls);
2766 kfree(hdw->mpeg_ctrl_info);
2767 kfree(hdw->std_defs);
2768 kfree(hdw->std_enum_names);
2773 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2775 return (hdw && hdw->flag_ok);
2779 /* Called when hardware has been unplugged */
2780 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2782 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2783 LOCK_TAKE(hdw->big_lock);
2784 LOCK_TAKE(hdw->ctl_lock);
2785 pvr2_hdw_remove_usb_stuff(hdw);
2786 LOCK_GIVE(hdw->ctl_lock);
2787 LOCK_GIVE(hdw->big_lock);
2791 // Attempt to autoselect an appropriate value for std_enum_cur given
2792 // whatever is currently in std_mask_cur
2793 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2796 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2797 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2798 hdw->std_enum_cur = idx;
2802 hdw->std_enum_cur = 0;
2806 // Calculate correct set of enumerated standards based on currently known
2807 // set of available standards bits.
2808 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2810 struct v4l2_standard *newstd;
2811 unsigned int std_cnt;
2814 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2816 if (hdw->std_defs) {
2817 kfree(hdw->std_defs);
2818 hdw->std_defs = NULL;
2820 hdw->std_enum_cnt = 0;
2821 if (hdw->std_enum_names) {
2822 kfree(hdw->std_enum_names);
2823 hdw->std_enum_names = NULL;
2828 PVR2_TRACE_ERROR_LEGS,
2829 "WARNING: Failed to identify any viable standards");
2831 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2832 hdw->std_enum_names[0] = "none";
2833 for (idx = 0; idx < std_cnt; idx++) {
2834 hdw->std_enum_names[idx+1] =
2837 // Set up the dynamic control for this standard
2838 hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2839 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2840 hdw->std_defs = newstd;
2841 hdw->std_enum_cnt = std_cnt+1;
2842 hdw->std_enum_cur = 0;
2843 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2847 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2848 struct v4l2_standard *std,
2852 if (!idx) return ret;
2853 LOCK_TAKE(hdw->big_lock); do {
2854 if (idx >= hdw->std_enum_cnt) break;
2856 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2858 } while (0); LOCK_GIVE(hdw->big_lock);
2863 /* Get the number of defined controls */
2864 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2866 return hdw->control_cnt;
2870 /* Retrieve a control handle given its index (0..count-1) */
2871 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2874 if (idx >= hdw->control_cnt) return NULL;
2875 return hdw->controls + idx;
2879 /* Retrieve a control handle given its index (0..count-1) */
2880 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2881 unsigned int ctl_id)
2883 struct pvr2_ctrl *cptr;
2887 /* This could be made a lot more efficient, but for now... */
2888 for (idx = 0; idx < hdw->control_cnt; idx++) {
2889 cptr = hdw->controls + idx;
2890 i = cptr->info->internal_id;
2891 if (i && (i == ctl_id)) return cptr;
2897 /* Given a V4L ID, retrieve the control structure associated with it. */
2898 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2900 struct pvr2_ctrl *cptr;
2904 /* This could be made a lot more efficient, but for now... */
2905 for (idx = 0; idx < hdw->control_cnt; idx++) {
2906 cptr = hdw->controls + idx;
2907 i = cptr->info->v4l_id;
2908 if (i && (i == ctl_id)) return cptr;
2914 /* Given a V4L ID for its immediate predecessor, retrieve the control
2915 structure associated with it. */
2916 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2917 unsigned int ctl_id)
2919 struct pvr2_ctrl *cptr,*cp2;
2923 /* This could be made a lot more efficient, but for now... */
2925 for (idx = 0; idx < hdw->control_cnt; idx++) {
2926 cptr = hdw->controls + idx;
2927 i = cptr->info->v4l_id;
2929 if (i <= ctl_id) continue;
2930 if (cp2 && (cp2->info->v4l_id < i)) continue;
2938 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2941 case pvr2_ctl_int: return "integer";
2942 case pvr2_ctl_enum: return "enum";
2943 case pvr2_ctl_bool: return "boolean";
2944 case pvr2_ctl_bitmask: return "bitmask";
2950 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2951 const char *name, int val)
2953 struct v4l2_control ctrl;
2954 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2955 memset(&ctrl, 0, sizeof(ctrl));
2958 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, s_ctrl, &ctrl);
2961 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2962 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2963 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2966 /* Execute whatever commands are required to update the state of all the
2967 sub-devices so that they match our current control values. */
2968 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2970 struct v4l2_subdev *sd;
2972 pvr2_subdev_update_func fp;
2974 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2976 if (hdw->tuner_updated || hdw->force_dirty) {
2977 struct tuner_setup setup;
2978 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2980 if (((int)(hdw->tuner_type)) >= 0) {
2981 memset(&setup, 0, sizeof(setup));
2982 setup.addr = ADDR_UNSET;
2983 setup.type = hdw->tuner_type;
2984 setup.mode_mask = T_RADIO | T_ANALOG_TV;
2985 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2986 tuner, s_type_addr, &setup);
2990 if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
2991 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
2992 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2993 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2997 vs = hdw->std_mask_cur;
2998 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3000 pvr2_hdw_cx25840_vbi_hack(hdw);
3002 hdw->tuner_signal_stale = !0;
3003 hdw->cropcap_stale = !0;
3006 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
3007 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
3008 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
3009 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
3010 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
3011 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
3012 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
3013 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
3014 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
3016 if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
3017 struct v4l2_tuner vt;
3018 memset(&vt, 0, sizeof(vt));
3019 vt.audmode = hdw->audiomode_val;
3020 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
3023 if (hdw->freqDirty || hdw->force_dirty) {
3025 struct v4l2_frequency freq;
3026 fv = pvr2_hdw_get_cur_freq(hdw);
3027 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
3028 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
3029 memset(&freq, 0, sizeof(freq));
3030 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
3031 /* ((fv * 1000) / 62500) */
3032 freq.frequency = (fv * 2) / 125;
3034 freq.frequency = fv / 62500;
3036 /* tuner-core currently doesn't seem to care about this, but
3037 let's set it anyway for completeness. */
3038 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3039 freq.type = V4L2_TUNER_RADIO;
3041 freq.type = V4L2_TUNER_ANALOG_TV;
3044 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
3045 s_frequency, &freq);
3048 if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
3049 struct v4l2_format fmt;
3050 memset(&fmt, 0, sizeof(fmt));
3051 fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
3052 fmt.fmt.pix.width = hdw->res_hor_val;
3053 fmt.fmt.pix.height = hdw->res_ver_val;
3054 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)",
3055 fmt.fmt.pix.width, fmt.fmt.pix.height);
3056 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_fmt, &fmt);
3059 if (hdw->srate_dirty || hdw->force_dirty) {
3061 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
3063 switch (hdw->srate_val) {
3065 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
3068 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
3071 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
3075 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3076 audio, s_clock_freq, val);
3079 /* Unable to set crop parameters; there is apparently no equivalent
3080 for VIDIOC_S_CROP */
3082 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
3084 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
3085 fp = pvr2_module_update_functions[id];
3090 if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
3091 pvr2_hdw_status_poll(hdw);
3096 /* Figure out if we need to commit control changes. If so, mark internal
3097 state flags to indicate this fact and return true. Otherwise do nothing
3098 else and return false. */
3099 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
3102 struct pvr2_ctrl *cptr;
3104 int commit_flag = hdw->force_dirty;
3106 unsigned int bcnt,ccnt;
3108 for (idx = 0; idx < hdw->control_cnt; idx++) {
3109 cptr = hdw->controls + idx;
3110 if (!cptr->info->is_dirty) continue;
3111 if (!cptr->info->is_dirty(cptr)) continue;
3114 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
3115 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
3118 cptr->info->get_value(cptr,&value);
3119 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
3121 sizeof(buf)-bcnt,&ccnt);
3123 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
3124 get_ctrl_typename(cptr->info->type));
3125 pvr2_trace(PVR2_TRACE_CTL,
3126 "/*--TRACE_COMMIT--*/ %.*s",
3131 /* Nothing has changed */
3135 hdw->state_pipeline_config = 0;
3136 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3137 pvr2_hdw_state_sched(hdw);
3143 /* Perform all operations needed to commit all control changes. This must
3144 be performed in synchronization with the pipeline state and is thus
3145 expected to be called as part of the driver's worker thread. Return
3146 true if commit successful, otherwise return false to indicate that
3147 commit isn't possible at this time. */
3148 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3151 struct pvr2_ctrl *cptr;
3152 int disruptive_change;
3154 /* Handle some required side effects when the video standard is
3156 if (hdw->std_dirty) {
3159 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3166 /* Rewrite the vertical resolution to be appropriate to the
3167 video standard that has been selected. */
3168 if (nvres != hdw->res_ver_val) {
3169 hdw->res_ver_val = nvres;
3170 hdw->res_ver_dirty = !0;
3172 /* Rewrite the GOP size to be appropriate to the video
3173 standard that has been selected. */
3174 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3175 struct v4l2_ext_controls cs;
3176 struct v4l2_ext_control c1;
3177 memset(&cs, 0, sizeof(cs));
3178 memset(&c1, 0, sizeof(c1));
3181 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3182 c1.value = gop_size;
3183 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3184 VIDIOC_S_EXT_CTRLS);
3188 if (hdw->input_dirty && hdw->state_pathway_ok &&
3189 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3190 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3191 hdw->pathway_state)) {
3192 /* Change of mode being asked for... */
3193 hdw->state_pathway_ok = 0;
3194 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3196 if (!hdw->state_pathway_ok) {
3197 /* Can't commit anything until pathway is ok. */
3200 /* The broadcast decoder can only scale down, so if
3201 * res_*_dirty && crop window < output format ==> enlarge crop.
3203 * The mpeg encoder receives fields of res_hor_val dots and
3204 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3206 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3207 hdw->cropw_val = hdw->res_hor_val;
3208 hdw->cropw_dirty = !0;
3209 } else if (hdw->cropw_dirty) {
3210 hdw->res_hor_dirty = !0; /* must rescale */
3211 hdw->res_hor_val = min(720, hdw->cropw_val);
3213 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3214 hdw->croph_val = hdw->res_ver_val;
3215 hdw->croph_dirty = !0;
3216 } else if (hdw->croph_dirty) {
3217 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3218 hdw->res_ver_dirty = !0;
3219 hdw->res_ver_val = min(nvres, hdw->croph_val);
3222 /* If any of the below has changed, then we can't do the update
3223 while the pipeline is running. Pipeline must be paused first
3224 and decoder -> encoder connection be made quiescent before we
3228 hdw->enc_unsafe_stale ||
3230 hdw->res_ver_dirty ||
3231 hdw->res_hor_dirty ||
3235 (hdw->active_stream_type != hdw->desired_stream_type));
3236 if (disruptive_change && !hdw->state_pipeline_idle) {
3237 /* Pipeline is not idle; we can't proceed. Arrange to
3238 cause pipeline to stop so that we can try this again
3240 hdw->state_pipeline_pause = !0;
3244 if (hdw->srate_dirty) {
3245 /* Write new sample rate into control structure since
3246 * the master copy is stale. We must track srate
3247 * separate from the mpeg control structure because
3248 * other logic also uses this value. */
3249 struct v4l2_ext_controls cs;
3250 struct v4l2_ext_control c1;
3251 memset(&cs,0,sizeof(cs));
3252 memset(&c1,0,sizeof(c1));
3255 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3256 c1.value = hdw->srate_val;
3257 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3260 if (hdw->active_stream_type != hdw->desired_stream_type) {
3261 /* Handle any side effects of stream config here */
3262 hdw->active_stream_type = hdw->desired_stream_type;
3265 if (hdw->hdw_desc->signal_routing_scheme ==
3266 PVR2_ROUTING_SCHEME_GOTVIEW) {
3268 /* Handle GOTVIEW audio switching */
3269 pvr2_hdw_gpio_get_out(hdw,&b);
3270 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3272 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3275 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3279 /* Check and update state for all sub-devices. */
3280 pvr2_subdev_update(hdw);
3282 hdw->tuner_updated = 0;
3283 hdw->force_dirty = 0;
3284 for (idx = 0; idx < hdw->control_cnt; idx++) {
3285 cptr = hdw->controls + idx;
3286 if (!cptr->info->clear_dirty) continue;
3287 cptr->info->clear_dirty(cptr);
3290 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3291 hdw->state_encoder_run) {
3292 /* If encoder isn't running or it can't be touched, then
3293 this will get worked out later when we start the
3295 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3298 hdw->state_pipeline_config = !0;
3299 /* Hardware state may have changed in a way to cause the cropping
3300 capabilities to have changed. So mark it stale, which will
3301 cause a later re-fetch. */
3302 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3307 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3310 LOCK_TAKE(hdw->big_lock);
3311 fl = pvr2_hdw_commit_setup(hdw);
3312 LOCK_GIVE(hdw->big_lock);
3314 return pvr2_hdw_wait(hdw,0);
3318 static void pvr2_hdw_worker_poll(struct work_struct *work)
3321 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3322 LOCK_TAKE(hdw->big_lock); do {
3323 fl = pvr2_hdw_state_eval(hdw);
3324 } while (0); LOCK_GIVE(hdw->big_lock);
3325 if (fl && hdw->state_func) {
3326 hdw->state_func(hdw->state_data);
3331 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3333 return wait_event_interruptible(
3334 hdw->state_wait_data,
3335 (hdw->state_stale == 0) &&
3336 (!state || (hdw->master_state != state)));
3340 /* Return name for this driver instance */
3341 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3347 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3349 return hdw->hdw_desc->description;
3353 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3355 return hdw->hdw_desc->shortname;
3359 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3362 LOCK_TAKE(hdw->ctl_lock); do {
3363 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3364 result = pvr2_send_request(hdw,
3367 if (result < 0) break;
3368 result = (hdw->cmd_buffer[0] != 0);
3369 } while(0); LOCK_GIVE(hdw->ctl_lock);
3374 /* Execute poll of tuner status */
3375 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3377 LOCK_TAKE(hdw->big_lock); do {
3378 pvr2_hdw_status_poll(hdw);
3379 } while (0); LOCK_GIVE(hdw->big_lock);
3383 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3385 if (!hdw->cropcap_stale) {
3388 pvr2_hdw_status_poll(hdw);
3389 if (hdw->cropcap_stale) {
3396 /* Return information about cropping capabilities */
3397 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3400 LOCK_TAKE(hdw->big_lock);
3401 stat = pvr2_hdw_check_cropcap(hdw);
3403 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3405 LOCK_GIVE(hdw->big_lock);
3410 /* Return information about the tuner */
3411 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3413 LOCK_TAKE(hdw->big_lock); do {
3414 if (hdw->tuner_signal_stale) {
3415 pvr2_hdw_status_poll(hdw);
3417 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3418 } while (0); LOCK_GIVE(hdw->big_lock);
3423 /* Get handle to video output stream */
3424 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3426 return hp->vid_stream;
3430 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3432 int nr = pvr2_hdw_get_unit_number(hdw);
3433 LOCK_TAKE(hdw->big_lock); do {
3434 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
3435 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3436 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3437 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3438 pvr2_hdw_state_log_state(hdw);
3439 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
3440 } while (0); LOCK_GIVE(hdw->big_lock);
3444 /* Grab EEPROM contents, needed for direct method. */
3445 #define EEPROM_SIZE 8192
3446 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3447 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3449 struct i2c_msg msg[2];
3458 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3460 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3461 "Failed to allocate memory"
3462 " required to read eeprom");
3466 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3468 addr = hdw->eeprom_addr;
3469 /* Seems that if the high bit is set, then the *real* eeprom
3470 address is shifted right now bit position (noticed this in
3471 newer PVR USB2 hardware) */
3472 if (addr & 0x80) addr >>= 1;
3474 /* FX2 documentation states that a 16bit-addressed eeprom is
3475 expected if the I2C address is an odd number (yeah, this is
3476 strange but it's what they do) */
3477 mode16 = (addr & 1);
3478 eepromSize = (mode16 ? EEPROM_SIZE : 256);
3479 trace_eeprom("Examining %d byte eeprom at location 0x%x"
3480 " using %d bit addressing",eepromSize,addr,
3485 msg[0].len = mode16 ? 2 : 1;
3488 msg[1].flags = I2C_M_RD;
3490 /* We have to do the actual eeprom data fetch ourselves, because
3491 (1) we're only fetching part of the eeprom, and (2) if we were
3492 getting the whole thing our I2C driver can't grab it in one
3493 pass - which is what tveeprom is otherwise going to attempt */
3494 memset(eeprom,0,EEPROM_SIZE);
3495 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3497 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3498 offs = tcnt + (eepromSize - EEPROM_SIZE);
3500 iadd[0] = offs >> 8;
3506 msg[1].buf = eeprom+tcnt;
3507 if ((ret = i2c_transfer(&hdw->i2c_adap,
3508 msg,ARRAY_SIZE(msg))) != 2) {
3509 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3510 "eeprom fetch set offs err=%d",ret);
3519 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3526 LOCK_TAKE(hdw->big_lock); do {
3527 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3530 pvr2_trace(PVR2_TRACE_FIRMWARE,
3531 "Cleaning up after CPU firmware fetch");
3532 kfree(hdw->fw_buffer);
3533 hdw->fw_buffer = NULL;
3535 if (hdw->fw_cpu_flag) {
3536 /* Now release the CPU. It will disconnect
3537 and reconnect later. */
3538 pvr2_hdw_cpureset_assert(hdw,0);
3543 hdw->fw_cpu_flag = (mode != 2);
3544 if (hdw->fw_cpu_flag) {
3545 hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000;
3546 pvr2_trace(PVR2_TRACE_FIRMWARE,
3547 "Preparing to suck out CPU firmware"
3548 " (size=%u)", hdw->fw_size);
3549 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3550 if (!hdw->fw_buffer) {
3555 /* We have to hold the CPU during firmware upload. */
3556 pvr2_hdw_cpureset_assert(hdw,1);
3558 /* download the firmware from address 0000-1fff in 2048
3559 (=0x800) bytes chunk. */
3561 pvr2_trace(PVR2_TRACE_FIRMWARE,
3562 "Grabbing CPU firmware");
3563 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3564 for(address = 0; address < hdw->fw_size;
3566 ret = usb_control_msg(hdw->usb_dev,pipe,
3569 hdw->fw_buffer+address,
3574 pvr2_trace(PVR2_TRACE_FIRMWARE,
3575 "Done grabbing CPU firmware");
3577 pvr2_trace(PVR2_TRACE_FIRMWARE,
3578 "Sucking down EEPROM contents");
3579 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3580 if (!hdw->fw_buffer) {
3581 pvr2_trace(PVR2_TRACE_FIRMWARE,
3582 "EEPROM content suck failed.");
3585 hdw->fw_size = EEPROM_SIZE;
3586 pvr2_trace(PVR2_TRACE_FIRMWARE,
3587 "Done sucking down EEPROM contents");
3590 } while (0); LOCK_GIVE(hdw->big_lock);
3594 /* Return true if we're in a mode for retrieval CPU firmware */
3595 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3597 return hdw->fw_buffer != NULL;
3601 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3602 char *buf,unsigned int cnt)
3605 LOCK_TAKE(hdw->big_lock); do {
3609 if (!hdw->fw_buffer) {
3614 if (offs >= hdw->fw_size) {
3615 pvr2_trace(PVR2_TRACE_FIRMWARE,
3616 "Read firmware data offs=%d EOF",
3622 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3624 memcpy(buf,hdw->fw_buffer+offs,cnt);
3626 pvr2_trace(PVR2_TRACE_FIRMWARE,
3627 "Read firmware data offs=%d cnt=%d",
3630 } while (0); LOCK_GIVE(hdw->big_lock);
3636 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3637 enum pvr2_v4l_type index)
3640 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3641 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3642 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3648 /* Store a v4l minor device number */
3649 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3650 enum pvr2_v4l_type index,int v)
3653 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
3654 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
3655 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
3661 static void pvr2_ctl_write_complete(struct urb *urb)
3663 struct pvr2_hdw *hdw = urb->context;
3664 hdw->ctl_write_pend_flag = 0;
3665 if (hdw->ctl_read_pend_flag) return;
3666 complete(&hdw->ctl_done);
3670 static void pvr2_ctl_read_complete(struct urb *urb)
3672 struct pvr2_hdw *hdw = urb->context;
3673 hdw->ctl_read_pend_flag = 0;
3674 if (hdw->ctl_write_pend_flag) return;
3675 complete(&hdw->ctl_done);
3679 static void pvr2_ctl_timeout(unsigned long data)
3681 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3682 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3683 hdw->ctl_timeout_flag = !0;
3684 if (hdw->ctl_write_pend_flag)
3685 usb_unlink_urb(hdw->ctl_write_urb);
3686 if (hdw->ctl_read_pend_flag)
3687 usb_unlink_urb(hdw->ctl_read_urb);
3692 /* Issue a command and get a response from the device. This extended
3693 version includes a probe flag (which if set means that device errors
3694 should not be logged or treated as fatal) and a timeout in jiffies.
3695 This can be used to non-lethally probe the health of endpoint 1. */
3696 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3697 unsigned int timeout,int probe_fl,
3698 void *write_data,unsigned int write_len,
3699 void *read_data,unsigned int read_len)
3703 struct timer_list timer;
3704 if (!hdw->ctl_lock_held) {
3705 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3706 "Attempted to execute control transfer"
3710 if (!hdw->flag_ok && !probe_fl) {
3711 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3712 "Attempted to execute control transfer"
3713 " when device not ok");
3716 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3718 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3719 "Attempted to execute control transfer"
3720 " when USB is disconnected");
3725 /* Ensure that we have sane parameters */
3726 if (!write_data) write_len = 0;
3727 if (!read_data) read_len = 0;
3728 if (write_len > PVR2_CTL_BUFFSIZE) {
3730 PVR2_TRACE_ERROR_LEGS,
3731 "Attempted to execute %d byte"
3732 " control-write transfer (limit=%d)",
3733 write_len,PVR2_CTL_BUFFSIZE);
3736 if (read_len > PVR2_CTL_BUFFSIZE) {
3738 PVR2_TRACE_ERROR_LEGS,
3739 "Attempted to execute %d byte"
3740 " control-read transfer (limit=%d)",
3741 write_len,PVR2_CTL_BUFFSIZE);
3744 if ((!write_len) && (!read_len)) {
3746 PVR2_TRACE_ERROR_LEGS,
3747 "Attempted to execute null control transfer?");
3752 hdw->cmd_debug_state = 1;
3754 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3756 hdw->cmd_debug_code = 0;
3758 hdw->cmd_debug_write_len = write_len;
3759 hdw->cmd_debug_read_len = read_len;
3761 /* Initialize common stuff */
3762 init_completion(&hdw->ctl_done);
3763 hdw->ctl_timeout_flag = 0;
3764 hdw->ctl_write_pend_flag = 0;
3765 hdw->ctl_read_pend_flag = 0;
3767 timer.expires = jiffies + timeout;
3768 timer.data = (unsigned long)hdw;
3769 timer.function = pvr2_ctl_timeout;
3772 hdw->cmd_debug_state = 2;
3773 /* Transfer write data to internal buffer */
3774 for (idx = 0; idx < write_len; idx++) {
3775 hdw->ctl_write_buffer[idx] =
3776 ((unsigned char *)write_data)[idx];
3778 /* Initiate a write request */
3779 usb_fill_bulk_urb(hdw->ctl_write_urb,
3781 usb_sndbulkpipe(hdw->usb_dev,
3782 PVR2_CTL_WRITE_ENDPOINT),
3783 hdw->ctl_write_buffer,
3785 pvr2_ctl_write_complete,
3787 hdw->ctl_write_urb->actual_length = 0;
3788 hdw->ctl_write_pend_flag = !0;
3789 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3791 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3792 "Failed to submit write-control"
3793 " URB status=%d",status);
3794 hdw->ctl_write_pend_flag = 0;
3800 hdw->cmd_debug_state = 3;
3801 memset(hdw->ctl_read_buffer,0x43,read_len);
3802 /* Initiate a read request */
3803 usb_fill_bulk_urb(hdw->ctl_read_urb,
3805 usb_rcvbulkpipe(hdw->usb_dev,
3806 PVR2_CTL_READ_ENDPOINT),
3807 hdw->ctl_read_buffer,
3809 pvr2_ctl_read_complete,
3811 hdw->ctl_read_urb->actual_length = 0;
3812 hdw->ctl_read_pend_flag = !0;
3813 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3815 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3816 "Failed to submit read-control"
3817 " URB status=%d",status);
3818 hdw->ctl_read_pend_flag = 0;
3826 /* Now wait for all I/O to complete */
3827 hdw->cmd_debug_state = 4;
3828 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3829 wait_for_completion(&hdw->ctl_done);
3831 hdw->cmd_debug_state = 5;
3834 del_timer_sync(&timer);
3836 hdw->cmd_debug_state = 6;
3839 if (hdw->ctl_timeout_flag) {
3840 status = -ETIMEDOUT;
3842 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3843 "Timed out control-write");
3849 /* Validate results of write request */
3850 if ((hdw->ctl_write_urb->status != 0) &&
3851 (hdw->ctl_write_urb->status != -ENOENT) &&
3852 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3853 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3854 /* USB subsystem is reporting some kind of failure
3856 status = hdw->ctl_write_urb->status;
3858 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3859 "control-write URB failure,"
3865 if (hdw->ctl_write_urb->actual_length < write_len) {
3866 /* Failed to write enough data */
3869 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3870 "control-write URB short,"
3871 " expected=%d got=%d",
3873 hdw->ctl_write_urb->actual_length);
3879 /* Validate results of read request */
3880 if ((hdw->ctl_read_urb->status != 0) &&
3881 (hdw->ctl_read_urb->status != -ENOENT) &&
3882 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3883 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3884 /* USB subsystem is reporting some kind of failure
3886 status = hdw->ctl_read_urb->status;
3888 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3889 "control-read URB failure,"
3895 if (hdw->ctl_read_urb->actual_length < read_len) {
3896 /* Failed to read enough data */
3899 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3900 "control-read URB short,"
3901 " expected=%d got=%d",
3903 hdw->ctl_read_urb->actual_length);
3907 /* Transfer retrieved data out from internal buffer */
3908 for (idx = 0; idx < read_len; idx++) {
3909 ((unsigned char *)read_data)[idx] =
3910 hdw->ctl_read_buffer[idx];
3916 hdw->cmd_debug_state = 0;
3917 if ((status < 0) && (!probe_fl)) {
3918 pvr2_hdw_render_useless(hdw);
3924 int pvr2_send_request(struct pvr2_hdw *hdw,
3925 void *write_data,unsigned int write_len,
3926 void *read_data,unsigned int read_len)
3928 return pvr2_send_request_ex(hdw,HZ*4,0,
3929 write_data,write_len,
3930 read_data,read_len);
3934 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3937 unsigned int cnt = 1;
3938 unsigned int args = 0;
3939 LOCK_TAKE(hdw->ctl_lock);
3940 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3941 args = (cmdcode >> 8) & 0xffu;
3942 args = (args > 2) ? 2 : args;
3945 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3947 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3950 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3952 unsigned int ccnt,bcnt;
3956 ccnt = scnprintf(tbuf+bcnt,
3958 "Sending FX2 command 0x%x",cmdcode);
3960 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3961 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3962 ccnt = scnprintf(tbuf+bcnt,
3965 pvr2_fx2cmd_desc[idx].desc);
3971 ccnt = scnprintf(tbuf+bcnt,
3973 " (%u",hdw->cmd_buffer[1]);
3976 ccnt = scnprintf(tbuf+bcnt,
3978 ",%u",hdw->cmd_buffer[2]);
3981 ccnt = scnprintf(tbuf+bcnt,
3986 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3988 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3989 LOCK_GIVE(hdw->ctl_lock);
3994 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3998 LOCK_TAKE(hdw->ctl_lock);
4000 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
4001 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
4002 hdw->cmd_buffer[5] = 0;
4003 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4004 hdw->cmd_buffer[7] = reg & 0xff;
4007 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
4009 LOCK_GIVE(hdw->ctl_lock);
4015 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
4019 LOCK_TAKE(hdw->ctl_lock);
4021 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
4022 hdw->cmd_buffer[1] = 0;
4023 hdw->cmd_buffer[2] = 0;
4024 hdw->cmd_buffer[3] = 0;
4025 hdw->cmd_buffer[4] = 0;
4026 hdw->cmd_buffer[5] = 0;
4027 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4028 hdw->cmd_buffer[7] = reg & 0xff;
4030 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
4031 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
4033 LOCK_GIVE(hdw->ctl_lock);
4039 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
4041 if (!hdw->flag_ok) return;
4042 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4043 "Device being rendered inoperable");
4044 if (hdw->vid_stream) {
4045 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
4048 trace_stbit("flag_ok",hdw->flag_ok);
4049 pvr2_hdw_state_sched(hdw);
4053 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
4056 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
4057 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
4059 ret = usb_reset_device(hdw->usb_dev);
4060 usb_unlock_device(hdw->usb_dev);
4062 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4063 "Failed to lock USB device ret=%d",ret);
4065 if (init_pause_msec) {
4066 pvr2_trace(PVR2_TRACE_INFO,
4067 "Waiting %u msec for hardware to settle",
4069 msleep(init_pause_msec);
4075 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
4081 if (!hdw->usb_dev) return;
4083 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
4085 da[0] = val ? 0x01 : 0x00;
4087 /* Write the CPUCS register on the 8051. The lsb of the register
4088 is the reset bit; a 1 asserts reset while a 0 clears it. */
4089 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
4090 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
4092 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4093 "cpureset_assert(%d) error=%d",val,ret);
4094 pvr2_hdw_render_useless(hdw);
4099 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
4101 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
4105 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
4107 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
4111 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
4113 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
4117 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
4119 pvr2_trace(PVR2_TRACE_INIT,
4120 "Requesting decoder reset");
4121 if (hdw->decoder_client_id) {
4122 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
4124 pvr2_hdw_cx25840_vbi_hack(hdw);
4127 pvr2_trace(PVR2_TRACE_INIT,
4128 "Unable to reset decoder: nothing attached");
4133 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4136 return pvr2_issue_simple_cmd(hdw,
4137 FX2CMD_HCW_DEMOD_RESETIN |
4139 ((onoff ? 1 : 0) << 16));
4143 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4146 return pvr2_issue_simple_cmd(hdw,(onoff ?
4147 FX2CMD_ONAIR_DTV_POWER_ON :
4148 FX2CMD_ONAIR_DTV_POWER_OFF));
4152 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4155 return pvr2_issue_simple_cmd(hdw,(onoff ?
4156 FX2CMD_ONAIR_DTV_STREAMING_ON :
4157 FX2CMD_ONAIR_DTV_STREAMING_OFF));
4161 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4164 /* Compare digital/analog desired setting with current setting. If
4165 they don't match, fix it... */
4166 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4167 if (cmode == hdw->pathway_state) {
4168 /* They match; nothing to do */
4172 switch (hdw->hdw_desc->digital_control_scheme) {
4173 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4174 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4175 if (cmode == PVR2_PATHWAY_ANALOG) {
4176 /* If moving to analog mode, also force the decoder
4177 to reset. If no decoder is attached, then it's
4178 ok to ignore this because if/when the decoder
4179 attaches, it will reset itself at that time. */
4180 pvr2_hdw_cmd_decoder_reset(hdw);
4183 case PVR2_DIGITAL_SCHEME_ONAIR:
4184 /* Supposedly we should always have the power on whether in
4185 digital or analog mode. But for now do what appears to
4187 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4192 pvr2_hdw_untrip_unlocked(hdw);
4193 hdw->pathway_state = cmode;
4197 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4199 /* change some GPIO data
4201 * note: bit d7 of dir appears to control the LED,
4202 * so we shut it off here.
4206 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4208 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4210 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4214 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4216 static led_method_func led_methods[] = {
4217 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4222 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4224 unsigned int scheme_id;
4227 if ((!onoff) == (!hdw->led_on)) return;
4229 hdw->led_on = onoff != 0;
4231 scheme_id = hdw->hdw_desc->led_scheme;
4232 if (scheme_id < ARRAY_SIZE(led_methods)) {
4233 fp = led_methods[scheme_id];
4238 if (fp) (*fp)(hdw,onoff);
4242 /* Stop / start video stream transport */
4243 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4247 /* If we're in analog mode, then just issue the usual analog
4249 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4250 return pvr2_issue_simple_cmd(hdw,
4252 FX2CMD_STREAMING_ON :
4253 FX2CMD_STREAMING_OFF));
4254 /*Note: Not reached */
4257 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4258 /* Whoops, we don't know what mode we're in... */
4262 /* To get here we have to be in digital mode. The mechanism here
4263 is unfortunately different for different vendors. So we switch
4264 on the device's digital scheme attribute in order to figure out
4266 switch (hdw->hdw_desc->digital_control_scheme) {
4267 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4268 return pvr2_issue_simple_cmd(hdw,
4270 FX2CMD_HCW_DTV_STREAMING_ON :
4271 FX2CMD_HCW_DTV_STREAMING_OFF));
4272 case PVR2_DIGITAL_SCHEME_ONAIR:
4273 ret = pvr2_issue_simple_cmd(hdw,
4275 FX2CMD_STREAMING_ON :
4276 FX2CMD_STREAMING_OFF));
4277 if (ret) return ret;
4278 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4285 /* Evaluate whether or not state_pathway_ok can change */
4286 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4288 if (hdw->state_pathway_ok) {
4289 /* Nothing to do if pathway is already ok */
4292 if (!hdw->state_pipeline_idle) {
4293 /* Not allowed to change anything if pipeline is not idle */
4296 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4297 hdw->state_pathway_ok = !0;
4298 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4303 /* Evaluate whether or not state_encoder_ok can change */
4304 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4306 if (hdw->state_encoder_ok) return 0;
4307 if (hdw->flag_tripped) return 0;
4308 if (hdw->state_encoder_run) return 0;
4309 if (hdw->state_encoder_config) return 0;
4310 if (hdw->state_decoder_run) return 0;
4311 if (hdw->state_usbstream_run) return 0;
4312 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4313 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4314 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4318 if (pvr2_upload_firmware2(hdw) < 0) {
4319 hdw->flag_tripped = !0;
4320 trace_stbit("flag_tripped",hdw->flag_tripped);
4323 hdw->state_encoder_ok = !0;
4324 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4329 /* Evaluate whether or not state_encoder_config can change */
4330 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4332 if (hdw->state_encoder_config) {
4333 if (hdw->state_encoder_ok) {
4334 if (hdw->state_pipeline_req &&
4335 !hdw->state_pipeline_pause) return 0;
4337 hdw->state_encoder_config = 0;
4338 hdw->state_encoder_waitok = 0;
4339 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4340 /* paranoia - solve race if timer just completed */
4341 del_timer_sync(&hdw->encoder_wait_timer);
4343 if (!hdw->state_pathway_ok ||
4344 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4345 !hdw->state_encoder_ok ||
4346 !hdw->state_pipeline_idle ||
4347 hdw->state_pipeline_pause ||
4348 !hdw->state_pipeline_req ||
4349 !hdw->state_pipeline_config) {
4350 /* We must reset the enforced wait interval if
4351 anything has happened that might have disturbed
4352 the encoder. This should be a rare case. */
4353 if (timer_pending(&hdw->encoder_wait_timer)) {
4354 del_timer_sync(&hdw->encoder_wait_timer);
4356 if (hdw->state_encoder_waitok) {
4357 /* Must clear the state - therefore we did
4358 something to a state bit and must also
4360 hdw->state_encoder_waitok = 0;
4361 trace_stbit("state_encoder_waitok",
4362 hdw->state_encoder_waitok);
4367 if (!hdw->state_encoder_waitok) {
4368 if (!timer_pending(&hdw->encoder_wait_timer)) {
4369 /* waitok flag wasn't set and timer isn't
4370 running. Check flag once more to avoid
4371 a race then start the timer. This is
4372 the point when we measure out a minimal
4373 quiet interval before doing something to
4375 if (!hdw->state_encoder_waitok) {
4376 hdw->encoder_wait_timer.expires =
4378 (HZ * TIME_MSEC_ENCODER_WAIT
4380 add_timer(&hdw->encoder_wait_timer);
4383 /* We can't continue until we know we have been
4384 quiet for the interval measured by this
4388 pvr2_encoder_configure(hdw);
4389 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4391 trace_stbit("state_encoder_config",hdw->state_encoder_config);
4396 /* Return true if the encoder should not be running. */
4397 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4399 if (!hdw->state_encoder_ok) {
4400 /* Encoder isn't healthy at the moment, so stop it. */
4403 if (!hdw->state_pathway_ok) {
4404 /* Mode is not understood at the moment (i.e. it wants to
4405 change), so encoder must be stopped. */
4409 switch (hdw->pathway_state) {
4410 case PVR2_PATHWAY_ANALOG:
4411 if (!hdw->state_decoder_run) {
4412 /* We're in analog mode and the decoder is not
4413 running; thus the encoder should be stopped as
4418 case PVR2_PATHWAY_DIGITAL:
4419 if (hdw->state_encoder_runok) {
4420 /* This is a funny case. We're in digital mode so
4421 really the encoder should be stopped. However
4422 if it really is running, only kill it after
4423 runok has been set. This gives a chance for the
4424 onair quirk to function (encoder must run
4425 briefly first, at least once, before onair
4426 digital streaming can work). */
4431 /* Unknown mode; so encoder should be stopped. */
4435 /* If we get here, we haven't found a reason to stop the
4441 /* Return true if the encoder should be running. */
4442 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4444 if (!hdw->state_encoder_ok) {
4445 /* Don't run the encoder if it isn't healthy... */
4448 if (!hdw->state_pathway_ok) {
4449 /* Don't run the encoder if we don't (yet) know what mode
4450 we need to be in... */
4454 switch (hdw->pathway_state) {
4455 case PVR2_PATHWAY_ANALOG:
4456 if (hdw->state_decoder_run) {
4457 /* In analog mode, if the decoder is running, then
4462 case PVR2_PATHWAY_DIGITAL:
4463 if ((hdw->hdw_desc->digital_control_scheme ==
4464 PVR2_DIGITAL_SCHEME_ONAIR) &&
4465 !hdw->state_encoder_runok) {
4466 /* This is a quirk. OnAir hardware won't stream
4467 digital until the encoder has been run at least
4468 once, for a minimal period of time (empiricially
4469 measured to be 1/4 second). So if we're on
4470 OnAir hardware and the encoder has never been
4471 run at all, then start the encoder. Normal
4472 state machine logic in the driver will
4473 automatically handle the remaining bits. */
4478 /* For completeness (unknown mode; encoder won't run ever) */
4481 /* If we get here, then we haven't found any reason to run the
4482 encoder, so don't run it. */
4487 /* Evaluate whether or not state_encoder_run can change */
4488 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4490 if (hdw->state_encoder_run) {
4491 if (!state_check_disable_encoder_run(hdw)) return 0;
4492 if (hdw->state_encoder_ok) {
4493 del_timer_sync(&hdw->encoder_run_timer);
4494 if (pvr2_encoder_stop(hdw) < 0) return !0;
4496 hdw->state_encoder_run = 0;
4498 if (!state_check_enable_encoder_run(hdw)) return 0;
4499 if (pvr2_encoder_start(hdw) < 0) return !0;
4500 hdw->state_encoder_run = !0;
4501 if (!hdw->state_encoder_runok) {
4502 hdw->encoder_run_timer.expires =
4503 jiffies + (HZ * TIME_MSEC_ENCODER_OK / 1000);
4504 add_timer(&hdw->encoder_run_timer);
4507 trace_stbit("state_encoder_run",hdw->state_encoder_run);
4512 /* Timeout function for quiescent timer. */
4513 static void pvr2_hdw_quiescent_timeout(unsigned long data)
4515 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4516 hdw->state_decoder_quiescent = !0;
4517 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4518 hdw->state_stale = !0;
4519 queue_work(hdw->workqueue,&hdw->workpoll);
4523 /* Timeout function for encoder wait timer. */
4524 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
4526 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4527 hdw->state_encoder_waitok = !0;
4528 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4529 hdw->state_stale = !0;
4530 queue_work(hdw->workqueue,&hdw->workpoll);
4534 /* Timeout function for encoder run timer. */
4535 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
4537 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4538 if (!hdw->state_encoder_runok) {
4539 hdw->state_encoder_runok = !0;
4540 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4541 hdw->state_stale = !0;
4542 queue_work(hdw->workqueue,&hdw->workpoll);
4547 /* Evaluate whether or not state_decoder_run can change */
4548 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4550 if (hdw->state_decoder_run) {
4551 if (hdw->state_encoder_ok) {
4552 if (hdw->state_pipeline_req &&
4553 !hdw->state_pipeline_pause &&
4554 hdw->state_pathway_ok) return 0;
4556 if (!hdw->flag_decoder_missed) {
4557 pvr2_decoder_enable(hdw,0);
4559 hdw->state_decoder_quiescent = 0;
4560 hdw->state_decoder_run = 0;
4561 /* paranoia - solve race if timer just completed */
4562 del_timer_sync(&hdw->quiescent_timer);
4564 if (!hdw->state_decoder_quiescent) {
4565 if (!timer_pending(&hdw->quiescent_timer)) {
4566 /* We don't do something about the
4567 quiescent timer until right here because
4568 we also want to catch cases where the
4569 decoder was already not running (like
4570 after initialization) as opposed to
4571 knowing that we had just stopped it.
4572 The second flag check is here to cover a
4573 race - the timer could have run and set
4574 this flag just after the previous check
4575 but before we did the pending check. */
4576 if (!hdw->state_decoder_quiescent) {
4577 hdw->quiescent_timer.expires =
4579 (HZ * TIME_MSEC_DECODER_WAIT
4581 add_timer(&hdw->quiescent_timer);
4584 /* Don't allow decoder to start again until it has
4585 been quiesced first. This little detail should
4586 hopefully further stabilize the encoder. */
4589 if (!hdw->state_pathway_ok ||
4590 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4591 !hdw->state_pipeline_req ||
4592 hdw->state_pipeline_pause ||
4593 !hdw->state_pipeline_config ||
4594 !hdw->state_encoder_config ||
4595 !hdw->state_encoder_ok) return 0;
4596 del_timer_sync(&hdw->quiescent_timer);
4597 if (hdw->flag_decoder_missed) return 0;
4598 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4599 hdw->state_decoder_quiescent = 0;
4600 hdw->state_decoder_run = !0;
4602 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4603 trace_stbit("state_decoder_run",hdw->state_decoder_run);
4608 /* Evaluate whether or not state_usbstream_run can change */
4609 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4611 if (hdw->state_usbstream_run) {
4613 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4614 fl = (hdw->state_encoder_ok &&
4615 hdw->state_encoder_run);
4616 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4617 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4618 fl = hdw->state_encoder_ok;
4621 hdw->state_pipeline_req &&
4622 !hdw->state_pipeline_pause &&
4623 hdw->state_pathway_ok) {
4626 pvr2_hdw_cmd_usbstream(hdw,0);
4627 hdw->state_usbstream_run = 0;
4629 if (!hdw->state_pipeline_req ||
4630 hdw->state_pipeline_pause ||
4631 !hdw->state_pathway_ok) return 0;
4632 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4633 if (!hdw->state_encoder_ok ||
4634 !hdw->state_encoder_run) return 0;
4635 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4636 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4637 if (!hdw->state_encoder_ok) return 0;
4638 if (hdw->state_encoder_run) return 0;
4639 if (hdw->hdw_desc->digital_control_scheme ==
4640 PVR2_DIGITAL_SCHEME_ONAIR) {
4641 /* OnAir digital receivers won't stream
4642 unless the analog encoder has run first.
4643 Why? I have no idea. But don't even
4644 try until we know the analog side is
4645 known to have run. */
4646 if (!hdw->state_encoder_runok) return 0;
4649 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4650 hdw->state_usbstream_run = !0;
4652 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4657 /* Attempt to configure pipeline, if needed */
4658 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4660 if (hdw->state_pipeline_config ||
4661 hdw->state_pipeline_pause) return 0;
4662 pvr2_hdw_commit_execute(hdw);
4667 /* Update pipeline idle and pipeline pause tracking states based on other
4668 inputs. This must be called whenever the other relevant inputs have
4670 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4674 /* Update pipeline state */
4675 st = !(hdw->state_encoder_run ||
4676 hdw->state_decoder_run ||
4677 hdw->state_usbstream_run ||
4678 (!hdw->state_decoder_quiescent));
4679 if (!st != !hdw->state_pipeline_idle) {
4680 hdw->state_pipeline_idle = st;
4683 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4684 hdw->state_pipeline_pause = 0;
4691 typedef int (*state_eval_func)(struct pvr2_hdw *);
4693 /* Set of functions to be run to evaluate various states in the driver. */
4694 static const state_eval_func eval_funcs[] = {
4695 state_eval_pathway_ok,
4696 state_eval_pipeline_config,
4697 state_eval_encoder_ok,
4698 state_eval_encoder_config,
4699 state_eval_decoder_run,
4700 state_eval_encoder_run,
4701 state_eval_usbstream_run,
4705 /* Process various states and return true if we did anything interesting. */
4706 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4709 int state_updated = 0;
4712 if (!hdw->state_stale) return 0;
4713 if ((hdw->fw1_state != FW1_STATE_OK) ||
4715 hdw->state_stale = 0;
4718 /* This loop is the heart of the entire driver. It keeps trying to
4719 evaluate various bits of driver state until nothing changes for
4720 one full iteration. Each "bit of state" tracks some global
4721 aspect of the driver, e.g. whether decoder should run, if
4722 pipeline is configured, usb streaming is on, etc. We separately
4723 evaluate each of those questions based on other driver state to
4724 arrive at the correct running configuration. */
4727 state_update_pipeline_state(hdw);
4728 /* Iterate over each bit of state */
4729 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4730 if ((*eval_funcs[i])(hdw)) {
4733 state_update_pipeline_state(hdw);
4736 } while (check_flag && hdw->flag_ok);
4737 hdw->state_stale = 0;
4738 trace_stbit("state_stale",hdw->state_stale);
4739 return state_updated;
4743 static unsigned int print_input_mask(unsigned int msk,
4744 char *buf,unsigned int acnt)
4746 unsigned int idx,ccnt;
4747 unsigned int tcnt = 0;
4748 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4749 if (!((1 << idx) & msk)) continue;
4750 ccnt = scnprintf(buf+tcnt,
4754 control_values_input[idx]);
4761 static const char *pvr2_pathway_state_name(int id)
4764 case PVR2_PATHWAY_ANALOG: return "analog";
4765 case PVR2_PATHWAY_DIGITAL: return "digital";
4766 default: return "unknown";
4771 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4772 char *buf,unsigned int acnt)
4778 "driver:%s%s%s%s%s <mode=%s>",
4779 (hdw->flag_ok ? " <ok>" : " <fail>"),
4780 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4781 (hdw->flag_disconnected ? " <disconnected>" :
4783 (hdw->flag_tripped ? " <tripped>" : ""),
4784 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4785 pvr2_pathway_state_name(hdw->pathway_state));
4790 "pipeline:%s%s%s%s",
4791 (hdw->state_pipeline_idle ? " <idle>" : ""),
4792 (hdw->state_pipeline_config ?
4793 " <configok>" : " <stale>"),
4794 (hdw->state_pipeline_req ? " <req>" : ""),
4795 (hdw->state_pipeline_pause ? " <pause>" : ""));
4799 "worker:%s%s%s%s%s%s%s",
4800 (hdw->state_decoder_run ?
4802 (hdw->state_decoder_quiescent ?
4803 "" : " <decode:stop>")),
4804 (hdw->state_decoder_quiescent ?
4805 " <decode:quiescent>" : ""),
4806 (hdw->state_encoder_ok ?
4807 "" : " <encode:init>"),
4808 (hdw->state_encoder_run ?
4809 (hdw->state_encoder_runok ?
4811 " <encode:firstrun>") :
4812 (hdw->state_encoder_runok ?
4814 " <encode:virgin>")),
4815 (hdw->state_encoder_config ?
4816 " <encode:configok>" :
4817 (hdw->state_encoder_waitok ?
4818 "" : " <encode:waitok>")),
4819 (hdw->state_usbstream_run ?
4820 " <usb:run>" : " <usb:stop>"),
4821 (hdw->state_pathway_ok ?
4822 " <pathway:ok>" : ""));
4827 pvr2_get_state_name(hdw->master_state));
4829 unsigned int tcnt = 0;
4832 ccnt = scnprintf(buf,
4834 "Hardware supported inputs: ");
4836 tcnt += print_input_mask(hdw->input_avail_mask,
4839 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4840 ccnt = scnprintf(buf+tcnt,
4842 "; allowed inputs: ");
4844 tcnt += print_input_mask(hdw->input_allowed_mask,
4851 struct pvr2_stream_stats stats;
4852 if (!hdw->vid_stream) break;
4853 pvr2_stream_get_stats(hdw->vid_stream,
4859 " URBs: queued=%u idle=%u ready=%u"
4860 " processed=%u failed=%u",
4861 stats.bytes_processed,
4862 stats.buffers_in_queue,
4863 stats.buffers_in_idle,
4864 stats.buffers_in_ready,
4865 stats.buffers_processed,
4866 stats.buffers_failed);
4869 unsigned int id = hdw->ir_scheme_active;
4870 return scnprintf(buf, acnt, "ir scheme: id=%d %s", id,
4871 (id >= ARRAY_SIZE(ir_scheme_names) ?
4872 "?" : ir_scheme_names[id]));
4880 /* Generate report containing info about attached sub-devices and attached
4881 i2c clients, including an indication of which attached i2c clients are
4882 actually sub-devices. */
4883 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
4884 char *buf, unsigned int acnt)
4886 struct v4l2_subdev *sd;
4887 unsigned int tcnt = 0;
4889 struct i2c_client *client;
4893 ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
4895 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4898 if (id < ARRAY_SIZE(module_names)) p = module_names[id];
4900 ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s:", p);
4903 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4904 " (unknown id=%u):", id);
4907 client = v4l2_get_subdevdata(sd);
4909 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4910 " %s @ %02x\n", client->name,
4914 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4915 " no i2c client\n");
4923 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4924 char *buf,unsigned int acnt)
4926 unsigned int bcnt,ccnt,idx;
4928 LOCK_TAKE(hdw->big_lock);
4929 for (idx = 0; ; idx++) {
4930 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4932 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4934 buf[0] = '\n'; ccnt = 1;
4935 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4937 ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
4938 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4939 LOCK_GIVE(hdw->big_lock);
4944 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4947 unsigned int idx, ccnt;
4948 unsigned int lcnt, ucnt;
4950 for (idx = 0; ; idx++) {
4951 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4953 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4955 ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
4957 while (ucnt < ccnt) {
4959 while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
4962 printk(KERN_INFO "%s %.*s\n", hdw->name, lcnt, buf + ucnt);
4968 /* Evaluate and update the driver's current state, taking various actions
4969 as appropriate for the update. */
4970 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4973 int state_updated = 0;
4974 int callback_flag = 0;
4977 pvr2_trace(PVR2_TRACE_STBITS,
4978 "Drive state check START");
4979 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4980 pvr2_hdw_state_log_state(hdw);
4983 /* Process all state and get back over disposition */
4984 state_updated = pvr2_hdw_state_update(hdw);
4986 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4988 /* Update master state based upon all other states. */
4989 if (!hdw->flag_ok) {
4990 st = PVR2_STATE_DEAD;
4991 } else if (hdw->fw1_state != FW1_STATE_OK) {
4992 st = PVR2_STATE_COLD;
4993 } else if ((analog_mode ||
4994 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4995 !hdw->state_encoder_ok) {
4996 st = PVR2_STATE_WARM;
4997 } else if (hdw->flag_tripped ||
4998 (analog_mode && hdw->flag_decoder_missed)) {
4999 st = PVR2_STATE_ERROR;
5000 } else if (hdw->state_usbstream_run &&
5002 (hdw->state_encoder_run && hdw->state_decoder_run))) {
5003 st = PVR2_STATE_RUN;
5005 st = PVR2_STATE_READY;
5007 if (hdw->master_state != st) {
5008 pvr2_trace(PVR2_TRACE_STATE,
5009 "Device state change from %s to %s",
5010 pvr2_get_state_name(hdw->master_state),
5011 pvr2_get_state_name(st));
5012 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
5013 hdw->master_state = st;
5017 if (state_updated) {
5018 /* Trigger anyone waiting on any state changes here. */
5019 wake_up(&hdw->state_wait_data);
5022 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
5023 pvr2_hdw_state_log_state(hdw);
5025 pvr2_trace(PVR2_TRACE_STBITS,
5026 "Drive state check DONE callback=%d",callback_flag);
5028 return callback_flag;
5032 /* Cause kernel thread to check / update driver state */
5033 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
5035 if (hdw->state_stale) return;
5036 hdw->state_stale = !0;
5037 trace_stbit("state_stale",hdw->state_stale);
5038 queue_work(hdw->workqueue,&hdw->workpoll);
5042 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
5044 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
5048 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
5050 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
5054 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
5056 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
5060 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
5065 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
5066 if (ret) return ret;
5067 nval = (cval & ~msk) | (val & msk);
5068 pvr2_trace(PVR2_TRACE_GPIO,
5069 "GPIO direction changing 0x%x:0x%x"
5070 " from 0x%x to 0x%x",
5074 pvr2_trace(PVR2_TRACE_GPIO,
5075 "GPIO direction changing to 0x%x",nval);
5077 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
5081 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
5086 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
5087 if (ret) return ret;
5088 nval = (cval & ~msk) | (val & msk);
5089 pvr2_trace(PVR2_TRACE_GPIO,
5090 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5094 pvr2_trace(PVR2_TRACE_GPIO,
5095 "GPIO output changing to 0x%x",nval);
5097 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
5101 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
5103 struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
5104 memset(vtp, 0, sizeof(*vtp));
5105 hdw->tuner_signal_stale = 0;
5106 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5107 using v4l2-subdev - therefore we can't support that AT ALL right
5108 now. (Of course, no sub-drivers seem to implement it either.
5109 But now it's a a chicken and egg problem...) */
5110 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner,
5111 &hdw->tuner_signal_info);
5112 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll"
5113 " type=%u strength=%u audio=0x%x cap=0x%x"
5116 vtp->signal, vtp->rxsubchans, vtp->capability,
5117 vtp->rangelow, vtp->rangehigh);
5119 /* We have to do this to avoid getting into constant polling if
5120 there's nobody to answer a poll of cropcap info. */
5121 hdw->cropcap_stale = 0;
5125 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5127 return hdw->input_avail_mask;
5131 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5133 return hdw->input_allowed_mask;
5137 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5139 if (hdw->input_val != v) {
5141 hdw->input_dirty = !0;
5144 /* Handle side effects - if we switch to a mode that needs the RF
5145 tuner, then select the right frequency choice as well and mark
5147 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5148 hdw->freqSelector = 0;
5149 hdw->freqDirty = !0;
5150 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5151 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5152 hdw->freqSelector = 1;
5153 hdw->freqDirty = !0;
5159 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5160 unsigned int change_mask,
5161 unsigned int change_val)
5164 unsigned int nv,m,idx;
5165 LOCK_TAKE(hdw->big_lock);
5167 nv = hdw->input_allowed_mask & ~change_mask;
5168 nv |= (change_val & change_mask);
5169 nv &= hdw->input_avail_mask;
5171 /* No legal modes left; return error instead. */
5175 hdw->input_allowed_mask = nv;
5176 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5177 /* Current mode is still in the allowed mask, so
5181 /* Select and switch to a mode that is still in the allowed
5183 if (!hdw->input_allowed_mask) {
5184 /* Nothing legal; give up */
5187 m = hdw->input_allowed_mask;
5188 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5189 if (!((1 << idx) & m)) continue;
5190 pvr2_hdw_set_input(hdw,idx);
5194 LOCK_GIVE(hdw->big_lock);
5199 /* Find I2C address of eeprom */
5200 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5203 LOCK_TAKE(hdw->ctl_lock); do {
5204 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5205 result = pvr2_send_request(hdw,
5208 if (result < 0) break;
5209 result = hdw->cmd_buffer[0];
5210 } while(0); LOCK_GIVE(hdw->ctl_lock);
5215 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
5216 struct v4l2_dbg_match *match, u64 reg_id,
5217 int setFl, u64 *val_ptr)
5219 #ifdef CONFIG_VIDEO_ADV_DEBUG
5220 struct v4l2_dbg_register req;
5224 if (!capable(CAP_SYS_ADMIN)) return -EPERM;
5228 if (setFl) req.val = *val_ptr;
5229 /* It would be nice to know if a sub-device answered the request */
5230 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, g_register, &req);
5231 if (!setFl) *val_ptr = req.val;
5243 Stuff for Emacs to see, in order to encourage consistent editing style:
5244 *** Local Variables: ***
5246 *** fill-column: 75 ***
5247 *** tab-width: 8 ***
5248 *** c-basic-offset: 8 ***