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>
28 #include "pvrusb2-std.h"
29 #include "pvrusb2-util.h"
30 #include "pvrusb2-hdw.h"
31 #include "pvrusb2-i2c-core.h"
32 #include "pvrusb2-tuner.h"
33 #include "pvrusb2-eeprom.h"
34 #include "pvrusb2-hdw-internal.h"
35 #include "pvrusb2-encoder.h"
36 #include "pvrusb2-debug.h"
37 #include "pvrusb2-fx2-cmd.h"
39 #define TV_MIN_FREQ 55250000L
40 #define TV_MAX_FREQ 850000000L
42 /* This defines a minimum interval that the decoder must remain quiet
43 before we are allowed to start it running. */
44 #define TIME_MSEC_DECODER_WAIT 50
46 /* This defines a minimum interval that the encoder must remain quiet
47 before we are allowed to configure it. I had this originally set to
48 50msec, but Martin Dauskardt <martin.dauskardt@gmx.de> reports that
49 things work better when it's set to 100msec. */
50 #define TIME_MSEC_ENCODER_WAIT 100
52 /* This defines the minimum interval that the encoder must successfully run
53 before we consider that the encoder has run at least once since its
54 firmware has been loaded. This measurement is in important for cases
55 where we can't do something until we know that the encoder has been run
57 #define TIME_MSEC_ENCODER_OK 250
59 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
60 static DEFINE_MUTEX(pvr2_unit_mtx);
63 static int initusbreset = 1;
64 static int procreload;
65 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
66 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
67 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
68 static int init_pause_msec;
70 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
71 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
72 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
73 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
74 module_param(initusbreset, int, S_IRUGO|S_IWUSR);
75 MODULE_PARM_DESC(initusbreset, "Do USB reset device on probe");
76 module_param(procreload, int, S_IRUGO|S_IWUSR);
77 MODULE_PARM_DESC(procreload,
78 "Attempt init failure recovery with firmware reload");
79 module_param_array(tuner, int, NULL, 0444);
80 MODULE_PARM_DESC(tuner,"specify installed tuner type");
81 module_param_array(video_std, int, NULL, 0444);
82 MODULE_PARM_DESC(video_std,"specify initial video standard");
83 module_param_array(tolerance, int, NULL, 0444);
84 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
86 /* US Broadcast channel 7 (175.25 MHz) */
87 static int default_tv_freq = 175250000L;
88 /* 104.3 MHz, a usable FM station for my area */
89 static int default_radio_freq = 104300000L;
91 module_param_named(tv_freq, default_tv_freq, int, 0444);
92 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
93 module_param_named(radio_freq, default_radio_freq, int, 0444);
94 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
96 #define PVR2_CTL_WRITE_ENDPOINT 0x01
97 #define PVR2_CTL_READ_ENDPOINT 0x81
99 #define PVR2_GPIO_IN 0x9008
100 #define PVR2_GPIO_OUT 0x900c
101 #define PVR2_GPIO_DIR 0x9020
103 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
105 #define PVR2_FIRMWARE_ENDPOINT 0x02
107 /* size of a firmware chunk */
108 #define FIRMWARE_CHUNK_SIZE 0x2000
110 /* Define the list of additional controls we'll dynamically construct based
111 on query of the cx2341x module. */
112 struct pvr2_mpeg_ids {
116 static const struct pvr2_mpeg_ids mpeg_ids[] = {
118 .strid = "audio_layer",
119 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
121 .strid = "audio_bitrate",
122 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
124 /* Already using audio_mode elsewhere :-( */
125 .strid = "mpeg_audio_mode",
126 .id = V4L2_CID_MPEG_AUDIO_MODE,
128 .strid = "mpeg_audio_mode_extension",
129 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
131 .strid = "audio_emphasis",
132 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
134 .strid = "audio_crc",
135 .id = V4L2_CID_MPEG_AUDIO_CRC,
137 .strid = "video_aspect",
138 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
140 .strid = "video_b_frames",
141 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
143 .strid = "video_gop_size",
144 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
146 .strid = "video_gop_closure",
147 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
149 .strid = "video_bitrate_mode",
150 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
152 .strid = "video_bitrate",
153 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
155 .strid = "video_bitrate_peak",
156 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
158 .strid = "video_temporal_decimation",
159 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
161 .strid = "stream_type",
162 .id = V4L2_CID_MPEG_STREAM_TYPE,
164 .strid = "video_spatial_filter_mode",
165 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
167 .strid = "video_spatial_filter",
168 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
170 .strid = "video_luma_spatial_filter_type",
171 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
173 .strid = "video_chroma_spatial_filter_type",
174 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
176 .strid = "video_temporal_filter_mode",
177 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
179 .strid = "video_temporal_filter",
180 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
182 .strid = "video_median_filter_type",
183 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
185 .strid = "video_luma_median_filter_top",
186 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
188 .strid = "video_luma_median_filter_bottom",
189 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
191 .strid = "video_chroma_median_filter_top",
192 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
194 .strid = "video_chroma_median_filter_bottom",
195 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
198 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
201 static const char *control_values_srate[] = {
202 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
203 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
204 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
209 static const char *control_values_input[] = {
210 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
211 [PVR2_CVAL_INPUT_DTV] = "dtv",
212 [PVR2_CVAL_INPUT_RADIO] = "radio",
213 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
214 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
218 static const char *control_values_audiomode[] = {
219 [V4L2_TUNER_MODE_MONO] = "Mono",
220 [V4L2_TUNER_MODE_STEREO] = "Stereo",
221 [V4L2_TUNER_MODE_LANG1] = "Lang1",
222 [V4L2_TUNER_MODE_LANG2] = "Lang2",
223 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
227 static const char *control_values_hsm[] = {
228 [PVR2_CVAL_HSM_FAIL] = "Fail",
229 [PVR2_CVAL_HSM_HIGH] = "High",
230 [PVR2_CVAL_HSM_FULL] = "Full",
234 static const char *pvr2_state_names[] = {
235 [PVR2_STATE_NONE] = "none",
236 [PVR2_STATE_DEAD] = "dead",
237 [PVR2_STATE_COLD] = "cold",
238 [PVR2_STATE_WARM] = "warm",
239 [PVR2_STATE_ERROR] = "error",
240 [PVR2_STATE_READY] = "ready",
241 [PVR2_STATE_RUN] = "run",
245 struct pvr2_fx2cmd_descdef {
250 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
251 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
252 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
253 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
254 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
255 {FX2CMD_REG_WRITE, "write encoder register"},
256 {FX2CMD_REG_READ, "read encoder register"},
257 {FX2CMD_MEMSEL, "encoder memsel"},
258 {FX2CMD_I2C_WRITE, "i2c write"},
259 {FX2CMD_I2C_READ, "i2c read"},
260 {FX2CMD_GET_USB_SPEED, "get USB speed"},
261 {FX2CMD_STREAMING_ON, "stream on"},
262 {FX2CMD_STREAMING_OFF, "stream off"},
263 {FX2CMD_FWPOST1, "fwpost1"},
264 {FX2CMD_POWER_OFF, "power off"},
265 {FX2CMD_POWER_ON, "power on"},
266 {FX2CMD_DEEP_RESET, "deep reset"},
267 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
268 {FX2CMD_GET_IR_CODE, "get IR code"},
269 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
270 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
271 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
272 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
273 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
274 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
275 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
279 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
280 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
281 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
282 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
283 static void pvr2_hdw_worker_i2c(struct work_struct *work);
284 static void pvr2_hdw_worker_poll(struct work_struct *work);
285 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
286 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
287 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
288 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
289 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
290 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
291 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
292 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
293 static void pvr2_hdw_quiescent_timeout(unsigned long);
294 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
295 static void pvr2_hdw_encoder_run_timeout(unsigned long);
296 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
297 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
298 unsigned int timeout,int probe_fl,
299 void *write_data,unsigned int write_len,
300 void *read_data,unsigned int read_len);
303 static void trace_stbit(const char *name,int val)
305 pvr2_trace(PVR2_TRACE_STBITS,
306 "State bit %s <-- %s",
307 name,(val ? "true" : "false"));
310 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
312 struct pvr2_hdw *hdw = cptr->hdw;
313 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
314 *vp = hdw->freqTable[hdw->freqProgSlot-1];
321 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
323 struct pvr2_hdw *hdw = cptr->hdw;
324 unsigned int slotId = hdw->freqProgSlot;
325 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
326 hdw->freqTable[slotId-1] = v;
327 /* Handle side effects correctly - if we're tuned to this
328 slot, then forgot the slot id relation since the stored
329 frequency has been changed. */
330 if (hdw->freqSelector) {
331 if (hdw->freqSlotRadio == slotId) {
332 hdw->freqSlotRadio = 0;
335 if (hdw->freqSlotTelevision == slotId) {
336 hdw->freqSlotTelevision = 0;
343 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
345 *vp = cptr->hdw->freqProgSlot;
349 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
351 struct pvr2_hdw *hdw = cptr->hdw;
352 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
353 hdw->freqProgSlot = v;
358 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
360 struct pvr2_hdw *hdw = cptr->hdw;
361 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
365 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
368 struct pvr2_hdw *hdw = cptr->hdw;
369 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
371 freq = hdw->freqTable[slotId-1];
373 pvr2_hdw_set_cur_freq(hdw,freq);
375 if (hdw->freqSelector) {
376 hdw->freqSlotRadio = slotId;
378 hdw->freqSlotTelevision = slotId;
383 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
385 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
389 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
391 return cptr->hdw->freqDirty != 0;
394 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
396 cptr->hdw->freqDirty = 0;
399 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
401 pvr2_hdw_set_cur_freq(cptr->hdw,v);
405 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
407 /* Actual maximum depends on the video standard in effect. */
408 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
416 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
418 /* Actual minimum depends on device digitizer type. */
419 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
427 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
429 *vp = cptr->hdw->input_val;
433 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
435 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
438 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
440 return pvr2_hdw_set_input(cptr->hdw,v);
443 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
445 return cptr->hdw->input_dirty != 0;
448 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
450 cptr->hdw->input_dirty = 0;
454 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
457 struct pvr2_hdw *hdw = cptr->hdw;
458 if (hdw->tuner_signal_stale) {
459 pvr2_i2c_core_status_poll(hdw);
461 fv = hdw->tuner_signal_info.rangehigh;
463 /* Safety fallback */
467 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
476 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
479 struct pvr2_hdw *hdw = cptr->hdw;
480 if (hdw->tuner_signal_stale) {
481 pvr2_i2c_core_status_poll(hdw);
483 fv = hdw->tuner_signal_info.rangelow;
485 /* Safety fallback */
489 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
498 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
500 return cptr->hdw->enc_stale != 0;
503 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
505 cptr->hdw->enc_stale = 0;
506 cptr->hdw->enc_unsafe_stale = 0;
509 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
512 struct v4l2_ext_controls cs;
513 struct v4l2_ext_control c1;
514 memset(&cs,0,sizeof(cs));
515 memset(&c1,0,sizeof(c1));
518 c1.id = cptr->info->v4l_id;
519 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
526 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
529 struct pvr2_hdw *hdw = cptr->hdw;
530 struct v4l2_ext_controls cs;
531 struct v4l2_ext_control c1;
532 memset(&cs,0,sizeof(cs));
533 memset(&c1,0,sizeof(c1));
536 c1.id = cptr->info->v4l_id;
538 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
539 hdw->state_encoder_run, &cs,
542 /* Oops. cx2341x is telling us it's not safe to change
543 this control while we're capturing. Make a note of this
544 fact so that the pipeline will be stopped the next time
545 controls are committed. Then go on ahead and store this
547 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
550 if (!ret) hdw->enc_unsafe_stale = !0;
557 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
559 struct v4l2_queryctrl qctrl;
560 struct pvr2_ctl_info *info;
561 qctrl.id = cptr->info->v4l_id;
562 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
563 /* Strip out the const so we can adjust a function pointer. It's
564 OK to do this here because we know this is a dynamically created
565 control, so the underlying storage for the info pointer is (a)
566 private to us, and (b) not in read-only storage. Either we do
567 this or we significantly complicate the underlying control
569 info = (struct pvr2_ctl_info *)(cptr->info);
570 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
571 if (info->set_value) {
572 info->set_value = NULL;
575 if (!(info->set_value)) {
576 info->set_value = ctrl_cx2341x_set;
582 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
584 *vp = cptr->hdw->state_pipeline_req;
588 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
590 *vp = cptr->hdw->master_state;
594 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
596 int result = pvr2_hdw_is_hsm(cptr->hdw);
597 *vp = PVR2_CVAL_HSM_FULL;
598 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
599 if (result) *vp = PVR2_CVAL_HSM_HIGH;
603 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
605 *vp = cptr->hdw->std_mask_avail;
609 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
611 struct pvr2_hdw *hdw = cptr->hdw;
613 ns = hdw->std_mask_avail;
614 ns = (ns & ~m) | (v & m);
615 if (ns == hdw->std_mask_avail) return 0;
616 hdw->std_mask_avail = ns;
617 pvr2_hdw_internal_set_std_avail(hdw);
618 pvr2_hdw_internal_find_stdenum(hdw);
622 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
623 char *bufPtr,unsigned int bufSize,
626 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
630 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
631 const char *bufPtr,unsigned int bufSize,
636 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
637 if (ret < 0) return ret;
638 if (mskp) *mskp = id;
639 if (valp) *valp = id;
643 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
645 *vp = cptr->hdw->std_mask_cur;
649 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
651 struct pvr2_hdw *hdw = cptr->hdw;
653 ns = hdw->std_mask_cur;
654 ns = (ns & ~m) | (v & m);
655 if (ns == hdw->std_mask_cur) return 0;
656 hdw->std_mask_cur = ns;
658 pvr2_hdw_internal_find_stdenum(hdw);
662 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
664 return cptr->hdw->std_dirty != 0;
667 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
669 cptr->hdw->std_dirty = 0;
672 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
674 struct pvr2_hdw *hdw = cptr->hdw;
675 pvr2_i2c_core_status_poll(hdw);
676 *vp = hdw->tuner_signal_info.signal;
680 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
683 unsigned int subchan;
684 struct pvr2_hdw *hdw = cptr->hdw;
685 pvr2_i2c_core_status_poll(hdw);
686 subchan = hdw->tuner_signal_info.rxsubchans;
687 if (subchan & V4L2_TUNER_SUB_MONO) {
688 val |= (1 << V4L2_TUNER_MODE_MONO);
690 if (subchan & V4L2_TUNER_SUB_STEREO) {
691 val |= (1 << V4L2_TUNER_MODE_STEREO);
693 if (subchan & V4L2_TUNER_SUB_LANG1) {
694 val |= (1 << V4L2_TUNER_MODE_LANG1);
696 if (subchan & V4L2_TUNER_SUB_LANG2) {
697 val |= (1 << V4L2_TUNER_MODE_LANG2);
704 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
706 struct pvr2_hdw *hdw = cptr->hdw;
707 if (v < 0) return -EINVAL;
708 if (v > hdw->std_enum_cnt) return -EINVAL;
709 hdw->std_enum_cur = v;
712 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
713 hdw->std_mask_cur = hdw->std_defs[v].id;
719 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
721 *vp = cptr->hdw->std_enum_cur;
726 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
728 return cptr->hdw->std_dirty != 0;
732 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
734 cptr->hdw->std_dirty = 0;
738 #define DEFINT(vmin,vmax) \
739 .type = pvr2_ctl_int, \
740 .def.type_int.min_value = vmin, \
741 .def.type_int.max_value = vmax
743 #define DEFENUM(tab) \
744 .type = pvr2_ctl_enum, \
745 .def.type_enum.count = ARRAY_SIZE(tab), \
746 .def.type_enum.value_names = tab
749 .type = pvr2_ctl_bool
751 #define DEFMASK(msk,tab) \
752 .type = pvr2_ctl_bitmask, \
753 .def.type_bitmask.valid_bits = msk, \
754 .def.type_bitmask.bit_names = tab
756 #define DEFREF(vname) \
757 .set_value = ctrl_set_##vname, \
758 .get_value = ctrl_get_##vname, \
759 .is_dirty = ctrl_isdirty_##vname, \
760 .clear_dirty = ctrl_cleardirty_##vname
763 #define VCREATE_FUNCS(vname) \
764 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
765 {*vp = cptr->hdw->vname##_val; return 0;} \
766 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
767 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
768 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
769 {return cptr->hdw->vname##_dirty != 0;} \
770 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
771 {cptr->hdw->vname##_dirty = 0;}
773 VCREATE_FUNCS(brightness)
774 VCREATE_FUNCS(contrast)
775 VCREATE_FUNCS(saturation)
777 VCREATE_FUNCS(volume)
778 VCREATE_FUNCS(balance)
780 VCREATE_FUNCS(treble)
782 VCREATE_FUNCS(audiomode)
783 VCREATE_FUNCS(res_hor)
784 VCREATE_FUNCS(res_ver)
787 /* Table definition of all controls which can be manipulated */
788 static const struct pvr2_ctl_info control_defs[] = {
790 .v4l_id = V4L2_CID_BRIGHTNESS,
791 .desc = "Brightness",
792 .name = "brightness",
793 .default_value = 128,
797 .v4l_id = V4L2_CID_CONTRAST,
804 .v4l_id = V4L2_CID_SATURATION,
805 .desc = "Saturation",
806 .name = "saturation",
811 .v4l_id = V4L2_CID_HUE,
818 .v4l_id = V4L2_CID_AUDIO_VOLUME,
821 .default_value = 62000,
825 .v4l_id = V4L2_CID_AUDIO_BALANCE,
830 DEFINT(-32768,32767),
832 .v4l_id = V4L2_CID_AUDIO_BASS,
837 DEFINT(-32768,32767),
839 .v4l_id = V4L2_CID_AUDIO_TREBLE,
844 DEFINT(-32768,32767),
846 .v4l_id = V4L2_CID_AUDIO_MUTE,
853 .desc = "Video Source",
855 .internal_id = PVR2_CID_INPUT,
856 .default_value = PVR2_CVAL_INPUT_TV,
857 .check_value = ctrl_check_input,
859 DEFENUM(control_values_input),
861 .desc = "Audio Mode",
862 .name = "audio_mode",
863 .internal_id = PVR2_CID_AUDIOMODE,
864 .default_value = V4L2_TUNER_MODE_STEREO,
866 DEFENUM(control_values_audiomode),
868 .desc = "Horizontal capture resolution",
869 .name = "resolution_hor",
870 .internal_id = PVR2_CID_HRES,
871 .default_value = 720,
875 .desc = "Vertical capture resolution",
876 .name = "resolution_ver",
877 .internal_id = PVR2_CID_VRES,
878 .default_value = 480,
881 /* Hook in check for video standard and adjust maximum
882 depending on the standard. */
883 .get_max_value = ctrl_vres_max_get,
884 .get_min_value = ctrl_vres_min_get,
886 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
887 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
888 .desc = "Audio Sampling Frequency",
891 DEFENUM(control_values_srate),
893 .desc = "Tuner Frequency (Hz)",
895 .internal_id = PVR2_CID_FREQUENCY,
897 .set_value = ctrl_freq_set,
898 .get_value = ctrl_freq_get,
899 .is_dirty = ctrl_freq_is_dirty,
900 .clear_dirty = ctrl_freq_clear_dirty,
902 /* Hook in check for input value (tv/radio) and adjust
903 max/min values accordingly */
904 .get_max_value = ctrl_freq_max_get,
905 .get_min_value = ctrl_freq_min_get,
909 .set_value = ctrl_channel_set,
910 .get_value = ctrl_channel_get,
911 DEFINT(0,FREQTABLE_SIZE),
913 .desc = "Channel Program Frequency",
914 .name = "freq_table_value",
915 .set_value = ctrl_channelfreq_set,
916 .get_value = ctrl_channelfreq_get,
918 /* Hook in check for input value (tv/radio) and adjust
919 max/min values accordingly */
920 .get_max_value = ctrl_freq_max_get,
921 .get_min_value = ctrl_freq_min_get,
923 .desc = "Channel Program ID",
924 .name = "freq_table_channel",
925 .set_value = ctrl_channelprog_set,
926 .get_value = ctrl_channelprog_get,
927 DEFINT(0,FREQTABLE_SIZE),
929 .desc = "Streaming Enabled",
930 .name = "streaming_enabled",
931 .get_value = ctrl_streamingenabled_get,
936 .get_value = ctrl_hsm_get,
937 DEFENUM(control_values_hsm),
939 .desc = "Master State",
940 .name = "master_state",
941 .get_value = ctrl_masterstate_get,
942 DEFENUM(pvr2_state_names),
944 .desc = "Signal Present",
945 .name = "signal_present",
946 .get_value = ctrl_signal_get,
949 .desc = "Audio Modes Present",
950 .name = "audio_modes_present",
951 .get_value = ctrl_audio_modes_present_get,
952 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
953 v4l. Nothing outside of this module cares about this,
954 but I reuse it in order to also reuse the
955 control_values_audiomode string table. */
956 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
957 (1 << V4L2_TUNER_MODE_STEREO)|
958 (1 << V4L2_TUNER_MODE_LANG1)|
959 (1 << V4L2_TUNER_MODE_LANG2)),
960 control_values_audiomode),
962 .desc = "Video Standards Available Mask",
963 .name = "video_standard_mask_available",
964 .internal_id = PVR2_CID_STDAVAIL,
966 .get_value = ctrl_stdavail_get,
967 .set_value = ctrl_stdavail_set,
968 .val_to_sym = ctrl_std_val_to_sym,
969 .sym_to_val = ctrl_std_sym_to_val,
970 .type = pvr2_ctl_bitmask,
972 .desc = "Video Standards In Use Mask",
973 .name = "video_standard_mask_active",
974 .internal_id = PVR2_CID_STDCUR,
976 .get_value = ctrl_stdcur_get,
977 .set_value = ctrl_stdcur_set,
978 .is_dirty = ctrl_stdcur_is_dirty,
979 .clear_dirty = ctrl_stdcur_clear_dirty,
980 .val_to_sym = ctrl_std_val_to_sym,
981 .sym_to_val = ctrl_std_sym_to_val,
982 .type = pvr2_ctl_bitmask,
984 .desc = "Video Standard Name",
985 .name = "video_standard",
986 .internal_id = PVR2_CID_STDENUM,
988 .get_value = ctrl_stdenumcur_get,
989 .set_value = ctrl_stdenumcur_set,
990 .is_dirty = ctrl_stdenumcur_is_dirty,
991 .clear_dirty = ctrl_stdenumcur_clear_dirty,
992 .type = pvr2_ctl_enum,
996 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
999 const char *pvr2_config_get_name(enum pvr2_config cfg)
1002 case pvr2_config_empty: return "empty";
1003 case pvr2_config_mpeg: return "mpeg";
1004 case pvr2_config_vbi: return "vbi";
1005 case pvr2_config_pcm: return "pcm";
1006 case pvr2_config_rawvideo: return "raw video";
1012 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1014 return hdw->usb_dev;
1018 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1020 return hdw->serial_number;
1024 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1026 return hdw->bus_info;
1030 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1032 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1035 /* Set the currently tuned frequency and account for all possible
1036 driver-core side effects of this action. */
1037 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1039 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1040 if (hdw->freqSelector) {
1041 /* Swing over to radio frequency selection */
1042 hdw->freqSelector = 0;
1043 hdw->freqDirty = !0;
1045 if (hdw->freqValRadio != val) {
1046 hdw->freqValRadio = val;
1047 hdw->freqSlotRadio = 0;
1048 hdw->freqDirty = !0;
1051 if (!(hdw->freqSelector)) {
1052 /* Swing over to television frequency selection */
1053 hdw->freqSelector = 1;
1054 hdw->freqDirty = !0;
1056 if (hdw->freqValTelevision != val) {
1057 hdw->freqValTelevision = val;
1058 hdw->freqSlotTelevision = 0;
1059 hdw->freqDirty = !0;
1064 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1066 return hdw->unit_number;
1070 /* Attempt to locate one of the given set of files. Messages are logged
1071 appropriate to what has been found. The return value will be 0 or
1072 greater on success (it will be the index of the file name found) and
1073 fw_entry will be filled in. Otherwise a negative error is returned on
1074 failure. If the return value is -ENOENT then no viable firmware file
1075 could be located. */
1076 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1077 const struct firmware **fw_entry,
1078 const char *fwtypename,
1079 unsigned int fwcount,
1080 const char *fwnames[])
1084 for (idx = 0; idx < fwcount; idx++) {
1085 ret = request_firmware(fw_entry,
1087 &hdw->usb_dev->dev);
1089 trace_firmware("Located %s firmware: %s;"
1095 if (ret == -ENOENT) continue;
1096 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1097 "request_firmware fatal error with code=%d",ret);
1100 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1102 " Device %s firmware"
1103 " seems to be missing.",
1105 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1106 "Did you install the pvrusb2 firmware files"
1107 " in their proper location?");
1109 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1110 "request_firmware unable to locate %s file %s",
1111 fwtypename,fwnames[0]);
1113 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1114 "request_firmware unable to locate"
1115 " one of the following %s files:",
1117 for (idx = 0; idx < fwcount; idx++) {
1118 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1119 "request_firmware: Failed to find %s",
1128 * pvr2_upload_firmware1().
1130 * Send the 8051 firmware to the device. After the upload, arrange for
1131 * device to re-enumerate.
1133 * NOTE : the pointer to the firmware data given by request_firmware()
1134 * is not suitable for an usb transaction.
1137 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1139 const struct firmware *fw_entry = NULL;
1145 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1146 hdw->fw1_state = FW1_STATE_OK;
1147 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1148 "Connected device type defines"
1149 " no firmware to upload; ignoring firmware");
1153 hdw->fw1_state = FW1_STATE_FAILED; // default result
1155 trace_firmware("pvr2_upload_firmware1");
1157 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1158 hdw->hdw_desc->fx2_firmware.cnt,
1159 hdw->hdw_desc->fx2_firmware.lst);
1161 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1165 usb_settoggle(hdw->usb_dev, 0 & 0xf, !(0 & USB_DIR_IN), 0);
1166 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1168 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1170 if (fw_entry->size != 0x2000){
1171 pvr2_trace(PVR2_TRACE_ERROR_LEGS,"wrong fx2 firmware size");
1172 release_firmware(fw_entry);
1176 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1177 if (fw_ptr == NULL){
1178 release_firmware(fw_entry);
1182 /* We have to hold the CPU during firmware upload. */
1183 pvr2_hdw_cpureset_assert(hdw,1);
1185 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1189 for(address = 0; address < fw_entry->size; address += 0x800) {
1190 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1191 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1192 0, fw_ptr, 0x800, HZ);
1195 trace_firmware("Upload done, releasing device's CPU");
1197 /* Now release the CPU. It will disconnect and reconnect later. */
1198 pvr2_hdw_cpureset_assert(hdw,0);
1201 release_firmware(fw_entry);
1203 trace_firmware("Upload done (%d bytes sent)",ret);
1205 /* We should have written 8192 bytes */
1207 hdw->fw1_state = FW1_STATE_RELOAD;
1216 * pvr2_upload_firmware2()
1218 * This uploads encoder firmware on endpoint 2.
1222 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1224 const struct firmware *fw_entry = NULL;
1226 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1230 static const char *fw_files[] = {
1231 CX2341X_FIRM_ENC_FILENAME,
1234 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1238 trace_firmware("pvr2_upload_firmware2");
1240 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1241 ARRAY_SIZE(fw_files), fw_files);
1242 if (ret < 0) return ret;
1245 /* Since we're about to completely reinitialize the encoder,
1246 invalidate our cached copy of its configuration state. Next
1247 time we configure the encoder, then we'll fully configure it. */
1248 hdw->enc_cur_valid = 0;
1250 /* Encoder is about to be reset so note that as far as we're
1251 concerned now, the encoder has never been run. */
1252 del_timer_sync(&hdw->encoder_run_timer);
1253 if (hdw->state_encoder_runok) {
1254 hdw->state_encoder_runok = 0;
1255 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1258 /* First prepare firmware loading */
1259 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1260 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1261 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1262 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1263 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1264 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1265 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1266 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1267 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1268 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1269 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1270 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1271 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1272 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1273 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1274 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1275 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1276 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1279 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1280 "firmware2 upload prep failed, ret=%d",ret);
1281 release_firmware(fw_entry);
1285 /* Now send firmware */
1287 fw_len = fw_entry->size;
1289 if (fw_len % sizeof(u32)) {
1290 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1291 "size of %s firmware"
1292 " must be a multiple of %zu bytes",
1293 fw_files[fwidx],sizeof(u32));
1294 release_firmware(fw_entry);
1299 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1300 if (fw_ptr == NULL){
1301 release_firmware(fw_entry);
1302 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1303 "failed to allocate memory for firmware2 upload");
1308 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1311 for (fw_done = 0; fw_done < fw_len;) {
1312 bcnt = fw_len - fw_done;
1313 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1314 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1315 /* Usbsnoop log shows that we must swap bytes... */
1316 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1317 ((u32 *)fw_ptr)[icnt] =
1318 ___swab32(((u32 *)fw_ptr)[icnt]);
1320 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1321 &actual_length, HZ);
1322 ret |= (actual_length != bcnt);
1327 trace_firmware("upload of %s : %i / %i ",
1328 fw_files[fwidx],fw_done,fw_len);
1331 release_firmware(fw_entry);
1334 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1335 "firmware2 upload transfer failure");
1341 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1342 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1343 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1346 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1347 "firmware2 upload post-proc failure");
1351 if (hdw->hdw_desc->signal_routing_scheme ==
1352 PVR2_ROUTING_SCHEME_GOTVIEW) {
1353 /* Ensure that GPIO 11 is set to output for GOTVIEW
1355 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1361 static const char *pvr2_get_state_name(unsigned int st)
1363 if (st < ARRAY_SIZE(pvr2_state_names)) {
1364 return pvr2_state_names[st];
1369 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1371 if (!hdw->decoder_ctrl) {
1372 if (!hdw->flag_decoder_missed) {
1373 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1374 "WARNING: No decoder present");
1375 hdw->flag_decoder_missed = !0;
1376 trace_stbit("flag_decoder_missed",
1377 hdw->flag_decoder_missed);
1381 hdw->decoder_ctrl->enable(hdw->decoder_ctrl->ctxt,enablefl);
1386 void pvr2_hdw_set_decoder(struct pvr2_hdw *hdw,struct pvr2_decoder_ctrl *ptr)
1388 if (hdw->decoder_ctrl == ptr) return;
1389 hdw->decoder_ctrl = ptr;
1390 if (hdw->decoder_ctrl && hdw->flag_decoder_missed) {
1391 hdw->flag_decoder_missed = 0;
1392 trace_stbit("flag_decoder_missed",
1393 hdw->flag_decoder_missed);
1394 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1395 "Decoder has appeared");
1396 pvr2_hdw_state_sched(hdw);
1401 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1403 return hdw->master_state;
1407 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1409 if (!hdw->flag_tripped) return 0;
1410 hdw->flag_tripped = 0;
1411 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1412 "Clearing driver error statuss");
1417 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1420 LOCK_TAKE(hdw->big_lock); do {
1421 fl = pvr2_hdw_untrip_unlocked(hdw);
1422 } while (0); LOCK_GIVE(hdw->big_lock);
1423 if (fl) pvr2_hdw_state_sched(hdw);
1430 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1432 return hdw->state_pipeline_req != 0;
1436 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1439 LOCK_TAKE(hdw->big_lock); do {
1440 pvr2_hdw_untrip_unlocked(hdw);
1441 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1442 hdw->state_pipeline_req = enable_flag != 0;
1443 pvr2_trace(PVR2_TRACE_START_STOP,
1444 "/*--TRACE_STREAM--*/ %s",
1445 enable_flag ? "enable" : "disable");
1447 pvr2_hdw_state_sched(hdw);
1448 } while (0); LOCK_GIVE(hdw->big_lock);
1449 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1451 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1452 if (st != PVR2_STATE_READY) return -EIO;
1453 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1460 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1463 LOCK_TAKE(hdw->big_lock);
1464 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1465 hdw->desired_stream_type = config;
1466 hdw->state_pipeline_config = 0;
1467 trace_stbit("state_pipeline_config",
1468 hdw->state_pipeline_config);
1469 pvr2_hdw_state_sched(hdw);
1471 LOCK_GIVE(hdw->big_lock);
1473 return pvr2_hdw_wait(hdw,0);
1477 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1479 int unit_number = hdw->unit_number;
1481 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1482 tp = tuner[unit_number];
1484 if (tp < 0) return -EINVAL;
1485 hdw->tuner_type = tp;
1486 hdw->tuner_updated = !0;
1491 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1493 int unit_number = hdw->unit_number;
1495 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1496 tp = video_std[unit_number];
1503 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1505 int unit_number = hdw->unit_number;
1507 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1508 tp = tolerance[unit_number];
1514 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1516 /* Try a harmless request to fetch the eeprom's address over
1517 endpoint 1. See what happens. Only the full FX2 image can
1518 respond to this. If this probe fails then likely the FX2
1519 firmware needs be loaded. */
1521 LOCK_TAKE(hdw->ctl_lock); do {
1522 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1523 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1526 if (result < 0) break;
1527 } while(0); LOCK_GIVE(hdw->ctl_lock);
1529 pvr2_trace(PVR2_TRACE_INIT,
1530 "Probe of device endpoint 1 result status %d",
1533 pvr2_trace(PVR2_TRACE_INIT,
1534 "Probe of device endpoint 1 succeeded");
1539 struct pvr2_std_hack {
1540 v4l2_std_id pat; /* Pattern to match */
1541 v4l2_std_id msk; /* Which bits we care about */
1542 v4l2_std_id std; /* What additional standards or default to set */
1545 /* This data structure labels specific combinations of standards from
1546 tveeprom that we'll try to recognize. If we recognize one, then assume
1547 a specified default standard to use. This is here because tveeprom only
1548 tells us about available standards not the intended default standard (if
1549 any) for the device in question. We guess the default based on what has
1550 been reported as available. Note that this is only for guessing a
1551 default - which can always be overridden explicitly - and if the user
1552 has otherwise named a default then that default will always be used in
1553 place of this table. */
1554 static const struct pvr2_std_hack std_eeprom_maps[] = {
1556 .pat = V4L2_STD_B|V4L2_STD_GH,
1557 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1561 .std = V4L2_STD_NTSC_M,
1564 .pat = V4L2_STD_PAL_I,
1565 .std = V4L2_STD_PAL_I,
1568 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1569 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1573 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1577 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1581 v4l2_std_id std1,std2,std3;
1583 std1 = get_default_standard(hdw);
1584 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1586 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1587 pvr2_trace(PVR2_TRACE_STD,
1588 "Supported video standard(s) reported available"
1589 " in hardware: %.*s",
1592 hdw->std_mask_avail = hdw->std_mask_eeprom;
1594 std2 = (std1|std3) & ~hdw->std_mask_avail;
1596 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1597 pvr2_trace(PVR2_TRACE_STD,
1598 "Expanding supported video standards"
1599 " to include: %.*s",
1601 hdw->std_mask_avail |= std2;
1604 pvr2_hdw_internal_set_std_avail(hdw);
1607 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1608 pvr2_trace(PVR2_TRACE_STD,
1609 "Initial video standard forced to %.*s",
1611 hdw->std_mask_cur = std1;
1612 hdw->std_dirty = !0;
1613 pvr2_hdw_internal_find_stdenum(hdw);
1617 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1618 pvr2_trace(PVR2_TRACE_STD,
1619 "Initial video standard"
1620 " (determined by device type): %.*s",bcnt,buf);
1621 hdw->std_mask_cur = std3;
1622 hdw->std_dirty = !0;
1623 pvr2_hdw_internal_find_stdenum(hdw);
1629 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1630 if (std_eeprom_maps[idx].msk ?
1631 ((std_eeprom_maps[idx].pat ^
1632 hdw->std_mask_eeprom) &
1633 std_eeprom_maps[idx].msk) :
1634 (std_eeprom_maps[idx].pat !=
1635 hdw->std_mask_eeprom)) continue;
1636 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1637 std_eeprom_maps[idx].std);
1638 pvr2_trace(PVR2_TRACE_STD,
1639 "Initial video standard guessed as %.*s",
1641 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1642 hdw->std_dirty = !0;
1643 pvr2_hdw_internal_find_stdenum(hdw);
1648 if (hdw->std_enum_cnt > 1) {
1649 // Autoselect the first listed standard
1650 hdw->std_enum_cur = 1;
1651 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1652 hdw->std_dirty = !0;
1653 pvr2_trace(PVR2_TRACE_STD,
1654 "Initial video standard auto-selected to %s",
1655 hdw->std_defs[hdw->std_enum_cur-1].name);
1659 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1660 "Unable to select a viable initial video standard");
1664 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
1668 struct pvr2_ctrl *cptr;
1670 if (hdw->hdw_desc->fx2_firmware.cnt) {
1673 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
1676 pvr2_trace(PVR2_TRACE_INIT,
1677 "USB endpoint config looks strange"
1678 "; possibly firmware needs to be"
1683 reloadFl = !pvr2_hdw_check_firmware(hdw);
1685 pvr2_trace(PVR2_TRACE_INIT,
1686 "Check for FX2 firmware failed"
1687 "; possibly firmware needs to be"
1692 if (pvr2_upload_firmware1(hdw) != 0) {
1693 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1694 "Failure uploading firmware1");
1699 hdw->fw1_state = FW1_STATE_OK;
1702 pvr2_hdw_device_reset(hdw);
1704 if (!pvr2_hdw_dev_ok(hdw)) return;
1706 for (idx = 0; idx < hdw->hdw_desc->client_modules.cnt; idx++) {
1707 request_module(hdw->hdw_desc->client_modules.lst[idx]);
1710 if (!hdw->hdw_desc->flag_no_powerup) {
1711 pvr2_hdw_cmd_powerup(hdw);
1712 if (!pvr2_hdw_dev_ok(hdw)) return;
1715 /* Take the IR chip out of reset, if appropriate */
1716 if (hdw->hdw_desc->ir_scheme == PVR2_IR_SCHEME_ZILOG) {
1717 pvr2_issue_simple_cmd(hdw,
1718 FX2CMD_HCW_ZILOG_RESET |
1723 // This step MUST happen after the earlier powerup step.
1724 pvr2_i2c_core_init(hdw);
1725 if (!pvr2_hdw_dev_ok(hdw)) return;
1727 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
1728 cptr = hdw->controls + idx;
1729 if (cptr->info->skip_init) continue;
1730 if (!cptr->info->set_value) continue;
1731 cptr->info->set_value(cptr,~0,cptr->info->default_value);
1734 /* Set up special default values for the television and radio
1735 frequencies here. It's not really important what these defaults
1736 are, but I set them to something usable in the Chicago area just
1737 to make driver testing a little easier. */
1739 hdw->freqValTelevision = default_tv_freq;
1740 hdw->freqValRadio = default_radio_freq;
1742 // Do not use pvr2_reset_ctl_endpoints() here. It is not
1743 // thread-safe against the normal pvr2_send_request() mechanism.
1744 // (We should make it thread safe).
1746 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
1747 ret = pvr2_hdw_get_eeprom_addr(hdw);
1748 if (!pvr2_hdw_dev_ok(hdw)) return;
1750 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1751 "Unable to determine location of eeprom,"
1754 hdw->eeprom_addr = ret;
1755 pvr2_eeprom_analyze(hdw);
1756 if (!pvr2_hdw_dev_ok(hdw)) return;
1759 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
1760 hdw->tuner_updated = !0;
1761 hdw->std_mask_eeprom = V4L2_STD_ALL;
1764 pvr2_hdw_setup_std(hdw);
1766 if (!get_default_tuner_type(hdw)) {
1767 pvr2_trace(PVR2_TRACE_INIT,
1768 "pvr2_hdw_setup: Tuner type overridden to %d",
1772 pvr2_i2c_core_check_stale(hdw);
1773 hdw->tuner_updated = 0;
1775 if (!pvr2_hdw_dev_ok(hdw)) return;
1777 if (hdw->hdw_desc->signal_routing_scheme ==
1778 PVR2_ROUTING_SCHEME_GOTVIEW) {
1779 /* Ensure that GPIO 11 is set to output for GOTVIEW
1781 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1784 pvr2_hdw_commit_setup(hdw);
1786 hdw->vid_stream = pvr2_stream_create();
1787 if (!pvr2_hdw_dev_ok(hdw)) return;
1788 pvr2_trace(PVR2_TRACE_INIT,
1789 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
1790 if (hdw->vid_stream) {
1791 idx = get_default_error_tolerance(hdw);
1793 pvr2_trace(PVR2_TRACE_INIT,
1794 "pvr2_hdw_setup: video stream %p"
1795 " setting tolerance %u",
1796 hdw->vid_stream,idx);
1798 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
1799 PVR2_VID_ENDPOINT,idx);
1802 if (!pvr2_hdw_dev_ok(hdw)) return;
1804 hdw->flag_init_ok = !0;
1806 pvr2_hdw_state_sched(hdw);
1810 /* Set up the structure and attempt to put the device into a usable state.
1811 This can be a time-consuming operation, which is why it is not done
1812 internally as part of the create() step. */
1813 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
1815 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
1817 pvr2_hdw_setup_low(hdw);
1818 pvr2_trace(PVR2_TRACE_INIT,
1819 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
1820 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
1821 if (pvr2_hdw_dev_ok(hdw)) {
1822 if (hdw->flag_init_ok) {
1825 "Device initialization"
1826 " completed successfully.");
1829 if (hdw->fw1_state == FW1_STATE_RELOAD) {
1832 "Device microcontroller firmware"
1833 " (re)loaded; it should now reset"
1838 PVR2_TRACE_ERROR_LEGS,
1839 "Device initialization was not successful.");
1840 if (hdw->fw1_state == FW1_STATE_MISSING) {
1842 PVR2_TRACE_ERROR_LEGS,
1843 "Giving up since device"
1844 " microcontroller firmware"
1845 " appears to be missing.");
1851 PVR2_TRACE_ERROR_LEGS,
1852 "Attempting pvrusb2 recovery by reloading"
1853 " primary firmware.");
1855 PVR2_TRACE_ERROR_LEGS,
1856 "If this works, device should disconnect"
1857 " and reconnect in a sane state.");
1858 hdw->fw1_state = FW1_STATE_UNKNOWN;
1859 pvr2_upload_firmware1(hdw);
1862 PVR2_TRACE_ERROR_LEGS,
1863 "***WARNING*** pvrusb2 device hardware"
1864 " appears to be jammed"
1865 " and I can't clear it.");
1867 PVR2_TRACE_ERROR_LEGS,
1868 "You might need to power cycle"
1869 " the pvrusb2 device"
1870 " in order to recover.");
1873 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
1877 /* Perform second stage initialization. Set callback pointer first so that
1878 we can avoid a possible initialization race (if the kernel thread runs
1879 before the callback has been set). */
1880 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
1881 void (*callback_func)(void *),
1882 void *callback_data)
1884 LOCK_TAKE(hdw->big_lock); do {
1885 if (hdw->flag_disconnected) {
1886 /* Handle a race here: If we're already
1887 disconnected by this point, then give up. If we
1888 get past this then we'll remain connected for
1889 the duration of initialization since the entire
1890 initialization sequence is now protected by the
1894 hdw->state_data = callback_data;
1895 hdw->state_func = callback_func;
1896 pvr2_hdw_setup(hdw);
1897 } while (0); LOCK_GIVE(hdw->big_lock);
1898 return hdw->flag_init_ok;
1902 /* Create, set up, and return a structure for interacting with the
1903 underlying hardware. */
1904 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
1905 const struct usb_device_id *devid)
1907 unsigned int idx,cnt1,cnt2,m;
1908 struct pvr2_hdw *hdw;
1910 struct pvr2_ctrl *cptr;
1911 const struct pvr2_device_desc *hdw_desc;
1913 struct v4l2_queryctrl qctrl;
1914 struct pvr2_ctl_info *ciptr;
1916 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
1918 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
1919 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
1920 hdw,hdw_desc->description);
1921 if (!hdw) goto fail;
1923 init_timer(&hdw->quiescent_timer);
1924 hdw->quiescent_timer.data = (unsigned long)hdw;
1925 hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
1927 init_timer(&hdw->encoder_wait_timer);
1928 hdw->encoder_wait_timer.data = (unsigned long)hdw;
1929 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
1931 init_timer(&hdw->encoder_run_timer);
1932 hdw->encoder_run_timer.data = (unsigned long)hdw;
1933 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
1935 hdw->master_state = PVR2_STATE_DEAD;
1937 init_waitqueue_head(&hdw->state_wait_data);
1939 hdw->tuner_signal_stale = !0;
1940 cx2341x_fill_defaults(&hdw->enc_ctl_state);
1942 /* Calculate which inputs are OK */
1944 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
1945 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
1946 m |= 1 << PVR2_CVAL_INPUT_DTV;
1948 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
1949 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
1950 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
1951 hdw->input_avail_mask = m;
1952 hdw->input_allowed_mask = hdw->input_avail_mask;
1954 /* If not a hybrid device, pathway_state never changes. So
1955 initialize it here to what it should forever be. */
1956 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
1957 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
1958 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
1959 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
1962 hdw->control_cnt = CTRLDEF_COUNT;
1963 hdw->control_cnt += MPEGDEF_COUNT;
1964 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
1966 if (!hdw->controls) goto fail;
1967 hdw->hdw_desc = hdw_desc;
1968 for (idx = 0; idx < hdw->control_cnt; idx++) {
1969 cptr = hdw->controls + idx;
1972 for (idx = 0; idx < 32; idx++) {
1973 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
1975 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
1976 cptr = hdw->controls + idx;
1977 cptr->info = control_defs+idx;
1980 /* Ensure that default input choice is a valid one. */
1981 m = hdw->input_avail_mask;
1982 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
1983 if (!((1 << idx) & m)) continue;
1984 hdw->input_val = idx;
1988 /* Define and configure additional controls from cx2341x module. */
1989 hdw->mpeg_ctrl_info = kzalloc(
1990 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
1991 if (!hdw->mpeg_ctrl_info) goto fail;
1992 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
1993 cptr = hdw->controls + idx + CTRLDEF_COUNT;
1994 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
1995 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
1996 ciptr->name = mpeg_ids[idx].strid;
1997 ciptr->v4l_id = mpeg_ids[idx].id;
1998 ciptr->skip_init = !0;
1999 ciptr->get_value = ctrl_cx2341x_get;
2000 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2001 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2002 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2003 qctrl.id = ciptr->v4l_id;
2004 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2005 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2006 ciptr->set_value = ctrl_cx2341x_set;
2008 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
2009 PVR2_CTLD_INFO_DESC_SIZE);
2010 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
2011 ciptr->default_value = qctrl.default_value;
2012 switch (qctrl.type) {
2014 case V4L2_CTRL_TYPE_INTEGER:
2015 ciptr->type = pvr2_ctl_int;
2016 ciptr->def.type_int.min_value = qctrl.minimum;
2017 ciptr->def.type_int.max_value = qctrl.maximum;
2019 case V4L2_CTRL_TYPE_BOOLEAN:
2020 ciptr->type = pvr2_ctl_bool;
2022 case V4L2_CTRL_TYPE_MENU:
2023 ciptr->type = pvr2_ctl_enum;
2024 ciptr->def.type_enum.value_names =
2025 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2028 ciptr->def.type_enum.value_names[cnt1] != NULL;
2030 ciptr->def.type_enum.count = cnt1;
2036 // Initialize video standard enum dynamic control
2037 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
2039 memcpy(&hdw->std_info_enum,cptr->info,
2040 sizeof(hdw->std_info_enum));
2041 cptr->info = &hdw->std_info_enum;
2044 // Initialize control data regarding video standard masks
2045 valid_std_mask = pvr2_std_get_usable();
2046 for (idx = 0; idx < 32; idx++) {
2047 if (!(valid_std_mask & (1 << idx))) continue;
2048 cnt1 = pvr2_std_id_to_str(
2049 hdw->std_mask_names[idx],
2050 sizeof(hdw->std_mask_names[idx])-1,
2052 hdw->std_mask_names[idx][cnt1] = 0;
2054 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2056 memcpy(&hdw->std_info_avail,cptr->info,
2057 sizeof(hdw->std_info_avail));
2058 cptr->info = &hdw->std_info_avail;
2059 hdw->std_info_avail.def.type_bitmask.bit_names =
2061 hdw->std_info_avail.def.type_bitmask.valid_bits =
2064 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2066 memcpy(&hdw->std_info_cur,cptr->info,
2067 sizeof(hdw->std_info_cur));
2068 cptr->info = &hdw->std_info_cur;
2069 hdw->std_info_cur.def.type_bitmask.bit_names =
2071 hdw->std_info_avail.def.type_bitmask.valid_bits =
2075 hdw->eeprom_addr = -1;
2076 hdw->unit_number = -1;
2077 hdw->v4l_minor_number_video = -1;
2078 hdw->v4l_minor_number_vbi = -1;
2079 hdw->v4l_minor_number_radio = -1;
2080 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2081 if (!hdw->ctl_write_buffer) goto fail;
2082 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2083 if (!hdw->ctl_read_buffer) goto fail;
2084 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2085 if (!hdw->ctl_write_urb) goto fail;
2086 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2087 if (!hdw->ctl_read_urb) goto fail;
2089 mutex_lock(&pvr2_unit_mtx); do {
2090 for (idx = 0; idx < PVR_NUM; idx++) {
2091 if (unit_pointers[idx]) continue;
2092 hdw->unit_number = idx;
2093 unit_pointers[idx] = hdw;
2096 } while (0); mutex_unlock(&pvr2_unit_mtx);
2099 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2101 if (hdw->unit_number >= 0) {
2102 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2103 ('a' + hdw->unit_number));
2106 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2107 hdw->name[cnt1] = 0;
2109 hdw->workqueue = create_singlethread_workqueue(hdw->name);
2110 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2111 INIT_WORK(&hdw->worki2csync,pvr2_hdw_worker_i2c);
2113 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2114 hdw->unit_number,hdw->name);
2116 hdw->tuner_type = -1;
2119 hdw->usb_intf = intf;
2120 hdw->usb_dev = interface_to_usbdev(intf);
2122 scnprintf(hdw->bus_info,sizeof(hdw->bus_info),
2123 "usb %s address %d",
2124 hdw->usb_dev->dev.bus_id,
2125 hdw->usb_dev->devnum);
2127 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2128 usb_set_interface(hdw->usb_dev,ifnum,0);
2130 mutex_init(&hdw->ctl_lock_mutex);
2131 mutex_init(&hdw->big_lock_mutex);
2136 del_timer_sync(&hdw->quiescent_timer);
2137 del_timer_sync(&hdw->encoder_run_timer);
2138 del_timer_sync(&hdw->encoder_wait_timer);
2139 if (hdw->workqueue) {
2140 flush_workqueue(hdw->workqueue);
2141 destroy_workqueue(hdw->workqueue);
2142 hdw->workqueue = NULL;
2144 usb_free_urb(hdw->ctl_read_urb);
2145 usb_free_urb(hdw->ctl_write_urb);
2146 kfree(hdw->ctl_read_buffer);
2147 kfree(hdw->ctl_write_buffer);
2148 kfree(hdw->controls);
2149 kfree(hdw->mpeg_ctrl_info);
2150 kfree(hdw->std_defs);
2151 kfree(hdw->std_enum_names);
2158 /* Remove _all_ associations between this driver and the underlying USB
2160 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2162 if (hdw->flag_disconnected) return;
2163 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2164 if (hdw->ctl_read_urb) {
2165 usb_kill_urb(hdw->ctl_read_urb);
2166 usb_free_urb(hdw->ctl_read_urb);
2167 hdw->ctl_read_urb = NULL;
2169 if (hdw->ctl_write_urb) {
2170 usb_kill_urb(hdw->ctl_write_urb);
2171 usb_free_urb(hdw->ctl_write_urb);
2172 hdw->ctl_write_urb = NULL;
2174 if (hdw->ctl_read_buffer) {
2175 kfree(hdw->ctl_read_buffer);
2176 hdw->ctl_read_buffer = NULL;
2178 if (hdw->ctl_write_buffer) {
2179 kfree(hdw->ctl_write_buffer);
2180 hdw->ctl_write_buffer = NULL;
2182 hdw->flag_disconnected = !0;
2183 hdw->usb_dev = NULL;
2184 hdw->usb_intf = NULL;
2185 pvr2_hdw_render_useless(hdw);
2189 /* Destroy hardware interaction structure */
2190 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2193 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2194 if (hdw->workqueue) {
2195 flush_workqueue(hdw->workqueue);
2196 destroy_workqueue(hdw->workqueue);
2197 hdw->workqueue = NULL;
2199 del_timer_sync(&hdw->quiescent_timer);
2200 del_timer_sync(&hdw->encoder_run_timer);
2201 del_timer_sync(&hdw->encoder_wait_timer);
2202 if (hdw->fw_buffer) {
2203 kfree(hdw->fw_buffer);
2204 hdw->fw_buffer = NULL;
2206 if (hdw->vid_stream) {
2207 pvr2_stream_destroy(hdw->vid_stream);
2208 hdw->vid_stream = NULL;
2210 if (hdw->decoder_ctrl) {
2211 hdw->decoder_ctrl->detach(hdw->decoder_ctrl->ctxt);
2213 pvr2_i2c_core_done(hdw);
2214 pvr2_hdw_remove_usb_stuff(hdw);
2215 mutex_lock(&pvr2_unit_mtx); do {
2216 if ((hdw->unit_number >= 0) &&
2217 (hdw->unit_number < PVR_NUM) &&
2218 (unit_pointers[hdw->unit_number] == hdw)) {
2219 unit_pointers[hdw->unit_number] = NULL;
2221 } while (0); mutex_unlock(&pvr2_unit_mtx);
2222 kfree(hdw->controls);
2223 kfree(hdw->mpeg_ctrl_info);
2224 kfree(hdw->std_defs);
2225 kfree(hdw->std_enum_names);
2230 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2232 return (hdw && hdw->flag_ok);
2236 /* Called when hardware has been unplugged */
2237 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2239 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2240 LOCK_TAKE(hdw->big_lock);
2241 LOCK_TAKE(hdw->ctl_lock);
2242 pvr2_hdw_remove_usb_stuff(hdw);
2243 LOCK_GIVE(hdw->ctl_lock);
2244 LOCK_GIVE(hdw->big_lock);
2248 // Attempt to autoselect an appropriate value for std_enum_cur given
2249 // whatever is currently in std_mask_cur
2250 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2253 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2254 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2255 hdw->std_enum_cur = idx;
2259 hdw->std_enum_cur = 0;
2263 // Calculate correct set of enumerated standards based on currently known
2264 // set of available standards bits.
2265 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2267 struct v4l2_standard *newstd;
2268 unsigned int std_cnt;
2271 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2273 if (hdw->std_defs) {
2274 kfree(hdw->std_defs);
2275 hdw->std_defs = NULL;
2277 hdw->std_enum_cnt = 0;
2278 if (hdw->std_enum_names) {
2279 kfree(hdw->std_enum_names);
2280 hdw->std_enum_names = NULL;
2285 PVR2_TRACE_ERROR_LEGS,
2286 "WARNING: Failed to identify any viable standards");
2288 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2289 hdw->std_enum_names[0] = "none";
2290 for (idx = 0; idx < std_cnt; idx++) {
2291 hdw->std_enum_names[idx+1] =
2294 // Set up the dynamic control for this standard
2295 hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2296 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2297 hdw->std_defs = newstd;
2298 hdw->std_enum_cnt = std_cnt+1;
2299 hdw->std_enum_cur = 0;
2300 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2304 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2305 struct v4l2_standard *std,
2309 if (!idx) return ret;
2310 LOCK_TAKE(hdw->big_lock); do {
2311 if (idx >= hdw->std_enum_cnt) break;
2313 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2315 } while (0); LOCK_GIVE(hdw->big_lock);
2320 /* Get the number of defined controls */
2321 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2323 return hdw->control_cnt;
2327 /* Retrieve a control handle given its index (0..count-1) */
2328 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2331 if (idx >= hdw->control_cnt) return NULL;
2332 return hdw->controls + idx;
2336 /* Retrieve a control handle given its index (0..count-1) */
2337 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2338 unsigned int ctl_id)
2340 struct pvr2_ctrl *cptr;
2344 /* This could be made a lot more efficient, but for now... */
2345 for (idx = 0; idx < hdw->control_cnt; idx++) {
2346 cptr = hdw->controls + idx;
2347 i = cptr->info->internal_id;
2348 if (i && (i == ctl_id)) return cptr;
2354 /* Given a V4L ID, retrieve the control structure associated with it. */
2355 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2357 struct pvr2_ctrl *cptr;
2361 /* This could be made a lot more efficient, but for now... */
2362 for (idx = 0; idx < hdw->control_cnt; idx++) {
2363 cptr = hdw->controls + idx;
2364 i = cptr->info->v4l_id;
2365 if (i && (i == ctl_id)) return cptr;
2371 /* Given a V4L ID for its immediate predecessor, retrieve the control
2372 structure associated with it. */
2373 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2374 unsigned int ctl_id)
2376 struct pvr2_ctrl *cptr,*cp2;
2380 /* This could be made a lot more efficient, but for now... */
2382 for (idx = 0; idx < hdw->control_cnt; idx++) {
2383 cptr = hdw->controls + idx;
2384 i = cptr->info->v4l_id;
2386 if (i <= ctl_id) continue;
2387 if (cp2 && (cp2->info->v4l_id < i)) continue;
2395 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2398 case pvr2_ctl_int: return "integer";
2399 case pvr2_ctl_enum: return "enum";
2400 case pvr2_ctl_bool: return "boolean";
2401 case pvr2_ctl_bitmask: return "bitmask";
2407 /* Figure out if we need to commit control changes. If so, mark internal
2408 state flags to indicate this fact and return true. Otherwise do nothing
2409 else and return false. */
2410 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
2413 struct pvr2_ctrl *cptr;
2415 int commit_flag = 0;
2417 unsigned int bcnt,ccnt;
2419 for (idx = 0; idx < hdw->control_cnt; idx++) {
2420 cptr = hdw->controls + idx;
2421 if (!cptr->info->is_dirty) continue;
2422 if (!cptr->info->is_dirty(cptr)) continue;
2425 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
2426 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
2429 cptr->info->get_value(cptr,&value);
2430 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
2432 sizeof(buf)-bcnt,&ccnt);
2434 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
2435 get_ctrl_typename(cptr->info->type));
2436 pvr2_trace(PVR2_TRACE_CTL,
2437 "/*--TRACE_COMMIT--*/ %.*s",
2442 /* Nothing has changed */
2446 hdw->state_pipeline_config = 0;
2447 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
2448 pvr2_hdw_state_sched(hdw);
2454 /* Perform all operations needed to commit all control changes. This must
2455 be performed in synchronization with the pipeline state and is thus
2456 expected to be called as part of the driver's worker thread. Return
2457 true if commit successful, otherwise return false to indicate that
2458 commit isn't possible at this time. */
2459 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
2462 struct pvr2_ctrl *cptr;
2463 int disruptive_change;
2465 /* Handle some required side effects when the video standard is
2467 if (hdw->std_dirty) {
2470 if (hdw->std_mask_cur & V4L2_STD_525_60) {
2477 /* Rewrite the vertical resolution to be appropriate to the
2478 video standard that has been selected. */
2479 if (nvres != hdw->res_ver_val) {
2480 hdw->res_ver_val = nvres;
2481 hdw->res_ver_dirty = !0;
2483 /* Rewrite the GOP size to be appropriate to the video
2484 standard that has been selected. */
2485 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
2486 struct v4l2_ext_controls cs;
2487 struct v4l2_ext_control c1;
2488 memset(&cs, 0, sizeof(cs));
2489 memset(&c1, 0, sizeof(c1));
2492 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
2493 c1.value = gop_size;
2494 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
2495 VIDIOC_S_EXT_CTRLS);
2499 if (hdw->input_dirty && hdw->state_pathway_ok &&
2500 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
2501 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
2502 hdw->pathway_state)) {
2503 /* Change of mode being asked for... */
2504 hdw->state_pathway_ok = 0;
2505 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
2507 if (!hdw->state_pathway_ok) {
2508 /* Can't commit anything until pathway is ok. */
2511 /* If any of the below has changed, then we can't do the update
2512 while the pipeline is running. Pipeline must be paused first
2513 and decoder -> encoder connection be made quiescent before we
2517 hdw->enc_unsafe_stale ||
2519 hdw->res_ver_dirty ||
2520 hdw->res_hor_dirty ||
2522 (hdw->active_stream_type != hdw->desired_stream_type));
2523 if (disruptive_change && !hdw->state_pipeline_idle) {
2524 /* Pipeline is not idle; we can't proceed. Arrange to
2525 cause pipeline to stop so that we can try this again
2527 hdw->state_pipeline_pause = !0;
2531 if (hdw->srate_dirty) {
2532 /* Write new sample rate into control structure since
2533 * the master copy is stale. We must track srate
2534 * separate from the mpeg control structure because
2535 * other logic also uses this value. */
2536 struct v4l2_ext_controls cs;
2537 struct v4l2_ext_control c1;
2538 memset(&cs,0,sizeof(cs));
2539 memset(&c1,0,sizeof(c1));
2542 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
2543 c1.value = hdw->srate_val;
2544 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
2547 /* Scan i2c core at this point - before we clear all the dirty
2548 bits. Various parts of the i2c core will notice dirty bits as
2549 appropriate and arrange to broadcast or directly send updates to
2550 the client drivers in order to keep everything in sync */
2551 pvr2_i2c_core_check_stale(hdw);
2553 for (idx = 0; idx < hdw->control_cnt; idx++) {
2554 cptr = hdw->controls + idx;
2555 if (!cptr->info->clear_dirty) continue;
2556 cptr->info->clear_dirty(cptr);
2559 if (hdw->active_stream_type != hdw->desired_stream_type) {
2560 /* Handle any side effects of stream config here */
2561 hdw->active_stream_type = hdw->desired_stream_type;
2564 if (hdw->hdw_desc->signal_routing_scheme ==
2565 PVR2_ROUTING_SCHEME_GOTVIEW) {
2567 /* Handle GOTVIEW audio switching */
2568 pvr2_hdw_gpio_get_out(hdw,&b);
2569 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2571 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
2574 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
2578 /* Now execute i2c core update */
2579 pvr2_i2c_core_sync(hdw);
2581 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
2582 hdw->state_encoder_run) {
2583 /* If encoder isn't running or it can't be touched, then
2584 this will get worked out later when we start the
2586 if (pvr2_encoder_adjust(hdw) < 0) return !0;
2589 hdw->state_pipeline_config = !0;
2590 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
2595 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
2598 LOCK_TAKE(hdw->big_lock);
2599 fl = pvr2_hdw_commit_setup(hdw);
2600 LOCK_GIVE(hdw->big_lock);
2602 return pvr2_hdw_wait(hdw,0);
2606 static void pvr2_hdw_worker_i2c(struct work_struct *work)
2608 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,worki2csync);
2609 LOCK_TAKE(hdw->big_lock); do {
2610 pvr2_i2c_core_sync(hdw);
2611 } while (0); LOCK_GIVE(hdw->big_lock);
2615 static void pvr2_hdw_worker_poll(struct work_struct *work)
2618 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
2619 LOCK_TAKE(hdw->big_lock); do {
2620 fl = pvr2_hdw_state_eval(hdw);
2621 } while (0); LOCK_GIVE(hdw->big_lock);
2622 if (fl && hdw->state_func) {
2623 hdw->state_func(hdw->state_data);
2628 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
2630 return wait_event_interruptible(
2631 hdw->state_wait_data,
2632 (hdw->state_stale == 0) &&
2633 (!state || (hdw->master_state != state)));
2637 /* Return name for this driver instance */
2638 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
2644 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
2646 return hdw->hdw_desc->description;
2650 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
2652 return hdw->hdw_desc->shortname;
2656 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
2659 LOCK_TAKE(hdw->ctl_lock); do {
2660 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
2661 result = pvr2_send_request(hdw,
2664 if (result < 0) break;
2665 result = (hdw->cmd_buffer[0] != 0);
2666 } while(0); LOCK_GIVE(hdw->ctl_lock);
2671 /* Execute poll of tuner status */
2672 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
2674 LOCK_TAKE(hdw->big_lock); do {
2675 pvr2_i2c_core_status_poll(hdw);
2676 } while (0); LOCK_GIVE(hdw->big_lock);
2680 /* Return information about the tuner */
2681 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
2683 LOCK_TAKE(hdw->big_lock); do {
2684 if (hdw->tuner_signal_stale) {
2685 pvr2_i2c_core_status_poll(hdw);
2687 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
2688 } while (0); LOCK_GIVE(hdw->big_lock);
2693 /* Get handle to video output stream */
2694 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
2696 return hp->vid_stream;
2700 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
2702 int nr = pvr2_hdw_get_unit_number(hdw);
2703 LOCK_TAKE(hdw->big_lock); do {
2704 hdw->log_requested = !0;
2705 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
2706 pvr2_i2c_core_check_stale(hdw);
2707 hdw->log_requested = 0;
2708 pvr2_i2c_core_sync(hdw);
2709 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
2710 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
2711 pvr2_hdw_state_log_state(hdw);
2712 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
2713 } while (0); LOCK_GIVE(hdw->big_lock);
2717 /* Grab EEPROM contents, needed for direct method. */
2718 #define EEPROM_SIZE 8192
2719 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
2720 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
2722 struct i2c_msg msg[2];
2731 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
2733 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2734 "Failed to allocate memory"
2735 " required to read eeprom");
2739 trace_eeprom("Value for eeprom addr from controller was 0x%x",
2741 addr = hdw->eeprom_addr;
2742 /* Seems that if the high bit is set, then the *real* eeprom
2743 address is shifted right now bit position (noticed this in
2744 newer PVR USB2 hardware) */
2745 if (addr & 0x80) addr >>= 1;
2747 /* FX2 documentation states that a 16bit-addressed eeprom is
2748 expected if the I2C address is an odd number (yeah, this is
2749 strange but it's what they do) */
2750 mode16 = (addr & 1);
2751 eepromSize = (mode16 ? EEPROM_SIZE : 256);
2752 trace_eeprom("Examining %d byte eeprom at location 0x%x"
2753 " using %d bit addressing",eepromSize,addr,
2758 msg[0].len = mode16 ? 2 : 1;
2761 msg[1].flags = I2C_M_RD;
2763 /* We have to do the actual eeprom data fetch ourselves, because
2764 (1) we're only fetching part of the eeprom, and (2) if we were
2765 getting the whole thing our I2C driver can't grab it in one
2766 pass - which is what tveeprom is otherwise going to attempt */
2767 memset(eeprom,0,EEPROM_SIZE);
2768 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
2770 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
2771 offs = tcnt + (eepromSize - EEPROM_SIZE);
2773 iadd[0] = offs >> 8;
2779 msg[1].buf = eeprom+tcnt;
2780 if ((ret = i2c_transfer(&hdw->i2c_adap,
2781 msg,ARRAY_SIZE(msg))) != 2) {
2782 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2783 "eeprom fetch set offs err=%d",ret);
2792 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
2799 LOCK_TAKE(hdw->big_lock); do {
2800 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
2803 pvr2_trace(PVR2_TRACE_FIRMWARE,
2804 "Cleaning up after CPU firmware fetch");
2805 kfree(hdw->fw_buffer);
2806 hdw->fw_buffer = NULL;
2808 if (hdw->fw_cpu_flag) {
2809 /* Now release the CPU. It will disconnect
2810 and reconnect later. */
2811 pvr2_hdw_cpureset_assert(hdw,0);
2816 hdw->fw_cpu_flag = (prom_flag == 0);
2817 if (hdw->fw_cpu_flag) {
2818 pvr2_trace(PVR2_TRACE_FIRMWARE,
2819 "Preparing to suck out CPU firmware");
2820 hdw->fw_size = 0x2000;
2821 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
2822 if (!hdw->fw_buffer) {
2827 /* We have to hold the CPU during firmware upload. */
2828 pvr2_hdw_cpureset_assert(hdw,1);
2830 /* download the firmware from address 0000-1fff in 2048
2831 (=0x800) bytes chunk. */
2833 pvr2_trace(PVR2_TRACE_FIRMWARE,
2834 "Grabbing CPU firmware");
2835 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
2836 for(address = 0; address < hdw->fw_size;
2838 ret = usb_control_msg(hdw->usb_dev,pipe,
2841 hdw->fw_buffer+address,
2846 pvr2_trace(PVR2_TRACE_FIRMWARE,
2847 "Done grabbing CPU firmware");
2849 pvr2_trace(PVR2_TRACE_FIRMWARE,
2850 "Sucking down EEPROM contents");
2851 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
2852 if (!hdw->fw_buffer) {
2853 pvr2_trace(PVR2_TRACE_FIRMWARE,
2854 "EEPROM content suck failed.");
2857 hdw->fw_size = EEPROM_SIZE;
2858 pvr2_trace(PVR2_TRACE_FIRMWARE,
2859 "Done sucking down EEPROM contents");
2862 } while (0); LOCK_GIVE(hdw->big_lock);
2866 /* Return true if we're in a mode for retrieval CPU firmware */
2867 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
2869 return hdw->fw_buffer != NULL;
2873 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
2874 char *buf,unsigned int cnt)
2877 LOCK_TAKE(hdw->big_lock); do {
2881 if (!hdw->fw_buffer) {
2886 if (offs >= hdw->fw_size) {
2887 pvr2_trace(PVR2_TRACE_FIRMWARE,
2888 "Read firmware data offs=%d EOF",
2894 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
2896 memcpy(buf,hdw->fw_buffer+offs,cnt);
2898 pvr2_trace(PVR2_TRACE_FIRMWARE,
2899 "Read firmware data offs=%d cnt=%d",
2902 } while (0); LOCK_GIVE(hdw->big_lock);
2908 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
2909 enum pvr2_v4l_type index)
2912 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
2913 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
2914 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
2920 /* Store a v4l minor device number */
2921 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
2922 enum pvr2_v4l_type index,int v)
2925 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
2926 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
2927 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
2933 static void pvr2_ctl_write_complete(struct urb *urb)
2935 struct pvr2_hdw *hdw = urb->context;
2936 hdw->ctl_write_pend_flag = 0;
2937 if (hdw->ctl_read_pend_flag) return;
2938 complete(&hdw->ctl_done);
2942 static void pvr2_ctl_read_complete(struct urb *urb)
2944 struct pvr2_hdw *hdw = urb->context;
2945 hdw->ctl_read_pend_flag = 0;
2946 if (hdw->ctl_write_pend_flag) return;
2947 complete(&hdw->ctl_done);
2951 static void pvr2_ctl_timeout(unsigned long data)
2953 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
2954 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
2955 hdw->ctl_timeout_flag = !0;
2956 if (hdw->ctl_write_pend_flag)
2957 usb_unlink_urb(hdw->ctl_write_urb);
2958 if (hdw->ctl_read_pend_flag)
2959 usb_unlink_urb(hdw->ctl_read_urb);
2964 /* Issue a command and get a response from the device. This extended
2965 version includes a probe flag (which if set means that device errors
2966 should not be logged or treated as fatal) and a timeout in jiffies.
2967 This can be used to non-lethally probe the health of endpoint 1. */
2968 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
2969 unsigned int timeout,int probe_fl,
2970 void *write_data,unsigned int write_len,
2971 void *read_data,unsigned int read_len)
2975 struct timer_list timer;
2976 if (!hdw->ctl_lock_held) {
2977 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2978 "Attempted to execute control transfer"
2982 if (!hdw->flag_ok && !probe_fl) {
2983 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2984 "Attempted to execute control transfer"
2985 " when device not ok");
2988 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
2990 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2991 "Attempted to execute control transfer"
2992 " when USB is disconnected");
2997 /* Ensure that we have sane parameters */
2998 if (!write_data) write_len = 0;
2999 if (!read_data) read_len = 0;
3000 if (write_len > PVR2_CTL_BUFFSIZE) {
3002 PVR2_TRACE_ERROR_LEGS,
3003 "Attempted to execute %d byte"
3004 " control-write transfer (limit=%d)",
3005 write_len,PVR2_CTL_BUFFSIZE);
3008 if (read_len > PVR2_CTL_BUFFSIZE) {
3010 PVR2_TRACE_ERROR_LEGS,
3011 "Attempted to execute %d byte"
3012 " control-read transfer (limit=%d)",
3013 write_len,PVR2_CTL_BUFFSIZE);
3016 if ((!write_len) && (!read_len)) {
3018 PVR2_TRACE_ERROR_LEGS,
3019 "Attempted to execute null control transfer?");
3024 hdw->cmd_debug_state = 1;
3026 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3028 hdw->cmd_debug_code = 0;
3030 hdw->cmd_debug_write_len = write_len;
3031 hdw->cmd_debug_read_len = read_len;
3033 /* Initialize common stuff */
3034 init_completion(&hdw->ctl_done);
3035 hdw->ctl_timeout_flag = 0;
3036 hdw->ctl_write_pend_flag = 0;
3037 hdw->ctl_read_pend_flag = 0;
3039 timer.expires = jiffies + timeout;
3040 timer.data = (unsigned long)hdw;
3041 timer.function = pvr2_ctl_timeout;
3044 hdw->cmd_debug_state = 2;
3045 /* Transfer write data to internal buffer */
3046 for (idx = 0; idx < write_len; idx++) {
3047 hdw->ctl_write_buffer[idx] =
3048 ((unsigned char *)write_data)[idx];
3050 /* Initiate a write request */
3051 usb_fill_bulk_urb(hdw->ctl_write_urb,
3053 usb_sndbulkpipe(hdw->usb_dev,
3054 PVR2_CTL_WRITE_ENDPOINT),
3055 hdw->ctl_write_buffer,
3057 pvr2_ctl_write_complete,
3059 hdw->ctl_write_urb->actual_length = 0;
3060 hdw->ctl_write_pend_flag = !0;
3061 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3063 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3064 "Failed to submit write-control"
3065 " URB status=%d",status);
3066 hdw->ctl_write_pend_flag = 0;
3072 hdw->cmd_debug_state = 3;
3073 memset(hdw->ctl_read_buffer,0x43,read_len);
3074 /* Initiate a read request */
3075 usb_fill_bulk_urb(hdw->ctl_read_urb,
3077 usb_rcvbulkpipe(hdw->usb_dev,
3078 PVR2_CTL_READ_ENDPOINT),
3079 hdw->ctl_read_buffer,
3081 pvr2_ctl_read_complete,
3083 hdw->ctl_read_urb->actual_length = 0;
3084 hdw->ctl_read_pend_flag = !0;
3085 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3087 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3088 "Failed to submit read-control"
3089 " URB status=%d",status);
3090 hdw->ctl_read_pend_flag = 0;
3098 /* Now wait for all I/O to complete */
3099 hdw->cmd_debug_state = 4;
3100 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3101 wait_for_completion(&hdw->ctl_done);
3103 hdw->cmd_debug_state = 5;
3106 del_timer_sync(&timer);
3108 hdw->cmd_debug_state = 6;
3111 if (hdw->ctl_timeout_flag) {
3112 status = -ETIMEDOUT;
3114 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3115 "Timed out control-write");
3121 /* Validate results of write request */
3122 if ((hdw->ctl_write_urb->status != 0) &&
3123 (hdw->ctl_write_urb->status != -ENOENT) &&
3124 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3125 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3126 /* USB subsystem is reporting some kind of failure
3128 status = hdw->ctl_write_urb->status;
3130 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3131 "control-write URB failure,"
3137 if (hdw->ctl_write_urb->actual_length < write_len) {
3138 /* Failed to write enough data */
3141 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3142 "control-write URB short,"
3143 " expected=%d got=%d",
3145 hdw->ctl_write_urb->actual_length);
3151 /* Validate results of read request */
3152 if ((hdw->ctl_read_urb->status != 0) &&
3153 (hdw->ctl_read_urb->status != -ENOENT) &&
3154 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3155 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3156 /* USB subsystem is reporting some kind of failure
3158 status = hdw->ctl_read_urb->status;
3160 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3161 "control-read URB failure,"
3167 if (hdw->ctl_read_urb->actual_length < read_len) {
3168 /* Failed to read enough data */
3171 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3172 "control-read URB short,"
3173 " expected=%d got=%d",
3175 hdw->ctl_read_urb->actual_length);
3179 /* Transfer retrieved data out from internal buffer */
3180 for (idx = 0; idx < read_len; idx++) {
3181 ((unsigned char *)read_data)[idx] =
3182 hdw->ctl_read_buffer[idx];
3188 hdw->cmd_debug_state = 0;
3189 if ((status < 0) && (!probe_fl)) {
3190 pvr2_hdw_render_useless(hdw);
3196 int pvr2_send_request(struct pvr2_hdw *hdw,
3197 void *write_data,unsigned int write_len,
3198 void *read_data,unsigned int read_len)
3200 return pvr2_send_request_ex(hdw,HZ*4,0,
3201 write_data,write_len,
3202 read_data,read_len);
3206 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3209 unsigned int cnt = 1;
3210 unsigned int args = 0;
3211 LOCK_TAKE(hdw->ctl_lock);
3212 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3213 args = (cmdcode >> 8) & 0xffu;
3214 args = (args > 2) ? 2 : args;
3217 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3219 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3222 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3224 unsigned int ccnt,bcnt;
3228 ccnt = scnprintf(tbuf+bcnt,
3230 "Sending FX2 command 0x%x",cmdcode);
3232 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3233 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3234 ccnt = scnprintf(tbuf+bcnt,
3237 pvr2_fx2cmd_desc[idx].desc);
3243 ccnt = scnprintf(tbuf+bcnt,
3245 " (%u",hdw->cmd_buffer[1]);
3248 ccnt = scnprintf(tbuf+bcnt,
3250 ",%u",hdw->cmd_buffer[2]);
3253 ccnt = scnprintf(tbuf+bcnt,
3258 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3260 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3261 LOCK_GIVE(hdw->ctl_lock);
3266 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3270 LOCK_TAKE(hdw->ctl_lock);
3272 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
3273 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
3274 hdw->cmd_buffer[5] = 0;
3275 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3276 hdw->cmd_buffer[7] = reg & 0xff;
3279 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
3281 LOCK_GIVE(hdw->ctl_lock);
3287 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
3291 LOCK_TAKE(hdw->ctl_lock);
3293 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
3294 hdw->cmd_buffer[1] = 0;
3295 hdw->cmd_buffer[2] = 0;
3296 hdw->cmd_buffer[3] = 0;
3297 hdw->cmd_buffer[4] = 0;
3298 hdw->cmd_buffer[5] = 0;
3299 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3300 hdw->cmd_buffer[7] = reg & 0xff;
3302 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
3303 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
3305 LOCK_GIVE(hdw->ctl_lock);
3311 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
3313 if (!hdw->flag_ok) return;
3314 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3315 "Device being rendered inoperable");
3316 if (hdw->vid_stream) {
3317 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
3320 trace_stbit("flag_ok",hdw->flag_ok);
3321 pvr2_hdw_state_sched(hdw);
3325 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
3328 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
3329 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
3331 ret = usb_reset_device(hdw->usb_dev);
3332 usb_unlock_device(hdw->usb_dev);
3334 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3335 "Failed to lock USB device ret=%d",ret);
3337 if (init_pause_msec) {
3338 pvr2_trace(PVR2_TRACE_INFO,
3339 "Waiting %u msec for hardware to settle",
3341 msleep(init_pause_msec);
3347 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
3353 if (!hdw->usb_dev) return;
3355 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
3357 da[0] = val ? 0x01 : 0x00;
3359 /* Write the CPUCS register on the 8051. The lsb of the register
3360 is the reset bit; a 1 asserts reset while a 0 clears it. */
3361 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
3362 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
3364 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3365 "cpureset_assert(%d) error=%d",val,ret);
3366 pvr2_hdw_render_useless(hdw);
3371 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
3373 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
3377 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
3379 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
3383 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
3385 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
3389 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
3391 if (!hdw->decoder_ctrl) {
3392 pvr2_trace(PVR2_TRACE_INIT,
3393 "Unable to reset decoder: nothing attached");
3397 if (!hdw->decoder_ctrl->force_reset) {
3398 pvr2_trace(PVR2_TRACE_INIT,
3399 "Unable to reset decoder: not implemented");
3403 pvr2_trace(PVR2_TRACE_INIT,
3404 "Requesting decoder reset");
3405 hdw->decoder_ctrl->force_reset(hdw->decoder_ctrl->ctxt);
3410 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
3413 return pvr2_issue_simple_cmd(hdw,
3414 FX2CMD_HCW_DEMOD_RESETIN |
3416 ((onoff ? 1 : 0) << 16));
3420 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
3423 return pvr2_issue_simple_cmd(hdw,(onoff ?
3424 FX2CMD_ONAIR_DTV_POWER_ON :
3425 FX2CMD_ONAIR_DTV_POWER_OFF));
3429 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
3432 return pvr2_issue_simple_cmd(hdw,(onoff ?
3433 FX2CMD_ONAIR_DTV_STREAMING_ON :
3434 FX2CMD_ONAIR_DTV_STREAMING_OFF));
3438 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
3441 /* Compare digital/analog desired setting with current setting. If
3442 they don't match, fix it... */
3443 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
3444 if (cmode == hdw->pathway_state) {
3445 /* They match; nothing to do */
3449 switch (hdw->hdw_desc->digital_control_scheme) {
3450 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
3451 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
3452 if (cmode == PVR2_PATHWAY_ANALOG) {
3453 /* If moving to analog mode, also force the decoder
3454 to reset. If no decoder is attached, then it's
3455 ok to ignore this because if/when the decoder
3456 attaches, it will reset itself at that time. */
3457 pvr2_hdw_cmd_decoder_reset(hdw);
3460 case PVR2_DIGITAL_SCHEME_ONAIR:
3461 /* Supposedly we should always have the power on whether in
3462 digital or analog mode. But for now do what appears to
3464 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
3469 pvr2_hdw_untrip_unlocked(hdw);
3470 hdw->pathway_state = cmode;
3474 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
3476 /* change some GPIO data
3478 * note: bit d7 of dir appears to control the LED,
3479 * so we shut it off here.
3483 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
3485 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
3487 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
3491 typedef void (*led_method_func)(struct pvr2_hdw *,int);
3493 static led_method_func led_methods[] = {
3494 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
3499 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
3501 unsigned int scheme_id;
3504 if ((!onoff) == (!hdw->led_on)) return;
3506 hdw->led_on = onoff != 0;
3508 scheme_id = hdw->hdw_desc->led_scheme;
3509 if (scheme_id < ARRAY_SIZE(led_methods)) {
3510 fp = led_methods[scheme_id];
3515 if (fp) (*fp)(hdw,onoff);
3519 /* Stop / start video stream transport */
3520 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
3524 /* If we're in analog mode, then just issue the usual analog
3526 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
3527 return pvr2_issue_simple_cmd(hdw,
3529 FX2CMD_STREAMING_ON :
3530 FX2CMD_STREAMING_OFF));
3531 /*Note: Not reached */
3534 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
3535 /* Whoops, we don't know what mode we're in... */
3539 /* To get here we have to be in digital mode. The mechanism here
3540 is unfortunately different for different vendors. So we switch
3541 on the device's digital scheme attribute in order to figure out
3543 switch (hdw->hdw_desc->digital_control_scheme) {
3544 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
3545 return pvr2_issue_simple_cmd(hdw,
3547 FX2CMD_HCW_DTV_STREAMING_ON :
3548 FX2CMD_HCW_DTV_STREAMING_OFF));
3549 case PVR2_DIGITAL_SCHEME_ONAIR:
3550 ret = pvr2_issue_simple_cmd(hdw,
3552 FX2CMD_STREAMING_ON :
3553 FX2CMD_STREAMING_OFF));
3554 if (ret) return ret;
3555 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
3562 /* Evaluate whether or not state_pathway_ok can change */
3563 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
3565 if (hdw->state_pathway_ok) {
3566 /* Nothing to do if pathway is already ok */
3569 if (!hdw->state_pipeline_idle) {
3570 /* Not allowed to change anything if pipeline is not idle */
3573 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
3574 hdw->state_pathway_ok = !0;
3575 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3580 /* Evaluate whether or not state_encoder_ok can change */
3581 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
3583 if (hdw->state_encoder_ok) return 0;
3584 if (hdw->flag_tripped) return 0;
3585 if (hdw->state_encoder_run) return 0;
3586 if (hdw->state_encoder_config) return 0;
3587 if (hdw->state_decoder_run) return 0;
3588 if (hdw->state_usbstream_run) return 0;
3589 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
3590 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
3591 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
3595 if (pvr2_upload_firmware2(hdw) < 0) {
3596 hdw->flag_tripped = !0;
3597 trace_stbit("flag_tripped",hdw->flag_tripped);
3600 hdw->state_encoder_ok = !0;
3601 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
3606 /* Evaluate whether or not state_encoder_config can change */
3607 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
3609 if (hdw->state_encoder_config) {
3610 if (hdw->state_encoder_ok) {
3611 if (hdw->state_pipeline_req &&
3612 !hdw->state_pipeline_pause) return 0;
3614 hdw->state_encoder_config = 0;
3615 hdw->state_encoder_waitok = 0;
3616 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
3617 /* paranoia - solve race if timer just completed */
3618 del_timer_sync(&hdw->encoder_wait_timer);
3620 if (!hdw->state_pathway_ok ||
3621 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
3622 !hdw->state_encoder_ok ||
3623 !hdw->state_pipeline_idle ||
3624 hdw->state_pipeline_pause ||
3625 !hdw->state_pipeline_req ||
3626 !hdw->state_pipeline_config) {
3627 /* We must reset the enforced wait interval if
3628 anything has happened that might have disturbed
3629 the encoder. This should be a rare case. */
3630 if (timer_pending(&hdw->encoder_wait_timer)) {
3631 del_timer_sync(&hdw->encoder_wait_timer);
3633 if (hdw->state_encoder_waitok) {
3634 /* Must clear the state - therefore we did
3635 something to a state bit and must also
3637 hdw->state_encoder_waitok = 0;
3638 trace_stbit("state_encoder_waitok",
3639 hdw->state_encoder_waitok);
3644 if (!hdw->state_encoder_waitok) {
3645 if (!timer_pending(&hdw->encoder_wait_timer)) {
3646 /* waitok flag wasn't set and timer isn't
3647 running. Check flag once more to avoid
3648 a race then start the timer. This is
3649 the point when we measure out a minimal
3650 quiet interval before doing something to
3652 if (!hdw->state_encoder_waitok) {
3653 hdw->encoder_wait_timer.expires =
3655 (HZ * TIME_MSEC_ENCODER_WAIT
3657 add_timer(&hdw->encoder_wait_timer);
3660 /* We can't continue until we know we have been
3661 quiet for the interval measured by this
3665 pvr2_encoder_configure(hdw);
3666 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
3668 trace_stbit("state_encoder_config",hdw->state_encoder_config);
3673 /* Return true if the encoder should not be running. */
3674 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
3676 if (!hdw->state_encoder_ok) {
3677 /* Encoder isn't healthy at the moment, so stop it. */
3680 if (!hdw->state_pathway_ok) {
3681 /* Mode is not understood at the moment (i.e. it wants to
3682 change), so encoder must be stopped. */
3686 switch (hdw->pathway_state) {
3687 case PVR2_PATHWAY_ANALOG:
3688 if (!hdw->state_decoder_run) {
3689 /* We're in analog mode and the decoder is not
3690 running; thus the encoder should be stopped as
3695 case PVR2_PATHWAY_DIGITAL:
3696 if (hdw->state_encoder_runok) {
3697 /* This is a funny case. We're in digital mode so
3698 really the encoder should be stopped. However
3699 if it really is running, only kill it after
3700 runok has been set. This gives a chance for the
3701 onair quirk to function (encoder must run
3702 briefly first, at least once, before onair
3703 digital streaming can work). */
3708 /* Unknown mode; so encoder should be stopped. */
3712 /* If we get here, we haven't found a reason to stop the
3718 /* Return true if the encoder should be running. */
3719 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
3721 if (!hdw->state_encoder_ok) {
3722 /* Don't run the encoder if it isn't healthy... */
3725 if (!hdw->state_pathway_ok) {
3726 /* Don't run the encoder if we don't (yet) know what mode
3727 we need to be in... */
3731 switch (hdw->pathway_state) {
3732 case PVR2_PATHWAY_ANALOG:
3733 if (hdw->state_decoder_run) {
3734 /* In analog mode, if the decoder is running, then
3739 case PVR2_PATHWAY_DIGITAL:
3740 if ((hdw->hdw_desc->digital_control_scheme ==
3741 PVR2_DIGITAL_SCHEME_ONAIR) &&
3742 !hdw->state_encoder_runok) {
3743 /* This is a quirk. OnAir hardware won't stream
3744 digital until the encoder has been run at least
3745 once, for a minimal period of time (empiricially
3746 measured to be 1/4 second). So if we're on
3747 OnAir hardware and the encoder has never been
3748 run at all, then start the encoder. Normal
3749 state machine logic in the driver will
3750 automatically handle the remaining bits. */
3755 /* For completeness (unknown mode; encoder won't run ever) */
3758 /* If we get here, then we haven't found any reason to run the
3759 encoder, so don't run it. */
3764 /* Evaluate whether or not state_encoder_run can change */
3765 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
3767 if (hdw->state_encoder_run) {
3768 if (!state_check_disable_encoder_run(hdw)) return 0;
3769 if (hdw->state_encoder_ok) {
3770 del_timer_sync(&hdw->encoder_run_timer);
3771 if (pvr2_encoder_stop(hdw) < 0) return !0;
3773 hdw->state_encoder_run = 0;
3775 if (!state_check_enable_encoder_run(hdw)) return 0;
3776 if (pvr2_encoder_start(hdw) < 0) return !0;
3777 hdw->state_encoder_run = !0;
3778 if (!hdw->state_encoder_runok) {
3779 hdw->encoder_run_timer.expires =
3780 jiffies + (HZ * TIME_MSEC_ENCODER_OK / 1000);
3781 add_timer(&hdw->encoder_run_timer);
3784 trace_stbit("state_encoder_run",hdw->state_encoder_run);
3789 /* Timeout function for quiescent timer. */
3790 static void pvr2_hdw_quiescent_timeout(unsigned long data)
3792 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3793 hdw->state_decoder_quiescent = !0;
3794 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
3795 hdw->state_stale = !0;
3796 queue_work(hdw->workqueue,&hdw->workpoll);
3800 /* Timeout function for encoder wait timer. */
3801 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
3803 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3804 hdw->state_encoder_waitok = !0;
3805 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
3806 hdw->state_stale = !0;
3807 queue_work(hdw->workqueue,&hdw->workpoll);
3811 /* Timeout function for encoder run timer. */
3812 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
3814 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3815 if (!hdw->state_encoder_runok) {
3816 hdw->state_encoder_runok = !0;
3817 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
3818 hdw->state_stale = !0;
3819 queue_work(hdw->workqueue,&hdw->workpoll);
3824 /* Evaluate whether or not state_decoder_run can change */
3825 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
3827 if (hdw->state_decoder_run) {
3828 if (hdw->state_encoder_ok) {
3829 if (hdw->state_pipeline_req &&
3830 !hdw->state_pipeline_pause &&
3831 hdw->state_pathway_ok) return 0;
3833 if (!hdw->flag_decoder_missed) {
3834 pvr2_decoder_enable(hdw,0);
3836 hdw->state_decoder_quiescent = 0;
3837 hdw->state_decoder_run = 0;
3838 /* paranoia - solve race if timer just completed */
3839 del_timer_sync(&hdw->quiescent_timer);
3841 if (!hdw->state_decoder_quiescent) {
3842 if (!timer_pending(&hdw->quiescent_timer)) {
3843 /* We don't do something about the
3844 quiescent timer until right here because
3845 we also want to catch cases where the
3846 decoder was already not running (like
3847 after initialization) as opposed to
3848 knowing that we had just stopped it.
3849 The second flag check is here to cover a
3850 race - the timer could have run and set
3851 this flag just after the previous check
3852 but before we did the pending check. */
3853 if (!hdw->state_decoder_quiescent) {
3854 hdw->quiescent_timer.expires =
3856 (HZ * TIME_MSEC_DECODER_WAIT
3858 add_timer(&hdw->quiescent_timer);
3861 /* Don't allow decoder to start again until it has
3862 been quiesced first. This little detail should
3863 hopefully further stabilize the encoder. */
3866 if (!hdw->state_pathway_ok ||
3867 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
3868 !hdw->state_pipeline_req ||
3869 hdw->state_pipeline_pause ||
3870 !hdw->state_pipeline_config ||
3871 !hdw->state_encoder_config ||
3872 !hdw->state_encoder_ok) return 0;
3873 del_timer_sync(&hdw->quiescent_timer);
3874 if (hdw->flag_decoder_missed) return 0;
3875 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
3876 hdw->state_decoder_quiescent = 0;
3877 hdw->state_decoder_run = !0;
3879 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
3880 trace_stbit("state_decoder_run",hdw->state_decoder_run);
3885 /* Evaluate whether or not state_usbstream_run can change */
3886 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
3888 if (hdw->state_usbstream_run) {
3890 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
3891 fl = (hdw->state_encoder_ok &&
3892 hdw->state_encoder_run);
3893 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
3894 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
3895 fl = hdw->state_encoder_ok;
3898 hdw->state_pipeline_req &&
3899 !hdw->state_pipeline_pause &&
3900 hdw->state_pathway_ok) {
3903 pvr2_hdw_cmd_usbstream(hdw,0);
3904 hdw->state_usbstream_run = 0;
3906 if (!hdw->state_pipeline_req ||
3907 hdw->state_pipeline_pause ||
3908 !hdw->state_pathway_ok) return 0;
3909 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
3910 if (!hdw->state_encoder_ok ||
3911 !hdw->state_encoder_run) return 0;
3912 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
3913 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
3914 if (!hdw->state_encoder_ok) return 0;
3915 if (hdw->state_encoder_run) return 0;
3916 if (hdw->hdw_desc->digital_control_scheme ==
3917 PVR2_DIGITAL_SCHEME_ONAIR) {
3918 /* OnAir digital receivers won't stream
3919 unless the analog encoder has run first.
3920 Why? I have no idea. But don't even
3921 try until we know the analog side is
3922 known to have run. */
3923 if (!hdw->state_encoder_runok) return 0;
3926 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
3927 hdw->state_usbstream_run = !0;
3929 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
3934 /* Attempt to configure pipeline, if needed */
3935 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
3937 if (hdw->state_pipeline_config ||
3938 hdw->state_pipeline_pause) return 0;
3939 pvr2_hdw_commit_execute(hdw);
3944 /* Update pipeline idle and pipeline pause tracking states based on other
3945 inputs. This must be called whenever the other relevant inputs have
3947 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
3951 /* Update pipeline state */
3952 st = !(hdw->state_encoder_run ||
3953 hdw->state_decoder_run ||
3954 hdw->state_usbstream_run ||
3955 (!hdw->state_decoder_quiescent));
3956 if (!st != !hdw->state_pipeline_idle) {
3957 hdw->state_pipeline_idle = st;
3960 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
3961 hdw->state_pipeline_pause = 0;
3968 typedef int (*state_eval_func)(struct pvr2_hdw *);
3970 /* Set of functions to be run to evaluate various states in the driver. */
3971 static const state_eval_func eval_funcs[] = {
3972 state_eval_pathway_ok,
3973 state_eval_pipeline_config,
3974 state_eval_encoder_ok,
3975 state_eval_encoder_config,
3976 state_eval_decoder_run,
3977 state_eval_encoder_run,
3978 state_eval_usbstream_run,
3982 /* Process various states and return true if we did anything interesting. */
3983 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
3986 int state_updated = 0;
3989 if (!hdw->state_stale) return 0;
3990 if ((hdw->fw1_state != FW1_STATE_OK) ||
3992 hdw->state_stale = 0;
3995 /* This loop is the heart of the entire driver. It keeps trying to
3996 evaluate various bits of driver state until nothing changes for
3997 one full iteration. Each "bit of state" tracks some global
3998 aspect of the driver, e.g. whether decoder should run, if
3999 pipeline is configured, usb streaming is on, etc. We separately
4000 evaluate each of those questions based on other driver state to
4001 arrive at the correct running configuration. */
4004 state_update_pipeline_state(hdw);
4005 /* Iterate over each bit of state */
4006 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4007 if ((*eval_funcs[i])(hdw)) {
4010 state_update_pipeline_state(hdw);
4013 } while (check_flag && hdw->flag_ok);
4014 hdw->state_stale = 0;
4015 trace_stbit("state_stale",hdw->state_stale);
4016 return state_updated;
4020 static unsigned int print_input_mask(unsigned int msk,
4021 char *buf,unsigned int acnt)
4023 unsigned int idx,ccnt;
4024 unsigned int tcnt = 0;
4025 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4026 if (!((1 << idx) & msk)) continue;
4027 ccnt = scnprintf(buf+tcnt,
4031 control_values_input[idx]);
4038 static const char *pvr2_pathway_state_name(int id)
4041 case PVR2_PATHWAY_ANALOG: return "analog";
4042 case PVR2_PATHWAY_DIGITAL: return "digital";
4043 default: return "unknown";
4048 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4049 char *buf,unsigned int acnt)
4055 "driver:%s%s%s%s%s <mode=%s>",
4056 (hdw->flag_ok ? " <ok>" : " <fail>"),
4057 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4058 (hdw->flag_disconnected ? " <disconnected>" :
4060 (hdw->flag_tripped ? " <tripped>" : ""),
4061 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4062 pvr2_pathway_state_name(hdw->pathway_state));
4067 "pipeline:%s%s%s%s",
4068 (hdw->state_pipeline_idle ? " <idle>" : ""),
4069 (hdw->state_pipeline_config ?
4070 " <configok>" : " <stale>"),
4071 (hdw->state_pipeline_req ? " <req>" : ""),
4072 (hdw->state_pipeline_pause ? " <pause>" : ""));
4076 "worker:%s%s%s%s%s%s%s",
4077 (hdw->state_decoder_run ?
4079 (hdw->state_decoder_quiescent ?
4080 "" : " <decode:stop>")),
4081 (hdw->state_decoder_quiescent ?
4082 " <decode:quiescent>" : ""),
4083 (hdw->state_encoder_ok ?
4084 "" : " <encode:init>"),
4085 (hdw->state_encoder_run ?
4086 (hdw->state_encoder_runok ?
4088 " <encode:firstrun>") :
4089 (hdw->state_encoder_runok ?
4091 " <encode:virgin>")),
4092 (hdw->state_encoder_config ?
4093 " <encode:configok>" :
4094 (hdw->state_encoder_waitok ?
4095 "" : " <encode:waitok>")),
4096 (hdw->state_usbstream_run ?
4097 " <usb:run>" : " <usb:stop>"),
4098 (hdw->state_pathway_ok ?
4099 " <pathway:ok>" : ""));
4104 pvr2_get_state_name(hdw->master_state));
4106 unsigned int tcnt = 0;
4109 ccnt = scnprintf(buf,
4111 "Hardware supported inputs: ");
4113 tcnt += print_input_mask(hdw->input_avail_mask,
4116 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4117 ccnt = scnprintf(buf+tcnt,
4119 "; allowed inputs: ");
4121 tcnt += print_input_mask(hdw->input_allowed_mask,
4128 struct pvr2_stream_stats stats;
4129 if (!hdw->vid_stream) break;
4130 pvr2_stream_get_stats(hdw->vid_stream,
4136 " URBs: queued=%u idle=%u ready=%u"
4137 " processed=%u failed=%u",
4138 stats.bytes_processed,
4139 stats.buffers_in_queue,
4140 stats.buffers_in_idle,
4141 stats.buffers_in_ready,
4142 stats.buffers_processed,
4143 stats.buffers_failed);
4151 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4152 char *buf,unsigned int acnt)
4154 unsigned int bcnt,ccnt,idx;
4156 LOCK_TAKE(hdw->big_lock);
4157 for (idx = 0; ; idx++) {
4158 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4160 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4162 buf[0] = '\n'; ccnt = 1;
4163 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4165 LOCK_GIVE(hdw->big_lock);
4170 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4173 unsigned int idx,ccnt;
4175 for (idx = 0; ; idx++) {
4176 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4178 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4183 /* Evaluate and update the driver's current state, taking various actions
4184 as appropriate for the update. */
4185 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4188 int state_updated = 0;
4189 int callback_flag = 0;
4192 pvr2_trace(PVR2_TRACE_STBITS,
4193 "Drive state check START");
4194 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4195 pvr2_hdw_state_log_state(hdw);
4198 /* Process all state and get back over disposition */
4199 state_updated = pvr2_hdw_state_update(hdw);
4201 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4203 /* Update master state based upon all other states. */
4204 if (!hdw->flag_ok) {
4205 st = PVR2_STATE_DEAD;
4206 } else if (hdw->fw1_state != FW1_STATE_OK) {
4207 st = PVR2_STATE_COLD;
4208 } else if ((analog_mode ||
4209 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4210 !hdw->state_encoder_ok) {
4211 st = PVR2_STATE_WARM;
4212 } else if (hdw->flag_tripped ||
4213 (analog_mode && hdw->flag_decoder_missed)) {
4214 st = PVR2_STATE_ERROR;
4215 } else if (hdw->state_usbstream_run &&
4217 (hdw->state_encoder_run && hdw->state_decoder_run))) {
4218 st = PVR2_STATE_RUN;
4220 st = PVR2_STATE_READY;
4222 if (hdw->master_state != st) {
4223 pvr2_trace(PVR2_TRACE_STATE,
4224 "Device state change from %s to %s",
4225 pvr2_get_state_name(hdw->master_state),
4226 pvr2_get_state_name(st));
4227 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
4228 hdw->master_state = st;
4232 if (state_updated) {
4233 /* Trigger anyone waiting on any state changes here. */
4234 wake_up(&hdw->state_wait_data);
4237 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4238 pvr2_hdw_state_log_state(hdw);
4240 pvr2_trace(PVR2_TRACE_STBITS,
4241 "Drive state check DONE callback=%d",callback_flag);
4243 return callback_flag;
4247 /* Cause kernel thread to check / update driver state */
4248 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
4250 if (hdw->state_stale) return;
4251 hdw->state_stale = !0;
4252 trace_stbit("state_stale",hdw->state_stale);
4253 queue_work(hdw->workqueue,&hdw->workpoll);
4257 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
4259 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
4263 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
4265 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
4269 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
4271 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
4275 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
4280 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
4281 if (ret) return ret;
4282 nval = (cval & ~msk) | (val & msk);
4283 pvr2_trace(PVR2_TRACE_GPIO,
4284 "GPIO direction changing 0x%x:0x%x"
4285 " from 0x%x to 0x%x",
4289 pvr2_trace(PVR2_TRACE_GPIO,
4290 "GPIO direction changing to 0x%x",nval);
4292 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
4296 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
4301 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
4302 if (ret) return ret;
4303 nval = (cval & ~msk) | (val & msk);
4304 pvr2_trace(PVR2_TRACE_GPIO,
4305 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
4309 pvr2_trace(PVR2_TRACE_GPIO,
4310 "GPIO output changing to 0x%x",nval);
4312 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
4316 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
4318 return hdw->input_avail_mask;
4322 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
4324 return hdw->input_allowed_mask;
4328 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
4330 if (hdw->input_val != v) {
4332 hdw->input_dirty = !0;
4335 /* Handle side effects - if we switch to a mode that needs the RF
4336 tuner, then select the right frequency choice as well and mark
4338 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
4339 hdw->freqSelector = 0;
4340 hdw->freqDirty = !0;
4341 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
4342 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
4343 hdw->freqSelector = 1;
4344 hdw->freqDirty = !0;
4350 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
4351 unsigned int change_mask,
4352 unsigned int change_val)
4355 unsigned int nv,m,idx;
4356 LOCK_TAKE(hdw->big_lock);
4358 nv = hdw->input_allowed_mask & ~change_mask;
4359 nv |= (change_val & change_mask);
4360 nv &= hdw->input_avail_mask;
4362 /* No legal modes left; return error instead. */
4366 hdw->input_allowed_mask = nv;
4367 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
4368 /* Current mode is still in the allowed mask, so
4372 /* Select and switch to a mode that is still in the allowed
4374 if (!hdw->input_allowed_mask) {
4375 /* Nothing legal; give up */
4378 m = hdw->input_allowed_mask;
4379 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
4380 if (!((1 << idx) & m)) continue;
4381 pvr2_hdw_set_input(hdw,idx);
4385 LOCK_GIVE(hdw->big_lock);
4390 /* Find I2C address of eeprom */
4391 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
4394 LOCK_TAKE(hdw->ctl_lock); do {
4395 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
4396 result = pvr2_send_request(hdw,
4399 if (result < 0) break;
4400 result = hdw->cmd_buffer[0];
4401 } while(0); LOCK_GIVE(hdw->ctl_lock);
4406 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
4407 u32 match_type, u32 match_chip, u64 reg_id,
4408 int setFl,u64 *val_ptr)
4410 #ifdef CONFIG_VIDEO_ADV_DEBUG
4411 struct pvr2_i2c_client *cp;
4412 struct v4l2_register req;
4416 if (!capable(CAP_SYS_ADMIN)) return -EPERM;
4418 req.match_type = match_type;
4419 req.match_chip = match_chip;
4421 if (setFl) req.val = *val_ptr;
4422 mutex_lock(&hdw->i2c_list_lock); do {
4423 list_for_each_entry(cp, &hdw->i2c_clients, list) {
4424 if (!v4l2_chip_match_i2c_client(
4426 req.match_type, req.match_chip)) {
4429 stat = pvr2_i2c_client_cmd(
4430 cp,(setFl ? VIDIOC_DBG_S_REGISTER :
4431 VIDIOC_DBG_G_REGISTER),&req);
4432 if (!setFl) *val_ptr = req.val;
4436 } while (0); mutex_unlock(&hdw->i2c_list_lock);
4448 Stuff for Emacs to see, in order to encourage consistent editing style:
4449 *** Local Variables: ***
4451 *** fill-column: 75 ***
4452 *** tab-width: 8 ***
4453 *** c-basic-offset: 8 ***