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_CS53132A] = "cs53132a",
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_WM8775] = "\x1b",
139 /* Define the list of additional controls we'll dynamically construct based
140 on query of the cx2341x module. */
141 struct pvr2_mpeg_ids {
145 static const struct pvr2_mpeg_ids mpeg_ids[] = {
147 .strid = "audio_layer",
148 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
150 .strid = "audio_bitrate",
151 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
153 /* Already using audio_mode elsewhere :-( */
154 .strid = "mpeg_audio_mode",
155 .id = V4L2_CID_MPEG_AUDIO_MODE,
157 .strid = "mpeg_audio_mode_extension",
158 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
160 .strid = "audio_emphasis",
161 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
163 .strid = "audio_crc",
164 .id = V4L2_CID_MPEG_AUDIO_CRC,
166 .strid = "video_aspect",
167 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
169 .strid = "video_b_frames",
170 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
172 .strid = "video_gop_size",
173 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
175 .strid = "video_gop_closure",
176 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
178 .strid = "video_bitrate_mode",
179 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
181 .strid = "video_bitrate",
182 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
184 .strid = "video_bitrate_peak",
185 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
187 .strid = "video_temporal_decimation",
188 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
190 .strid = "stream_type",
191 .id = V4L2_CID_MPEG_STREAM_TYPE,
193 .strid = "video_spatial_filter_mode",
194 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
196 .strid = "video_spatial_filter",
197 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
199 .strid = "video_luma_spatial_filter_type",
200 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
202 .strid = "video_chroma_spatial_filter_type",
203 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
205 .strid = "video_temporal_filter_mode",
206 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
208 .strid = "video_temporal_filter",
209 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
211 .strid = "video_median_filter_type",
212 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
214 .strid = "video_luma_median_filter_top",
215 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
217 .strid = "video_luma_median_filter_bottom",
218 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
220 .strid = "video_chroma_median_filter_top",
221 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
223 .strid = "video_chroma_median_filter_bottom",
224 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
227 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
230 static const char *control_values_srate[] = {
231 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
232 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
233 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
238 static const char *control_values_input[] = {
239 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
240 [PVR2_CVAL_INPUT_DTV] = "dtv",
241 [PVR2_CVAL_INPUT_RADIO] = "radio",
242 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
243 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
247 static const char *control_values_audiomode[] = {
248 [V4L2_TUNER_MODE_MONO] = "Mono",
249 [V4L2_TUNER_MODE_STEREO] = "Stereo",
250 [V4L2_TUNER_MODE_LANG1] = "Lang1",
251 [V4L2_TUNER_MODE_LANG2] = "Lang2",
252 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
256 static const char *control_values_hsm[] = {
257 [PVR2_CVAL_HSM_FAIL] = "Fail",
258 [PVR2_CVAL_HSM_HIGH] = "High",
259 [PVR2_CVAL_HSM_FULL] = "Full",
263 static const char *pvr2_state_names[] = {
264 [PVR2_STATE_NONE] = "none",
265 [PVR2_STATE_DEAD] = "dead",
266 [PVR2_STATE_COLD] = "cold",
267 [PVR2_STATE_WARM] = "warm",
268 [PVR2_STATE_ERROR] = "error",
269 [PVR2_STATE_READY] = "ready",
270 [PVR2_STATE_RUN] = "run",
274 struct pvr2_fx2cmd_descdef {
279 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
280 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
281 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
282 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
283 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
284 {FX2CMD_REG_WRITE, "write encoder register"},
285 {FX2CMD_REG_READ, "read encoder register"},
286 {FX2CMD_MEMSEL, "encoder memsel"},
287 {FX2CMD_I2C_WRITE, "i2c write"},
288 {FX2CMD_I2C_READ, "i2c read"},
289 {FX2CMD_GET_USB_SPEED, "get USB speed"},
290 {FX2CMD_STREAMING_ON, "stream on"},
291 {FX2CMD_STREAMING_OFF, "stream off"},
292 {FX2CMD_FWPOST1, "fwpost1"},
293 {FX2CMD_POWER_OFF, "power off"},
294 {FX2CMD_POWER_ON, "power on"},
295 {FX2CMD_DEEP_RESET, "deep reset"},
296 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
297 {FX2CMD_GET_IR_CODE, "get IR code"},
298 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
299 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
300 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
301 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
302 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
303 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
304 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
308 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
309 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
310 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
311 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
312 static void pvr2_hdw_worker_i2c(struct work_struct *work);
313 static void pvr2_hdw_worker_poll(struct work_struct *work);
314 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
315 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
316 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
317 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
318 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
319 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
320 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
321 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
322 static void pvr2_hdw_quiescent_timeout(unsigned long);
323 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
324 static void pvr2_hdw_encoder_run_timeout(unsigned long);
325 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
326 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
327 unsigned int timeout,int probe_fl,
328 void *write_data,unsigned int write_len,
329 void *read_data,unsigned int read_len);
330 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
333 static void trace_stbit(const char *name,int val)
335 pvr2_trace(PVR2_TRACE_STBITS,
336 "State bit %s <-- %s",
337 name,(val ? "true" : "false"));
340 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
342 struct pvr2_hdw *hdw = cptr->hdw;
343 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
344 *vp = hdw->freqTable[hdw->freqProgSlot-1];
351 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
353 struct pvr2_hdw *hdw = cptr->hdw;
354 unsigned int slotId = hdw->freqProgSlot;
355 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
356 hdw->freqTable[slotId-1] = v;
357 /* Handle side effects correctly - if we're tuned to this
358 slot, then forgot the slot id relation since the stored
359 frequency has been changed. */
360 if (hdw->freqSelector) {
361 if (hdw->freqSlotRadio == slotId) {
362 hdw->freqSlotRadio = 0;
365 if (hdw->freqSlotTelevision == slotId) {
366 hdw->freqSlotTelevision = 0;
373 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
375 *vp = cptr->hdw->freqProgSlot;
379 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
381 struct pvr2_hdw *hdw = cptr->hdw;
382 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
383 hdw->freqProgSlot = v;
388 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
390 struct pvr2_hdw *hdw = cptr->hdw;
391 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
395 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
398 struct pvr2_hdw *hdw = cptr->hdw;
399 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
401 freq = hdw->freqTable[slotId-1];
403 pvr2_hdw_set_cur_freq(hdw,freq);
405 if (hdw->freqSelector) {
406 hdw->freqSlotRadio = slotId;
408 hdw->freqSlotTelevision = slotId;
413 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
415 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
419 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
421 return cptr->hdw->freqDirty != 0;
424 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
426 cptr->hdw->freqDirty = 0;
429 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
431 pvr2_hdw_set_cur_freq(cptr->hdw,v);
435 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
437 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
438 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
442 *left = cap->bounds.left;
446 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
448 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
449 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
453 *left = cap->bounds.left;
454 if (cap->bounds.width > cptr->hdw->cropw_val) {
455 *left += cap->bounds.width - cptr->hdw->cropw_val;
460 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
462 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
463 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
467 *top = cap->bounds.top;
471 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
473 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
474 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
478 *top = cap->bounds.top;
479 if (cap->bounds.height > cptr->hdw->croph_val) {
480 *top += cap->bounds.height - cptr->hdw->croph_val;
485 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *val)
487 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
488 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
493 if (cap->bounds.width > cptr->hdw->cropl_val) {
494 *val = cap->bounds.width - cptr->hdw->cropl_val;
499 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *val)
501 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
502 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
507 if (cap->bounds.height > cptr->hdw->cropt_val) {
508 *val = cap->bounds.height - cptr->hdw->cropt_val;
513 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
515 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
516 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
520 *val = cap->bounds.left;
524 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
526 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
527 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
531 *val = cap->bounds.top;
535 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
537 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
538 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
542 *val = cap->bounds.width;
546 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
548 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
549 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
553 *val = cap->bounds.height;
557 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
559 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
560 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
564 *val = cap->defrect.left;
568 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
570 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
571 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
575 *val = cap->defrect.top;
579 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
581 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
582 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
586 *val = cap->defrect.width;
590 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
592 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
593 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
597 *val = cap->defrect.height;
601 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
603 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
604 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
608 *val = cap->pixelaspect.numerator;
612 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
614 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
615 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
619 *val = cap->pixelaspect.denominator;
623 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
625 /* Actual maximum depends on the video standard in effect. */
626 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
634 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
636 /* Actual minimum depends on device digitizer type. */
637 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
645 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
647 *vp = cptr->hdw->input_val;
651 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
653 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
656 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
658 return pvr2_hdw_set_input(cptr->hdw,v);
661 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
663 return cptr->hdw->input_dirty != 0;
666 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
668 cptr->hdw->input_dirty = 0;
672 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
675 struct pvr2_hdw *hdw = cptr->hdw;
676 if (hdw->tuner_signal_stale) {
677 pvr2_hdw_status_poll(hdw);
679 fv = hdw->tuner_signal_info.rangehigh;
681 /* Safety fallback */
685 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
694 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
697 struct pvr2_hdw *hdw = cptr->hdw;
698 if (hdw->tuner_signal_stale) {
699 pvr2_hdw_status_poll(hdw);
701 fv = hdw->tuner_signal_info.rangelow;
703 /* Safety fallback */
707 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
716 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
718 return cptr->hdw->enc_stale != 0;
721 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
723 cptr->hdw->enc_stale = 0;
724 cptr->hdw->enc_unsafe_stale = 0;
727 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
730 struct v4l2_ext_controls cs;
731 struct v4l2_ext_control c1;
732 memset(&cs,0,sizeof(cs));
733 memset(&c1,0,sizeof(c1));
736 c1.id = cptr->info->v4l_id;
737 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
744 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
747 struct pvr2_hdw *hdw = cptr->hdw;
748 struct v4l2_ext_controls cs;
749 struct v4l2_ext_control c1;
750 memset(&cs,0,sizeof(cs));
751 memset(&c1,0,sizeof(c1));
754 c1.id = cptr->info->v4l_id;
756 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
757 hdw->state_encoder_run, &cs,
760 /* Oops. cx2341x is telling us it's not safe to change
761 this control while we're capturing. Make a note of this
762 fact so that the pipeline will be stopped the next time
763 controls are committed. Then go on ahead and store this
765 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
768 if (!ret) hdw->enc_unsafe_stale = !0;
775 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
777 struct v4l2_queryctrl qctrl;
778 struct pvr2_ctl_info *info;
779 qctrl.id = cptr->info->v4l_id;
780 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
781 /* Strip out the const so we can adjust a function pointer. It's
782 OK to do this here because we know this is a dynamically created
783 control, so the underlying storage for the info pointer is (a)
784 private to us, and (b) not in read-only storage. Either we do
785 this or we significantly complicate the underlying control
787 info = (struct pvr2_ctl_info *)(cptr->info);
788 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
789 if (info->set_value) {
790 info->set_value = NULL;
793 if (!(info->set_value)) {
794 info->set_value = ctrl_cx2341x_set;
800 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
802 *vp = cptr->hdw->state_pipeline_req;
806 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
808 *vp = cptr->hdw->master_state;
812 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
814 int result = pvr2_hdw_is_hsm(cptr->hdw);
815 *vp = PVR2_CVAL_HSM_FULL;
816 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
817 if (result) *vp = PVR2_CVAL_HSM_HIGH;
821 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
823 *vp = cptr->hdw->std_mask_avail;
827 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
829 struct pvr2_hdw *hdw = cptr->hdw;
831 ns = hdw->std_mask_avail;
832 ns = (ns & ~m) | (v & m);
833 if (ns == hdw->std_mask_avail) return 0;
834 hdw->std_mask_avail = ns;
835 pvr2_hdw_internal_set_std_avail(hdw);
836 pvr2_hdw_internal_find_stdenum(hdw);
840 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
841 char *bufPtr,unsigned int bufSize,
844 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
848 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
849 const char *bufPtr,unsigned int bufSize,
854 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
855 if (ret < 0) return ret;
856 if (mskp) *mskp = id;
857 if (valp) *valp = id;
861 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
863 *vp = cptr->hdw->std_mask_cur;
867 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
869 struct pvr2_hdw *hdw = cptr->hdw;
871 ns = hdw->std_mask_cur;
872 ns = (ns & ~m) | (v & m);
873 if (ns == hdw->std_mask_cur) return 0;
874 hdw->std_mask_cur = ns;
876 pvr2_hdw_internal_find_stdenum(hdw);
880 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
882 return cptr->hdw->std_dirty != 0;
885 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
887 cptr->hdw->std_dirty = 0;
890 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
892 struct pvr2_hdw *hdw = cptr->hdw;
893 pvr2_hdw_status_poll(hdw);
894 *vp = hdw->tuner_signal_info.signal;
898 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
901 unsigned int subchan;
902 struct pvr2_hdw *hdw = cptr->hdw;
903 pvr2_hdw_status_poll(hdw);
904 subchan = hdw->tuner_signal_info.rxsubchans;
905 if (subchan & V4L2_TUNER_SUB_MONO) {
906 val |= (1 << V4L2_TUNER_MODE_MONO);
908 if (subchan & V4L2_TUNER_SUB_STEREO) {
909 val |= (1 << V4L2_TUNER_MODE_STEREO);
911 if (subchan & V4L2_TUNER_SUB_LANG1) {
912 val |= (1 << V4L2_TUNER_MODE_LANG1);
914 if (subchan & V4L2_TUNER_SUB_LANG2) {
915 val |= (1 << V4L2_TUNER_MODE_LANG2);
922 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
924 struct pvr2_hdw *hdw = cptr->hdw;
925 if (v < 0) return -EINVAL;
926 if (v > hdw->std_enum_cnt) return -EINVAL;
927 hdw->std_enum_cur = v;
930 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
931 hdw->std_mask_cur = hdw->std_defs[v].id;
937 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
939 *vp = cptr->hdw->std_enum_cur;
944 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
946 return cptr->hdw->std_dirty != 0;
950 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
952 cptr->hdw->std_dirty = 0;
956 #define DEFINT(vmin,vmax) \
957 .type = pvr2_ctl_int, \
958 .def.type_int.min_value = vmin, \
959 .def.type_int.max_value = vmax
961 #define DEFENUM(tab) \
962 .type = pvr2_ctl_enum, \
963 .def.type_enum.count = ARRAY_SIZE(tab), \
964 .def.type_enum.value_names = tab
967 .type = pvr2_ctl_bool
969 #define DEFMASK(msk,tab) \
970 .type = pvr2_ctl_bitmask, \
971 .def.type_bitmask.valid_bits = msk, \
972 .def.type_bitmask.bit_names = tab
974 #define DEFREF(vname) \
975 .set_value = ctrl_set_##vname, \
976 .get_value = ctrl_get_##vname, \
977 .is_dirty = ctrl_isdirty_##vname, \
978 .clear_dirty = ctrl_cleardirty_##vname
981 #define VCREATE_FUNCS(vname) \
982 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
983 {*vp = cptr->hdw->vname##_val; return 0;} \
984 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
985 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
986 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
987 {return cptr->hdw->vname##_dirty != 0;} \
988 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
989 {cptr->hdw->vname##_dirty = 0;}
991 VCREATE_FUNCS(brightness)
992 VCREATE_FUNCS(contrast)
993 VCREATE_FUNCS(saturation)
995 VCREATE_FUNCS(volume)
996 VCREATE_FUNCS(balance)
998 VCREATE_FUNCS(treble)
1000 VCREATE_FUNCS(cropl)
1001 VCREATE_FUNCS(cropt)
1002 VCREATE_FUNCS(cropw)
1003 VCREATE_FUNCS(croph)
1004 VCREATE_FUNCS(audiomode)
1005 VCREATE_FUNCS(res_hor)
1006 VCREATE_FUNCS(res_ver)
1007 VCREATE_FUNCS(srate)
1009 /* Table definition of all controls which can be manipulated */
1010 static const struct pvr2_ctl_info control_defs[] = {
1012 .v4l_id = V4L2_CID_BRIGHTNESS,
1013 .desc = "Brightness",
1014 .name = "brightness",
1015 .default_value = 128,
1019 .v4l_id = V4L2_CID_CONTRAST,
1022 .default_value = 68,
1026 .v4l_id = V4L2_CID_SATURATION,
1027 .desc = "Saturation",
1028 .name = "saturation",
1029 .default_value = 64,
1033 .v4l_id = V4L2_CID_HUE,
1040 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1043 .default_value = 62000,
1047 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1052 DEFINT(-32768,32767),
1054 .v4l_id = V4L2_CID_AUDIO_BASS,
1059 DEFINT(-32768,32767),
1061 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1066 DEFINT(-32768,32767),
1068 .v4l_id = V4L2_CID_AUDIO_MUTE,
1075 .desc = "Capture crop left margin",
1076 .name = "crop_left",
1077 .internal_id = PVR2_CID_CROPL,
1081 .get_min_value = ctrl_cropl_min_get,
1082 .get_max_value = ctrl_cropl_max_get,
1083 .get_def_value = ctrl_get_cropcapdl,
1085 .desc = "Capture crop top margin",
1087 .internal_id = PVR2_CID_CROPT,
1091 .get_min_value = ctrl_cropt_min_get,
1092 .get_max_value = ctrl_cropt_max_get,
1093 .get_def_value = ctrl_get_cropcapdt,
1095 .desc = "Capture crop width",
1096 .name = "crop_width",
1097 .internal_id = PVR2_CID_CROPW,
1098 .default_value = 720,
1100 .get_max_value = ctrl_cropw_max_get,
1101 .get_def_value = ctrl_get_cropcapdw,
1103 .desc = "Capture crop height",
1104 .name = "crop_height",
1105 .internal_id = PVR2_CID_CROPH,
1106 .default_value = 480,
1108 .get_max_value = ctrl_croph_max_get,
1109 .get_def_value = ctrl_get_cropcapdh,
1111 .desc = "Capture capability pixel aspect numerator",
1112 .name = "cropcap_pixel_numerator",
1113 .internal_id = PVR2_CID_CROPCAPPAN,
1114 .get_value = ctrl_get_cropcappan,
1116 .desc = "Capture capability pixel aspect denominator",
1117 .name = "cropcap_pixel_denominator",
1118 .internal_id = PVR2_CID_CROPCAPPAD,
1119 .get_value = ctrl_get_cropcappad,
1121 .desc = "Capture capability bounds top",
1122 .name = "cropcap_bounds_top",
1123 .internal_id = PVR2_CID_CROPCAPBT,
1124 .get_value = ctrl_get_cropcapbt,
1126 .desc = "Capture capability bounds left",
1127 .name = "cropcap_bounds_left",
1128 .internal_id = PVR2_CID_CROPCAPBL,
1129 .get_value = ctrl_get_cropcapbl,
1131 .desc = "Capture capability bounds width",
1132 .name = "cropcap_bounds_width",
1133 .internal_id = PVR2_CID_CROPCAPBW,
1134 .get_value = ctrl_get_cropcapbw,
1136 .desc = "Capture capability bounds height",
1137 .name = "cropcap_bounds_height",
1138 .internal_id = PVR2_CID_CROPCAPBH,
1139 .get_value = ctrl_get_cropcapbh,
1141 .desc = "Video Source",
1143 .internal_id = PVR2_CID_INPUT,
1144 .default_value = PVR2_CVAL_INPUT_TV,
1145 .check_value = ctrl_check_input,
1147 DEFENUM(control_values_input),
1149 .desc = "Audio Mode",
1150 .name = "audio_mode",
1151 .internal_id = PVR2_CID_AUDIOMODE,
1152 .default_value = V4L2_TUNER_MODE_STEREO,
1154 DEFENUM(control_values_audiomode),
1156 .desc = "Horizontal capture resolution",
1157 .name = "resolution_hor",
1158 .internal_id = PVR2_CID_HRES,
1159 .default_value = 720,
1163 .desc = "Vertical capture resolution",
1164 .name = "resolution_ver",
1165 .internal_id = PVR2_CID_VRES,
1166 .default_value = 480,
1169 /* Hook in check for video standard and adjust maximum
1170 depending on the standard. */
1171 .get_max_value = ctrl_vres_max_get,
1172 .get_min_value = ctrl_vres_min_get,
1174 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1175 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1176 .desc = "Audio Sampling Frequency",
1179 DEFENUM(control_values_srate),
1181 .desc = "Tuner Frequency (Hz)",
1182 .name = "frequency",
1183 .internal_id = PVR2_CID_FREQUENCY,
1185 .set_value = ctrl_freq_set,
1186 .get_value = ctrl_freq_get,
1187 .is_dirty = ctrl_freq_is_dirty,
1188 .clear_dirty = ctrl_freq_clear_dirty,
1190 /* Hook in check for input value (tv/radio) and adjust
1191 max/min values accordingly */
1192 .get_max_value = ctrl_freq_max_get,
1193 .get_min_value = ctrl_freq_min_get,
1197 .set_value = ctrl_channel_set,
1198 .get_value = ctrl_channel_get,
1199 DEFINT(0,FREQTABLE_SIZE),
1201 .desc = "Channel Program Frequency",
1202 .name = "freq_table_value",
1203 .set_value = ctrl_channelfreq_set,
1204 .get_value = ctrl_channelfreq_get,
1206 /* Hook in check for input value (tv/radio) and adjust
1207 max/min values accordingly */
1208 .get_max_value = ctrl_freq_max_get,
1209 .get_min_value = ctrl_freq_min_get,
1211 .desc = "Channel Program ID",
1212 .name = "freq_table_channel",
1213 .set_value = ctrl_channelprog_set,
1214 .get_value = ctrl_channelprog_get,
1215 DEFINT(0,FREQTABLE_SIZE),
1217 .desc = "Streaming Enabled",
1218 .name = "streaming_enabled",
1219 .get_value = ctrl_streamingenabled_get,
1222 .desc = "USB Speed",
1223 .name = "usb_speed",
1224 .get_value = ctrl_hsm_get,
1225 DEFENUM(control_values_hsm),
1227 .desc = "Master State",
1228 .name = "master_state",
1229 .get_value = ctrl_masterstate_get,
1230 DEFENUM(pvr2_state_names),
1232 .desc = "Signal Present",
1233 .name = "signal_present",
1234 .get_value = ctrl_signal_get,
1237 .desc = "Audio Modes Present",
1238 .name = "audio_modes_present",
1239 .get_value = ctrl_audio_modes_present_get,
1240 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1241 v4l. Nothing outside of this module cares about this,
1242 but I reuse it in order to also reuse the
1243 control_values_audiomode string table. */
1244 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1245 (1 << V4L2_TUNER_MODE_STEREO)|
1246 (1 << V4L2_TUNER_MODE_LANG1)|
1247 (1 << V4L2_TUNER_MODE_LANG2)),
1248 control_values_audiomode),
1250 .desc = "Video Standards Available Mask",
1251 .name = "video_standard_mask_available",
1252 .internal_id = PVR2_CID_STDAVAIL,
1254 .get_value = ctrl_stdavail_get,
1255 .set_value = ctrl_stdavail_set,
1256 .val_to_sym = ctrl_std_val_to_sym,
1257 .sym_to_val = ctrl_std_sym_to_val,
1258 .type = pvr2_ctl_bitmask,
1260 .desc = "Video Standards In Use Mask",
1261 .name = "video_standard_mask_active",
1262 .internal_id = PVR2_CID_STDCUR,
1264 .get_value = ctrl_stdcur_get,
1265 .set_value = ctrl_stdcur_set,
1266 .is_dirty = ctrl_stdcur_is_dirty,
1267 .clear_dirty = ctrl_stdcur_clear_dirty,
1268 .val_to_sym = ctrl_std_val_to_sym,
1269 .sym_to_val = ctrl_std_sym_to_val,
1270 .type = pvr2_ctl_bitmask,
1272 .desc = "Video Standard Name",
1273 .name = "video_standard",
1274 .internal_id = PVR2_CID_STDENUM,
1276 .get_value = ctrl_stdenumcur_get,
1277 .set_value = ctrl_stdenumcur_set,
1278 .is_dirty = ctrl_stdenumcur_is_dirty,
1279 .clear_dirty = ctrl_stdenumcur_clear_dirty,
1280 .type = pvr2_ctl_enum,
1284 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1287 const char *pvr2_config_get_name(enum pvr2_config cfg)
1290 case pvr2_config_empty: return "empty";
1291 case pvr2_config_mpeg: return "mpeg";
1292 case pvr2_config_vbi: return "vbi";
1293 case pvr2_config_pcm: return "pcm";
1294 case pvr2_config_rawvideo: return "raw video";
1300 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1302 return hdw->usb_dev;
1306 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1308 return hdw->serial_number;
1312 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1314 return hdw->bus_info;
1318 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1320 return hdw->identifier;
1324 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1326 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1329 /* Set the currently tuned frequency and account for all possible
1330 driver-core side effects of this action. */
1331 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1333 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1334 if (hdw->freqSelector) {
1335 /* Swing over to radio frequency selection */
1336 hdw->freqSelector = 0;
1337 hdw->freqDirty = !0;
1339 if (hdw->freqValRadio != val) {
1340 hdw->freqValRadio = val;
1341 hdw->freqSlotRadio = 0;
1342 hdw->freqDirty = !0;
1345 if (!(hdw->freqSelector)) {
1346 /* Swing over to television frequency selection */
1347 hdw->freqSelector = 1;
1348 hdw->freqDirty = !0;
1350 if (hdw->freqValTelevision != val) {
1351 hdw->freqValTelevision = val;
1352 hdw->freqSlotTelevision = 0;
1353 hdw->freqDirty = !0;
1358 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1360 return hdw->unit_number;
1364 /* Attempt to locate one of the given set of files. Messages are logged
1365 appropriate to what has been found. The return value will be 0 or
1366 greater on success (it will be the index of the file name found) and
1367 fw_entry will be filled in. Otherwise a negative error is returned on
1368 failure. If the return value is -ENOENT then no viable firmware file
1369 could be located. */
1370 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1371 const struct firmware **fw_entry,
1372 const char *fwtypename,
1373 unsigned int fwcount,
1374 const char *fwnames[])
1378 for (idx = 0; idx < fwcount; idx++) {
1379 ret = request_firmware(fw_entry,
1381 &hdw->usb_dev->dev);
1383 trace_firmware("Located %s firmware: %s;"
1389 if (ret == -ENOENT) continue;
1390 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1391 "request_firmware fatal error with code=%d",ret);
1394 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1396 " Device %s firmware"
1397 " seems to be missing.",
1399 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1400 "Did you install the pvrusb2 firmware files"
1401 " in their proper location?");
1403 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1404 "request_firmware unable to locate %s file %s",
1405 fwtypename,fwnames[0]);
1407 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1408 "request_firmware unable to locate"
1409 " one of the following %s files:",
1411 for (idx = 0; idx < fwcount; idx++) {
1412 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1413 "request_firmware: Failed to find %s",
1422 * pvr2_upload_firmware1().
1424 * Send the 8051 firmware to the device. After the upload, arrange for
1425 * device to re-enumerate.
1427 * NOTE : the pointer to the firmware data given by request_firmware()
1428 * is not suitable for an usb transaction.
1431 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1433 const struct firmware *fw_entry = NULL;
1439 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1440 hdw->fw1_state = FW1_STATE_OK;
1441 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1442 "Connected device type defines"
1443 " no firmware to upload; ignoring firmware");
1447 hdw->fw1_state = FW1_STATE_FAILED; // default result
1449 trace_firmware("pvr2_upload_firmware1");
1451 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1452 hdw->hdw_desc->fx2_firmware.cnt,
1453 hdw->hdw_desc->fx2_firmware.lst);
1455 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1459 usb_settoggle(hdw->usb_dev, 0 & 0xf, !(0 & USB_DIR_IN), 0);
1460 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1462 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1464 if (fw_entry->size != 0x2000){
1465 pvr2_trace(PVR2_TRACE_ERROR_LEGS,"wrong fx2 firmware size");
1466 release_firmware(fw_entry);
1470 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1471 if (fw_ptr == NULL){
1472 release_firmware(fw_entry);
1476 /* We have to hold the CPU during firmware upload. */
1477 pvr2_hdw_cpureset_assert(hdw,1);
1479 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1483 for(address = 0; address < fw_entry->size; address += 0x800) {
1484 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1485 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1486 0, fw_ptr, 0x800, HZ);
1489 trace_firmware("Upload done, releasing device's CPU");
1491 /* Now release the CPU. It will disconnect and reconnect later. */
1492 pvr2_hdw_cpureset_assert(hdw,0);
1495 release_firmware(fw_entry);
1497 trace_firmware("Upload done (%d bytes sent)",ret);
1499 /* We should have written 8192 bytes */
1501 hdw->fw1_state = FW1_STATE_RELOAD;
1510 * pvr2_upload_firmware2()
1512 * This uploads encoder firmware on endpoint 2.
1516 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1518 const struct firmware *fw_entry = NULL;
1520 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1524 static const char *fw_files[] = {
1525 CX2341X_FIRM_ENC_FILENAME,
1528 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1532 trace_firmware("pvr2_upload_firmware2");
1534 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1535 ARRAY_SIZE(fw_files), fw_files);
1536 if (ret < 0) return ret;
1539 /* Since we're about to completely reinitialize the encoder,
1540 invalidate our cached copy of its configuration state. Next
1541 time we configure the encoder, then we'll fully configure it. */
1542 hdw->enc_cur_valid = 0;
1544 /* Encoder is about to be reset so note that as far as we're
1545 concerned now, the encoder has never been run. */
1546 del_timer_sync(&hdw->encoder_run_timer);
1547 if (hdw->state_encoder_runok) {
1548 hdw->state_encoder_runok = 0;
1549 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1552 /* First prepare firmware loading */
1553 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1554 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1555 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1556 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1557 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1558 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1559 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1560 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1561 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1562 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1563 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1564 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1565 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1566 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1567 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1568 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1569 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1570 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1573 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1574 "firmware2 upload prep failed, ret=%d",ret);
1575 release_firmware(fw_entry);
1579 /* Now send firmware */
1581 fw_len = fw_entry->size;
1583 if (fw_len % sizeof(u32)) {
1584 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1585 "size of %s firmware"
1586 " must be a multiple of %zu bytes",
1587 fw_files[fwidx],sizeof(u32));
1588 release_firmware(fw_entry);
1593 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1594 if (fw_ptr == NULL){
1595 release_firmware(fw_entry);
1596 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1597 "failed to allocate memory for firmware2 upload");
1602 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1605 for (fw_done = 0; fw_done < fw_len;) {
1606 bcnt = fw_len - fw_done;
1607 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1608 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1609 /* Usbsnoop log shows that we must swap bytes... */
1610 /* Some background info: The data being swapped here is a
1611 firmware image destined for the mpeg encoder chip that
1612 lives at the other end of a USB endpoint. The encoder
1613 chip always talks in 32 bit chunks and its storage is
1614 organized into 32 bit words. However from the file
1615 system to the encoder chip everything is purely a byte
1616 stream. The firmware file's contents are always 32 bit
1617 swapped from what the encoder expects. Thus the need
1618 always exists to swap the bytes regardless of the endian
1619 type of the host processor and therefore swab32() makes
1621 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1622 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1624 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1625 &actual_length, HZ);
1626 ret |= (actual_length != bcnt);
1631 trace_firmware("upload of %s : %i / %i ",
1632 fw_files[fwidx],fw_done,fw_len);
1635 release_firmware(fw_entry);
1638 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1639 "firmware2 upload transfer failure");
1645 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1646 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1647 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1650 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1651 "firmware2 upload post-proc failure");
1655 if (hdw->hdw_desc->signal_routing_scheme ==
1656 PVR2_ROUTING_SCHEME_GOTVIEW) {
1657 /* Ensure that GPIO 11 is set to output for GOTVIEW
1659 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1665 static const char *pvr2_get_state_name(unsigned int st)
1667 if (st < ARRAY_SIZE(pvr2_state_names)) {
1668 return pvr2_state_names[st];
1673 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1675 if (hdw->decoder_ctrl) {
1676 hdw->decoder_ctrl->enable(hdw->decoder_ctrl->ctxt, enablefl);
1679 /* Even though we really only care about the video decoder chip at
1680 this point, we'll broadcast stream on/off to all sub-devices
1681 anyway, just in case somebody else wants to hear the
1683 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1684 if (hdw->decoder_client_id) {
1685 /* We get here if the encoder has been noticed. Otherwise
1686 we'll issue a warning to the user (which should
1687 normally never happen). */
1690 if (!hdw->flag_decoder_missed) {
1691 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1692 "WARNING: No decoder present");
1693 hdw->flag_decoder_missed = !0;
1694 trace_stbit("flag_decoder_missed",
1695 hdw->flag_decoder_missed);
1701 void pvr2_hdw_set_decoder(struct pvr2_hdw *hdw,struct pvr2_decoder_ctrl *ptr)
1703 if (hdw->decoder_ctrl == ptr) return;
1704 hdw->decoder_ctrl = ptr;
1705 if (hdw->decoder_ctrl && hdw->flag_decoder_missed) {
1706 hdw->flag_decoder_missed = 0;
1707 trace_stbit("flag_decoder_missed",
1708 hdw->flag_decoder_missed);
1709 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1710 "Decoder has appeared");
1711 pvr2_hdw_state_sched(hdw);
1716 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1718 return hdw->master_state;
1722 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1724 if (!hdw->flag_tripped) return 0;
1725 hdw->flag_tripped = 0;
1726 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1727 "Clearing driver error statuss");
1732 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1735 LOCK_TAKE(hdw->big_lock); do {
1736 fl = pvr2_hdw_untrip_unlocked(hdw);
1737 } while (0); LOCK_GIVE(hdw->big_lock);
1738 if (fl) pvr2_hdw_state_sched(hdw);
1745 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1747 return hdw->state_pipeline_req != 0;
1751 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1754 LOCK_TAKE(hdw->big_lock); do {
1755 pvr2_hdw_untrip_unlocked(hdw);
1756 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1757 hdw->state_pipeline_req = enable_flag != 0;
1758 pvr2_trace(PVR2_TRACE_START_STOP,
1759 "/*--TRACE_STREAM--*/ %s",
1760 enable_flag ? "enable" : "disable");
1762 pvr2_hdw_state_sched(hdw);
1763 } while (0); LOCK_GIVE(hdw->big_lock);
1764 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1766 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1767 if (st != PVR2_STATE_READY) return -EIO;
1768 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1775 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1778 LOCK_TAKE(hdw->big_lock);
1779 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1780 hdw->desired_stream_type = config;
1781 hdw->state_pipeline_config = 0;
1782 trace_stbit("state_pipeline_config",
1783 hdw->state_pipeline_config);
1784 pvr2_hdw_state_sched(hdw);
1786 LOCK_GIVE(hdw->big_lock);
1788 return pvr2_hdw_wait(hdw,0);
1792 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1794 int unit_number = hdw->unit_number;
1796 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1797 tp = tuner[unit_number];
1799 if (tp < 0) return -EINVAL;
1800 hdw->tuner_type = tp;
1801 hdw->tuner_updated = !0;
1806 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1808 int unit_number = hdw->unit_number;
1810 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1811 tp = video_std[unit_number];
1818 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1820 int unit_number = hdw->unit_number;
1822 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1823 tp = tolerance[unit_number];
1829 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1831 /* Try a harmless request to fetch the eeprom's address over
1832 endpoint 1. See what happens. Only the full FX2 image can
1833 respond to this. If this probe fails then likely the FX2
1834 firmware needs be loaded. */
1836 LOCK_TAKE(hdw->ctl_lock); do {
1837 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1838 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1841 if (result < 0) break;
1842 } while(0); LOCK_GIVE(hdw->ctl_lock);
1844 pvr2_trace(PVR2_TRACE_INIT,
1845 "Probe of device endpoint 1 result status %d",
1848 pvr2_trace(PVR2_TRACE_INIT,
1849 "Probe of device endpoint 1 succeeded");
1854 struct pvr2_std_hack {
1855 v4l2_std_id pat; /* Pattern to match */
1856 v4l2_std_id msk; /* Which bits we care about */
1857 v4l2_std_id std; /* What additional standards or default to set */
1860 /* This data structure labels specific combinations of standards from
1861 tveeprom that we'll try to recognize. If we recognize one, then assume
1862 a specified default standard to use. This is here because tveeprom only
1863 tells us about available standards not the intended default standard (if
1864 any) for the device in question. We guess the default based on what has
1865 been reported as available. Note that this is only for guessing a
1866 default - which can always be overridden explicitly - and if the user
1867 has otherwise named a default then that default will always be used in
1868 place of this table. */
1869 static const struct pvr2_std_hack std_eeprom_maps[] = {
1871 .pat = V4L2_STD_B|V4L2_STD_GH,
1872 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1876 .std = V4L2_STD_NTSC_M,
1879 .pat = V4L2_STD_PAL_I,
1880 .std = V4L2_STD_PAL_I,
1883 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1884 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1888 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1892 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1896 v4l2_std_id std1,std2,std3;
1898 std1 = get_default_standard(hdw);
1899 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1901 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1902 pvr2_trace(PVR2_TRACE_STD,
1903 "Supported video standard(s) reported available"
1904 " in hardware: %.*s",
1907 hdw->std_mask_avail = hdw->std_mask_eeprom;
1909 std2 = (std1|std3) & ~hdw->std_mask_avail;
1911 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1912 pvr2_trace(PVR2_TRACE_STD,
1913 "Expanding supported video standards"
1914 " to include: %.*s",
1916 hdw->std_mask_avail |= std2;
1919 pvr2_hdw_internal_set_std_avail(hdw);
1922 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1923 pvr2_trace(PVR2_TRACE_STD,
1924 "Initial video standard forced to %.*s",
1926 hdw->std_mask_cur = std1;
1927 hdw->std_dirty = !0;
1928 pvr2_hdw_internal_find_stdenum(hdw);
1932 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1933 pvr2_trace(PVR2_TRACE_STD,
1934 "Initial video standard"
1935 " (determined by device type): %.*s",bcnt,buf);
1936 hdw->std_mask_cur = std3;
1937 hdw->std_dirty = !0;
1938 pvr2_hdw_internal_find_stdenum(hdw);
1944 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1945 if (std_eeprom_maps[idx].msk ?
1946 ((std_eeprom_maps[idx].pat ^
1947 hdw->std_mask_eeprom) &
1948 std_eeprom_maps[idx].msk) :
1949 (std_eeprom_maps[idx].pat !=
1950 hdw->std_mask_eeprom)) continue;
1951 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1952 std_eeprom_maps[idx].std);
1953 pvr2_trace(PVR2_TRACE_STD,
1954 "Initial video standard guessed as %.*s",
1956 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1957 hdw->std_dirty = !0;
1958 pvr2_hdw_internal_find_stdenum(hdw);
1963 if (hdw->std_enum_cnt > 1) {
1964 // Autoselect the first listed standard
1965 hdw->std_enum_cur = 1;
1966 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1967 hdw->std_dirty = !0;
1968 pvr2_trace(PVR2_TRACE_STD,
1969 "Initial video standard auto-selected to %s",
1970 hdw->std_defs[hdw->std_enum_cur-1].name);
1974 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1975 "Unable to select a viable initial video standard");
1979 static unsigned int pvr2_copy_i2c_addr_list(
1980 unsigned short *dst, const unsigned char *src,
1981 unsigned int dst_max)
1983 unsigned int cnt = 0;
1985 while (src[cnt] && (cnt + 1) < dst_max) {
1986 dst[cnt] = src[cnt];
1989 dst[cnt] = I2C_CLIENT_END;
1994 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
1995 const struct pvr2_device_client_desc *cd)
1999 struct v4l2_subdev *sd;
2000 unsigned int i2ccnt;
2001 const unsigned char *p;
2002 /* Arbitrary count - max # i2c addresses we will probe */
2003 unsigned short i2caddr[25];
2005 mid = cd->module_id;
2006 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
2008 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2009 "Module ID %u for device %s has no name",
2011 hdw->hdw_desc->description);
2014 pvr2_trace(PVR2_TRACE_INIT,
2015 "Module ID %u (%s) for device %s being loaded...",
2017 hdw->hdw_desc->description);
2019 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
2020 ARRAY_SIZE(i2caddr));
2021 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
2022 module_i2c_addresses[mid] : NULL) != NULL)) {
2023 /* Second chance: Try default i2c address list */
2024 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2025 ARRAY_SIZE(i2caddr));
2027 pvr2_trace(PVR2_TRACE_INIT,
2029 " Using default i2c address list",
2035 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2036 "Module ID %u (%s) for device %s:"
2037 " No i2c addresses",
2038 mid, fname, hdw->hdw_desc->description);
2042 /* Note how the 2nd and 3rd arguments are the same for both
2043 * v4l2_i2c_new_subdev() and v4l2_i2c_new_probed_subdev(). Why?
2044 * Well the 2nd argument is the module name to load, while the 3rd
2045 * argument is documented in the framework as being the "chipid" -
2046 * and every other place where I can find examples of this, the
2047 * "chipid" appears to just be the module name again. So here we
2048 * just do the same thing. */
2049 hdw->i2c_adap.class = 0;
2051 pvr2_trace(PVR2_TRACE_INIT,
2053 " Setting up with specified i2c address 0x%x",
2055 sd = v4l2_i2c_new_subdev(&hdw->i2c_adap,
2059 pvr2_trace(PVR2_TRACE_INIT,
2061 " Setting up with address probe list",
2063 sd = v4l2_i2c_new_probed_subdev(&hdw->i2c_adap,
2067 hdw->i2c_adap.class = I2C_CLASS_TV_ANALOG;
2070 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2071 "Module ID %u (%s) for device %s failed to load",
2072 mid, fname, hdw->hdw_desc->description);
2076 /* Tag this sub-device instance with the module ID we know about.
2077 In other places we'll use that tag to determine if the instance
2078 requires special handling. */
2081 /* If we have both old and new i2c layers enabled, make sure that
2082 old layer isn't also tracking this module. This is a debugging
2083 aid, in normal situations there's no reason for both mechanisms
2085 pvr2_i2c_untrack_subdev(hdw, sd);
2086 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
2089 /* client-specific setup... */
2091 case PVR2_CLIENT_ID_CX25840:
2092 hdw->decoder_client_id = mid;
2095 Mike Isely <isely@pobox.com> 19-Nov-2006 - This
2096 bit of nuttiness for cx25840 causes that module
2097 to correctly set up its video scaling. This is
2098 really a problem in the cx25840 module itself,
2099 but we work around it here. The problem has not
2100 been seen in ivtv because there VBI is supported
2101 and set up. We don't do VBI here (at least not
2102 yet) and thus we never attempted to even set it
2105 struct v4l2_format fmt;
2106 pvr2_trace(PVR2_TRACE_INIT,
2108 " Executing cx25840 VBI hack",
2110 memset(&fmt, 0, sizeof(fmt));
2111 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
2112 v4l2_device_call_all(&hdw->v4l2_dev, mid,
2113 video, s_fmt, &fmt);
2116 case PVR2_CLIENT_ID_SAA7115:
2117 hdw->decoder_client_id = mid;
2126 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2129 const struct pvr2_string_table *cm;
2130 const struct pvr2_device_client_table *ct;
2133 cm = &hdw->hdw_desc->client_modules;
2134 for (idx = 0; idx < cm->cnt; idx++) {
2135 request_module(cm->lst[idx]);
2138 ct = &hdw->hdw_desc->client_table;
2139 for (idx = 0; idx < ct->cnt; idx++) {
2140 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
2142 if (!okFl) pvr2_hdw_render_useless(hdw);
2146 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2150 struct pvr2_ctrl *cptr;
2152 if (hdw->hdw_desc->fx2_firmware.cnt) {
2155 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
2158 pvr2_trace(PVR2_TRACE_INIT,
2159 "USB endpoint config looks strange"
2160 "; possibly firmware needs to be"
2165 reloadFl = !pvr2_hdw_check_firmware(hdw);
2167 pvr2_trace(PVR2_TRACE_INIT,
2168 "Check for FX2 firmware failed"
2169 "; possibly firmware needs to be"
2174 if (pvr2_upload_firmware1(hdw) != 0) {
2175 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2176 "Failure uploading firmware1");
2181 hdw->fw1_state = FW1_STATE_OK;
2183 if (!pvr2_hdw_dev_ok(hdw)) return;
2185 if (!hdw->hdw_desc->flag_no_powerup) {
2186 pvr2_hdw_cmd_powerup(hdw);
2187 if (!pvr2_hdw_dev_ok(hdw)) return;
2190 /* Take the IR chip out of reset, if appropriate */
2191 if (hdw->hdw_desc->ir_scheme == PVR2_IR_SCHEME_ZILOG) {
2192 pvr2_issue_simple_cmd(hdw,
2193 FX2CMD_HCW_ZILOG_RESET |
2198 // This step MUST happen after the earlier powerup step.
2199 pvr2_i2c_track_init(hdw);
2200 pvr2_i2c_core_init(hdw);
2201 if (!pvr2_hdw_dev_ok(hdw)) return;
2203 pvr2_hdw_load_modules(hdw);
2204 if (!pvr2_hdw_dev_ok(hdw)) return;
2206 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2207 cptr = hdw->controls + idx;
2208 if (cptr->info->skip_init) continue;
2209 if (!cptr->info->set_value) continue;
2210 cptr->info->set_value(cptr,~0,cptr->info->default_value);
2213 /* Set up special default values for the television and radio
2214 frequencies here. It's not really important what these defaults
2215 are, but I set them to something usable in the Chicago area just
2216 to make driver testing a little easier. */
2218 hdw->freqValTelevision = default_tv_freq;
2219 hdw->freqValRadio = default_radio_freq;
2221 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2222 // thread-safe against the normal pvr2_send_request() mechanism.
2223 // (We should make it thread safe).
2225 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
2226 ret = pvr2_hdw_get_eeprom_addr(hdw);
2227 if (!pvr2_hdw_dev_ok(hdw)) return;
2229 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2230 "Unable to determine location of eeprom,"
2233 hdw->eeprom_addr = ret;
2234 pvr2_eeprom_analyze(hdw);
2235 if (!pvr2_hdw_dev_ok(hdw)) return;
2238 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
2239 hdw->tuner_updated = !0;
2240 hdw->std_mask_eeprom = V4L2_STD_ALL;
2243 if (hdw->serial_number) {
2244 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2245 "sn-%lu", hdw->serial_number);
2246 } else if (hdw->unit_number >= 0) {
2247 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2249 hdw->unit_number + 'a');
2251 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2254 hdw->identifier[idx] = 0;
2256 pvr2_hdw_setup_std(hdw);
2258 if (!get_default_tuner_type(hdw)) {
2259 pvr2_trace(PVR2_TRACE_INIT,
2260 "pvr2_hdw_setup: Tuner type overridden to %d",
2264 pvr2_i2c_core_check_stale(hdw);
2266 if (!pvr2_hdw_dev_ok(hdw)) return;
2268 if (hdw->hdw_desc->signal_routing_scheme ==
2269 PVR2_ROUTING_SCHEME_GOTVIEW) {
2270 /* Ensure that GPIO 11 is set to output for GOTVIEW
2272 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
2275 pvr2_hdw_commit_setup(hdw);
2277 hdw->vid_stream = pvr2_stream_create();
2278 if (!pvr2_hdw_dev_ok(hdw)) return;
2279 pvr2_trace(PVR2_TRACE_INIT,
2280 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
2281 if (hdw->vid_stream) {
2282 idx = get_default_error_tolerance(hdw);
2284 pvr2_trace(PVR2_TRACE_INIT,
2285 "pvr2_hdw_setup: video stream %p"
2286 " setting tolerance %u",
2287 hdw->vid_stream,idx);
2289 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2290 PVR2_VID_ENDPOINT,idx);
2293 if (!pvr2_hdw_dev_ok(hdw)) return;
2295 hdw->flag_init_ok = !0;
2297 pvr2_hdw_state_sched(hdw);
2301 /* Set up the structure and attempt to put the device into a usable state.
2302 This can be a time-consuming operation, which is why it is not done
2303 internally as part of the create() step. */
2304 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
2306 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
2308 pvr2_hdw_setup_low(hdw);
2309 pvr2_trace(PVR2_TRACE_INIT,
2310 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2311 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
2312 if (pvr2_hdw_dev_ok(hdw)) {
2313 if (hdw->flag_init_ok) {
2316 "Device initialization"
2317 " completed successfully.");
2320 if (hdw->fw1_state == FW1_STATE_RELOAD) {
2323 "Device microcontroller firmware"
2324 " (re)loaded; it should now reset"
2329 PVR2_TRACE_ERROR_LEGS,
2330 "Device initialization was not successful.");
2331 if (hdw->fw1_state == FW1_STATE_MISSING) {
2333 PVR2_TRACE_ERROR_LEGS,
2334 "Giving up since device"
2335 " microcontroller firmware"
2336 " appears to be missing.");
2342 PVR2_TRACE_ERROR_LEGS,
2343 "Attempting pvrusb2 recovery by reloading"
2344 " primary firmware.");
2346 PVR2_TRACE_ERROR_LEGS,
2347 "If this works, device should disconnect"
2348 " and reconnect in a sane state.");
2349 hdw->fw1_state = FW1_STATE_UNKNOWN;
2350 pvr2_upload_firmware1(hdw);
2353 PVR2_TRACE_ERROR_LEGS,
2354 "***WARNING*** pvrusb2 device hardware"
2355 " appears to be jammed"
2356 " and I can't clear it.");
2358 PVR2_TRACE_ERROR_LEGS,
2359 "You might need to power cycle"
2360 " the pvrusb2 device"
2361 " in order to recover.");
2364 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2368 /* Perform second stage initialization. Set callback pointer first so that
2369 we can avoid a possible initialization race (if the kernel thread runs
2370 before the callback has been set). */
2371 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2372 void (*callback_func)(void *),
2373 void *callback_data)
2375 LOCK_TAKE(hdw->big_lock); do {
2376 if (hdw->flag_disconnected) {
2377 /* Handle a race here: If we're already
2378 disconnected by this point, then give up. If we
2379 get past this then we'll remain connected for
2380 the duration of initialization since the entire
2381 initialization sequence is now protected by the
2385 hdw->state_data = callback_data;
2386 hdw->state_func = callback_func;
2387 pvr2_hdw_setup(hdw);
2388 } while (0); LOCK_GIVE(hdw->big_lock);
2389 return hdw->flag_init_ok;
2393 /* Create, set up, and return a structure for interacting with the
2394 underlying hardware. */
2395 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2396 const struct usb_device_id *devid)
2398 unsigned int idx,cnt1,cnt2,m;
2399 struct pvr2_hdw *hdw = NULL;
2401 struct pvr2_ctrl *cptr;
2402 struct usb_device *usb_dev;
2403 const struct pvr2_device_desc *hdw_desc;
2405 struct v4l2_queryctrl qctrl;
2406 struct pvr2_ctl_info *ciptr;
2408 usb_dev = interface_to_usbdev(intf);
2410 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
2412 if (hdw_desc == NULL) {
2413 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create:"
2414 " No device description pointer,"
2415 " unable to continue.");
2416 pvr2_trace(PVR2_TRACE_INIT, "If you have a new device type,"
2417 " please contact Mike Isely <isely@pobox.com>"
2418 " to get it included in the driver\n");
2422 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
2423 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2424 hdw,hdw_desc->description);
2425 if (!hdw) goto fail;
2427 init_timer(&hdw->quiescent_timer);
2428 hdw->quiescent_timer.data = (unsigned long)hdw;
2429 hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
2431 init_timer(&hdw->encoder_wait_timer);
2432 hdw->encoder_wait_timer.data = (unsigned long)hdw;
2433 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
2435 init_timer(&hdw->encoder_run_timer);
2436 hdw->encoder_run_timer.data = (unsigned long)hdw;
2437 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
2439 hdw->master_state = PVR2_STATE_DEAD;
2441 init_waitqueue_head(&hdw->state_wait_data);
2443 hdw->tuner_signal_stale = !0;
2444 cx2341x_fill_defaults(&hdw->enc_ctl_state);
2446 /* Calculate which inputs are OK */
2448 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2449 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2450 m |= 1 << PVR2_CVAL_INPUT_DTV;
2452 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2453 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2454 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2455 hdw->input_avail_mask = m;
2456 hdw->input_allowed_mask = hdw->input_avail_mask;
2458 /* If not a hybrid device, pathway_state never changes. So
2459 initialize it here to what it should forever be. */
2460 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2461 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2462 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2463 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2466 hdw->control_cnt = CTRLDEF_COUNT;
2467 hdw->control_cnt += MPEGDEF_COUNT;
2468 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
2470 if (!hdw->controls) goto fail;
2471 hdw->hdw_desc = hdw_desc;
2472 for (idx = 0; idx < hdw->control_cnt; idx++) {
2473 cptr = hdw->controls + idx;
2476 for (idx = 0; idx < 32; idx++) {
2477 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2479 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2480 cptr = hdw->controls + idx;
2481 cptr->info = control_defs+idx;
2484 /* Ensure that default input choice is a valid one. */
2485 m = hdw->input_avail_mask;
2486 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2487 if (!((1 << idx) & m)) continue;
2488 hdw->input_val = idx;
2492 /* Define and configure additional controls from cx2341x module. */
2493 hdw->mpeg_ctrl_info = kzalloc(
2494 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
2495 if (!hdw->mpeg_ctrl_info) goto fail;
2496 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2497 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2498 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2499 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2500 ciptr->name = mpeg_ids[idx].strid;
2501 ciptr->v4l_id = mpeg_ids[idx].id;
2502 ciptr->skip_init = !0;
2503 ciptr->get_value = ctrl_cx2341x_get;
2504 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2505 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2506 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2507 qctrl.id = ciptr->v4l_id;
2508 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2509 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2510 ciptr->set_value = ctrl_cx2341x_set;
2512 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2513 PVR2_CTLD_INFO_DESC_SIZE);
2514 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2515 ciptr->default_value = qctrl.default_value;
2516 switch (qctrl.type) {
2518 case V4L2_CTRL_TYPE_INTEGER:
2519 ciptr->type = pvr2_ctl_int;
2520 ciptr->def.type_int.min_value = qctrl.minimum;
2521 ciptr->def.type_int.max_value = qctrl.maximum;
2523 case V4L2_CTRL_TYPE_BOOLEAN:
2524 ciptr->type = pvr2_ctl_bool;
2526 case V4L2_CTRL_TYPE_MENU:
2527 ciptr->type = pvr2_ctl_enum;
2528 ciptr->def.type_enum.value_names =
2529 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2532 ciptr->def.type_enum.value_names[cnt1] != NULL;
2534 ciptr->def.type_enum.count = cnt1;
2540 // Initialize video standard enum dynamic control
2541 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2543 memcpy(&hdw->std_info_enum,cptr->info,
2544 sizeof(hdw->std_info_enum));
2545 cptr->info = &hdw->std_info_enum;
2548 // Initialize control data regarding video standard masks
2549 valid_std_mask = pvr2_std_get_usable();
2550 for (idx = 0; idx < 32; idx++) {
2551 if (!(valid_std_mask & (1 << idx))) continue;
2552 cnt1 = pvr2_std_id_to_str(
2553 hdw->std_mask_names[idx],
2554 sizeof(hdw->std_mask_names[idx])-1,
2556 hdw->std_mask_names[idx][cnt1] = 0;
2558 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2560 memcpy(&hdw->std_info_avail,cptr->info,
2561 sizeof(hdw->std_info_avail));
2562 cptr->info = &hdw->std_info_avail;
2563 hdw->std_info_avail.def.type_bitmask.bit_names =
2565 hdw->std_info_avail.def.type_bitmask.valid_bits =
2568 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2570 memcpy(&hdw->std_info_cur,cptr->info,
2571 sizeof(hdw->std_info_cur));
2572 cptr->info = &hdw->std_info_cur;
2573 hdw->std_info_cur.def.type_bitmask.bit_names =
2575 hdw->std_info_avail.def.type_bitmask.valid_bits =
2579 hdw->cropcap_stale = !0;
2580 hdw->eeprom_addr = -1;
2581 hdw->unit_number = -1;
2582 hdw->v4l_minor_number_video = -1;
2583 hdw->v4l_minor_number_vbi = -1;
2584 hdw->v4l_minor_number_radio = -1;
2585 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2586 if (!hdw->ctl_write_buffer) goto fail;
2587 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2588 if (!hdw->ctl_read_buffer) goto fail;
2589 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2590 if (!hdw->ctl_write_urb) goto fail;
2591 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2592 if (!hdw->ctl_read_urb) goto fail;
2594 if (v4l2_device_register(&usb_dev->dev, &hdw->v4l2_dev) != 0) {
2595 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2596 "Error registering with v4l core, giving up");
2599 mutex_lock(&pvr2_unit_mtx); do {
2600 for (idx = 0; idx < PVR_NUM; idx++) {
2601 if (unit_pointers[idx]) continue;
2602 hdw->unit_number = idx;
2603 unit_pointers[idx] = hdw;
2606 } while (0); mutex_unlock(&pvr2_unit_mtx);
2609 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2611 if (hdw->unit_number >= 0) {
2612 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2613 ('a' + hdw->unit_number));
2616 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2617 hdw->name[cnt1] = 0;
2619 hdw->workqueue = create_singlethread_workqueue(hdw->name);
2620 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2621 INIT_WORK(&hdw->worki2csync,pvr2_hdw_worker_i2c);
2623 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2624 hdw->unit_number,hdw->name);
2626 hdw->tuner_type = -1;
2629 hdw->usb_intf = intf;
2630 hdw->usb_dev = usb_dev;
2632 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2634 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2635 usb_set_interface(hdw->usb_dev,ifnum,0);
2637 mutex_init(&hdw->ctl_lock_mutex);
2638 mutex_init(&hdw->big_lock_mutex);
2643 del_timer_sync(&hdw->quiescent_timer);
2644 del_timer_sync(&hdw->encoder_run_timer);
2645 del_timer_sync(&hdw->encoder_wait_timer);
2646 if (hdw->workqueue) {
2647 flush_workqueue(hdw->workqueue);
2648 destroy_workqueue(hdw->workqueue);
2649 hdw->workqueue = NULL;
2651 usb_free_urb(hdw->ctl_read_urb);
2652 usb_free_urb(hdw->ctl_write_urb);
2653 kfree(hdw->ctl_read_buffer);
2654 kfree(hdw->ctl_write_buffer);
2655 kfree(hdw->controls);
2656 kfree(hdw->mpeg_ctrl_info);
2657 kfree(hdw->std_defs);
2658 kfree(hdw->std_enum_names);
2665 /* Remove _all_ associations between this driver and the underlying USB
2667 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2669 if (hdw->flag_disconnected) return;
2670 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2671 if (hdw->ctl_read_urb) {
2672 usb_kill_urb(hdw->ctl_read_urb);
2673 usb_free_urb(hdw->ctl_read_urb);
2674 hdw->ctl_read_urb = NULL;
2676 if (hdw->ctl_write_urb) {
2677 usb_kill_urb(hdw->ctl_write_urb);
2678 usb_free_urb(hdw->ctl_write_urb);
2679 hdw->ctl_write_urb = NULL;
2681 if (hdw->ctl_read_buffer) {
2682 kfree(hdw->ctl_read_buffer);
2683 hdw->ctl_read_buffer = NULL;
2685 if (hdw->ctl_write_buffer) {
2686 kfree(hdw->ctl_write_buffer);
2687 hdw->ctl_write_buffer = NULL;
2689 hdw->flag_disconnected = !0;
2690 /* If we don't do this, then there will be a dangling struct device
2691 reference to our disappearing device persisting inside the V4L
2693 if (hdw->v4l2_dev.dev) {
2694 dev_set_drvdata(hdw->v4l2_dev.dev, NULL);
2695 hdw->v4l2_dev.dev = NULL;
2697 hdw->usb_dev = NULL;
2698 hdw->usb_intf = NULL;
2699 pvr2_hdw_render_useless(hdw);
2703 /* Destroy hardware interaction structure */
2704 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2707 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2708 if (hdw->workqueue) {
2709 flush_workqueue(hdw->workqueue);
2710 destroy_workqueue(hdw->workqueue);
2711 hdw->workqueue = NULL;
2713 del_timer_sync(&hdw->quiescent_timer);
2714 del_timer_sync(&hdw->encoder_run_timer);
2715 del_timer_sync(&hdw->encoder_wait_timer);
2716 if (hdw->fw_buffer) {
2717 kfree(hdw->fw_buffer);
2718 hdw->fw_buffer = NULL;
2720 if (hdw->vid_stream) {
2721 pvr2_stream_destroy(hdw->vid_stream);
2722 hdw->vid_stream = NULL;
2724 if (hdw->decoder_ctrl) {
2725 hdw->decoder_ctrl->detach(hdw->decoder_ctrl->ctxt);
2727 pvr2_i2c_core_done(hdw);
2728 pvr2_i2c_track_done(hdw);
2729 v4l2_device_unregister(&hdw->v4l2_dev);
2730 pvr2_hdw_remove_usb_stuff(hdw);
2731 mutex_lock(&pvr2_unit_mtx); do {
2732 if ((hdw->unit_number >= 0) &&
2733 (hdw->unit_number < PVR_NUM) &&
2734 (unit_pointers[hdw->unit_number] == hdw)) {
2735 unit_pointers[hdw->unit_number] = NULL;
2737 } while (0); mutex_unlock(&pvr2_unit_mtx);
2738 kfree(hdw->controls);
2739 kfree(hdw->mpeg_ctrl_info);
2740 kfree(hdw->std_defs);
2741 kfree(hdw->std_enum_names);
2746 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2748 return (hdw && hdw->flag_ok);
2752 /* Called when hardware has been unplugged */
2753 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2755 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2756 LOCK_TAKE(hdw->big_lock);
2757 LOCK_TAKE(hdw->ctl_lock);
2758 pvr2_hdw_remove_usb_stuff(hdw);
2759 LOCK_GIVE(hdw->ctl_lock);
2760 LOCK_GIVE(hdw->big_lock);
2764 // Attempt to autoselect an appropriate value for std_enum_cur given
2765 // whatever is currently in std_mask_cur
2766 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2769 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2770 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2771 hdw->std_enum_cur = idx;
2775 hdw->std_enum_cur = 0;
2779 // Calculate correct set of enumerated standards based on currently known
2780 // set of available standards bits.
2781 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2783 struct v4l2_standard *newstd;
2784 unsigned int std_cnt;
2787 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2789 if (hdw->std_defs) {
2790 kfree(hdw->std_defs);
2791 hdw->std_defs = NULL;
2793 hdw->std_enum_cnt = 0;
2794 if (hdw->std_enum_names) {
2795 kfree(hdw->std_enum_names);
2796 hdw->std_enum_names = NULL;
2801 PVR2_TRACE_ERROR_LEGS,
2802 "WARNING: Failed to identify any viable standards");
2804 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2805 hdw->std_enum_names[0] = "none";
2806 for (idx = 0; idx < std_cnt; idx++) {
2807 hdw->std_enum_names[idx+1] =
2810 // Set up the dynamic control for this standard
2811 hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2812 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2813 hdw->std_defs = newstd;
2814 hdw->std_enum_cnt = std_cnt+1;
2815 hdw->std_enum_cur = 0;
2816 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2820 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2821 struct v4l2_standard *std,
2825 if (!idx) return ret;
2826 LOCK_TAKE(hdw->big_lock); do {
2827 if (idx >= hdw->std_enum_cnt) break;
2829 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2831 } while (0); LOCK_GIVE(hdw->big_lock);
2836 /* Get the number of defined controls */
2837 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2839 return hdw->control_cnt;
2843 /* Retrieve a control handle given its index (0..count-1) */
2844 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2847 if (idx >= hdw->control_cnt) return NULL;
2848 return hdw->controls + idx;
2852 /* Retrieve a control handle given its index (0..count-1) */
2853 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2854 unsigned int ctl_id)
2856 struct pvr2_ctrl *cptr;
2860 /* This could be made a lot more efficient, but for now... */
2861 for (idx = 0; idx < hdw->control_cnt; idx++) {
2862 cptr = hdw->controls + idx;
2863 i = cptr->info->internal_id;
2864 if (i && (i == ctl_id)) return cptr;
2870 /* Given a V4L ID, retrieve the control structure associated with it. */
2871 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2873 struct pvr2_ctrl *cptr;
2877 /* This could be made a lot more efficient, but for now... */
2878 for (idx = 0; idx < hdw->control_cnt; idx++) {
2879 cptr = hdw->controls + idx;
2880 i = cptr->info->v4l_id;
2881 if (i && (i == ctl_id)) return cptr;
2887 /* Given a V4L ID for its immediate predecessor, retrieve the control
2888 structure associated with it. */
2889 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2890 unsigned int ctl_id)
2892 struct pvr2_ctrl *cptr,*cp2;
2896 /* This could be made a lot more efficient, but for now... */
2898 for (idx = 0; idx < hdw->control_cnt; idx++) {
2899 cptr = hdw->controls + idx;
2900 i = cptr->info->v4l_id;
2902 if (i <= ctl_id) continue;
2903 if (cp2 && (cp2->info->v4l_id < i)) continue;
2911 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2914 case pvr2_ctl_int: return "integer";
2915 case pvr2_ctl_enum: return "enum";
2916 case pvr2_ctl_bool: return "boolean";
2917 case pvr2_ctl_bitmask: return "bitmask";
2923 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2924 const char *name, int val)
2926 struct v4l2_control ctrl;
2927 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2928 memset(&ctrl, 0, sizeof(ctrl));
2931 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, s_ctrl, &ctrl);
2934 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2935 if ((hdw)->lab##_dirty) { \
2936 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2939 /* Execute whatever commands are required to update the state of all the
2940 sub-devices so that they match our current control values. */
2941 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2943 struct v4l2_subdev *sd;
2945 pvr2_subdev_update_func fp;
2947 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2949 if (hdw->tuner_updated) {
2950 struct tuner_setup setup;
2951 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2953 if (((int)(hdw->tuner_type)) >= 0) {
2954 setup.addr = ADDR_UNSET;
2955 setup.type = hdw->tuner_type;
2956 setup.mode_mask = T_RADIO | T_ANALOG_TV;
2957 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2958 tuner, s_type_addr, &setup);
2962 if (hdw->input_dirty || hdw->std_dirty) {
2963 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
2964 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2965 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2969 vs = hdw->std_mask_cur;
2970 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2973 hdw->tuner_signal_stale = !0;
2974 hdw->cropcap_stale = !0;
2977 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
2978 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
2979 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
2980 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
2981 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
2982 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
2983 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
2984 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
2985 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
2987 if (hdw->input_dirty || hdw->audiomode_dirty) {
2988 struct v4l2_tuner vt;
2989 memset(&vt, 0, sizeof(vt));
2990 vt.audmode = hdw->audiomode_val;
2991 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
2994 if (hdw->freqDirty) {
2996 struct v4l2_frequency freq;
2997 fv = pvr2_hdw_get_cur_freq(hdw);
2998 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
2999 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
3000 memset(&freq, 0, sizeof(freq));
3001 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
3002 /* ((fv * 1000) / 62500) */
3003 freq.frequency = (fv * 2) / 125;
3005 freq.frequency = fv / 62500;
3007 /* tuner-core currently doesn't seem to care about this, but
3008 let's set it anyway for completeness. */
3009 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3010 freq.type = V4L2_TUNER_RADIO;
3012 freq.type = V4L2_TUNER_ANALOG_TV;
3015 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
3016 s_frequency, &freq);
3019 if (hdw->res_hor_dirty || hdw->res_ver_dirty) {
3020 struct v4l2_format fmt;
3021 memset(&fmt, 0, sizeof(fmt));
3022 fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
3023 fmt.fmt.pix.width = hdw->res_hor_val;
3024 fmt.fmt.pix.height = hdw->res_ver_val;
3025 pvr2_trace(PVR2_TRACE_CHIPS,"subdev v4l2 set_size(%dx%d)",
3026 fmt.fmt.pix.width, fmt.fmt.pix.height);
3027 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_fmt, &fmt);
3030 if (hdw->srate_dirty) {
3032 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
3034 switch (hdw->srate_val) {
3036 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
3039 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
3042 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
3046 v4l2_device_call_all(&hdw->v4l2_dev, 0,
3047 audio, s_clock_freq, val);
3050 /* Unable to set crop parameters; there is apparently no equivalent
3051 for VIDIOC_S_CROP */
3053 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
3055 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
3056 fp = pvr2_module_update_functions[id];
3061 if (hdw->tuner_signal_stale && hdw->cropcap_stale) {
3062 pvr2_hdw_status_poll(hdw);
3067 /* Figure out if we need to commit control changes. If so, mark internal
3068 state flags to indicate this fact and return true. Otherwise do nothing
3069 else and return false. */
3070 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
3073 struct pvr2_ctrl *cptr;
3075 int commit_flag = 0;
3077 unsigned int bcnt,ccnt;
3079 for (idx = 0; idx < hdw->control_cnt; idx++) {
3080 cptr = hdw->controls + idx;
3081 if (!cptr->info->is_dirty) continue;
3082 if (!cptr->info->is_dirty(cptr)) continue;
3085 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
3086 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
3089 cptr->info->get_value(cptr,&value);
3090 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
3092 sizeof(buf)-bcnt,&ccnt);
3094 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
3095 get_ctrl_typename(cptr->info->type));
3096 pvr2_trace(PVR2_TRACE_CTL,
3097 "/*--TRACE_COMMIT--*/ %.*s",
3102 /* Nothing has changed */
3106 hdw->state_pipeline_config = 0;
3107 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3108 pvr2_hdw_state_sched(hdw);
3114 /* Perform all operations needed to commit all control changes. This must
3115 be performed in synchronization with the pipeline state and is thus
3116 expected to be called as part of the driver's worker thread. Return
3117 true if commit successful, otherwise return false to indicate that
3118 commit isn't possible at this time. */
3119 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3122 struct pvr2_ctrl *cptr;
3123 int disruptive_change;
3125 /* Handle some required side effects when the video standard is
3127 if (hdw->std_dirty) {
3130 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3137 /* Rewrite the vertical resolution to be appropriate to the
3138 video standard that has been selected. */
3139 if (nvres != hdw->res_ver_val) {
3140 hdw->res_ver_val = nvres;
3141 hdw->res_ver_dirty = !0;
3143 /* Rewrite the GOP size to be appropriate to the video
3144 standard that has been selected. */
3145 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3146 struct v4l2_ext_controls cs;
3147 struct v4l2_ext_control c1;
3148 memset(&cs, 0, sizeof(cs));
3149 memset(&c1, 0, sizeof(c1));
3152 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3153 c1.value = gop_size;
3154 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3155 VIDIOC_S_EXT_CTRLS);
3159 if (hdw->input_dirty && hdw->state_pathway_ok &&
3160 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3161 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3162 hdw->pathway_state)) {
3163 /* Change of mode being asked for... */
3164 hdw->state_pathway_ok = 0;
3165 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3167 if (!hdw->state_pathway_ok) {
3168 /* Can't commit anything until pathway is ok. */
3171 /* The broadcast decoder can only scale down, so if
3172 * res_*_dirty && crop window < output format ==> enlarge crop.
3174 * The mpeg encoder receives fields of res_hor_val dots and
3175 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3177 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3178 hdw->cropw_val = hdw->res_hor_val;
3179 hdw->cropw_dirty = !0;
3180 } else if (hdw->cropw_dirty) {
3181 hdw->res_hor_dirty = !0; /* must rescale */
3182 hdw->res_hor_val = min(720, hdw->cropw_val);
3184 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3185 hdw->croph_val = hdw->res_ver_val;
3186 hdw->croph_dirty = !0;
3187 } else if (hdw->croph_dirty) {
3188 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3189 hdw->res_ver_dirty = !0;
3190 hdw->res_ver_val = min(nvres, hdw->croph_val);
3193 /* If any of the below has changed, then we can't do the update
3194 while the pipeline is running. Pipeline must be paused first
3195 and decoder -> encoder connection be made quiescent before we
3199 hdw->enc_unsafe_stale ||
3201 hdw->res_ver_dirty ||
3202 hdw->res_hor_dirty ||
3206 (hdw->active_stream_type != hdw->desired_stream_type));
3207 if (disruptive_change && !hdw->state_pipeline_idle) {
3208 /* Pipeline is not idle; we can't proceed. Arrange to
3209 cause pipeline to stop so that we can try this again
3211 hdw->state_pipeline_pause = !0;
3215 if (hdw->srate_dirty) {
3216 /* Write new sample rate into control structure since
3217 * the master copy is stale. We must track srate
3218 * separate from the mpeg control structure because
3219 * other logic also uses this value. */
3220 struct v4l2_ext_controls cs;
3221 struct v4l2_ext_control c1;
3222 memset(&cs,0,sizeof(cs));
3223 memset(&c1,0,sizeof(c1));
3226 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3227 c1.value = hdw->srate_val;
3228 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3231 /* Scan i2c core at this point - before we clear all the dirty
3232 bits. Various parts of the i2c core will notice dirty bits as
3233 appropriate and arrange to broadcast or directly send updates to
3234 the client drivers in order to keep everything in sync */
3235 pvr2_i2c_core_check_stale(hdw);
3237 if (hdw->active_stream_type != hdw->desired_stream_type) {
3238 /* Handle any side effects of stream config here */
3239 hdw->active_stream_type = hdw->desired_stream_type;
3242 if (hdw->hdw_desc->signal_routing_scheme ==
3243 PVR2_ROUTING_SCHEME_GOTVIEW) {
3245 /* Handle GOTVIEW audio switching */
3246 pvr2_hdw_gpio_get_out(hdw,&b);
3247 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3249 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3252 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3256 /* Check and update state for all sub-devices. */
3257 pvr2_subdev_update(hdw);
3259 hdw->tuner_updated = 0;
3260 for (idx = 0; idx < hdw->control_cnt; idx++) {
3261 cptr = hdw->controls + idx;
3262 if (!cptr->info->clear_dirty) continue;
3263 cptr->info->clear_dirty(cptr);
3266 /* Now execute i2c core update */
3267 pvr2_i2c_core_sync(hdw);
3269 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3270 hdw->state_encoder_run) {
3271 /* If encoder isn't running or it can't be touched, then
3272 this will get worked out later when we start the
3274 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3277 hdw->state_pipeline_config = !0;
3278 /* Hardware state may have changed in a way to cause the cropping
3279 capabilities to have changed. So mark it stale, which will
3280 cause a later re-fetch. */
3281 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3286 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3289 LOCK_TAKE(hdw->big_lock);
3290 fl = pvr2_hdw_commit_setup(hdw);
3291 LOCK_GIVE(hdw->big_lock);
3293 return pvr2_hdw_wait(hdw,0);
3297 static void pvr2_hdw_worker_i2c(struct work_struct *work)
3299 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,worki2csync);
3300 LOCK_TAKE(hdw->big_lock); do {
3301 pvr2_i2c_core_sync(hdw);
3302 } while (0); LOCK_GIVE(hdw->big_lock);
3306 static void pvr2_hdw_worker_poll(struct work_struct *work)
3309 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3310 LOCK_TAKE(hdw->big_lock); do {
3311 fl = pvr2_hdw_state_eval(hdw);
3312 } while (0); LOCK_GIVE(hdw->big_lock);
3313 if (fl && hdw->state_func) {
3314 hdw->state_func(hdw->state_data);
3319 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3321 return wait_event_interruptible(
3322 hdw->state_wait_data,
3323 (hdw->state_stale == 0) &&
3324 (!state || (hdw->master_state != state)));
3328 /* Return name for this driver instance */
3329 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3335 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3337 return hdw->hdw_desc->description;
3341 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3343 return hdw->hdw_desc->shortname;
3347 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3350 LOCK_TAKE(hdw->ctl_lock); do {
3351 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3352 result = pvr2_send_request(hdw,
3355 if (result < 0) break;
3356 result = (hdw->cmd_buffer[0] != 0);
3357 } while(0); LOCK_GIVE(hdw->ctl_lock);
3362 /* Execute poll of tuner status */
3363 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3365 LOCK_TAKE(hdw->big_lock); do {
3366 pvr2_hdw_status_poll(hdw);
3367 } while (0); LOCK_GIVE(hdw->big_lock);
3371 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3373 if (!hdw->cropcap_stale) {
3376 pvr2_hdw_status_poll(hdw);
3377 if (hdw->cropcap_stale) {
3384 /* Return information about cropping capabilities */
3385 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3388 LOCK_TAKE(hdw->big_lock);
3389 stat = pvr2_hdw_check_cropcap(hdw);
3391 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3393 LOCK_GIVE(hdw->big_lock);
3398 /* Return information about the tuner */
3399 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3401 LOCK_TAKE(hdw->big_lock); do {
3402 if (hdw->tuner_signal_stale) {
3403 pvr2_hdw_status_poll(hdw);
3405 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3406 } while (0); LOCK_GIVE(hdw->big_lock);
3411 /* Get handle to video output stream */
3412 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3414 return hp->vid_stream;
3418 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3420 int nr = pvr2_hdw_get_unit_number(hdw);
3421 LOCK_TAKE(hdw->big_lock); do {
3422 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
3423 hdw->log_requested = !0;
3424 pvr2_i2c_core_check_stale(hdw);
3425 pvr2_i2c_core_sync(hdw);
3426 hdw->log_requested = 0;
3427 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3428 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3429 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3430 pvr2_hdw_state_log_state(hdw);
3431 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
3432 } while (0); LOCK_GIVE(hdw->big_lock);
3436 /* Grab EEPROM contents, needed for direct method. */
3437 #define EEPROM_SIZE 8192
3438 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3439 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3441 struct i2c_msg msg[2];
3450 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3452 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3453 "Failed to allocate memory"
3454 " required to read eeprom");
3458 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3460 addr = hdw->eeprom_addr;
3461 /* Seems that if the high bit is set, then the *real* eeprom
3462 address is shifted right now bit position (noticed this in
3463 newer PVR USB2 hardware) */
3464 if (addr & 0x80) addr >>= 1;
3466 /* FX2 documentation states that a 16bit-addressed eeprom is
3467 expected if the I2C address is an odd number (yeah, this is
3468 strange but it's what they do) */
3469 mode16 = (addr & 1);
3470 eepromSize = (mode16 ? EEPROM_SIZE : 256);
3471 trace_eeprom("Examining %d byte eeprom at location 0x%x"
3472 " using %d bit addressing",eepromSize,addr,
3477 msg[0].len = mode16 ? 2 : 1;
3480 msg[1].flags = I2C_M_RD;
3482 /* We have to do the actual eeprom data fetch ourselves, because
3483 (1) we're only fetching part of the eeprom, and (2) if we were
3484 getting the whole thing our I2C driver can't grab it in one
3485 pass - which is what tveeprom is otherwise going to attempt */
3486 memset(eeprom,0,EEPROM_SIZE);
3487 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3489 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3490 offs = tcnt + (eepromSize - EEPROM_SIZE);
3492 iadd[0] = offs >> 8;
3498 msg[1].buf = eeprom+tcnt;
3499 if ((ret = i2c_transfer(&hdw->i2c_adap,
3500 msg,ARRAY_SIZE(msg))) != 2) {
3501 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3502 "eeprom fetch set offs err=%d",ret);
3511 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3518 LOCK_TAKE(hdw->big_lock); do {
3519 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3522 pvr2_trace(PVR2_TRACE_FIRMWARE,
3523 "Cleaning up after CPU firmware fetch");
3524 kfree(hdw->fw_buffer);
3525 hdw->fw_buffer = NULL;
3527 if (hdw->fw_cpu_flag) {
3528 /* Now release the CPU. It will disconnect
3529 and reconnect later. */
3530 pvr2_hdw_cpureset_assert(hdw,0);
3535 hdw->fw_cpu_flag = (prom_flag == 0);
3536 if (hdw->fw_cpu_flag) {
3537 pvr2_trace(PVR2_TRACE_FIRMWARE,
3538 "Preparing to suck out CPU firmware");
3539 hdw->fw_size = 0x2000;
3540 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3541 if (!hdw->fw_buffer) {
3546 /* We have to hold the CPU during firmware upload. */
3547 pvr2_hdw_cpureset_assert(hdw,1);
3549 /* download the firmware from address 0000-1fff in 2048
3550 (=0x800) bytes chunk. */
3552 pvr2_trace(PVR2_TRACE_FIRMWARE,
3553 "Grabbing CPU firmware");
3554 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3555 for(address = 0; address < hdw->fw_size;
3557 ret = usb_control_msg(hdw->usb_dev,pipe,
3560 hdw->fw_buffer+address,
3565 pvr2_trace(PVR2_TRACE_FIRMWARE,
3566 "Done grabbing CPU firmware");
3568 pvr2_trace(PVR2_TRACE_FIRMWARE,
3569 "Sucking down EEPROM contents");
3570 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3571 if (!hdw->fw_buffer) {
3572 pvr2_trace(PVR2_TRACE_FIRMWARE,
3573 "EEPROM content suck failed.");
3576 hdw->fw_size = EEPROM_SIZE;
3577 pvr2_trace(PVR2_TRACE_FIRMWARE,
3578 "Done sucking down EEPROM contents");
3581 } while (0); LOCK_GIVE(hdw->big_lock);
3585 /* Return true if we're in a mode for retrieval CPU firmware */
3586 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3588 return hdw->fw_buffer != NULL;
3592 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3593 char *buf,unsigned int cnt)
3596 LOCK_TAKE(hdw->big_lock); do {
3600 if (!hdw->fw_buffer) {
3605 if (offs >= hdw->fw_size) {
3606 pvr2_trace(PVR2_TRACE_FIRMWARE,
3607 "Read firmware data offs=%d EOF",
3613 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3615 memcpy(buf,hdw->fw_buffer+offs,cnt);
3617 pvr2_trace(PVR2_TRACE_FIRMWARE,
3618 "Read firmware data offs=%d cnt=%d",
3621 } while (0); LOCK_GIVE(hdw->big_lock);
3627 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3628 enum pvr2_v4l_type index)
3631 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3632 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3633 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3639 /* Store a v4l minor device number */
3640 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3641 enum pvr2_v4l_type index,int v)
3644 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
3645 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
3646 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
3652 static void pvr2_ctl_write_complete(struct urb *urb)
3654 struct pvr2_hdw *hdw = urb->context;
3655 hdw->ctl_write_pend_flag = 0;
3656 if (hdw->ctl_read_pend_flag) return;
3657 complete(&hdw->ctl_done);
3661 static void pvr2_ctl_read_complete(struct urb *urb)
3663 struct pvr2_hdw *hdw = urb->context;
3664 hdw->ctl_read_pend_flag = 0;
3665 if (hdw->ctl_write_pend_flag) return;
3666 complete(&hdw->ctl_done);
3670 static void pvr2_ctl_timeout(unsigned long data)
3672 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3673 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3674 hdw->ctl_timeout_flag = !0;
3675 if (hdw->ctl_write_pend_flag)
3676 usb_unlink_urb(hdw->ctl_write_urb);
3677 if (hdw->ctl_read_pend_flag)
3678 usb_unlink_urb(hdw->ctl_read_urb);
3683 /* Issue a command and get a response from the device. This extended
3684 version includes a probe flag (which if set means that device errors
3685 should not be logged or treated as fatal) and a timeout in jiffies.
3686 This can be used to non-lethally probe the health of endpoint 1. */
3687 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3688 unsigned int timeout,int probe_fl,
3689 void *write_data,unsigned int write_len,
3690 void *read_data,unsigned int read_len)
3694 struct timer_list timer;
3695 if (!hdw->ctl_lock_held) {
3696 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3697 "Attempted to execute control transfer"
3701 if (!hdw->flag_ok && !probe_fl) {
3702 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3703 "Attempted to execute control transfer"
3704 " when device not ok");
3707 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3709 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3710 "Attempted to execute control transfer"
3711 " when USB is disconnected");
3716 /* Ensure that we have sane parameters */
3717 if (!write_data) write_len = 0;
3718 if (!read_data) read_len = 0;
3719 if (write_len > PVR2_CTL_BUFFSIZE) {
3721 PVR2_TRACE_ERROR_LEGS,
3722 "Attempted to execute %d byte"
3723 " control-write transfer (limit=%d)",
3724 write_len,PVR2_CTL_BUFFSIZE);
3727 if (read_len > PVR2_CTL_BUFFSIZE) {
3729 PVR2_TRACE_ERROR_LEGS,
3730 "Attempted to execute %d byte"
3731 " control-read transfer (limit=%d)",
3732 write_len,PVR2_CTL_BUFFSIZE);
3735 if ((!write_len) && (!read_len)) {
3737 PVR2_TRACE_ERROR_LEGS,
3738 "Attempted to execute null control transfer?");
3743 hdw->cmd_debug_state = 1;
3745 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3747 hdw->cmd_debug_code = 0;
3749 hdw->cmd_debug_write_len = write_len;
3750 hdw->cmd_debug_read_len = read_len;
3752 /* Initialize common stuff */
3753 init_completion(&hdw->ctl_done);
3754 hdw->ctl_timeout_flag = 0;
3755 hdw->ctl_write_pend_flag = 0;
3756 hdw->ctl_read_pend_flag = 0;
3758 timer.expires = jiffies + timeout;
3759 timer.data = (unsigned long)hdw;
3760 timer.function = pvr2_ctl_timeout;
3763 hdw->cmd_debug_state = 2;
3764 /* Transfer write data to internal buffer */
3765 for (idx = 0; idx < write_len; idx++) {
3766 hdw->ctl_write_buffer[idx] =
3767 ((unsigned char *)write_data)[idx];
3769 /* Initiate a write request */
3770 usb_fill_bulk_urb(hdw->ctl_write_urb,
3772 usb_sndbulkpipe(hdw->usb_dev,
3773 PVR2_CTL_WRITE_ENDPOINT),
3774 hdw->ctl_write_buffer,
3776 pvr2_ctl_write_complete,
3778 hdw->ctl_write_urb->actual_length = 0;
3779 hdw->ctl_write_pend_flag = !0;
3780 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3782 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3783 "Failed to submit write-control"
3784 " URB status=%d",status);
3785 hdw->ctl_write_pend_flag = 0;
3791 hdw->cmd_debug_state = 3;
3792 memset(hdw->ctl_read_buffer,0x43,read_len);
3793 /* Initiate a read request */
3794 usb_fill_bulk_urb(hdw->ctl_read_urb,
3796 usb_rcvbulkpipe(hdw->usb_dev,
3797 PVR2_CTL_READ_ENDPOINT),
3798 hdw->ctl_read_buffer,
3800 pvr2_ctl_read_complete,
3802 hdw->ctl_read_urb->actual_length = 0;
3803 hdw->ctl_read_pend_flag = !0;
3804 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3806 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3807 "Failed to submit read-control"
3808 " URB status=%d",status);
3809 hdw->ctl_read_pend_flag = 0;
3817 /* Now wait for all I/O to complete */
3818 hdw->cmd_debug_state = 4;
3819 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3820 wait_for_completion(&hdw->ctl_done);
3822 hdw->cmd_debug_state = 5;
3825 del_timer_sync(&timer);
3827 hdw->cmd_debug_state = 6;
3830 if (hdw->ctl_timeout_flag) {
3831 status = -ETIMEDOUT;
3833 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3834 "Timed out control-write");
3840 /* Validate results of write request */
3841 if ((hdw->ctl_write_urb->status != 0) &&
3842 (hdw->ctl_write_urb->status != -ENOENT) &&
3843 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3844 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3845 /* USB subsystem is reporting some kind of failure
3847 status = hdw->ctl_write_urb->status;
3849 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3850 "control-write URB failure,"
3856 if (hdw->ctl_write_urb->actual_length < write_len) {
3857 /* Failed to write enough data */
3860 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3861 "control-write URB short,"
3862 " expected=%d got=%d",
3864 hdw->ctl_write_urb->actual_length);
3870 /* Validate results of read request */
3871 if ((hdw->ctl_read_urb->status != 0) &&
3872 (hdw->ctl_read_urb->status != -ENOENT) &&
3873 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3874 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3875 /* USB subsystem is reporting some kind of failure
3877 status = hdw->ctl_read_urb->status;
3879 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3880 "control-read URB failure,"
3886 if (hdw->ctl_read_urb->actual_length < read_len) {
3887 /* Failed to read enough data */
3890 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3891 "control-read URB short,"
3892 " expected=%d got=%d",
3894 hdw->ctl_read_urb->actual_length);
3898 /* Transfer retrieved data out from internal buffer */
3899 for (idx = 0; idx < read_len; idx++) {
3900 ((unsigned char *)read_data)[idx] =
3901 hdw->ctl_read_buffer[idx];
3907 hdw->cmd_debug_state = 0;
3908 if ((status < 0) && (!probe_fl)) {
3909 pvr2_hdw_render_useless(hdw);
3915 int pvr2_send_request(struct pvr2_hdw *hdw,
3916 void *write_data,unsigned int write_len,
3917 void *read_data,unsigned int read_len)
3919 return pvr2_send_request_ex(hdw,HZ*4,0,
3920 write_data,write_len,
3921 read_data,read_len);
3925 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3928 unsigned int cnt = 1;
3929 unsigned int args = 0;
3930 LOCK_TAKE(hdw->ctl_lock);
3931 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3932 args = (cmdcode >> 8) & 0xffu;
3933 args = (args > 2) ? 2 : args;
3936 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3938 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3941 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3943 unsigned int ccnt,bcnt;
3947 ccnt = scnprintf(tbuf+bcnt,
3949 "Sending FX2 command 0x%x",cmdcode);
3951 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3952 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3953 ccnt = scnprintf(tbuf+bcnt,
3956 pvr2_fx2cmd_desc[idx].desc);
3962 ccnt = scnprintf(tbuf+bcnt,
3964 " (%u",hdw->cmd_buffer[1]);
3967 ccnt = scnprintf(tbuf+bcnt,
3969 ",%u",hdw->cmd_buffer[2]);
3972 ccnt = scnprintf(tbuf+bcnt,
3977 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3979 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3980 LOCK_GIVE(hdw->ctl_lock);
3985 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3989 LOCK_TAKE(hdw->ctl_lock);
3991 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
3992 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
3993 hdw->cmd_buffer[5] = 0;
3994 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3995 hdw->cmd_buffer[7] = reg & 0xff;
3998 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
4000 LOCK_GIVE(hdw->ctl_lock);
4006 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
4010 LOCK_TAKE(hdw->ctl_lock);
4012 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
4013 hdw->cmd_buffer[1] = 0;
4014 hdw->cmd_buffer[2] = 0;
4015 hdw->cmd_buffer[3] = 0;
4016 hdw->cmd_buffer[4] = 0;
4017 hdw->cmd_buffer[5] = 0;
4018 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
4019 hdw->cmd_buffer[7] = reg & 0xff;
4021 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
4022 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
4024 LOCK_GIVE(hdw->ctl_lock);
4030 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
4032 if (!hdw->flag_ok) return;
4033 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4034 "Device being rendered inoperable");
4035 if (hdw->vid_stream) {
4036 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
4039 trace_stbit("flag_ok",hdw->flag_ok);
4040 pvr2_hdw_state_sched(hdw);
4044 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
4047 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
4048 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
4050 ret = usb_reset_device(hdw->usb_dev);
4051 usb_unlock_device(hdw->usb_dev);
4053 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4054 "Failed to lock USB device ret=%d",ret);
4056 if (init_pause_msec) {
4057 pvr2_trace(PVR2_TRACE_INFO,
4058 "Waiting %u msec for hardware to settle",
4060 msleep(init_pause_msec);
4066 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
4072 if (!hdw->usb_dev) return;
4074 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
4076 da[0] = val ? 0x01 : 0x00;
4078 /* Write the CPUCS register on the 8051. The lsb of the register
4079 is the reset bit; a 1 asserts reset while a 0 clears it. */
4080 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
4081 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
4083 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
4084 "cpureset_assert(%d) error=%d",val,ret);
4085 pvr2_hdw_render_useless(hdw);
4090 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
4092 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
4096 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
4098 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
4102 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
4104 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
4108 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
4110 pvr2_trace(PVR2_TRACE_INIT,
4111 "Requesting decoder reset");
4112 if (hdw->decoder_ctrl) {
4113 if (!hdw->decoder_ctrl->force_reset) {
4114 pvr2_trace(PVR2_TRACE_INIT,
4115 "Unable to reset decoder: not implemented");
4118 hdw->decoder_ctrl->force_reset(hdw->decoder_ctrl->ctxt);
4122 if (hdw->decoder_client_id) {
4123 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
4127 pvr2_trace(PVR2_TRACE_INIT,
4128 "Unable to reset decoder: nothing attached");
4133 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4136 return pvr2_issue_simple_cmd(hdw,
4137 FX2CMD_HCW_DEMOD_RESETIN |
4139 ((onoff ? 1 : 0) << 16));
4143 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4146 return pvr2_issue_simple_cmd(hdw,(onoff ?
4147 FX2CMD_ONAIR_DTV_POWER_ON :
4148 FX2CMD_ONAIR_DTV_POWER_OFF));
4152 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4155 return pvr2_issue_simple_cmd(hdw,(onoff ?
4156 FX2CMD_ONAIR_DTV_STREAMING_ON :
4157 FX2CMD_ONAIR_DTV_STREAMING_OFF));
4161 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4164 /* Compare digital/analog desired setting with current setting. If
4165 they don't match, fix it... */
4166 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4167 if (cmode == hdw->pathway_state) {
4168 /* They match; nothing to do */
4172 switch (hdw->hdw_desc->digital_control_scheme) {
4173 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4174 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4175 if (cmode == PVR2_PATHWAY_ANALOG) {
4176 /* If moving to analog mode, also force the decoder
4177 to reset. If no decoder is attached, then it's
4178 ok to ignore this because if/when the decoder
4179 attaches, it will reset itself at that time. */
4180 pvr2_hdw_cmd_decoder_reset(hdw);
4183 case PVR2_DIGITAL_SCHEME_ONAIR:
4184 /* Supposedly we should always have the power on whether in
4185 digital or analog mode. But for now do what appears to
4187 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4192 pvr2_hdw_untrip_unlocked(hdw);
4193 hdw->pathway_state = cmode;
4197 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4199 /* change some GPIO data
4201 * note: bit d7 of dir appears to control the LED,
4202 * so we shut it off here.
4206 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4208 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4210 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4214 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4216 static led_method_func led_methods[] = {
4217 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4222 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4224 unsigned int scheme_id;
4227 if ((!onoff) == (!hdw->led_on)) return;
4229 hdw->led_on = onoff != 0;
4231 scheme_id = hdw->hdw_desc->led_scheme;
4232 if (scheme_id < ARRAY_SIZE(led_methods)) {
4233 fp = led_methods[scheme_id];
4238 if (fp) (*fp)(hdw,onoff);
4242 /* Stop / start video stream transport */
4243 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4247 /* If we're in analog mode, then just issue the usual analog
4249 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4250 return pvr2_issue_simple_cmd(hdw,
4252 FX2CMD_STREAMING_ON :
4253 FX2CMD_STREAMING_OFF));
4254 /*Note: Not reached */
4257 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4258 /* Whoops, we don't know what mode we're in... */
4262 /* To get here we have to be in digital mode. The mechanism here
4263 is unfortunately different for different vendors. So we switch
4264 on the device's digital scheme attribute in order to figure out
4266 switch (hdw->hdw_desc->digital_control_scheme) {
4267 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4268 return pvr2_issue_simple_cmd(hdw,
4270 FX2CMD_HCW_DTV_STREAMING_ON :
4271 FX2CMD_HCW_DTV_STREAMING_OFF));
4272 case PVR2_DIGITAL_SCHEME_ONAIR:
4273 ret = pvr2_issue_simple_cmd(hdw,
4275 FX2CMD_STREAMING_ON :
4276 FX2CMD_STREAMING_OFF));
4277 if (ret) return ret;
4278 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4285 /* Evaluate whether or not state_pathway_ok can change */
4286 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4288 if (hdw->state_pathway_ok) {
4289 /* Nothing to do if pathway is already ok */
4292 if (!hdw->state_pipeline_idle) {
4293 /* Not allowed to change anything if pipeline is not idle */
4296 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4297 hdw->state_pathway_ok = !0;
4298 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4303 /* Evaluate whether or not state_encoder_ok can change */
4304 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4306 if (hdw->state_encoder_ok) return 0;
4307 if (hdw->flag_tripped) return 0;
4308 if (hdw->state_encoder_run) return 0;
4309 if (hdw->state_encoder_config) return 0;
4310 if (hdw->state_decoder_run) return 0;
4311 if (hdw->state_usbstream_run) return 0;
4312 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4313 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4314 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4318 if (pvr2_upload_firmware2(hdw) < 0) {
4319 hdw->flag_tripped = !0;
4320 trace_stbit("flag_tripped",hdw->flag_tripped);
4323 hdw->state_encoder_ok = !0;
4324 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4329 /* Evaluate whether or not state_encoder_config can change */
4330 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4332 if (hdw->state_encoder_config) {
4333 if (hdw->state_encoder_ok) {
4334 if (hdw->state_pipeline_req &&
4335 !hdw->state_pipeline_pause) return 0;
4337 hdw->state_encoder_config = 0;
4338 hdw->state_encoder_waitok = 0;
4339 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4340 /* paranoia - solve race if timer just completed */
4341 del_timer_sync(&hdw->encoder_wait_timer);
4343 if (!hdw->state_pathway_ok ||
4344 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4345 !hdw->state_encoder_ok ||
4346 !hdw->state_pipeline_idle ||
4347 hdw->state_pipeline_pause ||
4348 !hdw->state_pipeline_req ||
4349 !hdw->state_pipeline_config) {
4350 /* We must reset the enforced wait interval if
4351 anything has happened that might have disturbed
4352 the encoder. This should be a rare case. */
4353 if (timer_pending(&hdw->encoder_wait_timer)) {
4354 del_timer_sync(&hdw->encoder_wait_timer);
4356 if (hdw->state_encoder_waitok) {
4357 /* Must clear the state - therefore we did
4358 something to a state bit and must also
4360 hdw->state_encoder_waitok = 0;
4361 trace_stbit("state_encoder_waitok",
4362 hdw->state_encoder_waitok);
4367 if (!hdw->state_encoder_waitok) {
4368 if (!timer_pending(&hdw->encoder_wait_timer)) {
4369 /* waitok flag wasn't set and timer isn't
4370 running. Check flag once more to avoid
4371 a race then start the timer. This is
4372 the point when we measure out a minimal
4373 quiet interval before doing something to
4375 if (!hdw->state_encoder_waitok) {
4376 hdw->encoder_wait_timer.expires =
4378 (HZ * TIME_MSEC_ENCODER_WAIT
4380 add_timer(&hdw->encoder_wait_timer);
4383 /* We can't continue until we know we have been
4384 quiet for the interval measured by this
4388 pvr2_encoder_configure(hdw);
4389 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4391 trace_stbit("state_encoder_config",hdw->state_encoder_config);
4396 /* Return true if the encoder should not be running. */
4397 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4399 if (!hdw->state_encoder_ok) {
4400 /* Encoder isn't healthy at the moment, so stop it. */
4403 if (!hdw->state_pathway_ok) {
4404 /* Mode is not understood at the moment (i.e. it wants to
4405 change), so encoder must be stopped. */
4409 switch (hdw->pathway_state) {
4410 case PVR2_PATHWAY_ANALOG:
4411 if (!hdw->state_decoder_run) {
4412 /* We're in analog mode and the decoder is not
4413 running; thus the encoder should be stopped as
4418 case PVR2_PATHWAY_DIGITAL:
4419 if (hdw->state_encoder_runok) {
4420 /* This is a funny case. We're in digital mode so
4421 really the encoder should be stopped. However
4422 if it really is running, only kill it after
4423 runok has been set. This gives a chance for the
4424 onair quirk to function (encoder must run
4425 briefly first, at least once, before onair
4426 digital streaming can work). */
4431 /* Unknown mode; so encoder should be stopped. */
4435 /* If we get here, we haven't found a reason to stop the
4441 /* Return true if the encoder should be running. */
4442 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4444 if (!hdw->state_encoder_ok) {
4445 /* Don't run the encoder if it isn't healthy... */
4448 if (!hdw->state_pathway_ok) {
4449 /* Don't run the encoder if we don't (yet) know what mode
4450 we need to be in... */
4454 switch (hdw->pathway_state) {
4455 case PVR2_PATHWAY_ANALOG:
4456 if (hdw->state_decoder_run) {
4457 /* In analog mode, if the decoder is running, then
4462 case PVR2_PATHWAY_DIGITAL:
4463 if ((hdw->hdw_desc->digital_control_scheme ==
4464 PVR2_DIGITAL_SCHEME_ONAIR) &&
4465 !hdw->state_encoder_runok) {
4466 /* This is a quirk. OnAir hardware won't stream
4467 digital until the encoder has been run at least
4468 once, for a minimal period of time (empiricially
4469 measured to be 1/4 second). So if we're on
4470 OnAir hardware and the encoder has never been
4471 run at all, then start the encoder. Normal
4472 state machine logic in the driver will
4473 automatically handle the remaining bits. */
4478 /* For completeness (unknown mode; encoder won't run ever) */
4481 /* If we get here, then we haven't found any reason to run the
4482 encoder, so don't run it. */
4487 /* Evaluate whether or not state_encoder_run can change */
4488 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4490 if (hdw->state_encoder_run) {
4491 if (!state_check_disable_encoder_run(hdw)) return 0;
4492 if (hdw->state_encoder_ok) {
4493 del_timer_sync(&hdw->encoder_run_timer);
4494 if (pvr2_encoder_stop(hdw) < 0) return !0;
4496 hdw->state_encoder_run = 0;
4498 if (!state_check_enable_encoder_run(hdw)) return 0;
4499 if (pvr2_encoder_start(hdw) < 0) return !0;
4500 hdw->state_encoder_run = !0;
4501 if (!hdw->state_encoder_runok) {
4502 hdw->encoder_run_timer.expires =
4503 jiffies + (HZ * TIME_MSEC_ENCODER_OK / 1000);
4504 add_timer(&hdw->encoder_run_timer);
4507 trace_stbit("state_encoder_run",hdw->state_encoder_run);
4512 /* Timeout function for quiescent timer. */
4513 static void pvr2_hdw_quiescent_timeout(unsigned long data)
4515 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4516 hdw->state_decoder_quiescent = !0;
4517 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4518 hdw->state_stale = !0;
4519 queue_work(hdw->workqueue,&hdw->workpoll);
4523 /* Timeout function for encoder wait timer. */
4524 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
4526 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4527 hdw->state_encoder_waitok = !0;
4528 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4529 hdw->state_stale = !0;
4530 queue_work(hdw->workqueue,&hdw->workpoll);
4534 /* Timeout function for encoder run timer. */
4535 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
4537 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
4538 if (!hdw->state_encoder_runok) {
4539 hdw->state_encoder_runok = !0;
4540 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4541 hdw->state_stale = !0;
4542 queue_work(hdw->workqueue,&hdw->workpoll);
4547 /* Evaluate whether or not state_decoder_run can change */
4548 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4550 if (hdw->state_decoder_run) {
4551 if (hdw->state_encoder_ok) {
4552 if (hdw->state_pipeline_req &&
4553 !hdw->state_pipeline_pause &&
4554 hdw->state_pathway_ok) return 0;
4556 if (!hdw->flag_decoder_missed) {
4557 pvr2_decoder_enable(hdw,0);
4559 hdw->state_decoder_quiescent = 0;
4560 hdw->state_decoder_run = 0;
4561 /* paranoia - solve race if timer just completed */
4562 del_timer_sync(&hdw->quiescent_timer);
4564 if (!hdw->state_decoder_quiescent) {
4565 if (!timer_pending(&hdw->quiescent_timer)) {
4566 /* We don't do something about the
4567 quiescent timer until right here because
4568 we also want to catch cases where the
4569 decoder was already not running (like
4570 after initialization) as opposed to
4571 knowing that we had just stopped it.
4572 The second flag check is here to cover a
4573 race - the timer could have run and set
4574 this flag just after the previous check
4575 but before we did the pending check. */
4576 if (!hdw->state_decoder_quiescent) {
4577 hdw->quiescent_timer.expires =
4579 (HZ * TIME_MSEC_DECODER_WAIT
4581 add_timer(&hdw->quiescent_timer);
4584 /* Don't allow decoder to start again until it has
4585 been quiesced first. This little detail should
4586 hopefully further stabilize the encoder. */
4589 if (!hdw->state_pathway_ok ||
4590 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4591 !hdw->state_pipeline_req ||
4592 hdw->state_pipeline_pause ||
4593 !hdw->state_pipeline_config ||
4594 !hdw->state_encoder_config ||
4595 !hdw->state_encoder_ok) return 0;
4596 del_timer_sync(&hdw->quiescent_timer);
4597 if (hdw->flag_decoder_missed) return 0;
4598 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4599 hdw->state_decoder_quiescent = 0;
4600 hdw->state_decoder_run = !0;
4602 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4603 trace_stbit("state_decoder_run",hdw->state_decoder_run);
4608 /* Evaluate whether or not state_usbstream_run can change */
4609 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4611 if (hdw->state_usbstream_run) {
4613 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4614 fl = (hdw->state_encoder_ok &&
4615 hdw->state_encoder_run);
4616 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4617 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4618 fl = hdw->state_encoder_ok;
4621 hdw->state_pipeline_req &&
4622 !hdw->state_pipeline_pause &&
4623 hdw->state_pathway_ok) {
4626 pvr2_hdw_cmd_usbstream(hdw,0);
4627 hdw->state_usbstream_run = 0;
4629 if (!hdw->state_pipeline_req ||
4630 hdw->state_pipeline_pause ||
4631 !hdw->state_pathway_ok) return 0;
4632 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4633 if (!hdw->state_encoder_ok ||
4634 !hdw->state_encoder_run) return 0;
4635 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4636 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4637 if (!hdw->state_encoder_ok) return 0;
4638 if (hdw->state_encoder_run) return 0;
4639 if (hdw->hdw_desc->digital_control_scheme ==
4640 PVR2_DIGITAL_SCHEME_ONAIR) {
4641 /* OnAir digital receivers won't stream
4642 unless the analog encoder has run first.
4643 Why? I have no idea. But don't even
4644 try until we know the analog side is
4645 known to have run. */
4646 if (!hdw->state_encoder_runok) return 0;
4649 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4650 hdw->state_usbstream_run = !0;
4652 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4657 /* Attempt to configure pipeline, if needed */
4658 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4660 if (hdw->state_pipeline_config ||
4661 hdw->state_pipeline_pause) return 0;
4662 pvr2_hdw_commit_execute(hdw);
4667 /* Update pipeline idle and pipeline pause tracking states based on other
4668 inputs. This must be called whenever the other relevant inputs have
4670 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4674 /* Update pipeline state */
4675 st = !(hdw->state_encoder_run ||
4676 hdw->state_decoder_run ||
4677 hdw->state_usbstream_run ||
4678 (!hdw->state_decoder_quiescent));
4679 if (!st != !hdw->state_pipeline_idle) {
4680 hdw->state_pipeline_idle = st;
4683 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4684 hdw->state_pipeline_pause = 0;
4691 typedef int (*state_eval_func)(struct pvr2_hdw *);
4693 /* Set of functions to be run to evaluate various states in the driver. */
4694 static const state_eval_func eval_funcs[] = {
4695 state_eval_pathway_ok,
4696 state_eval_pipeline_config,
4697 state_eval_encoder_ok,
4698 state_eval_encoder_config,
4699 state_eval_decoder_run,
4700 state_eval_encoder_run,
4701 state_eval_usbstream_run,
4705 /* Process various states and return true if we did anything interesting. */
4706 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4709 int state_updated = 0;
4712 if (!hdw->state_stale) return 0;
4713 if ((hdw->fw1_state != FW1_STATE_OK) ||
4715 hdw->state_stale = 0;
4718 /* This loop is the heart of the entire driver. It keeps trying to
4719 evaluate various bits of driver state until nothing changes for
4720 one full iteration. Each "bit of state" tracks some global
4721 aspect of the driver, e.g. whether decoder should run, if
4722 pipeline is configured, usb streaming is on, etc. We separately
4723 evaluate each of those questions based on other driver state to
4724 arrive at the correct running configuration. */
4727 state_update_pipeline_state(hdw);
4728 /* Iterate over each bit of state */
4729 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4730 if ((*eval_funcs[i])(hdw)) {
4733 state_update_pipeline_state(hdw);
4736 } while (check_flag && hdw->flag_ok);
4737 hdw->state_stale = 0;
4738 trace_stbit("state_stale",hdw->state_stale);
4739 return state_updated;
4743 static unsigned int print_input_mask(unsigned int msk,
4744 char *buf,unsigned int acnt)
4746 unsigned int idx,ccnt;
4747 unsigned int tcnt = 0;
4748 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4749 if (!((1 << idx) & msk)) continue;
4750 ccnt = scnprintf(buf+tcnt,
4754 control_values_input[idx]);
4761 static const char *pvr2_pathway_state_name(int id)
4764 case PVR2_PATHWAY_ANALOG: return "analog";
4765 case PVR2_PATHWAY_DIGITAL: return "digital";
4766 default: return "unknown";
4771 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4772 char *buf,unsigned int acnt)
4778 "driver:%s%s%s%s%s <mode=%s>",
4779 (hdw->flag_ok ? " <ok>" : " <fail>"),
4780 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4781 (hdw->flag_disconnected ? " <disconnected>" :
4783 (hdw->flag_tripped ? " <tripped>" : ""),
4784 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4785 pvr2_pathway_state_name(hdw->pathway_state));
4790 "pipeline:%s%s%s%s",
4791 (hdw->state_pipeline_idle ? " <idle>" : ""),
4792 (hdw->state_pipeline_config ?
4793 " <configok>" : " <stale>"),
4794 (hdw->state_pipeline_req ? " <req>" : ""),
4795 (hdw->state_pipeline_pause ? " <pause>" : ""));
4799 "worker:%s%s%s%s%s%s%s",
4800 (hdw->state_decoder_run ?
4802 (hdw->state_decoder_quiescent ?
4803 "" : " <decode:stop>")),
4804 (hdw->state_decoder_quiescent ?
4805 " <decode:quiescent>" : ""),
4806 (hdw->state_encoder_ok ?
4807 "" : " <encode:init>"),
4808 (hdw->state_encoder_run ?
4809 (hdw->state_encoder_runok ?
4811 " <encode:firstrun>") :
4812 (hdw->state_encoder_runok ?
4814 " <encode:virgin>")),
4815 (hdw->state_encoder_config ?
4816 " <encode:configok>" :
4817 (hdw->state_encoder_waitok ?
4818 "" : " <encode:waitok>")),
4819 (hdw->state_usbstream_run ?
4820 " <usb:run>" : " <usb:stop>"),
4821 (hdw->state_pathway_ok ?
4822 " <pathway:ok>" : ""));
4827 pvr2_get_state_name(hdw->master_state));
4829 unsigned int tcnt = 0;
4832 ccnt = scnprintf(buf,
4834 "Hardware supported inputs: ");
4836 tcnt += print_input_mask(hdw->input_avail_mask,
4839 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4840 ccnt = scnprintf(buf+tcnt,
4842 "; allowed inputs: ");
4844 tcnt += print_input_mask(hdw->input_allowed_mask,
4851 struct pvr2_stream_stats stats;
4852 if (!hdw->vid_stream) break;
4853 pvr2_stream_get_stats(hdw->vid_stream,
4859 " URBs: queued=%u idle=%u ready=%u"
4860 " processed=%u failed=%u",
4861 stats.bytes_processed,
4862 stats.buffers_in_queue,
4863 stats.buffers_in_idle,
4864 stats.buffers_in_ready,
4865 stats.buffers_processed,
4866 stats.buffers_failed);
4869 struct v4l2_subdev *sd;
4870 unsigned int tcnt = 0;
4874 ccnt = scnprintf(buf,
4876 "Associated v4l2_subdev drivers:");
4878 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4881 if (id < ARRAY_SIZE(module_names)) {
4882 p = module_names[id];
4885 ccnt = scnprintf(buf + tcnt,
4889 ccnt = scnprintf(buf + tcnt,
4891 " (unknown id=%u)", id);
4903 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4904 char *buf,unsigned int acnt)
4906 unsigned int bcnt,ccnt,idx;
4908 LOCK_TAKE(hdw->big_lock);
4909 for (idx = 0; ; idx++) {
4910 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4912 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4914 buf[0] = '\n'; ccnt = 1;
4915 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4917 LOCK_GIVE(hdw->big_lock);
4922 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4925 unsigned int idx,ccnt;
4927 for (idx = 0; ; idx++) {
4928 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4930 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4935 /* Evaluate and update the driver's current state, taking various actions
4936 as appropriate for the update. */
4937 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4940 int state_updated = 0;
4941 int callback_flag = 0;
4944 pvr2_trace(PVR2_TRACE_STBITS,
4945 "Drive state check START");
4946 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4947 pvr2_hdw_state_log_state(hdw);
4950 /* Process all state and get back over disposition */
4951 state_updated = pvr2_hdw_state_update(hdw);
4953 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4955 /* Update master state based upon all other states. */
4956 if (!hdw->flag_ok) {
4957 st = PVR2_STATE_DEAD;
4958 } else if (hdw->fw1_state != FW1_STATE_OK) {
4959 st = PVR2_STATE_COLD;
4960 } else if ((analog_mode ||
4961 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4962 !hdw->state_encoder_ok) {
4963 st = PVR2_STATE_WARM;
4964 } else if (hdw->flag_tripped ||
4965 (analog_mode && hdw->flag_decoder_missed)) {
4966 st = PVR2_STATE_ERROR;
4967 } else if (hdw->state_usbstream_run &&
4969 (hdw->state_encoder_run && hdw->state_decoder_run))) {
4970 st = PVR2_STATE_RUN;
4972 st = PVR2_STATE_READY;
4974 if (hdw->master_state != st) {
4975 pvr2_trace(PVR2_TRACE_STATE,
4976 "Device state change from %s to %s",
4977 pvr2_get_state_name(hdw->master_state),
4978 pvr2_get_state_name(st));
4979 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
4980 hdw->master_state = st;
4984 if (state_updated) {
4985 /* Trigger anyone waiting on any state changes here. */
4986 wake_up(&hdw->state_wait_data);
4989 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4990 pvr2_hdw_state_log_state(hdw);
4992 pvr2_trace(PVR2_TRACE_STBITS,
4993 "Drive state check DONE callback=%d",callback_flag);
4995 return callback_flag;
4999 /* Cause kernel thread to check / update driver state */
5000 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
5002 if (hdw->state_stale) return;
5003 hdw->state_stale = !0;
5004 trace_stbit("state_stale",hdw->state_stale);
5005 queue_work(hdw->workqueue,&hdw->workpoll);
5009 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
5011 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
5015 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
5017 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
5021 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
5023 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
5027 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
5032 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
5033 if (ret) return ret;
5034 nval = (cval & ~msk) | (val & msk);
5035 pvr2_trace(PVR2_TRACE_GPIO,
5036 "GPIO direction changing 0x%x:0x%x"
5037 " from 0x%x to 0x%x",
5041 pvr2_trace(PVR2_TRACE_GPIO,
5042 "GPIO direction changing to 0x%x",nval);
5044 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
5048 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
5053 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
5054 if (ret) return ret;
5055 nval = (cval & ~msk) | (val & msk);
5056 pvr2_trace(PVR2_TRACE_GPIO,
5057 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5061 pvr2_trace(PVR2_TRACE_GPIO,
5062 "GPIO output changing to 0x%x",nval);
5064 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
5068 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
5070 struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
5071 memset(vtp, 0, sizeof(*vtp));
5072 hdw->tuner_signal_stale = 0;
5073 pvr2_i2c_core_status_poll(hdw);
5074 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5075 using v4l2-subdev - therefore we can't support that AT ALL right
5076 now. (Of course, no sub-drivers seem to implement it either.
5077 But now it's a a chicken and egg problem...) */
5078 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner,
5079 &hdw->tuner_signal_info);
5080 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll"
5081 " type=%u strength=%u audio=0x%x cap=0x%x"
5084 vtp->signal, vtp->rxsubchans, vtp->capability,
5085 vtp->rangelow, vtp->rangehigh);
5087 /* We have to do this to avoid getting into constant polling if
5088 there's nobody to answer a poll of cropcap info. */
5089 hdw->cropcap_stale = 0;
5093 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5095 return hdw->input_avail_mask;
5099 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5101 return hdw->input_allowed_mask;
5105 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5107 if (hdw->input_val != v) {
5109 hdw->input_dirty = !0;
5112 /* Handle side effects - if we switch to a mode that needs the RF
5113 tuner, then select the right frequency choice as well and mark
5115 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5116 hdw->freqSelector = 0;
5117 hdw->freqDirty = !0;
5118 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5119 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5120 hdw->freqSelector = 1;
5121 hdw->freqDirty = !0;
5127 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5128 unsigned int change_mask,
5129 unsigned int change_val)
5132 unsigned int nv,m,idx;
5133 LOCK_TAKE(hdw->big_lock);
5135 nv = hdw->input_allowed_mask & ~change_mask;
5136 nv |= (change_val & change_mask);
5137 nv &= hdw->input_avail_mask;
5139 /* No legal modes left; return error instead. */
5143 hdw->input_allowed_mask = nv;
5144 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5145 /* Current mode is still in the allowed mask, so
5149 /* Select and switch to a mode that is still in the allowed
5151 if (!hdw->input_allowed_mask) {
5152 /* Nothing legal; give up */
5155 m = hdw->input_allowed_mask;
5156 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5157 if (!((1 << idx) & m)) continue;
5158 pvr2_hdw_set_input(hdw,idx);
5162 LOCK_GIVE(hdw->big_lock);
5167 /* Find I2C address of eeprom */
5168 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5171 LOCK_TAKE(hdw->ctl_lock); do {
5172 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5173 result = pvr2_send_request(hdw,
5176 if (result < 0) break;
5177 result = hdw->cmd_buffer[0];
5178 } while(0); LOCK_GIVE(hdw->ctl_lock);
5183 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
5184 struct v4l2_dbg_match *match, u64 reg_id,
5185 int setFl, u64 *val_ptr)
5187 #ifdef CONFIG_VIDEO_ADV_DEBUG
5188 struct pvr2_i2c_client *cp;
5189 struct v4l2_dbg_register req;
5193 if (!capable(CAP_SYS_ADMIN)) return -EPERM;
5197 if (setFl) req.val = *val_ptr;
5198 /* It would be nice to know if a sub-device answered the request */
5199 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, g_register, &req);
5200 if (!setFl) *val_ptr = req.val;
5201 if (!okFl) mutex_lock(&hdw->i2c_list_lock); do {
5202 list_for_each_entry(cp, &hdw->i2c_clients, list) {
5203 if (!v4l2_chip_match_i2c_client(
5208 stat = pvr2_i2c_client_cmd(
5209 cp,(setFl ? VIDIOC_DBG_S_REGISTER :
5210 VIDIOC_DBG_G_REGISTER),&req);
5211 if (!setFl) *val_ptr = req.val;
5215 } while (0); mutex_unlock(&hdw->i2c_list_lock);
5227 Stuff for Emacs to see, in order to encourage consistent editing style:
5228 *** Local Variables: ***
5230 *** fill-column: 75 ***
5231 *** tab-width: 8 ***
5232 *** c-basic-offset: 8 ***