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-i2c-track.h"
34 #include "pvrusb2-tuner.h"
35 #include "pvrusb2-eeprom.h"
36 #include "pvrusb2-hdw-internal.h"
37 #include "pvrusb2-encoder.h"
38 #include "pvrusb2-debug.h"
39 #include "pvrusb2-fx2-cmd.h"
40 #include "pvrusb2-wm8775.h"
41 #include "pvrusb2-video-v4l.h"
42 #include "pvrusb2-cx2584x-v4l.h"
43 #include "pvrusb2-audio.h"
45 #define TV_MIN_FREQ 55250000L
46 #define TV_MAX_FREQ 850000000L
48 /* This defines a minimum interval that the decoder must remain quiet
49 before we are allowed to start it running. */
50 #define TIME_MSEC_DECODER_WAIT 50
52 /* This defines a minimum interval that the encoder must remain quiet
53 before we are allowed to configure it. I had this originally set to
54 50msec, but Martin Dauskardt <martin.dauskardt@gmx.de> reports that
55 things work better when it's set to 100msec. */
56 #define TIME_MSEC_ENCODER_WAIT 100
58 /* This defines the minimum interval that the encoder must successfully run
59 before we consider that the encoder has run at least once since its
60 firmware has been loaded. This measurement is in important for cases
61 where we can't do something until we know that the encoder has been run
63 #define TIME_MSEC_ENCODER_OK 250
65 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
66 static DEFINE_MUTEX(pvr2_unit_mtx);
69 static int procreload;
70 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
71 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
72 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
73 static int init_pause_msec;
75 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
76 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
77 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
78 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
79 module_param(procreload, int, S_IRUGO|S_IWUSR);
80 MODULE_PARM_DESC(procreload,
81 "Attempt init failure recovery with firmware reload");
82 module_param_array(tuner, int, NULL, 0444);
83 MODULE_PARM_DESC(tuner,"specify installed tuner type");
84 module_param_array(video_std, int, NULL, 0444);
85 MODULE_PARM_DESC(video_std,"specify initial video standard");
86 module_param_array(tolerance, int, NULL, 0444);
87 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
89 /* US Broadcast channel 7 (175.25 MHz) */
90 static int default_tv_freq = 175250000L;
91 /* 104.3 MHz, a usable FM station for my area */
92 static int default_radio_freq = 104300000L;
94 module_param_named(tv_freq, default_tv_freq, int, 0444);
95 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
96 module_param_named(radio_freq, default_radio_freq, int, 0444);
97 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
99 #define PVR2_CTL_WRITE_ENDPOINT 0x01
100 #define PVR2_CTL_READ_ENDPOINT 0x81
102 #define PVR2_GPIO_IN 0x9008
103 #define PVR2_GPIO_OUT 0x900c
104 #define PVR2_GPIO_DIR 0x9020
106 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
108 #define PVR2_FIRMWARE_ENDPOINT 0x02
110 /* size of a firmware chunk */
111 #define FIRMWARE_CHUNK_SIZE 0x2000
113 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
114 struct v4l2_subdev *);
116 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
117 [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
118 [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
119 [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
120 [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_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_CS53L32A] = "cs53l32a",
129 [PVR2_CLIENT_ID_WM8775] = "wm8775",
133 static const unsigned char *module_i2c_addresses[] = {
134 [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
135 [PVR2_CLIENT_ID_MSP3400] = "\x40",
136 [PVR2_CLIENT_ID_SAA7115] = "\x21",
137 [PVR2_CLIENT_ID_WM8775] = "\x1b",
138 [PVR2_CLIENT_ID_CX25840] = "\x44",
142 /* Define the list of additional controls we'll dynamically construct based
143 on query of the cx2341x module. */
144 struct pvr2_mpeg_ids {
148 static const struct pvr2_mpeg_ids mpeg_ids[] = {
150 .strid = "audio_layer",
151 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
153 .strid = "audio_bitrate",
154 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
156 /* Already using audio_mode elsewhere :-( */
157 .strid = "mpeg_audio_mode",
158 .id = V4L2_CID_MPEG_AUDIO_MODE,
160 .strid = "mpeg_audio_mode_extension",
161 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
163 .strid = "audio_emphasis",
164 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
166 .strid = "audio_crc",
167 .id = V4L2_CID_MPEG_AUDIO_CRC,
169 .strid = "video_aspect",
170 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
172 .strid = "video_b_frames",
173 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
175 .strid = "video_gop_size",
176 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
178 .strid = "video_gop_closure",
179 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
181 .strid = "video_bitrate_mode",
182 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
184 .strid = "video_bitrate",
185 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
187 .strid = "video_bitrate_peak",
188 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
190 .strid = "video_temporal_decimation",
191 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
193 .strid = "stream_type",
194 .id = V4L2_CID_MPEG_STREAM_TYPE,
196 .strid = "video_spatial_filter_mode",
197 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
199 .strid = "video_spatial_filter",
200 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
202 .strid = "video_luma_spatial_filter_type",
203 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
205 .strid = "video_chroma_spatial_filter_type",
206 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
208 .strid = "video_temporal_filter_mode",
209 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
211 .strid = "video_temporal_filter",
212 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
214 .strid = "video_median_filter_type",
215 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
217 .strid = "video_luma_median_filter_top",
218 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
220 .strid = "video_luma_median_filter_bottom",
221 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
223 .strid = "video_chroma_median_filter_top",
224 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
226 .strid = "video_chroma_median_filter_bottom",
227 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
230 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
233 static const char *control_values_srate[] = {
234 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
235 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
236 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
241 static const char *control_values_input[] = {
242 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
243 [PVR2_CVAL_INPUT_DTV] = "dtv",
244 [PVR2_CVAL_INPUT_RADIO] = "radio",
245 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
246 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
250 static const char *control_values_audiomode[] = {
251 [V4L2_TUNER_MODE_MONO] = "Mono",
252 [V4L2_TUNER_MODE_STEREO] = "Stereo",
253 [V4L2_TUNER_MODE_LANG1] = "Lang1",
254 [V4L2_TUNER_MODE_LANG2] = "Lang2",
255 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
259 static const char *control_values_hsm[] = {
260 [PVR2_CVAL_HSM_FAIL] = "Fail",
261 [PVR2_CVAL_HSM_HIGH] = "High",
262 [PVR2_CVAL_HSM_FULL] = "Full",
266 static const char *pvr2_state_names[] = {
267 [PVR2_STATE_NONE] = "none",
268 [PVR2_STATE_DEAD] = "dead",
269 [PVR2_STATE_COLD] = "cold",
270 [PVR2_STATE_WARM] = "warm",
271 [PVR2_STATE_ERROR] = "error",
272 [PVR2_STATE_READY] = "ready",
273 [PVR2_STATE_RUN] = "run",
277 struct pvr2_fx2cmd_descdef {
282 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
283 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
284 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
285 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
286 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
287 {FX2CMD_REG_WRITE, "write encoder register"},
288 {FX2CMD_REG_READ, "read encoder register"},
289 {FX2CMD_MEMSEL, "encoder memsel"},
290 {FX2CMD_I2C_WRITE, "i2c write"},
291 {FX2CMD_I2C_READ, "i2c read"},
292 {FX2CMD_GET_USB_SPEED, "get USB speed"},
293 {FX2CMD_STREAMING_ON, "stream on"},
294 {FX2CMD_STREAMING_OFF, "stream off"},
295 {FX2CMD_FWPOST1, "fwpost1"},
296 {FX2CMD_POWER_OFF, "power off"},
297 {FX2CMD_POWER_ON, "power on"},
298 {FX2CMD_DEEP_RESET, "deep reset"},
299 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
300 {FX2CMD_GET_IR_CODE, "get IR code"},
301 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
302 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
303 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
304 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
305 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
306 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
307 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
311 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
312 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
313 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
314 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
315 static void pvr2_hdw_worker_i2c(struct work_struct *work);
316 static void pvr2_hdw_worker_poll(struct work_struct *work);
317 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
318 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
319 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
320 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
321 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
322 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
323 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
324 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
325 static void pvr2_hdw_quiescent_timeout(unsigned long);
326 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
327 static void pvr2_hdw_encoder_run_timeout(unsigned long);
328 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
329 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
330 unsigned int timeout,int probe_fl,
331 void *write_data,unsigned int write_len,
332 void *read_data,unsigned int read_len);
333 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
336 static void trace_stbit(const char *name,int val)
338 pvr2_trace(PVR2_TRACE_STBITS,
339 "State bit %s <-- %s",
340 name,(val ? "true" : "false"));
343 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
345 struct pvr2_hdw *hdw = cptr->hdw;
346 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
347 *vp = hdw->freqTable[hdw->freqProgSlot-1];
354 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
356 struct pvr2_hdw *hdw = cptr->hdw;
357 unsigned int slotId = hdw->freqProgSlot;
358 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
359 hdw->freqTable[slotId-1] = v;
360 /* Handle side effects correctly - if we're tuned to this
361 slot, then forgot the slot id relation since the stored
362 frequency has been changed. */
363 if (hdw->freqSelector) {
364 if (hdw->freqSlotRadio == slotId) {
365 hdw->freqSlotRadio = 0;
368 if (hdw->freqSlotTelevision == slotId) {
369 hdw->freqSlotTelevision = 0;
376 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
378 *vp = cptr->hdw->freqProgSlot;
382 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
384 struct pvr2_hdw *hdw = cptr->hdw;
385 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
386 hdw->freqProgSlot = v;
391 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
393 struct pvr2_hdw *hdw = cptr->hdw;
394 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
398 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
401 struct pvr2_hdw *hdw = cptr->hdw;
402 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
404 freq = hdw->freqTable[slotId-1];
406 pvr2_hdw_set_cur_freq(hdw,freq);
408 if (hdw->freqSelector) {
409 hdw->freqSlotRadio = slotId;
411 hdw->freqSlotTelevision = slotId;
416 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
418 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
422 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
424 return cptr->hdw->freqDirty != 0;
427 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
429 cptr->hdw->freqDirty = 0;
432 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
434 pvr2_hdw_set_cur_freq(cptr->hdw,v);
438 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
440 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
441 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
445 *left = cap->bounds.left;
449 static int ctrl_cropl_max_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;
457 if (cap->bounds.width > cptr->hdw->cropw_val) {
458 *left += cap->bounds.width - cptr->hdw->cropw_val;
463 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
465 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
466 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
470 *top = cap->bounds.top;
474 static int ctrl_cropt_max_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;
482 if (cap->bounds.height > cptr->hdw->croph_val) {
483 *top += cap->bounds.height - cptr->hdw->croph_val;
488 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *val)
490 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
491 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
496 if (cap->bounds.width > cptr->hdw->cropl_val) {
497 *val = cap->bounds.width - cptr->hdw->cropl_val;
502 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *val)
504 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
505 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
510 if (cap->bounds.height > cptr->hdw->cropt_val) {
511 *val = cap->bounds.height - cptr->hdw->cropt_val;
516 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
518 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
519 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
523 *val = cap->bounds.left;
527 static int ctrl_get_cropcapbt(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.top;
538 static int ctrl_get_cropcapbw(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.width;
549 static int ctrl_get_cropcapbh(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.height;
560 static int ctrl_get_cropcapdl(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->defrect.left;
571 static int ctrl_get_cropcapdt(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.top;
582 static int ctrl_get_cropcapdw(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.width;
593 static int ctrl_get_cropcapdh(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.height;
604 static int ctrl_get_cropcappan(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->pixelaspect.numerator;
615 static int ctrl_get_cropcappad(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.denominator;
626 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
628 /* Actual maximum depends on the video standard in effect. */
629 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
637 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
639 /* Actual minimum depends on device digitizer type. */
640 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
648 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
650 *vp = cptr->hdw->input_val;
654 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
656 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
659 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
661 return pvr2_hdw_set_input(cptr->hdw,v);
664 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
666 return cptr->hdw->input_dirty != 0;
669 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
671 cptr->hdw->input_dirty = 0;
675 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
678 struct pvr2_hdw *hdw = cptr->hdw;
679 if (hdw->tuner_signal_stale) {
680 pvr2_hdw_status_poll(hdw);
682 fv = hdw->tuner_signal_info.rangehigh;
684 /* Safety fallback */
688 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
697 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
700 struct pvr2_hdw *hdw = cptr->hdw;
701 if (hdw->tuner_signal_stale) {
702 pvr2_hdw_status_poll(hdw);
704 fv = hdw->tuner_signal_info.rangelow;
706 /* Safety fallback */
710 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
719 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
721 return cptr->hdw->enc_stale != 0;
724 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
726 cptr->hdw->enc_stale = 0;
727 cptr->hdw->enc_unsafe_stale = 0;
730 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
733 struct v4l2_ext_controls cs;
734 struct v4l2_ext_control c1;
735 memset(&cs,0,sizeof(cs));
736 memset(&c1,0,sizeof(c1));
739 c1.id = cptr->info->v4l_id;
740 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
747 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
750 struct pvr2_hdw *hdw = cptr->hdw;
751 struct v4l2_ext_controls cs;
752 struct v4l2_ext_control c1;
753 memset(&cs,0,sizeof(cs));
754 memset(&c1,0,sizeof(c1));
757 c1.id = cptr->info->v4l_id;
759 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
760 hdw->state_encoder_run, &cs,
763 /* Oops. cx2341x is telling us it's not safe to change
764 this control while we're capturing. Make a note of this
765 fact so that the pipeline will be stopped the next time
766 controls are committed. Then go on ahead and store this
768 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
771 if (!ret) hdw->enc_unsafe_stale = !0;
778 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
780 struct v4l2_queryctrl qctrl;
781 struct pvr2_ctl_info *info;
782 qctrl.id = cptr->info->v4l_id;
783 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
784 /* Strip out the const so we can adjust a function pointer. It's
785 OK to do this here because we know this is a dynamically created
786 control, so the underlying storage for the info pointer is (a)
787 private to us, and (b) not in read-only storage. Either we do
788 this or we significantly complicate the underlying control
790 info = (struct pvr2_ctl_info *)(cptr->info);
791 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
792 if (info->set_value) {
793 info->set_value = NULL;
796 if (!(info->set_value)) {
797 info->set_value = ctrl_cx2341x_set;
803 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
805 *vp = cptr->hdw->state_pipeline_req;
809 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
811 *vp = cptr->hdw->master_state;
815 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
817 int result = pvr2_hdw_is_hsm(cptr->hdw);
818 *vp = PVR2_CVAL_HSM_FULL;
819 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
820 if (result) *vp = PVR2_CVAL_HSM_HIGH;
824 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
826 *vp = cptr->hdw->std_mask_avail;
830 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
832 struct pvr2_hdw *hdw = cptr->hdw;
834 ns = hdw->std_mask_avail;
835 ns = (ns & ~m) | (v & m);
836 if (ns == hdw->std_mask_avail) return 0;
837 hdw->std_mask_avail = ns;
838 pvr2_hdw_internal_set_std_avail(hdw);
839 pvr2_hdw_internal_find_stdenum(hdw);
843 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
844 char *bufPtr,unsigned int bufSize,
847 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
851 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
852 const char *bufPtr,unsigned int bufSize,
857 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
858 if (ret < 0) return ret;
859 if (mskp) *mskp = id;
860 if (valp) *valp = id;
864 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
866 *vp = cptr->hdw->std_mask_cur;
870 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
872 struct pvr2_hdw *hdw = cptr->hdw;
874 ns = hdw->std_mask_cur;
875 ns = (ns & ~m) | (v & m);
876 if (ns == hdw->std_mask_cur) return 0;
877 hdw->std_mask_cur = ns;
879 pvr2_hdw_internal_find_stdenum(hdw);
883 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
885 return cptr->hdw->std_dirty != 0;
888 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
890 cptr->hdw->std_dirty = 0;
893 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
895 struct pvr2_hdw *hdw = cptr->hdw;
896 pvr2_hdw_status_poll(hdw);
897 *vp = hdw->tuner_signal_info.signal;
901 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
904 unsigned int subchan;
905 struct pvr2_hdw *hdw = cptr->hdw;
906 pvr2_hdw_status_poll(hdw);
907 subchan = hdw->tuner_signal_info.rxsubchans;
908 if (subchan & V4L2_TUNER_SUB_MONO) {
909 val |= (1 << V4L2_TUNER_MODE_MONO);
911 if (subchan & V4L2_TUNER_SUB_STEREO) {
912 val |= (1 << V4L2_TUNER_MODE_STEREO);
914 if (subchan & V4L2_TUNER_SUB_LANG1) {
915 val |= (1 << V4L2_TUNER_MODE_LANG1);
917 if (subchan & V4L2_TUNER_SUB_LANG2) {
918 val |= (1 << V4L2_TUNER_MODE_LANG2);
925 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
927 struct pvr2_hdw *hdw = cptr->hdw;
928 if (v < 0) return -EINVAL;
929 if (v > hdw->std_enum_cnt) return -EINVAL;
930 hdw->std_enum_cur = v;
933 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
934 hdw->std_mask_cur = hdw->std_defs[v].id;
940 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
942 *vp = cptr->hdw->std_enum_cur;
947 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
949 return cptr->hdw->std_dirty != 0;
953 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
955 cptr->hdw->std_dirty = 0;
959 #define DEFINT(vmin,vmax) \
960 .type = pvr2_ctl_int, \
961 .def.type_int.min_value = vmin, \
962 .def.type_int.max_value = vmax
964 #define DEFENUM(tab) \
965 .type = pvr2_ctl_enum, \
966 .def.type_enum.count = ARRAY_SIZE(tab), \
967 .def.type_enum.value_names = tab
970 .type = pvr2_ctl_bool
972 #define DEFMASK(msk,tab) \
973 .type = pvr2_ctl_bitmask, \
974 .def.type_bitmask.valid_bits = msk, \
975 .def.type_bitmask.bit_names = tab
977 #define DEFREF(vname) \
978 .set_value = ctrl_set_##vname, \
979 .get_value = ctrl_get_##vname, \
980 .is_dirty = ctrl_isdirty_##vname, \
981 .clear_dirty = ctrl_cleardirty_##vname
984 #define VCREATE_FUNCS(vname) \
985 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
986 {*vp = cptr->hdw->vname##_val; return 0;} \
987 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
988 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
989 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
990 {return cptr->hdw->vname##_dirty != 0;} \
991 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
992 {cptr->hdw->vname##_dirty = 0;}
994 VCREATE_FUNCS(brightness)
995 VCREATE_FUNCS(contrast)
996 VCREATE_FUNCS(saturation)
998 VCREATE_FUNCS(volume)
999 VCREATE_FUNCS(balance)
1001 VCREATE_FUNCS(treble)
1003 VCREATE_FUNCS(cropl)
1004 VCREATE_FUNCS(cropt)
1005 VCREATE_FUNCS(cropw)
1006 VCREATE_FUNCS(croph)
1007 VCREATE_FUNCS(audiomode)
1008 VCREATE_FUNCS(res_hor)
1009 VCREATE_FUNCS(res_ver)
1010 VCREATE_FUNCS(srate)
1012 /* Table definition of all controls which can be manipulated */
1013 static const struct pvr2_ctl_info control_defs[] = {
1015 .v4l_id = V4L2_CID_BRIGHTNESS,
1016 .desc = "Brightness",
1017 .name = "brightness",
1018 .default_value = 128,
1022 .v4l_id = V4L2_CID_CONTRAST,
1025 .default_value = 68,
1029 .v4l_id = V4L2_CID_SATURATION,
1030 .desc = "Saturation",
1031 .name = "saturation",
1032 .default_value = 64,
1036 .v4l_id = V4L2_CID_HUE,
1043 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1046 .default_value = 62000,
1050 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1055 DEFINT(-32768,32767),
1057 .v4l_id = V4L2_CID_AUDIO_BASS,
1062 DEFINT(-32768,32767),
1064 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1069 DEFINT(-32768,32767),
1071 .v4l_id = V4L2_CID_AUDIO_MUTE,
1078 .desc = "Capture crop left margin",
1079 .name = "crop_left",
1080 .internal_id = PVR2_CID_CROPL,
1084 .get_min_value = ctrl_cropl_min_get,
1085 .get_max_value = ctrl_cropl_max_get,
1086 .get_def_value = ctrl_get_cropcapdl,
1088 .desc = "Capture crop top margin",
1090 .internal_id = PVR2_CID_CROPT,
1094 .get_min_value = ctrl_cropt_min_get,
1095 .get_max_value = ctrl_cropt_max_get,
1096 .get_def_value = ctrl_get_cropcapdt,
1098 .desc = "Capture crop width",
1099 .name = "crop_width",
1100 .internal_id = PVR2_CID_CROPW,
1101 .default_value = 720,
1103 .get_max_value = ctrl_cropw_max_get,
1104 .get_def_value = ctrl_get_cropcapdw,
1106 .desc = "Capture crop height",
1107 .name = "crop_height",
1108 .internal_id = PVR2_CID_CROPH,
1109 .default_value = 480,
1111 .get_max_value = ctrl_croph_max_get,
1112 .get_def_value = ctrl_get_cropcapdh,
1114 .desc = "Capture capability pixel aspect numerator",
1115 .name = "cropcap_pixel_numerator",
1116 .internal_id = PVR2_CID_CROPCAPPAN,
1117 .get_value = ctrl_get_cropcappan,
1119 .desc = "Capture capability pixel aspect denominator",
1120 .name = "cropcap_pixel_denominator",
1121 .internal_id = PVR2_CID_CROPCAPPAD,
1122 .get_value = ctrl_get_cropcappad,
1124 .desc = "Capture capability bounds top",
1125 .name = "cropcap_bounds_top",
1126 .internal_id = PVR2_CID_CROPCAPBT,
1127 .get_value = ctrl_get_cropcapbt,
1129 .desc = "Capture capability bounds left",
1130 .name = "cropcap_bounds_left",
1131 .internal_id = PVR2_CID_CROPCAPBL,
1132 .get_value = ctrl_get_cropcapbl,
1134 .desc = "Capture capability bounds width",
1135 .name = "cropcap_bounds_width",
1136 .internal_id = PVR2_CID_CROPCAPBW,
1137 .get_value = ctrl_get_cropcapbw,
1139 .desc = "Capture capability bounds height",
1140 .name = "cropcap_bounds_height",
1141 .internal_id = PVR2_CID_CROPCAPBH,
1142 .get_value = ctrl_get_cropcapbh,
1144 .desc = "Video Source",
1146 .internal_id = PVR2_CID_INPUT,
1147 .default_value = PVR2_CVAL_INPUT_TV,
1148 .check_value = ctrl_check_input,
1150 DEFENUM(control_values_input),
1152 .desc = "Audio Mode",
1153 .name = "audio_mode",
1154 .internal_id = PVR2_CID_AUDIOMODE,
1155 .default_value = V4L2_TUNER_MODE_STEREO,
1157 DEFENUM(control_values_audiomode),
1159 .desc = "Horizontal capture resolution",
1160 .name = "resolution_hor",
1161 .internal_id = PVR2_CID_HRES,
1162 .default_value = 720,
1166 .desc = "Vertical capture resolution",
1167 .name = "resolution_ver",
1168 .internal_id = PVR2_CID_VRES,
1169 .default_value = 480,
1172 /* Hook in check for video standard and adjust maximum
1173 depending on the standard. */
1174 .get_max_value = ctrl_vres_max_get,
1175 .get_min_value = ctrl_vres_min_get,
1177 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1178 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1179 .desc = "Audio Sampling Frequency",
1182 DEFENUM(control_values_srate),
1184 .desc = "Tuner Frequency (Hz)",
1185 .name = "frequency",
1186 .internal_id = PVR2_CID_FREQUENCY,
1188 .set_value = ctrl_freq_set,
1189 .get_value = ctrl_freq_get,
1190 .is_dirty = ctrl_freq_is_dirty,
1191 .clear_dirty = ctrl_freq_clear_dirty,
1193 /* Hook in check for input value (tv/radio) and adjust
1194 max/min values accordingly */
1195 .get_max_value = ctrl_freq_max_get,
1196 .get_min_value = ctrl_freq_min_get,
1200 .set_value = ctrl_channel_set,
1201 .get_value = ctrl_channel_get,
1202 DEFINT(0,FREQTABLE_SIZE),
1204 .desc = "Channel Program Frequency",
1205 .name = "freq_table_value",
1206 .set_value = ctrl_channelfreq_set,
1207 .get_value = ctrl_channelfreq_get,
1209 /* Hook in check for input value (tv/radio) and adjust
1210 max/min values accordingly */
1211 .get_max_value = ctrl_freq_max_get,
1212 .get_min_value = ctrl_freq_min_get,
1214 .desc = "Channel Program ID",
1215 .name = "freq_table_channel",
1216 .set_value = ctrl_channelprog_set,
1217 .get_value = ctrl_channelprog_get,
1218 DEFINT(0,FREQTABLE_SIZE),
1220 .desc = "Streaming Enabled",
1221 .name = "streaming_enabled",
1222 .get_value = ctrl_streamingenabled_get,
1225 .desc = "USB Speed",
1226 .name = "usb_speed",
1227 .get_value = ctrl_hsm_get,
1228 DEFENUM(control_values_hsm),
1230 .desc = "Master State",
1231 .name = "master_state",
1232 .get_value = ctrl_masterstate_get,
1233 DEFENUM(pvr2_state_names),
1235 .desc = "Signal Present",
1236 .name = "signal_present",
1237 .get_value = ctrl_signal_get,
1240 .desc = "Audio Modes Present",
1241 .name = "audio_modes_present",
1242 .get_value = ctrl_audio_modes_present_get,
1243 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1244 v4l. Nothing outside of this module cares about this,
1245 but I reuse it in order to also reuse the
1246 control_values_audiomode string table. */
1247 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1248 (1 << V4L2_TUNER_MODE_STEREO)|
1249 (1 << V4L2_TUNER_MODE_LANG1)|
1250 (1 << V4L2_TUNER_MODE_LANG2)),
1251 control_values_audiomode),
1253 .desc = "Video Standards Available Mask",
1254 .name = "video_standard_mask_available",
1255 .internal_id = PVR2_CID_STDAVAIL,
1257 .get_value = ctrl_stdavail_get,
1258 .set_value = ctrl_stdavail_set,
1259 .val_to_sym = ctrl_std_val_to_sym,
1260 .sym_to_val = ctrl_std_sym_to_val,
1261 .type = pvr2_ctl_bitmask,
1263 .desc = "Video Standards In Use Mask",
1264 .name = "video_standard_mask_active",
1265 .internal_id = PVR2_CID_STDCUR,
1267 .get_value = ctrl_stdcur_get,
1268 .set_value = ctrl_stdcur_set,
1269 .is_dirty = ctrl_stdcur_is_dirty,
1270 .clear_dirty = ctrl_stdcur_clear_dirty,
1271 .val_to_sym = ctrl_std_val_to_sym,
1272 .sym_to_val = ctrl_std_sym_to_val,
1273 .type = pvr2_ctl_bitmask,
1275 .desc = "Video Standard Name",
1276 .name = "video_standard",
1277 .internal_id = PVR2_CID_STDENUM,
1279 .get_value = ctrl_stdenumcur_get,
1280 .set_value = ctrl_stdenumcur_set,
1281 .is_dirty = ctrl_stdenumcur_is_dirty,
1282 .clear_dirty = ctrl_stdenumcur_clear_dirty,
1283 .type = pvr2_ctl_enum,
1287 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1290 const char *pvr2_config_get_name(enum pvr2_config cfg)
1293 case pvr2_config_empty: return "empty";
1294 case pvr2_config_mpeg: return "mpeg";
1295 case pvr2_config_vbi: return "vbi";
1296 case pvr2_config_pcm: return "pcm";
1297 case pvr2_config_rawvideo: return "raw video";
1303 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1305 return hdw->usb_dev;
1309 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1311 return hdw->serial_number;
1315 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1317 return hdw->bus_info;
1321 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1323 return hdw->identifier;
1327 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1329 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1332 /* Set the currently tuned frequency and account for all possible
1333 driver-core side effects of this action. */
1334 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1336 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1337 if (hdw->freqSelector) {
1338 /* Swing over to radio frequency selection */
1339 hdw->freqSelector = 0;
1340 hdw->freqDirty = !0;
1342 if (hdw->freqValRadio != val) {
1343 hdw->freqValRadio = val;
1344 hdw->freqSlotRadio = 0;
1345 hdw->freqDirty = !0;
1348 if (!(hdw->freqSelector)) {
1349 /* Swing over to television frequency selection */
1350 hdw->freqSelector = 1;
1351 hdw->freqDirty = !0;
1353 if (hdw->freqValTelevision != val) {
1354 hdw->freqValTelevision = val;
1355 hdw->freqSlotTelevision = 0;
1356 hdw->freqDirty = !0;
1361 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1363 return hdw->unit_number;
1367 /* Attempt to locate one of the given set of files. Messages are logged
1368 appropriate to what has been found. The return value will be 0 or
1369 greater on success (it will be the index of the file name found) and
1370 fw_entry will be filled in. Otherwise a negative error is returned on
1371 failure. If the return value is -ENOENT then no viable firmware file
1372 could be located. */
1373 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1374 const struct firmware **fw_entry,
1375 const char *fwtypename,
1376 unsigned int fwcount,
1377 const char *fwnames[])
1381 for (idx = 0; idx < fwcount; idx++) {
1382 ret = request_firmware(fw_entry,
1384 &hdw->usb_dev->dev);
1386 trace_firmware("Located %s firmware: %s;"
1392 if (ret == -ENOENT) continue;
1393 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1394 "request_firmware fatal error with code=%d",ret);
1397 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1399 " Device %s firmware"
1400 " seems to be missing.",
1402 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1403 "Did you install the pvrusb2 firmware files"
1404 " in their proper location?");
1406 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1407 "request_firmware unable to locate %s file %s",
1408 fwtypename,fwnames[0]);
1410 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1411 "request_firmware unable to locate"
1412 " one of the following %s files:",
1414 for (idx = 0; idx < fwcount; idx++) {
1415 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1416 "request_firmware: Failed to find %s",
1425 * pvr2_upload_firmware1().
1427 * Send the 8051 firmware to the device. After the upload, arrange for
1428 * device to re-enumerate.
1430 * NOTE : the pointer to the firmware data given by request_firmware()
1431 * is not suitable for an usb transaction.
1434 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1436 const struct firmware *fw_entry = NULL;
1442 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1443 hdw->fw1_state = FW1_STATE_OK;
1444 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1445 "Connected device type defines"
1446 " no firmware to upload; ignoring firmware");
1450 hdw->fw1_state = FW1_STATE_FAILED; // default result
1452 trace_firmware("pvr2_upload_firmware1");
1454 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1455 hdw->hdw_desc->fx2_firmware.cnt,
1456 hdw->hdw_desc->fx2_firmware.lst);
1458 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1462 usb_settoggle(hdw->usb_dev, 0 & 0xf, !(0 & USB_DIR_IN), 0);
1463 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1465 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1467 if (fw_entry->size != 0x2000){
1468 pvr2_trace(PVR2_TRACE_ERROR_LEGS,"wrong fx2 firmware size");
1469 release_firmware(fw_entry);
1473 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1474 if (fw_ptr == NULL){
1475 release_firmware(fw_entry);
1479 /* We have to hold the CPU during firmware upload. */
1480 pvr2_hdw_cpureset_assert(hdw,1);
1482 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1486 for(address = 0; address < fw_entry->size; address += 0x800) {
1487 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1488 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1489 0, fw_ptr, 0x800, HZ);
1492 trace_firmware("Upload done, releasing device's CPU");
1494 /* Now release the CPU. It will disconnect and reconnect later. */
1495 pvr2_hdw_cpureset_assert(hdw,0);
1498 release_firmware(fw_entry);
1500 trace_firmware("Upload done (%d bytes sent)",ret);
1502 /* We should have written 8192 bytes */
1504 hdw->fw1_state = FW1_STATE_RELOAD;
1513 * pvr2_upload_firmware2()
1515 * This uploads encoder firmware on endpoint 2.
1519 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1521 const struct firmware *fw_entry = NULL;
1523 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1527 static const char *fw_files[] = {
1528 CX2341X_FIRM_ENC_FILENAME,
1531 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1535 trace_firmware("pvr2_upload_firmware2");
1537 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1538 ARRAY_SIZE(fw_files), fw_files);
1539 if (ret < 0) return ret;
1542 /* Since we're about to completely reinitialize the encoder,
1543 invalidate our cached copy of its configuration state. Next
1544 time we configure the encoder, then we'll fully configure it. */
1545 hdw->enc_cur_valid = 0;
1547 /* Encoder is about to be reset so note that as far as we're
1548 concerned now, the encoder has never been run. */
1549 del_timer_sync(&hdw->encoder_run_timer);
1550 if (hdw->state_encoder_runok) {
1551 hdw->state_encoder_runok = 0;
1552 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1555 /* First prepare firmware loading */
1556 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1557 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1558 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1559 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1560 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1561 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1562 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1563 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1564 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1565 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1566 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1567 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1568 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1569 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1570 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1571 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1572 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1573 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1576 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1577 "firmware2 upload prep failed, ret=%d",ret);
1578 release_firmware(fw_entry);
1582 /* Now send firmware */
1584 fw_len = fw_entry->size;
1586 if (fw_len % sizeof(u32)) {
1587 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1588 "size of %s firmware"
1589 " must be a multiple of %zu bytes",
1590 fw_files[fwidx],sizeof(u32));
1591 release_firmware(fw_entry);
1596 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1597 if (fw_ptr == NULL){
1598 release_firmware(fw_entry);
1599 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1600 "failed to allocate memory for firmware2 upload");
1605 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1608 for (fw_done = 0; fw_done < fw_len;) {
1609 bcnt = fw_len - fw_done;
1610 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1611 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1612 /* Usbsnoop log shows that we must swap bytes... */
1613 /* Some background info: The data being swapped here is a
1614 firmware image destined for the mpeg encoder chip that
1615 lives at the other end of a USB endpoint. The encoder
1616 chip always talks in 32 bit chunks and its storage is
1617 organized into 32 bit words. However from the file
1618 system to the encoder chip everything is purely a byte
1619 stream. The firmware file's contents are always 32 bit
1620 swapped from what the encoder expects. Thus the need
1621 always exists to swap the bytes regardless of the endian
1622 type of the host processor and therefore swab32() makes
1624 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1625 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1627 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1628 &actual_length, HZ);
1629 ret |= (actual_length != bcnt);
1634 trace_firmware("upload of %s : %i / %i ",
1635 fw_files[fwidx],fw_done,fw_len);
1638 release_firmware(fw_entry);
1641 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1642 "firmware2 upload transfer failure");
1648 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1649 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1650 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1653 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1654 "firmware2 upload post-proc failure");
1658 if (hdw->hdw_desc->signal_routing_scheme ==
1659 PVR2_ROUTING_SCHEME_GOTVIEW) {
1660 /* Ensure that GPIO 11 is set to output for GOTVIEW
1662 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1668 static const char *pvr2_get_state_name(unsigned int st)
1670 if (st < ARRAY_SIZE(pvr2_state_names)) {
1671 return pvr2_state_names[st];
1676 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1678 if (hdw->decoder_ctrl) {
1679 hdw->decoder_ctrl->enable(hdw->decoder_ctrl->ctxt, enablefl);
1682 /* Even though we really only care about the video decoder chip at
1683 this point, we'll broadcast stream on/off to all sub-devices
1684 anyway, just in case somebody else wants to hear the
1686 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
1687 (enablefl ? "on" : "off"));
1688 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1689 if (hdw->decoder_client_id) {
1690 /* We get here if the encoder has been noticed. Otherwise
1691 we'll issue a warning to the user (which should
1692 normally never happen). */
1695 if (!hdw->flag_decoder_missed) {
1696 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1697 "WARNING: No decoder present");
1698 hdw->flag_decoder_missed = !0;
1699 trace_stbit("flag_decoder_missed",
1700 hdw->flag_decoder_missed);
1706 void pvr2_hdw_set_decoder(struct pvr2_hdw *hdw,struct pvr2_decoder_ctrl *ptr)
1708 if (hdw->decoder_ctrl == ptr) return;
1709 hdw->decoder_ctrl = ptr;
1710 if (hdw->decoder_ctrl && hdw->flag_decoder_missed) {
1711 hdw->flag_decoder_missed = 0;
1712 trace_stbit("flag_decoder_missed",
1713 hdw->flag_decoder_missed);
1714 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1715 "Decoder has appeared");
1716 pvr2_hdw_state_sched(hdw);
1721 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1723 return hdw->master_state;
1727 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1729 if (!hdw->flag_tripped) return 0;
1730 hdw->flag_tripped = 0;
1731 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1732 "Clearing driver error statuss");
1737 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1740 LOCK_TAKE(hdw->big_lock); do {
1741 fl = pvr2_hdw_untrip_unlocked(hdw);
1742 } while (0); LOCK_GIVE(hdw->big_lock);
1743 if (fl) pvr2_hdw_state_sched(hdw);
1750 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1752 return hdw->state_pipeline_req != 0;
1756 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1759 LOCK_TAKE(hdw->big_lock); do {
1760 pvr2_hdw_untrip_unlocked(hdw);
1761 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1762 hdw->state_pipeline_req = enable_flag != 0;
1763 pvr2_trace(PVR2_TRACE_START_STOP,
1764 "/*--TRACE_STREAM--*/ %s",
1765 enable_flag ? "enable" : "disable");
1767 pvr2_hdw_state_sched(hdw);
1768 } while (0); LOCK_GIVE(hdw->big_lock);
1769 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1771 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1772 if (st != PVR2_STATE_READY) return -EIO;
1773 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1780 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1783 LOCK_TAKE(hdw->big_lock);
1784 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1785 hdw->desired_stream_type = config;
1786 hdw->state_pipeline_config = 0;
1787 trace_stbit("state_pipeline_config",
1788 hdw->state_pipeline_config);
1789 pvr2_hdw_state_sched(hdw);
1791 LOCK_GIVE(hdw->big_lock);
1793 return pvr2_hdw_wait(hdw,0);
1797 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1799 int unit_number = hdw->unit_number;
1801 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1802 tp = tuner[unit_number];
1804 if (tp < 0) return -EINVAL;
1805 hdw->tuner_type = tp;
1806 hdw->tuner_updated = !0;
1811 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1813 int unit_number = hdw->unit_number;
1815 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1816 tp = video_std[unit_number];
1823 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1825 int unit_number = hdw->unit_number;
1827 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1828 tp = tolerance[unit_number];
1834 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1836 /* Try a harmless request to fetch the eeprom's address over
1837 endpoint 1. See what happens. Only the full FX2 image can
1838 respond to this. If this probe fails then likely the FX2
1839 firmware needs be loaded. */
1841 LOCK_TAKE(hdw->ctl_lock); do {
1842 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1843 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1846 if (result < 0) break;
1847 } while(0); LOCK_GIVE(hdw->ctl_lock);
1849 pvr2_trace(PVR2_TRACE_INIT,
1850 "Probe of device endpoint 1 result status %d",
1853 pvr2_trace(PVR2_TRACE_INIT,
1854 "Probe of device endpoint 1 succeeded");
1859 struct pvr2_std_hack {
1860 v4l2_std_id pat; /* Pattern to match */
1861 v4l2_std_id msk; /* Which bits we care about */
1862 v4l2_std_id std; /* What additional standards or default to set */
1865 /* This data structure labels specific combinations of standards from
1866 tveeprom that we'll try to recognize. If we recognize one, then assume
1867 a specified default standard to use. This is here because tveeprom only
1868 tells us about available standards not the intended default standard (if
1869 any) for the device in question. We guess the default based on what has
1870 been reported as available. Note that this is only for guessing a
1871 default - which can always be overridden explicitly - and if the user
1872 has otherwise named a default then that default will always be used in
1873 place of this table. */
1874 static const struct pvr2_std_hack std_eeprom_maps[] = {
1876 .pat = V4L2_STD_B|V4L2_STD_GH,
1877 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1881 .std = V4L2_STD_NTSC_M,
1884 .pat = V4L2_STD_PAL_I,
1885 .std = V4L2_STD_PAL_I,
1888 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1889 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1893 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1897 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1901 v4l2_std_id std1,std2,std3;
1903 std1 = get_default_standard(hdw);
1904 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1906 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1907 pvr2_trace(PVR2_TRACE_STD,
1908 "Supported video standard(s) reported available"
1909 " in hardware: %.*s",
1912 hdw->std_mask_avail = hdw->std_mask_eeprom;
1914 std2 = (std1|std3) & ~hdw->std_mask_avail;
1916 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1917 pvr2_trace(PVR2_TRACE_STD,
1918 "Expanding supported video standards"
1919 " to include: %.*s",
1921 hdw->std_mask_avail |= std2;
1924 pvr2_hdw_internal_set_std_avail(hdw);
1927 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1928 pvr2_trace(PVR2_TRACE_STD,
1929 "Initial video standard forced to %.*s",
1931 hdw->std_mask_cur = std1;
1932 hdw->std_dirty = !0;
1933 pvr2_hdw_internal_find_stdenum(hdw);
1937 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1938 pvr2_trace(PVR2_TRACE_STD,
1939 "Initial video standard"
1940 " (determined by device type): %.*s",bcnt,buf);
1941 hdw->std_mask_cur = std3;
1942 hdw->std_dirty = !0;
1943 pvr2_hdw_internal_find_stdenum(hdw);
1949 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1950 if (std_eeprom_maps[idx].msk ?
1951 ((std_eeprom_maps[idx].pat ^
1952 hdw->std_mask_eeprom) &
1953 std_eeprom_maps[idx].msk) :
1954 (std_eeprom_maps[idx].pat !=
1955 hdw->std_mask_eeprom)) continue;
1956 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1957 std_eeprom_maps[idx].std);
1958 pvr2_trace(PVR2_TRACE_STD,
1959 "Initial video standard guessed as %.*s",
1961 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1962 hdw->std_dirty = !0;
1963 pvr2_hdw_internal_find_stdenum(hdw);
1968 if (hdw->std_enum_cnt > 1) {
1969 // Autoselect the first listed standard
1970 hdw->std_enum_cur = 1;
1971 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1972 hdw->std_dirty = !0;
1973 pvr2_trace(PVR2_TRACE_STD,
1974 "Initial video standard auto-selected to %s",
1975 hdw->std_defs[hdw->std_enum_cur-1].name);
1979 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1980 "Unable to select a viable initial video standard");
1984 static unsigned int pvr2_copy_i2c_addr_list(
1985 unsigned short *dst, const unsigned char *src,
1986 unsigned int dst_max)
1988 unsigned int cnt = 0;
1990 while (src[cnt] && (cnt + 1) < dst_max) {
1991 dst[cnt] = src[cnt];
1994 dst[cnt] = I2C_CLIENT_END;
1999 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
2000 const struct pvr2_device_client_desc *cd)
2004 struct v4l2_subdev *sd;
2005 unsigned int i2ccnt;
2006 const unsigned char *p;
2007 /* Arbitrary count - max # i2c addresses we will probe */
2008 unsigned short i2caddr[25];
2010 mid = cd->module_id;
2011 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
2013 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2014 "Module ID %u for device %s has no name",
2016 hdw->hdw_desc->description);
2019 pvr2_trace(PVR2_TRACE_INIT,
2020 "Module ID %u (%s) for device %s being loaded...",
2022 hdw->hdw_desc->description);
2024 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
2025 ARRAY_SIZE(i2caddr));
2026 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
2027 module_i2c_addresses[mid] : NULL) != NULL)) {
2028 /* Second chance: Try default i2c address list */
2029 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2030 ARRAY_SIZE(i2caddr));
2032 pvr2_trace(PVR2_TRACE_INIT,
2034 " Using default i2c address list",
2040 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2041 "Module ID %u (%s) for device %s:"
2042 " No i2c addresses",
2043 mid, fname, hdw->hdw_desc->description);
2047 /* Note how the 2nd and 3rd arguments are the same for both
2048 * v4l2_i2c_new_subdev() and v4l2_i2c_new_probed_subdev(). Why?
2049 * Well the 2nd argument is the module name to load, while the 3rd
2050 * argument is documented in the framework as being the "chipid" -
2051 * and every other place where I can find examples of this, the
2052 * "chipid" appears to just be the module name again. So here we
2053 * just do the same thing. */
2054 hdw->i2c_adap.class = 0;
2056 pvr2_trace(PVR2_TRACE_INIT,
2058 " Setting up with specified i2c address 0x%x",
2060 sd = v4l2_i2c_new_subdev(&hdw->i2c_adap,
2064 pvr2_trace(PVR2_TRACE_INIT,
2066 " Setting up with address probe list",
2068 sd = v4l2_i2c_new_probed_subdev(&hdw->i2c_adap,
2072 hdw->i2c_adap.class = I2C_CLASS_TV_ANALOG;
2075 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2076 "Module ID %u (%s) for device %s failed to load",
2077 mid, fname, hdw->hdw_desc->description);
2081 /* Tag this sub-device instance with the module ID we know about.
2082 In other places we'll use that tag to determine if the instance
2083 requires special handling. */
2086 /* If we have both old and new i2c layers enabled, make sure that
2087 old layer isn't also tracking this module. This is a debugging
2088 aid, in normal situations there's no reason for both mechanisms
2090 pvr2_i2c_untrack_subdev(hdw, sd);
2091 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
2094 /* client-specific setup... */
2096 case PVR2_CLIENT_ID_CX25840:
2097 hdw->decoder_client_id = mid;
2100 Mike Isely <isely@pobox.com> 19-Nov-2006 - This
2101 bit of nuttiness for cx25840 causes that module
2102 to correctly set up its video scaling. This is
2103 really a problem in the cx25840 module itself,
2104 but we work around it here. The problem has not
2105 been seen in ivtv because there VBI is supported
2106 and set up. We don't do VBI here (at least not
2107 yet) and thus we never attempted to even set it
2110 struct v4l2_format fmt;
2111 pvr2_trace(PVR2_TRACE_INIT,
2113 " Executing cx25840 VBI hack",
2115 memset(&fmt, 0, sizeof(fmt));
2116 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
2117 v4l2_device_call_all(&hdw->v4l2_dev, mid,
2118 video, s_fmt, &fmt);
2121 case PVR2_CLIENT_ID_SAA7115:
2122 hdw->decoder_client_id = mid;
2131 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2134 const struct pvr2_string_table *cm;
2135 const struct pvr2_device_client_table *ct;
2138 cm = &hdw->hdw_desc->client_modules;
2139 for (idx = 0; idx < cm->cnt; idx++) {
2140 request_module(cm->lst[idx]);
2143 ct = &hdw->hdw_desc->client_table;
2144 for (idx = 0; idx < ct->cnt; idx++) {
2145 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
2147 if (!okFl) pvr2_hdw_render_useless(hdw);
2151 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2155 struct pvr2_ctrl *cptr;
2157 if (hdw->hdw_desc->fx2_firmware.cnt) {
2160 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
2163 pvr2_trace(PVR2_TRACE_INIT,
2164 "USB endpoint config looks strange"
2165 "; possibly firmware needs to be"
2170 reloadFl = !pvr2_hdw_check_firmware(hdw);
2172 pvr2_trace(PVR2_TRACE_INIT,
2173 "Check for FX2 firmware failed"
2174 "; possibly firmware needs to be"
2179 if (pvr2_upload_firmware1(hdw) != 0) {
2180 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2181 "Failure uploading firmware1");
2186 hdw->fw1_state = FW1_STATE_OK;
2188 if (!pvr2_hdw_dev_ok(hdw)) return;
2190 hdw->force_dirty = !0;
2192 if (!hdw->hdw_desc->flag_no_powerup) {
2193 pvr2_hdw_cmd_powerup(hdw);
2194 if (!pvr2_hdw_dev_ok(hdw)) return;
2197 /* Take the IR chip out of reset, if appropriate */
2198 if (hdw->hdw_desc->ir_scheme == PVR2_IR_SCHEME_ZILOG) {
2199 pvr2_issue_simple_cmd(hdw,
2200 FX2CMD_HCW_ZILOG_RESET |
2205 // This step MUST happen after the earlier powerup step.
2206 pvr2_i2c_track_init(hdw);
2207 pvr2_i2c_core_init(hdw);
2208 if (!pvr2_hdw_dev_ok(hdw)) return;
2210 pvr2_hdw_load_modules(hdw);
2211 if (!pvr2_hdw_dev_ok(hdw)) return;
2213 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, init, 0);
2215 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2216 cptr = hdw->controls + idx;
2217 if (cptr->info->skip_init) continue;
2218 if (!cptr->info->set_value) continue;
2219 cptr->info->set_value(cptr,~0,cptr->info->default_value);
2222 /* Set up special default values for the television and radio
2223 frequencies here. It's not really important what these defaults
2224 are, but I set them to something usable in the Chicago area just
2225 to make driver testing a little easier. */
2227 hdw->freqValTelevision = default_tv_freq;
2228 hdw->freqValRadio = default_radio_freq;
2230 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2231 // thread-safe against the normal pvr2_send_request() mechanism.
2232 // (We should make it thread safe).
2234 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
2235 ret = pvr2_hdw_get_eeprom_addr(hdw);
2236 if (!pvr2_hdw_dev_ok(hdw)) return;
2238 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2239 "Unable to determine location of eeprom,"
2242 hdw->eeprom_addr = ret;
2243 pvr2_eeprom_analyze(hdw);
2244 if (!pvr2_hdw_dev_ok(hdw)) return;
2247 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
2248 hdw->tuner_updated = !0;
2249 hdw->std_mask_eeprom = V4L2_STD_ALL;
2252 if (hdw->serial_number) {
2253 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2254 "sn-%lu", hdw->serial_number);
2255 } else if (hdw->unit_number >= 0) {
2256 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2258 hdw->unit_number + 'a');
2260 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2263 hdw->identifier[idx] = 0;
2265 pvr2_hdw_setup_std(hdw);
2267 if (!get_default_tuner_type(hdw)) {
2268 pvr2_trace(PVR2_TRACE_INIT,
2269 "pvr2_hdw_setup: Tuner type overridden to %d",
2273 pvr2_i2c_core_check_stale(hdw);
2275 if (!pvr2_hdw_dev_ok(hdw)) return;
2277 if (hdw->hdw_desc->signal_routing_scheme ==
2278 PVR2_ROUTING_SCHEME_GOTVIEW) {
2279 /* Ensure that GPIO 11 is set to output for GOTVIEW
2281 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
2284 pvr2_hdw_commit_setup(hdw);
2286 hdw->vid_stream = pvr2_stream_create();
2287 if (!pvr2_hdw_dev_ok(hdw)) return;
2288 pvr2_trace(PVR2_TRACE_INIT,
2289 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
2290 if (hdw->vid_stream) {
2291 idx = get_default_error_tolerance(hdw);
2293 pvr2_trace(PVR2_TRACE_INIT,
2294 "pvr2_hdw_setup: video stream %p"
2295 " setting tolerance %u",
2296 hdw->vid_stream,idx);
2298 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2299 PVR2_VID_ENDPOINT,idx);
2302 if (!pvr2_hdw_dev_ok(hdw)) return;
2304 hdw->flag_init_ok = !0;
2306 pvr2_hdw_state_sched(hdw);
2310 /* Set up the structure and attempt to put the device into a usable state.
2311 This can be a time-consuming operation, which is why it is not done
2312 internally as part of the create() step. */
2313 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
2315 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
2317 pvr2_hdw_setup_low(hdw);
2318 pvr2_trace(PVR2_TRACE_INIT,
2319 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2320 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
2321 if (pvr2_hdw_dev_ok(hdw)) {
2322 if (hdw->flag_init_ok) {
2325 "Device initialization"
2326 " completed successfully.");
2329 if (hdw->fw1_state == FW1_STATE_RELOAD) {
2332 "Device microcontroller firmware"
2333 " (re)loaded; it should now reset"
2338 PVR2_TRACE_ERROR_LEGS,
2339 "Device initialization was not successful.");
2340 if (hdw->fw1_state == FW1_STATE_MISSING) {
2342 PVR2_TRACE_ERROR_LEGS,
2343 "Giving up since device"
2344 " microcontroller firmware"
2345 " appears to be missing.");
2351 PVR2_TRACE_ERROR_LEGS,
2352 "Attempting pvrusb2 recovery by reloading"
2353 " primary firmware.");
2355 PVR2_TRACE_ERROR_LEGS,
2356 "If this works, device should disconnect"
2357 " and reconnect in a sane state.");
2358 hdw->fw1_state = FW1_STATE_UNKNOWN;
2359 pvr2_upload_firmware1(hdw);
2362 PVR2_TRACE_ERROR_LEGS,
2363 "***WARNING*** pvrusb2 device hardware"
2364 " appears to be jammed"
2365 " and I can't clear it.");
2367 PVR2_TRACE_ERROR_LEGS,
2368 "You might need to power cycle"
2369 " the pvrusb2 device"
2370 " in order to recover.");
2373 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2377 /* Perform second stage initialization. Set callback pointer first so that
2378 we can avoid a possible initialization race (if the kernel thread runs
2379 before the callback has been set). */
2380 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2381 void (*callback_func)(void *),
2382 void *callback_data)
2384 LOCK_TAKE(hdw->big_lock); do {
2385 if (hdw->flag_disconnected) {
2386 /* Handle a race here: If we're already
2387 disconnected by this point, then give up. If we
2388 get past this then we'll remain connected for
2389 the duration of initialization since the entire
2390 initialization sequence is now protected by the
2394 hdw->state_data = callback_data;
2395 hdw->state_func = callback_func;
2396 pvr2_hdw_setup(hdw);
2397 } while (0); LOCK_GIVE(hdw->big_lock);
2398 return hdw->flag_init_ok;
2402 /* Create, set up, and return a structure for interacting with the
2403 underlying hardware. */
2404 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2405 const struct usb_device_id *devid)
2407 unsigned int idx,cnt1,cnt2,m;
2408 struct pvr2_hdw *hdw = NULL;
2410 struct pvr2_ctrl *cptr;
2411 struct usb_device *usb_dev;
2412 const struct pvr2_device_desc *hdw_desc;
2414 struct v4l2_queryctrl qctrl;
2415 struct pvr2_ctl_info *ciptr;
2417 usb_dev = interface_to_usbdev(intf);
2419 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
2421 if (hdw_desc == NULL) {
2422 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create:"
2423 " No device description pointer,"
2424 " unable to continue.");
2425 pvr2_trace(PVR2_TRACE_INIT, "If you have a new device type,"
2426 " please contact Mike Isely <isely@pobox.com>"
2427 " to get it included in the driver\n");
2431 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
2432 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2433 hdw,hdw_desc->description);
2434 if (!hdw) goto fail;
2436 init_timer(&hdw->quiescent_timer);
2437 hdw->quiescent_timer.data = (unsigned long)hdw;
2438 hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
2440 init_timer(&hdw->encoder_wait_timer);
2441 hdw->encoder_wait_timer.data = (unsigned long)hdw;
2442 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
2444 init_timer(&hdw->encoder_run_timer);
2445 hdw->encoder_run_timer.data = (unsigned long)hdw;
2446 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
2448 hdw->master_state = PVR2_STATE_DEAD;
2450 init_waitqueue_head(&hdw->state_wait_data);
2452 hdw->tuner_signal_stale = !0;
2453 cx2341x_fill_defaults(&hdw->enc_ctl_state);
2455 /* Calculate which inputs are OK */
2457 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2458 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2459 m |= 1 << PVR2_CVAL_INPUT_DTV;
2461 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2462 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2463 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2464 hdw->input_avail_mask = m;
2465 hdw->input_allowed_mask = hdw->input_avail_mask;
2467 /* If not a hybrid device, pathway_state never changes. So
2468 initialize it here to what it should forever be. */
2469 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2470 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2471 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2472 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2475 hdw->control_cnt = CTRLDEF_COUNT;
2476 hdw->control_cnt += MPEGDEF_COUNT;
2477 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
2479 if (!hdw->controls) goto fail;
2480 hdw->hdw_desc = hdw_desc;
2481 for (idx = 0; idx < hdw->control_cnt; idx++) {
2482 cptr = hdw->controls + idx;
2485 for (idx = 0; idx < 32; idx++) {
2486 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2488 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2489 cptr = hdw->controls + idx;
2490 cptr->info = control_defs+idx;
2493 /* Ensure that default input choice is a valid one. */
2494 m = hdw->input_avail_mask;
2495 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2496 if (!((1 << idx) & m)) continue;
2497 hdw->input_val = idx;
2501 /* Define and configure additional controls from cx2341x module. */
2502 hdw->mpeg_ctrl_info = kzalloc(
2503 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
2504 if (!hdw->mpeg_ctrl_info) goto fail;
2505 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2506 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2507 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2508 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2509 ciptr->name = mpeg_ids[idx].strid;
2510 ciptr->v4l_id = mpeg_ids[idx].id;
2511 ciptr->skip_init = !0;
2512 ciptr->get_value = ctrl_cx2341x_get;
2513 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2514 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2515 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2516 qctrl.id = ciptr->v4l_id;
2517 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2518 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2519 ciptr->set_value = ctrl_cx2341x_set;
2521 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2522 PVR2_CTLD_INFO_DESC_SIZE);
2523 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2524 ciptr->default_value = qctrl.default_value;
2525 switch (qctrl.type) {
2527 case V4L2_CTRL_TYPE_INTEGER:
2528 ciptr->type = pvr2_ctl_int;
2529 ciptr->def.type_int.min_value = qctrl.minimum;
2530 ciptr->def.type_int.max_value = qctrl.maximum;
2532 case V4L2_CTRL_TYPE_BOOLEAN:
2533 ciptr->type = pvr2_ctl_bool;
2535 case V4L2_CTRL_TYPE_MENU:
2536 ciptr->type = pvr2_ctl_enum;
2537 ciptr->def.type_enum.value_names =
2538 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2541 ciptr->def.type_enum.value_names[cnt1] != NULL;
2543 ciptr->def.type_enum.count = cnt1;
2549 // Initialize video standard enum dynamic control
2550 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2552 memcpy(&hdw->std_info_enum,cptr->info,
2553 sizeof(hdw->std_info_enum));
2554 cptr->info = &hdw->std_info_enum;
2557 // Initialize control data regarding video standard masks
2558 valid_std_mask = pvr2_std_get_usable();
2559 for (idx = 0; idx < 32; idx++) {
2560 if (!(valid_std_mask & (1 << idx))) continue;
2561 cnt1 = pvr2_std_id_to_str(
2562 hdw->std_mask_names[idx],
2563 sizeof(hdw->std_mask_names[idx])-1,
2565 hdw->std_mask_names[idx][cnt1] = 0;
2567 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2569 memcpy(&hdw->std_info_avail,cptr->info,
2570 sizeof(hdw->std_info_avail));
2571 cptr->info = &hdw->std_info_avail;
2572 hdw->std_info_avail.def.type_bitmask.bit_names =
2574 hdw->std_info_avail.def.type_bitmask.valid_bits =
2577 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2579 memcpy(&hdw->std_info_cur,cptr->info,
2580 sizeof(hdw->std_info_cur));
2581 cptr->info = &hdw->std_info_cur;
2582 hdw->std_info_cur.def.type_bitmask.bit_names =
2584 hdw->std_info_avail.def.type_bitmask.valid_bits =
2588 hdw->cropcap_stale = !0;
2589 hdw->eeprom_addr = -1;
2590 hdw->unit_number = -1;
2591 hdw->v4l_minor_number_video = -1;
2592 hdw->v4l_minor_number_vbi = -1;
2593 hdw->v4l_minor_number_radio = -1;
2594 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2595 if (!hdw->ctl_write_buffer) goto fail;
2596 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2597 if (!hdw->ctl_read_buffer) goto fail;
2598 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2599 if (!hdw->ctl_write_urb) goto fail;
2600 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2601 if (!hdw->ctl_read_urb) goto fail;
2603 if (v4l2_device_register(&usb_dev->dev, &hdw->v4l2_dev) != 0) {
2604 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2605 "Error registering with v4l core, giving up");
2608 mutex_lock(&pvr2_unit_mtx); do {
2609 for (idx = 0; idx < PVR_NUM; idx++) {
2610 if (unit_pointers[idx]) continue;
2611 hdw->unit_number = idx;
2612 unit_pointers[idx] = hdw;
2615 } while (0); mutex_unlock(&pvr2_unit_mtx);
2618 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2620 if (hdw->unit_number >= 0) {
2621 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2622 ('a' + hdw->unit_number));
2625 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2626 hdw->name[cnt1] = 0;
2628 hdw->workqueue = create_singlethread_workqueue(hdw->name);
2629 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2630 INIT_WORK(&hdw->worki2csync,pvr2_hdw_worker_i2c);
2632 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2633 hdw->unit_number,hdw->name);
2635 hdw->tuner_type = -1;
2638 hdw->usb_intf = intf;
2639 hdw->usb_dev = usb_dev;
2641 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2643 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2644 usb_set_interface(hdw->usb_dev,ifnum,0);
2646 mutex_init(&hdw->ctl_lock_mutex);
2647 mutex_init(&hdw->big_lock_mutex);
2652 del_timer_sync(&hdw->quiescent_timer);
2653 del_timer_sync(&hdw->encoder_run_timer);
2654 del_timer_sync(&hdw->encoder_wait_timer);
2655 if (hdw->workqueue) {
2656 flush_workqueue(hdw->workqueue);
2657 destroy_workqueue(hdw->workqueue);
2658 hdw->workqueue = NULL;
2660 usb_free_urb(hdw->ctl_read_urb);
2661 usb_free_urb(hdw->ctl_write_urb);
2662 kfree(hdw->ctl_read_buffer);
2663 kfree(hdw->ctl_write_buffer);
2664 kfree(hdw->controls);
2665 kfree(hdw->mpeg_ctrl_info);
2666 kfree(hdw->std_defs);
2667 kfree(hdw->std_enum_names);
2674 /* Remove _all_ associations between this driver and the underlying USB
2676 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2678 if (hdw->flag_disconnected) return;
2679 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2680 if (hdw->ctl_read_urb) {
2681 usb_kill_urb(hdw->ctl_read_urb);
2682 usb_free_urb(hdw->ctl_read_urb);
2683 hdw->ctl_read_urb = NULL;
2685 if (hdw->ctl_write_urb) {
2686 usb_kill_urb(hdw->ctl_write_urb);
2687 usb_free_urb(hdw->ctl_write_urb);
2688 hdw->ctl_write_urb = NULL;
2690 if (hdw->ctl_read_buffer) {
2691 kfree(hdw->ctl_read_buffer);
2692 hdw->ctl_read_buffer = NULL;
2694 if (hdw->ctl_write_buffer) {
2695 kfree(hdw->ctl_write_buffer);
2696 hdw->ctl_write_buffer = NULL;
2698 hdw->flag_disconnected = !0;
2699 /* If we don't do this, then there will be a dangling struct device
2700 reference to our disappearing device persisting inside the V4L
2702 if (hdw->v4l2_dev.dev) {
2703 dev_set_drvdata(hdw->v4l2_dev.dev, NULL);
2704 hdw->v4l2_dev.dev = NULL;
2706 hdw->usb_dev = NULL;
2707 hdw->usb_intf = NULL;
2708 pvr2_hdw_render_useless(hdw);
2712 /* Destroy hardware interaction structure */
2713 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2716 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2717 if (hdw->workqueue) {
2718 flush_workqueue(hdw->workqueue);
2719 destroy_workqueue(hdw->workqueue);
2720 hdw->workqueue = NULL;
2722 del_timer_sync(&hdw->quiescent_timer);
2723 del_timer_sync(&hdw->encoder_run_timer);
2724 del_timer_sync(&hdw->encoder_wait_timer);
2725 if (hdw->fw_buffer) {
2726 kfree(hdw->fw_buffer);
2727 hdw->fw_buffer = NULL;
2729 if (hdw->vid_stream) {
2730 pvr2_stream_destroy(hdw->vid_stream);
2731 hdw->vid_stream = NULL;
2733 if (hdw->decoder_ctrl) {
2734 hdw->decoder_ctrl->detach(hdw->decoder_ctrl->ctxt);
2736 pvr2_i2c_core_done(hdw);
2737 pvr2_i2c_track_done(hdw);
2738 v4l2_device_unregister(&hdw->v4l2_dev);
2739 pvr2_hdw_remove_usb_stuff(hdw);
2740 mutex_lock(&pvr2_unit_mtx); do {
2741 if ((hdw->unit_number >= 0) &&
2742 (hdw->unit_number < PVR_NUM) &&
2743 (unit_pointers[hdw->unit_number] == hdw)) {
2744 unit_pointers[hdw->unit_number] = NULL;
2746 } while (0); mutex_unlock(&pvr2_unit_mtx);
2747 kfree(hdw->controls);
2748 kfree(hdw->mpeg_ctrl_info);
2749 kfree(hdw->std_defs);
2750 kfree(hdw->std_enum_names);
2755 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2757 return (hdw && hdw->flag_ok);
2761 /* Called when hardware has been unplugged */
2762 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2764 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2765 LOCK_TAKE(hdw->big_lock);
2766 LOCK_TAKE(hdw->ctl_lock);
2767 pvr2_hdw_remove_usb_stuff(hdw);
2768 LOCK_GIVE(hdw->ctl_lock);
2769 LOCK_GIVE(hdw->big_lock);
2773 // Attempt to autoselect an appropriate value for std_enum_cur given
2774 // whatever is currently in std_mask_cur
2775 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2778 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2779 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2780 hdw->std_enum_cur = idx;
2784 hdw->std_enum_cur = 0;
2788 // Calculate correct set of enumerated standards based on currently known
2789 // set of available standards bits.
2790 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2792 struct v4l2_standard *newstd;
2793 unsigned int std_cnt;
2796 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2798 if (hdw->std_defs) {
2799 kfree(hdw->std_defs);
2800 hdw->std_defs = NULL;
2802 hdw->std_enum_cnt = 0;
2803 if (hdw->std_enum_names) {
2804 kfree(hdw->std_enum_names);
2805 hdw->std_enum_names = NULL;
2810 PVR2_TRACE_ERROR_LEGS,
2811 "WARNING: Failed to identify any viable standards");
2813 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2814 hdw->std_enum_names[0] = "none";
2815 for (idx = 0; idx < std_cnt; idx++) {
2816 hdw->std_enum_names[idx+1] =
2819 // Set up the dynamic control for this standard
2820 hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2821 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2822 hdw->std_defs = newstd;
2823 hdw->std_enum_cnt = std_cnt+1;
2824 hdw->std_enum_cur = 0;
2825 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2829 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2830 struct v4l2_standard *std,
2834 if (!idx) return ret;
2835 LOCK_TAKE(hdw->big_lock); do {
2836 if (idx >= hdw->std_enum_cnt) break;
2838 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2840 } while (0); LOCK_GIVE(hdw->big_lock);
2845 /* Get the number of defined controls */
2846 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2848 return hdw->control_cnt;
2852 /* Retrieve a control handle given its index (0..count-1) */
2853 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2856 if (idx >= hdw->control_cnt) return NULL;
2857 return hdw->controls + idx;
2861 /* Retrieve a control handle given its index (0..count-1) */
2862 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2863 unsigned int ctl_id)
2865 struct pvr2_ctrl *cptr;
2869 /* This could be made a lot more efficient, but for now... */
2870 for (idx = 0; idx < hdw->control_cnt; idx++) {
2871 cptr = hdw->controls + idx;
2872 i = cptr->info->internal_id;
2873 if (i && (i == ctl_id)) return cptr;
2879 /* Given a V4L ID, retrieve the control structure associated with it. */
2880 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2882 struct pvr2_ctrl *cptr;
2886 /* This could be made a lot more efficient, but for now... */
2887 for (idx = 0; idx < hdw->control_cnt; idx++) {
2888 cptr = hdw->controls + idx;
2889 i = cptr->info->v4l_id;
2890 if (i && (i == ctl_id)) return cptr;
2896 /* Given a V4L ID for its immediate predecessor, retrieve the control
2897 structure associated with it. */
2898 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2899 unsigned int ctl_id)
2901 struct pvr2_ctrl *cptr,*cp2;
2905 /* This could be made a lot more efficient, but for now... */
2907 for (idx = 0; idx < hdw->control_cnt; idx++) {
2908 cptr = hdw->controls + idx;
2909 i = cptr->info->v4l_id;
2911 if (i <= ctl_id) continue;
2912 if (cp2 && (cp2->info->v4l_id < i)) continue;
2920 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2923 case pvr2_ctl_int: return "integer";
2924 case pvr2_ctl_enum: return "enum";
2925 case pvr2_ctl_bool: return "boolean";
2926 case pvr2_ctl_bitmask: return "bitmask";
2932 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2933 const char *name, int val)
2935 struct v4l2_control ctrl;
2936 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2937 memset(&ctrl, 0, sizeof(ctrl));
2940 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, s_ctrl, &ctrl);
2943 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2944 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2945 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2948 /* Execute whatever commands are required to update the state of all the
2949 sub-devices so that they match our current control values. */
2950 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2952 struct v4l2_subdev *sd;
2954 pvr2_subdev_update_func fp;
2956 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2958 if (hdw->tuner_updated || hdw->force_dirty) {
2959 struct tuner_setup setup;
2960 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2962 if (((int)(hdw->tuner_type)) >= 0) {
2963 setup.addr = ADDR_UNSET;
2964 setup.type = hdw->tuner_type;
2965 setup.mode_mask = T_RADIO | T_ANALOG_TV;
2966 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2967 tuner, s_type_addr, &setup);
2971 if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
2972 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
2973 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2974 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2978 vs = hdw->std_mask_cur;
2979 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2982 hdw->tuner_signal_stale = !0;
2983 hdw->cropcap_stale = !0;
2986 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
2987 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
2988 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
2989 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
2990 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
2991 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
2992 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
2993 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
2994 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
2996 if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
2997 struct v4l2_tuner vt;
2998 memset(&vt, 0, sizeof(vt));
2999 vt.audmode = hdw->audiomode_val;
3000 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
3003 if (hdw->freqDirty || hdw->force_dirty) {
3005 struct v4l2_frequency freq;
3006 fv = pvr2_hdw_get_cur_freq(hdw);
3007 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
3008 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
3009 memset(&freq, 0, sizeof(freq));
3010 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
3011 /* ((fv * 1000) / 62500) */
3012 freq.frequency = (fv * 2) / 125;
3014 freq.frequency = fv / 62500;
3016 /* tuner-core currently doesn't seem to care about this, but
3017 let's set it anyway for completeness. */
3018 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3019 freq.type = V4L2_TUNER_RADIO;
3021 freq.type = V4L2_TUNER_ANALOG_TV;
3024 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
3025 s_frequency, &freq);
3028 if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
3029 struct v4l2_format fmt;
3030 memset(&fmt, 0, sizeof(fmt));
3031 fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
3032 fmt.fmt.pix.width = hdw->res_hor_val;
3033 fmt.fmt.pix.height = hdw->res_ver_val;
3034 pvr2_trace(PVR2_TRACE_CHIPS,"subdev v4l2 set_size(%dx%d)",
3035 fmt.fmt.pix.width, fmt.fmt.pix.height);
3036 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_fmt, &fmt);
3039 if (hdw->srate_dirty || hdw->force_dirty) {
3041 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
3043 switch (hdw->srate_val) {
3045 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
3048 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
3051 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
3055 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3056 audio, s_clock_freq, val);
3059 /* Unable to set crop parameters; there is apparently no equivalent
3060 for VIDIOC_S_CROP */
3062 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
3064 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
3065 fp = pvr2_module_update_functions[id];
3070 if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
3071 pvr2_hdw_status_poll(hdw);
3076 /* Figure out if we need to commit control changes. If so, mark internal
3077 state flags to indicate this fact and return true. Otherwise do nothing
3078 else and return false. */
3079 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
3082 struct pvr2_ctrl *cptr;
3084 int commit_flag = hdw->force_dirty;
3086 unsigned int bcnt,ccnt;
3088 for (idx = 0; idx < hdw->control_cnt; idx++) {
3089 cptr = hdw->controls + idx;
3090 if (!cptr->info->is_dirty) continue;
3091 if (!cptr->info->is_dirty(cptr)) continue;
3094 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
3095 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
3098 cptr->info->get_value(cptr,&value);
3099 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
3101 sizeof(buf)-bcnt,&ccnt);
3103 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
3104 get_ctrl_typename(cptr->info->type));
3105 pvr2_trace(PVR2_TRACE_CTL,
3106 "/*--TRACE_COMMIT--*/ %.*s",
3111 /* Nothing has changed */
3115 hdw->state_pipeline_config = 0;
3116 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3117 pvr2_hdw_state_sched(hdw);
3123 /* Perform all operations needed to commit all control changes. This must
3124 be performed in synchronization with the pipeline state and is thus
3125 expected to be called as part of the driver's worker thread. Return
3126 true if commit successful, otherwise return false to indicate that
3127 commit isn't possible at this time. */
3128 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3131 struct pvr2_ctrl *cptr;
3132 int disruptive_change;
3134 /* Handle some required side effects when the video standard is
3136 if (hdw->std_dirty) {
3139 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3146 /* Rewrite the vertical resolution to be appropriate to the
3147 video standard that has been selected. */
3148 if (nvres != hdw->res_ver_val) {
3149 hdw->res_ver_val = nvres;
3150 hdw->res_ver_dirty = !0;
3152 /* Rewrite the GOP size to be appropriate to the video
3153 standard that has been selected. */
3154 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3155 struct v4l2_ext_controls cs;
3156 struct v4l2_ext_control c1;
3157 memset(&cs, 0, sizeof(cs));
3158 memset(&c1, 0, sizeof(c1));
3161 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3162 c1.value = gop_size;
3163 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3164 VIDIOC_S_EXT_CTRLS);
3168 if (hdw->input_dirty && hdw->state_pathway_ok &&
3169 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3170 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3171 hdw->pathway_state)) {
3172 /* Change of mode being asked for... */
3173 hdw->state_pathway_ok = 0;
3174 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3176 if (!hdw->state_pathway_ok) {
3177 /* Can't commit anything until pathway is ok. */
3180 /* The broadcast decoder can only scale down, so if
3181 * res_*_dirty && crop window < output format ==> enlarge crop.
3183 * The mpeg encoder receives fields of res_hor_val dots and
3184 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3186 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3187 hdw->cropw_val = hdw->res_hor_val;
3188 hdw->cropw_dirty = !0;
3189 } else if (hdw->cropw_dirty) {
3190 hdw->res_hor_dirty = !0; /* must rescale */
3191 hdw->res_hor_val = min(720, hdw->cropw_val);
3193 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3194 hdw->croph_val = hdw->res_ver_val;
3195 hdw->croph_dirty = !0;
3196 } else if (hdw->croph_dirty) {
3197 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3198 hdw->res_ver_dirty = !0;
3199 hdw->res_ver_val = min(nvres, hdw->croph_val);
3202 /* If any of the below has changed, then we can't do the update
3203 while the pipeline is running. Pipeline must be paused first
3204 and decoder -> encoder connection be made quiescent before we
3208 hdw->enc_unsafe_stale ||
3210 hdw->res_ver_dirty ||
3211 hdw->res_hor_dirty ||
3215 (hdw->active_stream_type != hdw->desired_stream_type));
3216 if (disruptive_change && !hdw->state_pipeline_idle) {
3217 /* Pipeline is not idle; we can't proceed. Arrange to
3218 cause pipeline to stop so that we can try this again
3220 hdw->state_pipeline_pause = !0;
3224 if (hdw->srate_dirty) {
3225 /* Write new sample rate into control structure since
3226 * the master copy is stale. We must track srate
3227 * separate from the mpeg control structure because
3228 * other logic also uses this value. */
3229 struct v4l2_ext_controls cs;
3230 struct v4l2_ext_control c1;
3231 memset(&cs,0,sizeof(cs));
3232 memset(&c1,0,sizeof(c1));
3235 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3236 c1.value = hdw->srate_val;
3237 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3240 /* Scan i2c core at this point - before we clear all the dirty
3241 bits. Various parts of the i2c core will notice dirty bits as
3242 appropriate and arrange to broadcast or directly send updates to
3243 the client drivers in order to keep everything in sync */
3244 pvr2_i2c_core_check_stale(hdw);
3246 if (hdw->active_stream_type != hdw->desired_stream_type) {
3247 /* Handle any side effects of stream config here */
3248 hdw->active_stream_type = hdw->desired_stream_type;
3251 if (hdw->hdw_desc->signal_routing_scheme ==
3252 PVR2_ROUTING_SCHEME_GOTVIEW) {
3254 /* Handle GOTVIEW audio switching */
3255 pvr2_hdw_gpio_get_out(hdw,&b);
3256 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3258 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3261 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3265 /* Check and update state for all sub-devices. */
3266 pvr2_subdev_update(hdw);
3268 hdw->tuner_updated = 0;
3269 hdw->force_dirty = 0;
3270 for (idx = 0; idx < hdw->control_cnt; idx++) {
3271 cptr = hdw->controls + idx;
3272 if (!cptr->info->clear_dirty) continue;
3273 cptr->info->clear_dirty(cptr);
3276 /* Now execute i2c core update */
3277 pvr2_i2c_core_sync(hdw);
3279 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3280 hdw->state_encoder_run) {
3281 /* If encoder isn't running or it can't be touched, then
3282 this will get worked out later when we start the
3284 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3287 hdw->state_pipeline_config = !0;
3288 /* Hardware state may have changed in a way to cause the cropping
3289 capabilities to have changed. So mark it stale, which will
3290 cause a later re-fetch. */
3291 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3296 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3299 LOCK_TAKE(hdw->big_lock);
3300 fl = pvr2_hdw_commit_setup(hdw);
3301 LOCK_GIVE(hdw->big_lock);
3303 return pvr2_hdw_wait(hdw,0);
3307 static void pvr2_hdw_worker_i2c(struct work_struct *work)
3309 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,worki2csync);
3310 LOCK_TAKE(hdw->big_lock); do {
3311 pvr2_i2c_core_sync(hdw);
3312 } while (0); LOCK_GIVE(hdw->big_lock);
3316 static void pvr2_hdw_worker_poll(struct work_struct *work)
3319 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3320 LOCK_TAKE(hdw->big_lock); do {
3321 fl = pvr2_hdw_state_eval(hdw);
3322 } while (0); LOCK_GIVE(hdw->big_lock);
3323 if (fl && hdw->state_func) {
3324 hdw->state_func(hdw->state_data);
3329 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3331 return wait_event_interruptible(
3332 hdw->state_wait_data,
3333 (hdw->state_stale == 0) &&
3334 (!state || (hdw->master_state != state)));
3338 /* Return name for this driver instance */
3339 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3345 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3347 return hdw->hdw_desc->description;
3351 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3353 return hdw->hdw_desc->shortname;
3357 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3360 LOCK_TAKE(hdw->ctl_lock); do {
3361 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3362 result = pvr2_send_request(hdw,
3365 if (result < 0) break;
3366 result = (hdw->cmd_buffer[0] != 0);
3367 } while(0); LOCK_GIVE(hdw->ctl_lock);
3372 /* Execute poll of tuner status */
3373 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3375 LOCK_TAKE(hdw->big_lock); do {
3376 pvr2_hdw_status_poll(hdw);
3377 } while (0); LOCK_GIVE(hdw->big_lock);
3381 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3383 if (!hdw->cropcap_stale) {
3386 pvr2_hdw_status_poll(hdw);
3387 if (hdw->cropcap_stale) {
3394 /* Return information about cropping capabilities */
3395 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3398 LOCK_TAKE(hdw->big_lock);
3399 stat = pvr2_hdw_check_cropcap(hdw);
3401 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3403 LOCK_GIVE(hdw->big_lock);
3408 /* Return information about the tuner */
3409 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3411 LOCK_TAKE(hdw->big_lock); do {
3412 if (hdw->tuner_signal_stale) {
3413 pvr2_hdw_status_poll(hdw);
3415 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3416 } while (0); LOCK_GIVE(hdw->big_lock);
3421 /* Get handle to video output stream */
3422 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3424 return hp->vid_stream;
3428 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3430 int nr = pvr2_hdw_get_unit_number(hdw);
3431 LOCK_TAKE(hdw->big_lock); do {
3432 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
3433 hdw->log_requested = !0;
3434 pvr2_i2c_core_check_stale(hdw);
3435 pvr2_i2c_core_sync(hdw);
3436 hdw->log_requested = 0;
3437 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3438 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3439 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3440 pvr2_hdw_state_log_state(hdw);
3441 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
3442 } while (0); LOCK_GIVE(hdw->big_lock);
3446 /* Grab EEPROM contents, needed for direct method. */
3447 #define EEPROM_SIZE 8192
3448 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3449 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3451 struct i2c_msg msg[2];
3460 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3462 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3463 "Failed to allocate memory"
3464 " required to read eeprom");
3468 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3470 addr = hdw->eeprom_addr;
3471 /* Seems that if the high bit is set, then the *real* eeprom
3472 address is shifted right now bit position (noticed this in
3473 newer PVR USB2 hardware) */
3474 if (addr & 0x80) addr >>= 1;
3476 /* FX2 documentation states that a 16bit-addressed eeprom is
3477 expected if the I2C address is an odd number (yeah, this is
3478 strange but it's what they do) */
3479 mode16 = (addr & 1);
3480 eepromSize = (mode16 ? EEPROM_SIZE : 256);
3481 trace_eeprom("Examining %d byte eeprom at location 0x%x"
3482 " using %d bit addressing",eepromSize,addr,
3487 msg[0].len = mode16 ? 2 : 1;
3490 msg[1].flags = I2C_M_RD;
3492 /* We have to do the actual eeprom data fetch ourselves, because
3493 (1) we're only fetching part of the eeprom, and (2) if we were
3494 getting the whole thing our I2C driver can't grab it in one
3495 pass - which is what tveeprom is otherwise going to attempt */
3496 memset(eeprom,0,EEPROM_SIZE);
3497 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3499 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3500 offs = tcnt + (eepromSize - EEPROM_SIZE);
3502 iadd[0] = offs >> 8;
3508 msg[1].buf = eeprom+tcnt;
3509 if ((ret = i2c_transfer(&hdw->i2c_adap,
3510 msg,ARRAY_SIZE(msg))) != 2) {
3511 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3512 "eeprom fetch set offs err=%d",ret);
3521 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3528 LOCK_TAKE(hdw->big_lock); do {
3529 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3532 pvr2_trace(PVR2_TRACE_FIRMWARE,
3533 "Cleaning up after CPU firmware fetch");
3534 kfree(hdw->fw_buffer);
3535 hdw->fw_buffer = NULL;
3537 if (hdw->fw_cpu_flag) {
3538 /* Now release the CPU. It will disconnect
3539 and reconnect later. */
3540 pvr2_hdw_cpureset_assert(hdw,0);
3545 hdw->fw_cpu_flag = (prom_flag == 0);
3546 if (hdw->fw_cpu_flag) {
3547 pvr2_trace(PVR2_TRACE_FIRMWARE,
3548 "Preparing to suck out CPU firmware");
3549 hdw->fw_size = 0x2000;
3550 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3551 if (!hdw->fw_buffer) {
3556 /* We have to hold the CPU during firmware upload. */
3557 pvr2_hdw_cpureset_assert(hdw,1);
3559 /* download the firmware from address 0000-1fff in 2048
3560 (=0x800) bytes chunk. */
3562 pvr2_trace(PVR2_TRACE_FIRMWARE,
3563 "Grabbing CPU firmware");
3564 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3565 for(address = 0; address < hdw->fw_size;
3567 ret = usb_control_msg(hdw->usb_dev,pipe,
3570 hdw->fw_buffer+address,
3575 pvr2_trace(PVR2_TRACE_FIRMWARE,
3576 "Done grabbing CPU firmware");
3578 pvr2_trace(PVR2_TRACE_FIRMWARE,
3579 "Sucking down EEPROM contents");
3580 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3581 if (!hdw->fw_buffer) {
3582 pvr2_trace(PVR2_TRACE_FIRMWARE,
3583 "EEPROM content suck failed.");
3586 hdw->fw_size = EEPROM_SIZE;
3587 pvr2_trace(PVR2_TRACE_FIRMWARE,
3588 "Done sucking down EEPROM contents");
3591 } while (0); LOCK_GIVE(hdw->big_lock);
3595 /* Return true if we're in a mode for retrieval CPU firmware */
3596 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3598 return hdw->fw_buffer != NULL;
3602 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3603 char *buf,unsigned int cnt)
3606 LOCK_TAKE(hdw->big_lock); do {
3610 if (!hdw->fw_buffer) {
3615 if (offs >= hdw->fw_size) {
3616 pvr2_trace(PVR2_TRACE_FIRMWARE,
3617 "Read firmware data offs=%d EOF",
3623 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3625 memcpy(buf,hdw->fw_buffer+offs,cnt);
3627 pvr2_trace(PVR2_TRACE_FIRMWARE,
3628 "Read firmware data offs=%d cnt=%d",
3631 } while (0); LOCK_GIVE(hdw->big_lock);
3637 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3638 enum pvr2_v4l_type index)
3641 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3642 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3643 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3649 /* Store a v4l minor device number */
3650 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3651 enum pvr2_v4l_type index,int v)
3654 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
3655 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
3656 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
3662 static void pvr2_ctl_write_complete(struct urb *urb)
3664 struct pvr2_hdw *hdw = urb->context;
3665 hdw->ctl_write_pend_flag = 0;
3666 if (hdw->ctl_read_pend_flag) return;
3667 complete(&hdw->ctl_done);
3671 static void pvr2_ctl_read_complete(struct urb *urb)
3673 struct pvr2_hdw *hdw = urb->context;
3674 hdw->ctl_read_pend_flag = 0;
3675 if (hdw->ctl_write_pend_flag) return;
3676 complete(&hdw->ctl_done);
3680 static void pvr2_ctl_timeout(unsigned long data)
3682 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3683 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3684 hdw->ctl_timeout_flag = !0;
3685 if (hdw->ctl_write_pend_flag)
3686 usb_unlink_urb(hdw->ctl_write_urb);
3687 if (hdw->ctl_read_pend_flag)
3688 usb_unlink_urb(hdw->ctl_read_urb);
3693 /* Issue a command and get a response from the device. This extended
3694 version includes a probe flag (which if set means that device errors
3695 should not be logged or treated as fatal) and a timeout in jiffies.
3696 This can be used to non-lethally probe the health of endpoint 1. */
3697 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3698 unsigned int timeout,int probe_fl,
3699 void *write_data,unsigned int write_len,
3700 void *read_data,unsigned int read_len)
3704 struct timer_list timer;
3705 if (!hdw->ctl_lock_held) {
3706 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3707 "Attempted to execute control transfer"
3711 if (!hdw->flag_ok && !probe_fl) {
3712 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3713 "Attempted to execute control transfer"
3714 " when device not ok");
3717 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3719 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3720 "Attempted to execute control transfer"
3721 " when USB is disconnected");
3726 /* Ensure that we have sane parameters */
3727 if (!write_data) write_len = 0;
3728 if (!read_data) read_len = 0;
3729 if (write_len > PVR2_CTL_BUFFSIZE) {
3731 PVR2_TRACE_ERROR_LEGS,
3732 "Attempted to execute %d byte"
3733 " control-write transfer (limit=%d)",
3734 write_len,PVR2_CTL_BUFFSIZE);
3737 if (read_len > PVR2_CTL_BUFFSIZE) {
3739 PVR2_TRACE_ERROR_LEGS,
3740 "Attempted to execute %d byte"
3741 " control-read transfer (limit=%d)",
3742 write_len,PVR2_CTL_BUFFSIZE);
3745 if ((!write_len) && (!read_len)) {
3747 PVR2_TRACE_ERROR_LEGS,
3748 "Attempted to execute null control transfer?");
3753 hdw->cmd_debug_state = 1;
3755 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3757 hdw->cmd_debug_code = 0;
3759 hdw->cmd_debug_write_len = write_len;
3760 hdw->cmd_debug_read_len = read_len;
3762 /* Initialize common stuff */
3763 init_completion(&hdw->ctl_done);
3764 hdw->ctl_timeout_flag = 0;
3765 hdw->ctl_write_pend_flag = 0;
3766 hdw->ctl_read_pend_flag = 0;
3768 timer.expires = jiffies + timeout;
3769 timer.data = (unsigned long)hdw;
3770 timer.function = pvr2_ctl_timeout;
3773 hdw->cmd_debug_state = 2;
3774 /* Transfer write data to internal buffer */
3775 for (idx = 0; idx < write_len; idx++) {
3776 hdw->ctl_write_buffer[idx] =
3777 ((unsigned char *)write_data)[idx];
3779 /* Initiate a write request */
3780 usb_fill_bulk_urb(hdw->ctl_write_urb,
3782 usb_sndbulkpipe(hdw->usb_dev,
3783 PVR2_CTL_WRITE_ENDPOINT),
3784 hdw->ctl_write_buffer,
3786 pvr2_ctl_write_complete,
3788 hdw->ctl_write_urb->actual_length = 0;
3789 hdw->ctl_write_pend_flag = !0;
3790 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3792 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3793 "Failed to submit write-control"
3794 " URB status=%d",status);
3795 hdw->ctl_write_pend_flag = 0;
3801 hdw->cmd_debug_state = 3;
3802 memset(hdw->ctl_read_buffer,0x43,read_len);
3803 /* Initiate a read request */
3804 usb_fill_bulk_urb(hdw->ctl_read_urb,
3806 usb_rcvbulkpipe(hdw->usb_dev,
3807 PVR2_CTL_READ_ENDPOINT),
3808 hdw->ctl_read_buffer,
3810 pvr2_ctl_read_complete,
3812 hdw->ctl_read_urb->actual_length = 0;
3813 hdw->ctl_read_pend_flag = !0;
3814 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3816 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3817 "Failed to submit read-control"
3818 " URB status=%d",status);
3819 hdw->ctl_read_pend_flag = 0;
3827 /* Now wait for all I/O to complete */
3828 hdw->cmd_debug_state = 4;
3829 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3830 wait_for_completion(&hdw->ctl_done);
3832 hdw->cmd_debug_state = 5;
3835 del_timer_sync(&timer);
3837 hdw->cmd_debug_state = 6;
3840 if (hdw->ctl_timeout_flag) {
3841 status = -ETIMEDOUT;
3843 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3844 "Timed out control-write");
3850 /* Validate results of write request */
3851 if ((hdw->ctl_write_urb->status != 0) &&
3852 (hdw->ctl_write_urb->status != -ENOENT) &&
3853 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3854 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3855 /* USB subsystem is reporting some kind of failure
3857 status = hdw->ctl_write_urb->status;
3859 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3860 "control-write URB failure,"
3866 if (hdw->ctl_write_urb->actual_length < write_len) {
3867 /* Failed to write enough data */
3870 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3871 "control-write URB short,"
3872 " expected=%d got=%d",
3874 hdw->ctl_write_urb->actual_length);
3880 /* Validate results of read request */
3881 if ((hdw->ctl_read_urb->status != 0) &&
3882 (hdw->ctl_read_urb->status != -ENOENT) &&
3883 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3884 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3885 /* USB subsystem is reporting some kind of failure
3887 status = hdw->ctl_read_urb->status;
3889 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3890 "control-read URB failure,"
3896 if (hdw->ctl_read_urb->actual_length < read_len) {
3897 /* Failed to read enough data */
3900 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3901 "control-read URB short,"
3902 " expected=%d got=%d",
3904 hdw->ctl_read_urb->actual_length);
3908 /* Transfer retrieved data out from internal buffer */
3909 for (idx = 0; idx < read_len; idx++) {
3910 ((unsigned char *)read_data)[idx] =
3911 hdw->ctl_read_buffer[idx];
3917 hdw->cmd_debug_state = 0;
3918 if ((status < 0) && (!probe_fl)) {
3919 pvr2_hdw_render_useless(hdw);
3925 int pvr2_send_request(struct pvr2_hdw *hdw,
3926 void *write_data,unsigned int write_len,
3927 void *read_data,unsigned int read_len)
3929 return pvr2_send_request_ex(hdw,HZ*4,0,
3930 write_data,write_len,
3931 read_data,read_len);
3935 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3938 unsigned int cnt = 1;
3939 unsigned int args = 0;
3940 LOCK_TAKE(hdw->ctl_lock);
3941 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3942 args = (cmdcode >> 8) & 0xffu;
3943 args = (args > 2) ? 2 : args;
3946 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3948 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3951 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3953 unsigned int ccnt,bcnt;
3957 ccnt = scnprintf(tbuf+bcnt,
3959 "Sending FX2 command 0x%x",cmdcode);
3961 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3962 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3963 ccnt = scnprintf(tbuf+bcnt,
3966 pvr2_fx2cmd_desc[idx].desc);
3972 ccnt = scnprintf(tbuf+bcnt,
3974 " (%u",hdw->cmd_buffer[1]);
3977 ccnt = scnprintf(tbuf+bcnt,
3979 ",%u",hdw->cmd_buffer[2]);
3982 ccnt = scnprintf(tbuf+bcnt,
3987 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3989 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3990 LOCK_GIVE(hdw->ctl_lock);
3995 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3999 LOCK_TAKE(hdw->ctl_lock);
4001 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
4002 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
4003 hdw->cmd_buffer[5] = 0;
4004 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4005 hdw->cmd_buffer[7] = reg & 0xff;
4008 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
4010 LOCK_GIVE(hdw->ctl_lock);
4016 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
4020 LOCK_TAKE(hdw->ctl_lock);
4022 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
4023 hdw->cmd_buffer[1] = 0;
4024 hdw->cmd_buffer[2] = 0;
4025 hdw->cmd_buffer[3] = 0;
4026 hdw->cmd_buffer[4] = 0;
4027 hdw->cmd_buffer[5] = 0;
4028 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4029 hdw->cmd_buffer[7] = reg & 0xff;
4031 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
4032 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
4034 LOCK_GIVE(hdw->ctl_lock);
4040 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
4042 if (!hdw->flag_ok) return;
4043 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4044 "Device being rendered inoperable");
4045 if (hdw->vid_stream) {
4046 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
4049 trace_stbit("flag_ok",hdw->flag_ok);
4050 pvr2_hdw_state_sched(hdw);
4054 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
4057 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
4058 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
4060 ret = usb_reset_device(hdw->usb_dev);
4061 usb_unlock_device(hdw->usb_dev);
4063 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4064 "Failed to lock USB device ret=%d",ret);
4066 if (init_pause_msec) {
4067 pvr2_trace(PVR2_TRACE_INFO,
4068 "Waiting %u msec for hardware to settle",
4070 msleep(init_pause_msec);
4076 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
4082 if (!hdw->usb_dev) return;
4084 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
4086 da[0] = val ? 0x01 : 0x00;
4088 /* Write the CPUCS register on the 8051. The lsb of the register
4089 is the reset bit; a 1 asserts reset while a 0 clears it. */
4090 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
4091 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
4093 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4094 "cpureset_assert(%d) error=%d",val,ret);
4095 pvr2_hdw_render_useless(hdw);
4100 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
4102 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
4106 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
4108 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
4112 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
4114 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
4118 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
4120 pvr2_trace(PVR2_TRACE_INIT,
4121 "Requesting decoder reset");
4122 if (hdw->decoder_ctrl) {
4123 if (!hdw->decoder_ctrl->force_reset) {
4124 pvr2_trace(PVR2_TRACE_INIT,
4125 "Unable to reset decoder: not implemented");
4128 hdw->decoder_ctrl->force_reset(hdw->decoder_ctrl->ctxt);
4132 if (hdw->decoder_client_id) {
4133 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
4137 pvr2_trace(PVR2_TRACE_INIT,
4138 "Unable to reset decoder: nothing attached");
4143 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4146 return pvr2_issue_simple_cmd(hdw,
4147 FX2CMD_HCW_DEMOD_RESETIN |
4149 ((onoff ? 1 : 0) << 16));
4153 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4156 return pvr2_issue_simple_cmd(hdw,(onoff ?
4157 FX2CMD_ONAIR_DTV_POWER_ON :
4158 FX2CMD_ONAIR_DTV_POWER_OFF));
4162 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4165 return pvr2_issue_simple_cmd(hdw,(onoff ?
4166 FX2CMD_ONAIR_DTV_STREAMING_ON :
4167 FX2CMD_ONAIR_DTV_STREAMING_OFF));
4171 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4174 /* Compare digital/analog desired setting with current setting. If
4175 they don't match, fix it... */
4176 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4177 if (cmode == hdw->pathway_state) {
4178 /* They match; nothing to do */
4182 switch (hdw->hdw_desc->digital_control_scheme) {
4183 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4184 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4185 if (cmode == PVR2_PATHWAY_ANALOG) {
4186 /* If moving to analog mode, also force the decoder
4187 to reset. If no decoder is attached, then it's
4188 ok to ignore this because if/when the decoder
4189 attaches, it will reset itself at that time. */
4190 pvr2_hdw_cmd_decoder_reset(hdw);
4193 case PVR2_DIGITAL_SCHEME_ONAIR:
4194 /* Supposedly we should always have the power on whether in
4195 digital or analog mode. But for now do what appears to
4197 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4202 pvr2_hdw_untrip_unlocked(hdw);
4203 hdw->pathway_state = cmode;
4207 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4209 /* change some GPIO data
4211 * note: bit d7 of dir appears to control the LED,
4212 * so we shut it off here.
4216 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4218 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4220 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4224 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4226 static led_method_func led_methods[] = {
4227 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4232 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4234 unsigned int scheme_id;
4237 if ((!onoff) == (!hdw->led_on)) return;
4239 hdw->led_on = onoff != 0;
4241 scheme_id = hdw->hdw_desc->led_scheme;
4242 if (scheme_id < ARRAY_SIZE(led_methods)) {
4243 fp = led_methods[scheme_id];
4248 if (fp) (*fp)(hdw,onoff);
4252 /* Stop / start video stream transport */
4253 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4257 /* If we're in analog mode, then just issue the usual analog
4259 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4260 return pvr2_issue_simple_cmd(hdw,
4262 FX2CMD_STREAMING_ON :
4263 FX2CMD_STREAMING_OFF));
4264 /*Note: Not reached */
4267 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4268 /* Whoops, we don't know what mode we're in... */
4272 /* To get here we have to be in digital mode. The mechanism here
4273 is unfortunately different for different vendors. So we switch
4274 on the device's digital scheme attribute in order to figure out
4276 switch (hdw->hdw_desc->digital_control_scheme) {
4277 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4278 return pvr2_issue_simple_cmd(hdw,
4280 FX2CMD_HCW_DTV_STREAMING_ON :
4281 FX2CMD_HCW_DTV_STREAMING_OFF));
4282 case PVR2_DIGITAL_SCHEME_ONAIR:
4283 ret = pvr2_issue_simple_cmd(hdw,
4285 FX2CMD_STREAMING_ON :
4286 FX2CMD_STREAMING_OFF));
4287 if (ret) return ret;
4288 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4295 /* Evaluate whether or not state_pathway_ok can change */
4296 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4298 if (hdw->state_pathway_ok) {
4299 /* Nothing to do if pathway is already ok */
4302 if (!hdw->state_pipeline_idle) {
4303 /* Not allowed to change anything if pipeline is not idle */
4306 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4307 hdw->state_pathway_ok = !0;
4308 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4313 /* Evaluate whether or not state_encoder_ok can change */
4314 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4316 if (hdw->state_encoder_ok) return 0;
4317 if (hdw->flag_tripped) return 0;
4318 if (hdw->state_encoder_run) return 0;
4319 if (hdw->state_encoder_config) return 0;
4320 if (hdw->state_decoder_run) return 0;
4321 if (hdw->state_usbstream_run) return 0;
4322 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4323 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4324 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4328 if (pvr2_upload_firmware2(hdw) < 0) {
4329 hdw->flag_tripped = !0;
4330 trace_stbit("flag_tripped",hdw->flag_tripped);
4333 hdw->state_encoder_ok = !0;
4334 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4339 /* Evaluate whether or not state_encoder_config can change */
4340 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4342 if (hdw->state_encoder_config) {
4343 if (hdw->state_encoder_ok) {
4344 if (hdw->state_pipeline_req &&
4345 !hdw->state_pipeline_pause) return 0;
4347 hdw->state_encoder_config = 0;
4348 hdw->state_encoder_waitok = 0;
4349 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4350 /* paranoia - solve race if timer just completed */
4351 del_timer_sync(&hdw->encoder_wait_timer);
4353 if (!hdw->state_pathway_ok ||
4354 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4355 !hdw->state_encoder_ok ||
4356 !hdw->state_pipeline_idle ||
4357 hdw->state_pipeline_pause ||
4358 !hdw->state_pipeline_req ||
4359 !hdw->state_pipeline_config) {
4360 /* We must reset the enforced wait interval if
4361 anything has happened that might have disturbed
4362 the encoder. This should be a rare case. */
4363 if (timer_pending(&hdw->encoder_wait_timer)) {
4364 del_timer_sync(&hdw->encoder_wait_timer);
4366 if (hdw->state_encoder_waitok) {
4367 /* Must clear the state - therefore we did
4368 something to a state bit and must also
4370 hdw->state_encoder_waitok = 0;
4371 trace_stbit("state_encoder_waitok",
4372 hdw->state_encoder_waitok);
4377 if (!hdw->state_encoder_waitok) {
4378 if (!timer_pending(&hdw->encoder_wait_timer)) {
4379 /* waitok flag wasn't set and timer isn't
4380 running. Check flag once more to avoid
4381 a race then start the timer. This is
4382 the point when we measure out a minimal
4383 quiet interval before doing something to
4385 if (!hdw->state_encoder_waitok) {
4386 hdw->encoder_wait_timer.expires =
4388 (HZ * TIME_MSEC_ENCODER_WAIT
4390 add_timer(&hdw->encoder_wait_timer);
4393 /* We can't continue until we know we have been
4394 quiet for the interval measured by this
4398 pvr2_encoder_configure(hdw);
4399 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4401 trace_stbit("state_encoder_config",hdw->state_encoder_config);
4406 /* Return true if the encoder should not be running. */
4407 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4409 if (!hdw->state_encoder_ok) {
4410 /* Encoder isn't healthy at the moment, so stop it. */
4413 if (!hdw->state_pathway_ok) {
4414 /* Mode is not understood at the moment (i.e. it wants to
4415 change), so encoder must be stopped. */
4419 switch (hdw->pathway_state) {
4420 case PVR2_PATHWAY_ANALOG:
4421 if (!hdw->state_decoder_run) {
4422 /* We're in analog mode and the decoder is not
4423 running; thus the encoder should be stopped as
4428 case PVR2_PATHWAY_DIGITAL:
4429 if (hdw->state_encoder_runok) {
4430 /* This is a funny case. We're in digital mode so
4431 really the encoder should be stopped. However
4432 if it really is running, only kill it after
4433 runok has been set. This gives a chance for the
4434 onair quirk to function (encoder must run
4435 briefly first, at least once, before onair
4436 digital streaming can work). */
4441 /* Unknown mode; so encoder should be stopped. */
4445 /* If we get here, we haven't found a reason to stop the
4451 /* Return true if the encoder should be running. */
4452 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4454 if (!hdw->state_encoder_ok) {
4455 /* Don't run the encoder if it isn't healthy... */
4458 if (!hdw->state_pathway_ok) {
4459 /* Don't run the encoder if we don't (yet) know what mode
4460 we need to be in... */
4464 switch (hdw->pathway_state) {
4465 case PVR2_PATHWAY_ANALOG:
4466 if (hdw->state_decoder_run) {
4467 /* In analog mode, if the decoder is running, then
4472 case PVR2_PATHWAY_DIGITAL:
4473 if ((hdw->hdw_desc->digital_control_scheme ==
4474 PVR2_DIGITAL_SCHEME_ONAIR) &&
4475 !hdw->state_encoder_runok) {
4476 /* This is a quirk. OnAir hardware won't stream
4477 digital until the encoder has been run at least
4478 once, for a minimal period of time (empiricially
4479 measured to be 1/4 second). So if we're on
4480 OnAir hardware and the encoder has never been
4481 run at all, then start the encoder. Normal
4482 state machine logic in the driver will
4483 automatically handle the remaining bits. */
4488 /* For completeness (unknown mode; encoder won't run ever) */
4491 /* If we get here, then we haven't found any reason to run the
4492 encoder, so don't run it. */
4497 /* Evaluate whether or not state_encoder_run can change */
4498 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4500 if (hdw->state_encoder_run) {
4501 if (!state_check_disable_encoder_run(hdw)) return 0;
4502 if (hdw->state_encoder_ok) {
4503 del_timer_sync(&hdw->encoder_run_timer);
4504 if (pvr2_encoder_stop(hdw) < 0) return !0;
4506 hdw->state_encoder_run = 0;
4508 if (!state_check_enable_encoder_run(hdw)) return 0;
4509 if (pvr2_encoder_start(hdw) < 0) return !0;
4510 hdw->state_encoder_run = !0;
4511 if (!hdw->state_encoder_runok) {
4512 hdw->encoder_run_timer.expires =
4513 jiffies + (HZ * TIME_MSEC_ENCODER_OK / 1000);
4514 add_timer(&hdw->encoder_run_timer);
4517 trace_stbit("state_encoder_run",hdw->state_encoder_run);
4522 /* Timeout function for quiescent timer. */
4523 static void pvr2_hdw_quiescent_timeout(unsigned long data)
4525 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4526 hdw->state_decoder_quiescent = !0;
4527 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4528 hdw->state_stale = !0;
4529 queue_work(hdw->workqueue,&hdw->workpoll);
4533 /* Timeout function for encoder wait timer. */
4534 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
4536 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4537 hdw->state_encoder_waitok = !0;
4538 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4539 hdw->state_stale = !0;
4540 queue_work(hdw->workqueue,&hdw->workpoll);
4544 /* Timeout function for encoder run timer. */
4545 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
4547 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4548 if (!hdw->state_encoder_runok) {
4549 hdw->state_encoder_runok = !0;
4550 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4551 hdw->state_stale = !0;
4552 queue_work(hdw->workqueue,&hdw->workpoll);
4557 /* Evaluate whether or not state_decoder_run can change */
4558 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4560 if (hdw->state_decoder_run) {
4561 if (hdw->state_encoder_ok) {
4562 if (hdw->state_pipeline_req &&
4563 !hdw->state_pipeline_pause &&
4564 hdw->state_pathway_ok) return 0;
4566 if (!hdw->flag_decoder_missed) {
4567 pvr2_decoder_enable(hdw,0);
4569 hdw->state_decoder_quiescent = 0;
4570 hdw->state_decoder_run = 0;
4571 /* paranoia - solve race if timer just completed */
4572 del_timer_sync(&hdw->quiescent_timer);
4574 if (!hdw->state_decoder_quiescent) {
4575 if (!timer_pending(&hdw->quiescent_timer)) {
4576 /* We don't do something about the
4577 quiescent timer until right here because
4578 we also want to catch cases where the
4579 decoder was already not running (like
4580 after initialization) as opposed to
4581 knowing that we had just stopped it.
4582 The second flag check is here to cover a
4583 race - the timer could have run and set
4584 this flag just after the previous check
4585 but before we did the pending check. */
4586 if (!hdw->state_decoder_quiescent) {
4587 hdw->quiescent_timer.expires =
4589 (HZ * TIME_MSEC_DECODER_WAIT
4591 add_timer(&hdw->quiescent_timer);
4594 /* Don't allow decoder to start again until it has
4595 been quiesced first. This little detail should
4596 hopefully further stabilize the encoder. */
4599 if (!hdw->state_pathway_ok ||
4600 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4601 !hdw->state_pipeline_req ||
4602 hdw->state_pipeline_pause ||
4603 !hdw->state_pipeline_config ||
4604 !hdw->state_encoder_config ||
4605 !hdw->state_encoder_ok) return 0;
4606 del_timer_sync(&hdw->quiescent_timer);
4607 if (hdw->flag_decoder_missed) return 0;
4608 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4609 hdw->state_decoder_quiescent = 0;
4610 hdw->state_decoder_run = !0;
4612 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4613 trace_stbit("state_decoder_run",hdw->state_decoder_run);
4618 /* Evaluate whether or not state_usbstream_run can change */
4619 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4621 if (hdw->state_usbstream_run) {
4623 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4624 fl = (hdw->state_encoder_ok &&
4625 hdw->state_encoder_run);
4626 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4627 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4628 fl = hdw->state_encoder_ok;
4631 hdw->state_pipeline_req &&
4632 !hdw->state_pipeline_pause &&
4633 hdw->state_pathway_ok) {
4636 pvr2_hdw_cmd_usbstream(hdw,0);
4637 hdw->state_usbstream_run = 0;
4639 if (!hdw->state_pipeline_req ||
4640 hdw->state_pipeline_pause ||
4641 !hdw->state_pathway_ok) return 0;
4642 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4643 if (!hdw->state_encoder_ok ||
4644 !hdw->state_encoder_run) return 0;
4645 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4646 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4647 if (!hdw->state_encoder_ok) return 0;
4648 if (hdw->state_encoder_run) return 0;
4649 if (hdw->hdw_desc->digital_control_scheme ==
4650 PVR2_DIGITAL_SCHEME_ONAIR) {
4651 /* OnAir digital receivers won't stream
4652 unless the analog encoder has run first.
4653 Why? I have no idea. But don't even
4654 try until we know the analog side is
4655 known to have run. */
4656 if (!hdw->state_encoder_runok) return 0;
4659 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4660 hdw->state_usbstream_run = !0;
4662 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4667 /* Attempt to configure pipeline, if needed */
4668 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4670 if (hdw->state_pipeline_config ||
4671 hdw->state_pipeline_pause) return 0;
4672 pvr2_hdw_commit_execute(hdw);
4677 /* Update pipeline idle and pipeline pause tracking states based on other
4678 inputs. This must be called whenever the other relevant inputs have
4680 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4684 /* Update pipeline state */
4685 st = !(hdw->state_encoder_run ||
4686 hdw->state_decoder_run ||
4687 hdw->state_usbstream_run ||
4688 (!hdw->state_decoder_quiescent));
4689 if (!st != !hdw->state_pipeline_idle) {
4690 hdw->state_pipeline_idle = st;
4693 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4694 hdw->state_pipeline_pause = 0;
4701 typedef int (*state_eval_func)(struct pvr2_hdw *);
4703 /* Set of functions to be run to evaluate various states in the driver. */
4704 static const state_eval_func eval_funcs[] = {
4705 state_eval_pathway_ok,
4706 state_eval_pipeline_config,
4707 state_eval_encoder_ok,
4708 state_eval_encoder_config,
4709 state_eval_decoder_run,
4710 state_eval_encoder_run,
4711 state_eval_usbstream_run,
4715 /* Process various states and return true if we did anything interesting. */
4716 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4719 int state_updated = 0;
4722 if (!hdw->state_stale) return 0;
4723 if ((hdw->fw1_state != FW1_STATE_OK) ||
4725 hdw->state_stale = 0;
4728 /* This loop is the heart of the entire driver. It keeps trying to
4729 evaluate various bits of driver state until nothing changes for
4730 one full iteration. Each "bit of state" tracks some global
4731 aspect of the driver, e.g. whether decoder should run, if
4732 pipeline is configured, usb streaming is on, etc. We separately
4733 evaluate each of those questions based on other driver state to
4734 arrive at the correct running configuration. */
4737 state_update_pipeline_state(hdw);
4738 /* Iterate over each bit of state */
4739 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4740 if ((*eval_funcs[i])(hdw)) {
4743 state_update_pipeline_state(hdw);
4746 } while (check_flag && hdw->flag_ok);
4747 hdw->state_stale = 0;
4748 trace_stbit("state_stale",hdw->state_stale);
4749 return state_updated;
4753 static unsigned int print_input_mask(unsigned int msk,
4754 char *buf,unsigned int acnt)
4756 unsigned int idx,ccnt;
4757 unsigned int tcnt = 0;
4758 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4759 if (!((1 << idx) & msk)) continue;
4760 ccnt = scnprintf(buf+tcnt,
4764 control_values_input[idx]);
4771 static const char *pvr2_pathway_state_name(int id)
4774 case PVR2_PATHWAY_ANALOG: return "analog";
4775 case PVR2_PATHWAY_DIGITAL: return "digital";
4776 default: return "unknown";
4781 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4782 char *buf,unsigned int acnt)
4788 "driver:%s%s%s%s%s <mode=%s>",
4789 (hdw->flag_ok ? " <ok>" : " <fail>"),
4790 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4791 (hdw->flag_disconnected ? " <disconnected>" :
4793 (hdw->flag_tripped ? " <tripped>" : ""),
4794 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4795 pvr2_pathway_state_name(hdw->pathway_state));
4800 "pipeline:%s%s%s%s",
4801 (hdw->state_pipeline_idle ? " <idle>" : ""),
4802 (hdw->state_pipeline_config ?
4803 " <configok>" : " <stale>"),
4804 (hdw->state_pipeline_req ? " <req>" : ""),
4805 (hdw->state_pipeline_pause ? " <pause>" : ""));
4809 "worker:%s%s%s%s%s%s%s",
4810 (hdw->state_decoder_run ?
4812 (hdw->state_decoder_quiescent ?
4813 "" : " <decode:stop>")),
4814 (hdw->state_decoder_quiescent ?
4815 " <decode:quiescent>" : ""),
4816 (hdw->state_encoder_ok ?
4817 "" : " <encode:init>"),
4818 (hdw->state_encoder_run ?
4819 (hdw->state_encoder_runok ?
4821 " <encode:firstrun>") :
4822 (hdw->state_encoder_runok ?
4824 " <encode:virgin>")),
4825 (hdw->state_encoder_config ?
4826 " <encode:configok>" :
4827 (hdw->state_encoder_waitok ?
4828 "" : " <encode:waitok>")),
4829 (hdw->state_usbstream_run ?
4830 " <usb:run>" : " <usb:stop>"),
4831 (hdw->state_pathway_ok ?
4832 " <pathway:ok>" : ""));
4837 pvr2_get_state_name(hdw->master_state));
4839 unsigned int tcnt = 0;
4842 ccnt = scnprintf(buf,
4844 "Hardware supported inputs: ");
4846 tcnt += print_input_mask(hdw->input_avail_mask,
4849 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4850 ccnt = scnprintf(buf+tcnt,
4852 "; allowed inputs: ");
4854 tcnt += print_input_mask(hdw->input_allowed_mask,
4861 struct pvr2_stream_stats stats;
4862 if (!hdw->vid_stream) break;
4863 pvr2_stream_get_stats(hdw->vid_stream,
4869 " URBs: queued=%u idle=%u ready=%u"
4870 " processed=%u failed=%u",
4871 stats.bytes_processed,
4872 stats.buffers_in_queue,
4873 stats.buffers_in_idle,
4874 stats.buffers_in_ready,
4875 stats.buffers_processed,
4876 stats.buffers_failed);
4879 struct v4l2_subdev *sd;
4880 unsigned int tcnt = 0;
4884 ccnt = scnprintf(buf,
4886 "Associated v4l2_subdev drivers:");
4888 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4891 if (id < ARRAY_SIZE(module_names)) {
4892 p = module_names[id];
4895 ccnt = scnprintf(buf + tcnt,
4899 ccnt = scnprintf(buf + tcnt,
4901 " (unknown id=%u)", id);
4913 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4914 char *buf,unsigned int acnt)
4916 unsigned int bcnt,ccnt,idx;
4918 LOCK_TAKE(hdw->big_lock);
4919 for (idx = 0; ; idx++) {
4920 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4922 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4924 buf[0] = '\n'; ccnt = 1;
4925 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4927 LOCK_GIVE(hdw->big_lock);
4932 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4935 unsigned int idx,ccnt;
4937 for (idx = 0; ; idx++) {
4938 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4940 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4945 /* Evaluate and update the driver's current state, taking various actions
4946 as appropriate for the update. */
4947 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4950 int state_updated = 0;
4951 int callback_flag = 0;
4954 pvr2_trace(PVR2_TRACE_STBITS,
4955 "Drive state check START");
4956 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4957 pvr2_hdw_state_log_state(hdw);
4960 /* Process all state and get back over disposition */
4961 state_updated = pvr2_hdw_state_update(hdw);
4963 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4965 /* Update master state based upon all other states. */
4966 if (!hdw->flag_ok) {
4967 st = PVR2_STATE_DEAD;
4968 } else if (hdw->fw1_state != FW1_STATE_OK) {
4969 st = PVR2_STATE_COLD;
4970 } else if ((analog_mode ||
4971 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4972 !hdw->state_encoder_ok) {
4973 st = PVR2_STATE_WARM;
4974 } else if (hdw->flag_tripped ||
4975 (analog_mode && hdw->flag_decoder_missed)) {
4976 st = PVR2_STATE_ERROR;
4977 } else if (hdw->state_usbstream_run &&
4979 (hdw->state_encoder_run && hdw->state_decoder_run))) {
4980 st = PVR2_STATE_RUN;
4982 st = PVR2_STATE_READY;
4984 if (hdw->master_state != st) {
4985 pvr2_trace(PVR2_TRACE_STATE,
4986 "Device state change from %s to %s",
4987 pvr2_get_state_name(hdw->master_state),
4988 pvr2_get_state_name(st));
4989 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
4990 hdw->master_state = st;
4994 if (state_updated) {
4995 /* Trigger anyone waiting on any state changes here. */
4996 wake_up(&hdw->state_wait_data);
4999 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
5000 pvr2_hdw_state_log_state(hdw);
5002 pvr2_trace(PVR2_TRACE_STBITS,
5003 "Drive state check DONE callback=%d",callback_flag);
5005 return callback_flag;
5009 /* Cause kernel thread to check / update driver state */
5010 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
5012 if (hdw->state_stale) return;
5013 hdw->state_stale = !0;
5014 trace_stbit("state_stale",hdw->state_stale);
5015 queue_work(hdw->workqueue,&hdw->workpoll);
5019 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
5021 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
5025 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
5027 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
5031 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
5033 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
5037 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
5042 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
5043 if (ret) return ret;
5044 nval = (cval & ~msk) | (val & msk);
5045 pvr2_trace(PVR2_TRACE_GPIO,
5046 "GPIO direction changing 0x%x:0x%x"
5047 " from 0x%x to 0x%x",
5051 pvr2_trace(PVR2_TRACE_GPIO,
5052 "GPIO direction changing to 0x%x",nval);
5054 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
5058 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
5063 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
5064 if (ret) return ret;
5065 nval = (cval & ~msk) | (val & msk);
5066 pvr2_trace(PVR2_TRACE_GPIO,
5067 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5071 pvr2_trace(PVR2_TRACE_GPIO,
5072 "GPIO output changing to 0x%x",nval);
5074 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
5078 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
5080 struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
5081 memset(vtp, 0, sizeof(*vtp));
5082 hdw->tuner_signal_stale = 0;
5083 pvr2_i2c_core_status_poll(hdw);
5084 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5085 using v4l2-subdev - therefore we can't support that AT ALL right
5086 now. (Of course, no sub-drivers seem to implement it either.
5087 But now it's a a chicken and egg problem...) */
5088 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner,
5089 &hdw->tuner_signal_info);
5090 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll"
5091 " type=%u strength=%u audio=0x%x cap=0x%x"
5094 vtp->signal, vtp->rxsubchans, vtp->capability,
5095 vtp->rangelow, vtp->rangehigh);
5097 /* We have to do this to avoid getting into constant polling if
5098 there's nobody to answer a poll of cropcap info. */
5099 hdw->cropcap_stale = 0;
5103 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5105 return hdw->input_avail_mask;
5109 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5111 return hdw->input_allowed_mask;
5115 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5117 if (hdw->input_val != v) {
5119 hdw->input_dirty = !0;
5122 /* Handle side effects - if we switch to a mode that needs the RF
5123 tuner, then select the right frequency choice as well and mark
5125 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5126 hdw->freqSelector = 0;
5127 hdw->freqDirty = !0;
5128 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5129 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5130 hdw->freqSelector = 1;
5131 hdw->freqDirty = !0;
5137 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5138 unsigned int change_mask,
5139 unsigned int change_val)
5142 unsigned int nv,m,idx;
5143 LOCK_TAKE(hdw->big_lock);
5145 nv = hdw->input_allowed_mask & ~change_mask;
5146 nv |= (change_val & change_mask);
5147 nv &= hdw->input_avail_mask;
5149 /* No legal modes left; return error instead. */
5153 hdw->input_allowed_mask = nv;
5154 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5155 /* Current mode is still in the allowed mask, so
5159 /* Select and switch to a mode that is still in the allowed
5161 if (!hdw->input_allowed_mask) {
5162 /* Nothing legal; give up */
5165 m = hdw->input_allowed_mask;
5166 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5167 if (!((1 << idx) & m)) continue;
5168 pvr2_hdw_set_input(hdw,idx);
5172 LOCK_GIVE(hdw->big_lock);
5177 /* Find I2C address of eeprom */
5178 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5181 LOCK_TAKE(hdw->ctl_lock); do {
5182 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5183 result = pvr2_send_request(hdw,
5186 if (result < 0) break;
5187 result = hdw->cmd_buffer[0];
5188 } while(0); LOCK_GIVE(hdw->ctl_lock);
5193 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
5194 struct v4l2_dbg_match *match, u64 reg_id,
5195 int setFl, u64 *val_ptr)
5197 #ifdef CONFIG_VIDEO_ADV_DEBUG
5198 struct pvr2_i2c_client *cp;
5199 struct v4l2_dbg_register req;
5203 if (!capable(CAP_SYS_ADMIN)) return -EPERM;
5207 if (setFl) req.val = *val_ptr;
5208 /* It would be nice to know if a sub-device answered the request */
5209 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, g_register, &req);
5210 if (!setFl) *val_ptr = req.val;
5211 if (!okFl) mutex_lock(&hdw->i2c_list_lock); do {
5212 list_for_each_entry(cp, &hdw->i2c_clients, list) {
5213 if (!v4l2_chip_match_i2c_client(
5218 stat = pvr2_i2c_client_cmd(
5219 cp,(setFl ? VIDIOC_DBG_S_REGISTER :
5220 VIDIOC_DBG_G_REGISTER),&req);
5221 if (!setFl) *val_ptr = req.val;
5225 } while (0); mutex_unlock(&hdw->i2c_list_lock);
5237 Stuff for Emacs to see, in order to encourage consistent editing style:
5238 *** Local Variables: ***
5240 *** fill-column: 75 ***
5241 *** tab-width: 8 ***
5242 *** c-basic-offset: 8 ***