5 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include <linux/errno.h>
23 #include <linux/string.h>
24 #include <linux/slab.h>
25 #include <linux/firmware.h>
26 #include <linux/videodev2.h>
27 #include <media/v4l2-common.h>
29 #include "pvrusb2-std.h"
30 #include "pvrusb2-util.h"
31 #include "pvrusb2-hdw.h"
32 #include "pvrusb2-i2c-core.h"
33 #include "pvrusb2-tuner.h"
34 #include "pvrusb2-eeprom.h"
35 #include "pvrusb2-hdw-internal.h"
36 #include "pvrusb2-encoder.h"
37 #include "pvrusb2-debug.h"
38 #include "pvrusb2-fx2-cmd.h"
40 #define TV_MIN_FREQ 55250000L
41 #define TV_MAX_FREQ 850000000L
43 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
44 static DEFINE_MUTEX(pvr2_unit_mtx);
47 static int initusbreset = 1;
48 static int procreload;
49 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
50 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
51 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
52 static int init_pause_msec;
54 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
55 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
56 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
57 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
58 module_param(initusbreset, int, S_IRUGO|S_IWUSR);
59 MODULE_PARM_DESC(initusbreset, "Do USB reset device on probe");
60 module_param(procreload, int, S_IRUGO|S_IWUSR);
61 MODULE_PARM_DESC(procreload,
62 "Attempt init failure recovery with firmware reload");
63 module_param_array(tuner, int, NULL, 0444);
64 MODULE_PARM_DESC(tuner,"specify installed tuner type");
65 module_param_array(video_std, int, NULL, 0444);
66 MODULE_PARM_DESC(video_std,"specify initial video standard");
67 module_param_array(tolerance, int, NULL, 0444);
68 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
70 #define PVR2_CTL_WRITE_ENDPOINT 0x01
71 #define PVR2_CTL_READ_ENDPOINT 0x81
73 #define PVR2_GPIO_IN 0x9008
74 #define PVR2_GPIO_OUT 0x900c
75 #define PVR2_GPIO_DIR 0x9020
77 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
79 #define PVR2_FIRMWARE_ENDPOINT 0x02
81 /* size of a firmware chunk */
82 #define FIRMWARE_CHUNK_SIZE 0x2000
84 /* Define the list of additional controls we'll dynamically construct based
85 on query of the cx2341x module. */
86 struct pvr2_mpeg_ids {
90 static const struct pvr2_mpeg_ids mpeg_ids[] = {
92 .strid = "audio_layer",
93 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
95 .strid = "audio_bitrate",
96 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
98 /* Already using audio_mode elsewhere :-( */
99 .strid = "mpeg_audio_mode",
100 .id = V4L2_CID_MPEG_AUDIO_MODE,
102 .strid = "mpeg_audio_mode_extension",
103 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
105 .strid = "audio_emphasis",
106 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
108 .strid = "audio_crc",
109 .id = V4L2_CID_MPEG_AUDIO_CRC,
111 .strid = "video_aspect",
112 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
114 .strid = "video_b_frames",
115 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
117 .strid = "video_gop_size",
118 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
120 .strid = "video_gop_closure",
121 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
123 .strid = "video_bitrate_mode",
124 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
126 .strid = "video_bitrate",
127 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
129 .strid = "video_bitrate_peak",
130 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
132 .strid = "video_temporal_decimation",
133 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
135 .strid = "stream_type",
136 .id = V4L2_CID_MPEG_STREAM_TYPE,
138 .strid = "video_spatial_filter_mode",
139 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
141 .strid = "video_spatial_filter",
142 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
144 .strid = "video_luma_spatial_filter_type",
145 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
147 .strid = "video_chroma_spatial_filter_type",
148 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
150 .strid = "video_temporal_filter_mode",
151 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
153 .strid = "video_temporal_filter",
154 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
156 .strid = "video_median_filter_type",
157 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
159 .strid = "video_luma_median_filter_top",
160 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
162 .strid = "video_luma_median_filter_bottom",
163 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
165 .strid = "video_chroma_median_filter_top",
166 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
168 .strid = "video_chroma_median_filter_bottom",
169 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
172 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
175 static const char *control_values_srate[] = {
176 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
177 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
178 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
183 static const char *control_values_input[] = {
184 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
185 [PVR2_CVAL_INPUT_DTV] = "dtv",
186 [PVR2_CVAL_INPUT_RADIO] = "radio",
187 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
188 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
192 static const char *control_values_audiomode[] = {
193 [V4L2_TUNER_MODE_MONO] = "Mono",
194 [V4L2_TUNER_MODE_STEREO] = "Stereo",
195 [V4L2_TUNER_MODE_LANG1] = "Lang1",
196 [V4L2_TUNER_MODE_LANG2] = "Lang2",
197 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
201 static const char *control_values_hsm[] = {
202 [PVR2_CVAL_HSM_FAIL] = "Fail",
203 [PVR2_CVAL_HSM_HIGH] = "High",
204 [PVR2_CVAL_HSM_FULL] = "Full",
208 static const char *pvr2_state_names[] = {
209 [PVR2_STATE_NONE] = "none",
210 [PVR2_STATE_DEAD] = "dead",
211 [PVR2_STATE_COLD] = "cold",
212 [PVR2_STATE_WARM] = "warm",
213 [PVR2_STATE_ERROR] = "error",
214 [PVR2_STATE_READY] = "ready",
215 [PVR2_STATE_RUN] = "run",
219 struct pvr2_fx2cmd_descdef {
224 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
225 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
226 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
227 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
228 {FX2CMD_REG_WRITE, "write encoder register"},
229 {FX2CMD_REG_READ, "read encoder register"},
230 {FX2CMD_MEMSEL, "encoder memsel"},
231 {FX2CMD_I2C_WRITE, "i2c write"},
232 {FX2CMD_I2C_READ, "i2c read"},
233 {FX2CMD_GET_USB_SPEED, "get USB speed"},
234 {FX2CMD_STREAMING_ON, "stream on"},
235 {FX2CMD_STREAMING_OFF, "stream off"},
236 {FX2CMD_FWPOST1, "fwpost1"},
237 {FX2CMD_POWER_OFF, "power off"},
238 {FX2CMD_POWER_ON, "power on"},
239 {FX2CMD_DEEP_RESET, "deep reset"},
240 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
241 {FX2CMD_GET_IR_CODE, "get IR code"},
242 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
243 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
244 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
245 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
246 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
247 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
248 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
252 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
253 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
254 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
255 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
256 static void pvr2_hdw_worker_i2c(struct work_struct *work);
257 static void pvr2_hdw_worker_poll(struct work_struct *work);
258 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
259 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
260 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
261 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
262 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
263 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
264 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
265 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
266 static void pvr2_hdw_quiescent_timeout(unsigned long);
267 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
268 static void pvr2_hdw_encoder_run_timeout(unsigned long);
269 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
270 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
271 unsigned int timeout,int probe_fl,
272 void *write_data,unsigned int write_len,
273 void *read_data,unsigned int read_len);
276 static void trace_stbit(const char *name,int val)
278 pvr2_trace(PVR2_TRACE_STBITS,
279 "State bit %s <-- %s",
280 name,(val ? "true" : "false"));
283 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
285 struct pvr2_hdw *hdw = cptr->hdw;
286 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
287 *vp = hdw->freqTable[hdw->freqProgSlot-1];
294 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
296 struct pvr2_hdw *hdw = cptr->hdw;
297 unsigned int slotId = hdw->freqProgSlot;
298 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
299 hdw->freqTable[slotId-1] = v;
300 /* Handle side effects correctly - if we're tuned to this
301 slot, then forgot the slot id relation since the stored
302 frequency has been changed. */
303 if (hdw->freqSelector) {
304 if (hdw->freqSlotRadio == slotId) {
305 hdw->freqSlotRadio = 0;
308 if (hdw->freqSlotTelevision == slotId) {
309 hdw->freqSlotTelevision = 0;
316 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
318 *vp = cptr->hdw->freqProgSlot;
322 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
324 struct pvr2_hdw *hdw = cptr->hdw;
325 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
326 hdw->freqProgSlot = v;
331 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
333 struct pvr2_hdw *hdw = cptr->hdw;
334 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
338 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
341 struct pvr2_hdw *hdw = cptr->hdw;
342 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
344 freq = hdw->freqTable[slotId-1];
346 pvr2_hdw_set_cur_freq(hdw,freq);
348 if (hdw->freqSelector) {
349 hdw->freqSlotRadio = slotId;
351 hdw->freqSlotTelevision = slotId;
356 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
358 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
362 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
364 return cptr->hdw->freqDirty != 0;
367 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
369 cptr->hdw->freqDirty = 0;
372 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
374 pvr2_hdw_set_cur_freq(cptr->hdw,v);
378 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
380 /* Actual maximum depends on the video standard in effect. */
381 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
389 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
391 /* Actual minimum depends on device digitizer type. */
392 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
400 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
402 *vp = cptr->hdw->input_val;
406 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
408 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
411 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
413 return pvr2_hdw_set_input(cptr->hdw,v);
416 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
418 return cptr->hdw->input_dirty != 0;
421 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
423 cptr->hdw->input_dirty = 0;
427 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
430 struct pvr2_hdw *hdw = cptr->hdw;
431 if (hdw->tuner_signal_stale) {
432 pvr2_i2c_core_status_poll(hdw);
434 fv = hdw->tuner_signal_info.rangehigh;
436 /* Safety fallback */
440 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
449 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
452 struct pvr2_hdw *hdw = cptr->hdw;
453 if (hdw->tuner_signal_stale) {
454 pvr2_i2c_core_status_poll(hdw);
456 fv = hdw->tuner_signal_info.rangelow;
458 /* Safety fallback */
462 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
471 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
473 return cptr->hdw->enc_stale != 0;
476 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
478 cptr->hdw->enc_stale = 0;
479 cptr->hdw->enc_unsafe_stale = 0;
482 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
485 struct v4l2_ext_controls cs;
486 struct v4l2_ext_control c1;
487 memset(&cs,0,sizeof(cs));
488 memset(&c1,0,sizeof(c1));
491 c1.id = cptr->info->v4l_id;
492 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
499 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
502 struct pvr2_hdw *hdw = cptr->hdw;
503 struct v4l2_ext_controls cs;
504 struct v4l2_ext_control c1;
505 memset(&cs,0,sizeof(cs));
506 memset(&c1,0,sizeof(c1));
509 c1.id = cptr->info->v4l_id;
511 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
512 hdw->state_encoder_run, &cs,
515 /* Oops. cx2341x is telling us it's not safe to change
516 this control while we're capturing. Make a note of this
517 fact so that the pipeline will be stopped the next time
518 controls are committed. Then go on ahead and store this
520 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
523 if (!ret) hdw->enc_unsafe_stale = !0;
530 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
532 struct v4l2_queryctrl qctrl;
533 struct pvr2_ctl_info *info;
534 qctrl.id = cptr->info->v4l_id;
535 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
536 /* Strip out the const so we can adjust a function pointer. It's
537 OK to do this here because we know this is a dynamically created
538 control, so the underlying storage for the info pointer is (a)
539 private to us, and (b) not in read-only storage. Either we do
540 this or we significantly complicate the underlying control
542 info = (struct pvr2_ctl_info *)(cptr->info);
543 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
544 if (info->set_value) {
545 info->set_value = NULL;
548 if (!(info->set_value)) {
549 info->set_value = ctrl_cx2341x_set;
555 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
557 *vp = cptr->hdw->state_pipeline_req;
561 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
563 *vp = cptr->hdw->master_state;
567 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
569 int result = pvr2_hdw_is_hsm(cptr->hdw);
570 *vp = PVR2_CVAL_HSM_FULL;
571 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
572 if (result) *vp = PVR2_CVAL_HSM_HIGH;
576 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
578 *vp = cptr->hdw->std_mask_avail;
582 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
584 struct pvr2_hdw *hdw = cptr->hdw;
586 ns = hdw->std_mask_avail;
587 ns = (ns & ~m) | (v & m);
588 if (ns == hdw->std_mask_avail) return 0;
589 hdw->std_mask_avail = ns;
590 pvr2_hdw_internal_set_std_avail(hdw);
591 pvr2_hdw_internal_find_stdenum(hdw);
595 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
596 char *bufPtr,unsigned int bufSize,
599 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
603 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
604 const char *bufPtr,unsigned int bufSize,
609 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
610 if (ret < 0) return ret;
611 if (mskp) *mskp = id;
612 if (valp) *valp = id;
616 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
618 *vp = cptr->hdw->std_mask_cur;
622 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
624 struct pvr2_hdw *hdw = cptr->hdw;
626 ns = hdw->std_mask_cur;
627 ns = (ns & ~m) | (v & m);
628 if (ns == hdw->std_mask_cur) return 0;
629 hdw->std_mask_cur = ns;
631 pvr2_hdw_internal_find_stdenum(hdw);
635 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
637 return cptr->hdw->std_dirty != 0;
640 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
642 cptr->hdw->std_dirty = 0;
645 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
647 struct pvr2_hdw *hdw = cptr->hdw;
648 pvr2_i2c_core_status_poll(hdw);
649 *vp = hdw->tuner_signal_info.signal;
653 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
656 unsigned int subchan;
657 struct pvr2_hdw *hdw = cptr->hdw;
658 pvr2_i2c_core_status_poll(hdw);
659 subchan = hdw->tuner_signal_info.rxsubchans;
660 if (subchan & V4L2_TUNER_SUB_MONO) {
661 val |= (1 << V4L2_TUNER_MODE_MONO);
663 if (subchan & V4L2_TUNER_SUB_STEREO) {
664 val |= (1 << V4L2_TUNER_MODE_STEREO);
666 if (subchan & V4L2_TUNER_SUB_LANG1) {
667 val |= (1 << V4L2_TUNER_MODE_LANG1);
669 if (subchan & V4L2_TUNER_SUB_LANG2) {
670 val |= (1 << V4L2_TUNER_MODE_LANG2);
677 static int ctrl_stdenumcur_set(struct pvr2_ctrl *cptr,int m,int v)
679 struct pvr2_hdw *hdw = cptr->hdw;
680 if (v < 0) return -EINVAL;
681 if (v > hdw->std_enum_cnt) return -EINVAL;
682 hdw->std_enum_cur = v;
685 if (hdw->std_mask_cur == hdw->std_defs[v].id) return 0;
686 hdw->std_mask_cur = hdw->std_defs[v].id;
692 static int ctrl_stdenumcur_get(struct pvr2_ctrl *cptr,int *vp)
694 *vp = cptr->hdw->std_enum_cur;
699 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl *cptr)
701 return cptr->hdw->std_dirty != 0;
705 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl *cptr)
707 cptr->hdw->std_dirty = 0;
711 #define DEFINT(vmin,vmax) \
712 .type = pvr2_ctl_int, \
713 .def.type_int.min_value = vmin, \
714 .def.type_int.max_value = vmax
716 #define DEFENUM(tab) \
717 .type = pvr2_ctl_enum, \
718 .def.type_enum.count = ARRAY_SIZE(tab), \
719 .def.type_enum.value_names = tab
722 .type = pvr2_ctl_bool
724 #define DEFMASK(msk,tab) \
725 .type = pvr2_ctl_bitmask, \
726 .def.type_bitmask.valid_bits = msk, \
727 .def.type_bitmask.bit_names = tab
729 #define DEFREF(vname) \
730 .set_value = ctrl_set_##vname, \
731 .get_value = ctrl_get_##vname, \
732 .is_dirty = ctrl_isdirty_##vname, \
733 .clear_dirty = ctrl_cleardirty_##vname
736 #define VCREATE_FUNCS(vname) \
737 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
738 {*vp = cptr->hdw->vname##_val; return 0;} \
739 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
740 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
741 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
742 {return cptr->hdw->vname##_dirty != 0;} \
743 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
744 {cptr->hdw->vname##_dirty = 0;}
746 VCREATE_FUNCS(brightness)
747 VCREATE_FUNCS(contrast)
748 VCREATE_FUNCS(saturation)
750 VCREATE_FUNCS(volume)
751 VCREATE_FUNCS(balance)
753 VCREATE_FUNCS(treble)
755 VCREATE_FUNCS(audiomode)
756 VCREATE_FUNCS(res_hor)
757 VCREATE_FUNCS(res_ver)
760 /* Table definition of all controls which can be manipulated */
761 static const struct pvr2_ctl_info control_defs[] = {
763 .v4l_id = V4L2_CID_BRIGHTNESS,
764 .desc = "Brightness",
765 .name = "brightness",
766 .default_value = 128,
770 .v4l_id = V4L2_CID_CONTRAST,
777 .v4l_id = V4L2_CID_SATURATION,
778 .desc = "Saturation",
779 .name = "saturation",
784 .v4l_id = V4L2_CID_HUE,
791 .v4l_id = V4L2_CID_AUDIO_VOLUME,
794 .default_value = 62000,
798 .v4l_id = V4L2_CID_AUDIO_BALANCE,
803 DEFINT(-32768,32767),
805 .v4l_id = V4L2_CID_AUDIO_BASS,
810 DEFINT(-32768,32767),
812 .v4l_id = V4L2_CID_AUDIO_TREBLE,
817 DEFINT(-32768,32767),
819 .v4l_id = V4L2_CID_AUDIO_MUTE,
826 .desc = "Video Source",
828 .internal_id = PVR2_CID_INPUT,
829 .default_value = PVR2_CVAL_INPUT_TV,
830 .check_value = ctrl_check_input,
832 DEFENUM(control_values_input),
834 .desc = "Audio Mode",
835 .name = "audio_mode",
836 .internal_id = PVR2_CID_AUDIOMODE,
837 .default_value = V4L2_TUNER_MODE_STEREO,
839 DEFENUM(control_values_audiomode),
841 .desc = "Horizontal capture resolution",
842 .name = "resolution_hor",
843 .internal_id = PVR2_CID_HRES,
844 .default_value = 720,
848 .desc = "Vertical capture resolution",
849 .name = "resolution_ver",
850 .internal_id = PVR2_CID_VRES,
851 .default_value = 480,
854 /* Hook in check for video standard and adjust maximum
855 depending on the standard. */
856 .get_max_value = ctrl_vres_max_get,
857 .get_min_value = ctrl_vres_min_get,
859 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
860 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
861 .desc = "Audio Sampling Frequency",
864 DEFENUM(control_values_srate),
866 .desc = "Tuner Frequency (Hz)",
868 .internal_id = PVR2_CID_FREQUENCY,
870 .set_value = ctrl_freq_set,
871 .get_value = ctrl_freq_get,
872 .is_dirty = ctrl_freq_is_dirty,
873 .clear_dirty = ctrl_freq_clear_dirty,
875 /* Hook in check for input value (tv/radio) and adjust
876 max/min values accordingly */
877 .get_max_value = ctrl_freq_max_get,
878 .get_min_value = ctrl_freq_min_get,
882 .set_value = ctrl_channel_set,
883 .get_value = ctrl_channel_get,
884 DEFINT(0,FREQTABLE_SIZE),
886 .desc = "Channel Program Frequency",
887 .name = "freq_table_value",
888 .set_value = ctrl_channelfreq_set,
889 .get_value = ctrl_channelfreq_get,
891 /* Hook in check for input value (tv/radio) and adjust
892 max/min values accordingly */
893 .get_max_value = ctrl_freq_max_get,
894 .get_min_value = ctrl_freq_min_get,
896 .desc = "Channel Program ID",
897 .name = "freq_table_channel",
898 .set_value = ctrl_channelprog_set,
899 .get_value = ctrl_channelprog_get,
900 DEFINT(0,FREQTABLE_SIZE),
902 .desc = "Streaming Enabled",
903 .name = "streaming_enabled",
904 .get_value = ctrl_streamingenabled_get,
909 .get_value = ctrl_hsm_get,
910 DEFENUM(control_values_hsm),
912 .desc = "Master State",
913 .name = "master_state",
914 .get_value = ctrl_masterstate_get,
915 DEFENUM(pvr2_state_names),
917 .desc = "Signal Present",
918 .name = "signal_present",
919 .get_value = ctrl_signal_get,
922 .desc = "Audio Modes Present",
923 .name = "audio_modes_present",
924 .get_value = ctrl_audio_modes_present_get,
925 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
926 v4l. Nothing outside of this module cares about this,
927 but I reuse it in order to also reuse the
928 control_values_audiomode string table. */
929 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
930 (1 << V4L2_TUNER_MODE_STEREO)|
931 (1 << V4L2_TUNER_MODE_LANG1)|
932 (1 << V4L2_TUNER_MODE_LANG2)),
933 control_values_audiomode),
935 .desc = "Video Standards Available Mask",
936 .name = "video_standard_mask_available",
937 .internal_id = PVR2_CID_STDAVAIL,
939 .get_value = ctrl_stdavail_get,
940 .set_value = ctrl_stdavail_set,
941 .val_to_sym = ctrl_std_val_to_sym,
942 .sym_to_val = ctrl_std_sym_to_val,
943 .type = pvr2_ctl_bitmask,
945 .desc = "Video Standards In Use Mask",
946 .name = "video_standard_mask_active",
947 .internal_id = PVR2_CID_STDCUR,
949 .get_value = ctrl_stdcur_get,
950 .set_value = ctrl_stdcur_set,
951 .is_dirty = ctrl_stdcur_is_dirty,
952 .clear_dirty = ctrl_stdcur_clear_dirty,
953 .val_to_sym = ctrl_std_val_to_sym,
954 .sym_to_val = ctrl_std_sym_to_val,
955 .type = pvr2_ctl_bitmask,
957 .desc = "Video Standard Name",
958 .name = "video_standard",
959 .internal_id = PVR2_CID_STDENUM,
961 .get_value = ctrl_stdenumcur_get,
962 .set_value = ctrl_stdenumcur_set,
963 .is_dirty = ctrl_stdenumcur_is_dirty,
964 .clear_dirty = ctrl_stdenumcur_clear_dirty,
965 .type = pvr2_ctl_enum,
969 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
972 const char *pvr2_config_get_name(enum pvr2_config cfg)
975 case pvr2_config_empty: return "empty";
976 case pvr2_config_mpeg: return "mpeg";
977 case pvr2_config_vbi: return "vbi";
978 case pvr2_config_pcm: return "pcm";
979 case pvr2_config_rawvideo: return "raw video";
985 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
991 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
993 return hdw->serial_number;
997 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
999 return hdw->bus_info;
1003 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1005 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1008 /* Set the currently tuned frequency and account for all possible
1009 driver-core side effects of this action. */
1010 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1012 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1013 if (hdw->freqSelector) {
1014 /* Swing over to radio frequency selection */
1015 hdw->freqSelector = 0;
1016 hdw->freqDirty = !0;
1018 if (hdw->freqValRadio != val) {
1019 hdw->freqValRadio = val;
1020 hdw->freqSlotRadio = 0;
1021 hdw->freqDirty = !0;
1024 if (!(hdw->freqSelector)) {
1025 /* Swing over to television frequency selection */
1026 hdw->freqSelector = 1;
1027 hdw->freqDirty = !0;
1029 if (hdw->freqValTelevision != val) {
1030 hdw->freqValTelevision = val;
1031 hdw->freqSlotTelevision = 0;
1032 hdw->freqDirty = !0;
1037 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1039 return hdw->unit_number;
1043 /* Attempt to locate one of the given set of files. Messages are logged
1044 appropriate to what has been found. The return value will be 0 or
1045 greater on success (it will be the index of the file name found) and
1046 fw_entry will be filled in. Otherwise a negative error is returned on
1047 failure. If the return value is -ENOENT then no viable firmware file
1048 could be located. */
1049 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1050 const struct firmware **fw_entry,
1051 const char *fwtypename,
1052 unsigned int fwcount,
1053 const char *fwnames[])
1057 for (idx = 0; idx < fwcount; idx++) {
1058 ret = request_firmware(fw_entry,
1060 &hdw->usb_dev->dev);
1062 trace_firmware("Located %s firmware: %s;"
1068 if (ret == -ENOENT) continue;
1069 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1070 "request_firmware fatal error with code=%d",ret);
1073 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1075 " Device %s firmware"
1076 " seems to be missing.",
1078 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1079 "Did you install the pvrusb2 firmware files"
1080 " in their proper location?");
1082 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1083 "request_firmware unable to locate %s file %s",
1084 fwtypename,fwnames[0]);
1086 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1087 "request_firmware unable to locate"
1088 " one of the following %s files:",
1090 for (idx = 0; idx < fwcount; idx++) {
1091 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1092 "request_firmware: Failed to find %s",
1101 * pvr2_upload_firmware1().
1103 * Send the 8051 firmware to the device. After the upload, arrange for
1104 * device to re-enumerate.
1106 * NOTE : the pointer to the firmware data given by request_firmware()
1107 * is not suitable for an usb transaction.
1110 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1112 const struct firmware *fw_entry = NULL;
1118 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1119 hdw->fw1_state = FW1_STATE_OK;
1120 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1121 "Connected device type defines"
1122 " no firmware to upload; ignoring firmware");
1126 hdw->fw1_state = FW1_STATE_FAILED; // default result
1128 trace_firmware("pvr2_upload_firmware1");
1130 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1131 hdw->hdw_desc->fx2_firmware.cnt,
1132 hdw->hdw_desc->fx2_firmware.lst);
1134 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1138 usb_settoggle(hdw->usb_dev, 0 & 0xf, !(0 & USB_DIR_IN), 0);
1139 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1141 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1143 if (fw_entry->size != 0x2000){
1144 pvr2_trace(PVR2_TRACE_ERROR_LEGS,"wrong fx2 firmware size");
1145 release_firmware(fw_entry);
1149 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1150 if (fw_ptr == NULL){
1151 release_firmware(fw_entry);
1155 /* We have to hold the CPU during firmware upload. */
1156 pvr2_hdw_cpureset_assert(hdw,1);
1158 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1162 for(address = 0; address < fw_entry->size; address += 0x800) {
1163 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1164 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1165 0, fw_ptr, 0x800, HZ);
1168 trace_firmware("Upload done, releasing device's CPU");
1170 /* Now release the CPU. It will disconnect and reconnect later. */
1171 pvr2_hdw_cpureset_assert(hdw,0);
1174 release_firmware(fw_entry);
1176 trace_firmware("Upload done (%d bytes sent)",ret);
1178 /* We should have written 8192 bytes */
1180 hdw->fw1_state = FW1_STATE_RELOAD;
1189 * pvr2_upload_firmware2()
1191 * This uploads encoder firmware on endpoint 2.
1195 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1197 const struct firmware *fw_entry = NULL;
1199 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1203 static const char *fw_files[] = {
1204 CX2341X_FIRM_ENC_FILENAME,
1207 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1211 trace_firmware("pvr2_upload_firmware2");
1213 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1214 ARRAY_SIZE(fw_files), fw_files);
1215 if (ret < 0) return ret;
1218 /* Since we're about to completely reinitialize the encoder,
1219 invalidate our cached copy of its configuration state. Next
1220 time we configure the encoder, then we'll fully configure it. */
1221 hdw->enc_cur_valid = 0;
1223 /* Encoder is about to be reset so note that as far as we're
1224 concerned now, the encoder has never been run. */
1225 del_timer_sync(&hdw->encoder_run_timer);
1226 if (hdw->state_encoder_runok) {
1227 hdw->state_encoder_runok = 0;
1228 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1231 /* First prepare firmware loading */
1232 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1233 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1234 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1235 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1236 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1237 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1238 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1239 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1240 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1241 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1242 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1243 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1244 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1245 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1246 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1247 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1248 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1249 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1252 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1253 "firmware2 upload prep failed, ret=%d",ret);
1254 release_firmware(fw_entry);
1258 /* Now send firmware */
1260 fw_len = fw_entry->size;
1262 if (fw_len % sizeof(u32)) {
1263 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1264 "size of %s firmware"
1265 " must be a multiple of %zu bytes",
1266 fw_files[fwidx],sizeof(u32));
1267 release_firmware(fw_entry);
1271 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1272 if (fw_ptr == NULL){
1273 release_firmware(fw_entry);
1274 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1275 "failed to allocate memory for firmware2 upload");
1279 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1282 for (fw_done = 0; fw_done < fw_len;) {
1283 bcnt = fw_len - fw_done;
1284 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1285 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1286 /* Usbsnoop log shows that we must swap bytes... */
1287 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1288 ((u32 *)fw_ptr)[icnt] =
1289 ___swab32(((u32 *)fw_ptr)[icnt]);
1291 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1292 &actual_length, HZ);
1293 ret |= (actual_length != bcnt);
1298 trace_firmware("upload of %s : %i / %i ",
1299 fw_files[fwidx],fw_done,fw_len);
1302 release_firmware(fw_entry);
1305 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1306 "firmware2 upload transfer failure");
1312 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1313 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1314 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1317 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1318 "firmware2 upload post-proc failure");
1324 static const char *pvr2_get_state_name(unsigned int st)
1326 if (st < ARRAY_SIZE(pvr2_state_names)) {
1327 return pvr2_state_names[st];
1332 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1334 if (!hdw->decoder_ctrl) {
1335 if (!hdw->flag_decoder_missed) {
1336 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1337 "WARNING: No decoder present");
1338 hdw->flag_decoder_missed = !0;
1339 trace_stbit("flag_decoder_missed",
1340 hdw->flag_decoder_missed);
1344 hdw->decoder_ctrl->enable(hdw->decoder_ctrl->ctxt,enablefl);
1349 void pvr2_hdw_set_decoder(struct pvr2_hdw *hdw,struct pvr2_decoder_ctrl *ptr)
1351 if (hdw->decoder_ctrl == ptr) return;
1352 hdw->decoder_ctrl = ptr;
1353 if (hdw->decoder_ctrl && hdw->flag_decoder_missed) {
1354 hdw->flag_decoder_missed = 0;
1355 trace_stbit("flag_decoder_missed",
1356 hdw->flag_decoder_missed);
1357 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1358 "Decoder has appeared");
1359 pvr2_hdw_state_sched(hdw);
1364 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1366 return hdw->master_state;
1370 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1372 if (!hdw->flag_tripped) return 0;
1373 hdw->flag_tripped = 0;
1374 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1375 "Clearing driver error statuss");
1380 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1383 LOCK_TAKE(hdw->big_lock); do {
1384 fl = pvr2_hdw_untrip_unlocked(hdw);
1385 } while (0); LOCK_GIVE(hdw->big_lock);
1386 if (fl) pvr2_hdw_state_sched(hdw);
1393 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1395 return hdw->state_pipeline_req != 0;
1399 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1402 LOCK_TAKE(hdw->big_lock); do {
1403 pvr2_hdw_untrip_unlocked(hdw);
1404 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1405 hdw->state_pipeline_req = enable_flag != 0;
1406 pvr2_trace(PVR2_TRACE_START_STOP,
1407 "/*--TRACE_STREAM--*/ %s",
1408 enable_flag ? "enable" : "disable");
1410 pvr2_hdw_state_sched(hdw);
1411 } while (0); LOCK_GIVE(hdw->big_lock);
1412 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1414 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1415 if (st != PVR2_STATE_READY) return -EIO;
1416 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1423 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1426 LOCK_TAKE(hdw->big_lock);
1427 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1428 hdw->desired_stream_type = config;
1429 hdw->state_pipeline_config = 0;
1430 trace_stbit("state_pipeline_config",
1431 hdw->state_pipeline_config);
1432 pvr2_hdw_state_sched(hdw);
1434 LOCK_GIVE(hdw->big_lock);
1436 return pvr2_hdw_wait(hdw,0);
1440 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1442 int unit_number = hdw->unit_number;
1444 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1445 tp = tuner[unit_number];
1447 if (tp < 0) return -EINVAL;
1448 hdw->tuner_type = tp;
1449 hdw->tuner_updated = !0;
1454 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1456 int unit_number = hdw->unit_number;
1458 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1459 tp = video_std[unit_number];
1466 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1468 int unit_number = hdw->unit_number;
1470 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1471 tp = tolerance[unit_number];
1477 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1479 /* Try a harmless request to fetch the eeprom's address over
1480 endpoint 1. See what happens. Only the full FX2 image can
1481 respond to this. If this probe fails then likely the FX2
1482 firmware needs be loaded. */
1484 LOCK_TAKE(hdw->ctl_lock); do {
1485 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1486 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1489 if (result < 0) break;
1490 } while(0); LOCK_GIVE(hdw->ctl_lock);
1492 pvr2_trace(PVR2_TRACE_INIT,
1493 "Probe of device endpoint 1 result status %d",
1496 pvr2_trace(PVR2_TRACE_INIT,
1497 "Probe of device endpoint 1 succeeded");
1502 struct pvr2_std_hack {
1503 v4l2_std_id pat; /* Pattern to match */
1504 v4l2_std_id msk; /* Which bits we care about */
1505 v4l2_std_id std; /* What additional standards or default to set */
1508 /* This data structure labels specific combinations of standards from
1509 tveeprom that we'll try to recognize. If we recognize one, then assume
1510 a specified default standard to use. This is here because tveeprom only
1511 tells us about available standards not the intended default standard (if
1512 any) for the device in question. We guess the default based on what has
1513 been reported as available. Note that this is only for guessing a
1514 default - which can always be overridden explicitly - and if the user
1515 has otherwise named a default then that default will always be used in
1516 place of this table. */
1517 static const struct pvr2_std_hack std_eeprom_maps[] = {
1519 .pat = V4L2_STD_B|V4L2_STD_GH,
1520 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1524 .std = V4L2_STD_NTSC_M,
1527 .pat = V4L2_STD_PAL_I,
1528 .std = V4L2_STD_PAL_I,
1531 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1532 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1536 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1540 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1544 v4l2_std_id std1,std2,std3;
1546 std1 = get_default_standard(hdw);
1547 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1549 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1550 pvr2_trace(PVR2_TRACE_STD,
1551 "Supported video standard(s) reported available"
1552 " in hardware: %.*s",
1555 hdw->std_mask_avail = hdw->std_mask_eeprom;
1557 std2 = (std1|std3) & ~hdw->std_mask_avail;
1559 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1560 pvr2_trace(PVR2_TRACE_STD,
1561 "Expanding supported video standards"
1562 " to include: %.*s",
1564 hdw->std_mask_avail |= std2;
1567 pvr2_hdw_internal_set_std_avail(hdw);
1570 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1571 pvr2_trace(PVR2_TRACE_STD,
1572 "Initial video standard forced to %.*s",
1574 hdw->std_mask_cur = std1;
1575 hdw->std_dirty = !0;
1576 pvr2_hdw_internal_find_stdenum(hdw);
1580 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1581 pvr2_trace(PVR2_TRACE_STD,
1582 "Initial video standard"
1583 " (determined by device type): %.*s",bcnt,buf);
1584 hdw->std_mask_cur = std3;
1585 hdw->std_dirty = !0;
1586 pvr2_hdw_internal_find_stdenum(hdw);
1592 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1593 if (std_eeprom_maps[idx].msk ?
1594 ((std_eeprom_maps[idx].pat ^
1595 hdw->std_mask_eeprom) &
1596 std_eeprom_maps[idx].msk) :
1597 (std_eeprom_maps[idx].pat !=
1598 hdw->std_mask_eeprom)) continue;
1599 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1600 std_eeprom_maps[idx].std);
1601 pvr2_trace(PVR2_TRACE_STD,
1602 "Initial video standard guessed as %.*s",
1604 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1605 hdw->std_dirty = !0;
1606 pvr2_hdw_internal_find_stdenum(hdw);
1611 if (hdw->std_enum_cnt > 1) {
1612 // Autoselect the first listed standard
1613 hdw->std_enum_cur = 1;
1614 hdw->std_mask_cur = hdw->std_defs[hdw->std_enum_cur-1].id;
1615 hdw->std_dirty = !0;
1616 pvr2_trace(PVR2_TRACE_STD,
1617 "Initial video standard auto-selected to %s",
1618 hdw->std_defs[hdw->std_enum_cur-1].name);
1622 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1623 "Unable to select a viable initial video standard");
1627 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
1631 struct pvr2_ctrl *cptr;
1633 if (hdw->hdw_desc->fx2_firmware.cnt) {
1636 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
1639 pvr2_trace(PVR2_TRACE_INIT,
1640 "USB endpoint config looks strange"
1641 "; possibly firmware needs to be"
1646 reloadFl = !pvr2_hdw_check_firmware(hdw);
1648 pvr2_trace(PVR2_TRACE_INIT,
1649 "Check for FX2 firmware failed"
1650 "; possibly firmware needs to be"
1655 if (pvr2_upload_firmware1(hdw) != 0) {
1656 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1657 "Failure uploading firmware1");
1662 hdw->fw1_state = FW1_STATE_OK;
1665 pvr2_hdw_device_reset(hdw);
1667 if (!pvr2_hdw_dev_ok(hdw)) return;
1669 for (idx = 0; idx < hdw->hdw_desc->client_modules.cnt; idx++) {
1670 request_module(hdw->hdw_desc->client_modules.lst[idx]);
1673 if (!hdw->hdw_desc->flag_no_powerup) {
1674 pvr2_hdw_cmd_powerup(hdw);
1675 if (!pvr2_hdw_dev_ok(hdw)) return;
1678 // This step MUST happen after the earlier powerup step.
1679 pvr2_i2c_core_init(hdw);
1680 if (!pvr2_hdw_dev_ok(hdw)) return;
1682 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
1683 cptr = hdw->controls + idx;
1684 if (cptr->info->skip_init) continue;
1685 if (!cptr->info->set_value) continue;
1686 cptr->info->set_value(cptr,~0,cptr->info->default_value);
1689 /* Set up special default values for the television and radio
1690 frequencies here. It's not really important what these defaults
1691 are, but I set them to something usable in the Chicago area just
1692 to make driver testing a little easier. */
1694 /* US Broadcast channel 7 (175.25 MHz) */
1695 hdw->freqValTelevision = 175250000L;
1696 /* 104.3 MHz, a usable FM station for my area */
1697 hdw->freqValRadio = 104300000L;
1699 // Do not use pvr2_reset_ctl_endpoints() here. It is not
1700 // thread-safe against the normal pvr2_send_request() mechanism.
1701 // (We should make it thread safe).
1703 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
1704 ret = pvr2_hdw_get_eeprom_addr(hdw);
1705 if (!pvr2_hdw_dev_ok(hdw)) return;
1707 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1708 "Unable to determine location of eeprom,"
1711 hdw->eeprom_addr = ret;
1712 pvr2_eeprom_analyze(hdw);
1713 if (!pvr2_hdw_dev_ok(hdw)) return;
1716 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
1717 hdw->tuner_updated = !0;
1718 hdw->std_mask_eeprom = V4L2_STD_ALL;
1721 pvr2_hdw_setup_std(hdw);
1723 if (!get_default_tuner_type(hdw)) {
1724 pvr2_trace(PVR2_TRACE_INIT,
1725 "pvr2_hdw_setup: Tuner type overridden to %d",
1729 pvr2_i2c_core_check_stale(hdw);
1730 hdw->tuner_updated = 0;
1732 if (!pvr2_hdw_dev_ok(hdw)) return;
1734 pvr2_hdw_commit_setup(hdw);
1736 hdw->vid_stream = pvr2_stream_create();
1737 if (!pvr2_hdw_dev_ok(hdw)) return;
1738 pvr2_trace(PVR2_TRACE_INIT,
1739 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
1740 if (hdw->vid_stream) {
1741 idx = get_default_error_tolerance(hdw);
1743 pvr2_trace(PVR2_TRACE_INIT,
1744 "pvr2_hdw_setup: video stream %p"
1745 " setting tolerance %u",
1746 hdw->vid_stream,idx);
1748 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
1749 PVR2_VID_ENDPOINT,idx);
1752 if (!pvr2_hdw_dev_ok(hdw)) return;
1754 hdw->flag_init_ok = !0;
1756 pvr2_hdw_state_sched(hdw);
1760 /* Set up the structure and attempt to put the device into a usable state.
1761 This can be a time-consuming operation, which is why it is not done
1762 internally as part of the create() step. */
1763 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
1765 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
1767 pvr2_hdw_setup_low(hdw);
1768 pvr2_trace(PVR2_TRACE_INIT,
1769 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
1770 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
1771 if (pvr2_hdw_dev_ok(hdw)) {
1772 if (hdw->flag_init_ok) {
1775 "Device initialization"
1776 " completed successfully.");
1779 if (hdw->fw1_state == FW1_STATE_RELOAD) {
1782 "Device microcontroller firmware"
1783 " (re)loaded; it should now reset"
1788 PVR2_TRACE_ERROR_LEGS,
1789 "Device initialization was not successful.");
1790 if (hdw->fw1_state == FW1_STATE_MISSING) {
1792 PVR2_TRACE_ERROR_LEGS,
1793 "Giving up since device"
1794 " microcontroller firmware"
1795 " appears to be missing.");
1801 PVR2_TRACE_ERROR_LEGS,
1802 "Attempting pvrusb2 recovery by reloading"
1803 " primary firmware.");
1805 PVR2_TRACE_ERROR_LEGS,
1806 "If this works, device should disconnect"
1807 " and reconnect in a sane state.");
1808 hdw->fw1_state = FW1_STATE_UNKNOWN;
1809 pvr2_upload_firmware1(hdw);
1812 PVR2_TRACE_ERROR_LEGS,
1813 "***WARNING*** pvrusb2 device hardware"
1814 " appears to be jammed"
1815 " and I can't clear it.");
1817 PVR2_TRACE_ERROR_LEGS,
1818 "You might need to power cycle"
1819 " the pvrusb2 device"
1820 " in order to recover.");
1823 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
1827 /* Perform second stage initialization. Set callback pointer first so that
1828 we can avoid a possible initialization race (if the kernel thread runs
1829 before the callback has been set). */
1830 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
1831 void (*callback_func)(void *),
1832 void *callback_data)
1834 LOCK_TAKE(hdw->big_lock); do {
1835 if (hdw->flag_disconnected) {
1836 /* Handle a race here: If we're already
1837 disconnected by this point, then give up. If we
1838 get past this then we'll remain connected for
1839 the duration of initialization since the entire
1840 initialization sequence is now protected by the
1844 hdw->state_data = callback_data;
1845 hdw->state_func = callback_func;
1846 pvr2_hdw_setup(hdw);
1847 } while (0); LOCK_GIVE(hdw->big_lock);
1848 return hdw->flag_init_ok;
1852 /* Create, set up, and return a structure for interacting with the
1853 underlying hardware. */
1854 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
1855 const struct usb_device_id *devid)
1857 unsigned int idx,cnt1,cnt2,m;
1858 struct pvr2_hdw *hdw;
1860 struct pvr2_ctrl *cptr;
1861 const struct pvr2_device_desc *hdw_desc;
1863 struct v4l2_queryctrl qctrl;
1864 struct pvr2_ctl_info *ciptr;
1866 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
1868 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
1869 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
1870 hdw,hdw_desc->description);
1871 if (!hdw) goto fail;
1873 init_timer(&hdw->quiescent_timer);
1874 hdw->quiescent_timer.data = (unsigned long)hdw;
1875 hdw->quiescent_timer.function = pvr2_hdw_quiescent_timeout;
1877 init_timer(&hdw->encoder_wait_timer);
1878 hdw->encoder_wait_timer.data = (unsigned long)hdw;
1879 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
1881 init_timer(&hdw->encoder_run_timer);
1882 hdw->encoder_run_timer.data = (unsigned long)hdw;
1883 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
1885 hdw->master_state = PVR2_STATE_DEAD;
1887 init_waitqueue_head(&hdw->state_wait_data);
1889 hdw->tuner_signal_stale = !0;
1890 cx2341x_fill_defaults(&hdw->enc_ctl_state);
1892 /* Calculate which inputs are OK */
1894 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
1895 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
1896 m |= 1 << PVR2_CVAL_INPUT_DTV;
1898 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
1899 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
1900 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
1901 hdw->input_avail_mask = m;
1902 hdw->input_allowed_mask = hdw->input_avail_mask;
1904 /* If not a hybrid device, pathway_state never changes. So
1905 initialize it here to what it should forever be. */
1906 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
1907 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
1908 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
1909 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
1912 hdw->control_cnt = CTRLDEF_COUNT;
1913 hdw->control_cnt += MPEGDEF_COUNT;
1914 hdw->controls = kzalloc(sizeof(struct pvr2_ctrl) * hdw->control_cnt,
1916 if (!hdw->controls) goto fail;
1917 hdw->hdw_desc = hdw_desc;
1918 for (idx = 0; idx < hdw->control_cnt; idx++) {
1919 cptr = hdw->controls + idx;
1922 for (idx = 0; idx < 32; idx++) {
1923 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
1925 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
1926 cptr = hdw->controls + idx;
1927 cptr->info = control_defs+idx;
1930 /* Ensure that default input choice is a valid one. */
1931 m = hdw->input_avail_mask;
1932 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
1933 if (!((1 << idx) & m)) continue;
1934 hdw->input_val = idx;
1938 /* Define and configure additional controls from cx2341x module. */
1939 hdw->mpeg_ctrl_info = kzalloc(
1940 sizeof(*(hdw->mpeg_ctrl_info)) * MPEGDEF_COUNT, GFP_KERNEL);
1941 if (!hdw->mpeg_ctrl_info) goto fail;
1942 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
1943 cptr = hdw->controls + idx + CTRLDEF_COUNT;
1944 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
1945 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
1946 ciptr->name = mpeg_ids[idx].strid;
1947 ciptr->v4l_id = mpeg_ids[idx].id;
1948 ciptr->skip_init = !0;
1949 ciptr->get_value = ctrl_cx2341x_get;
1950 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
1951 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
1952 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
1953 qctrl.id = ciptr->v4l_id;
1954 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
1955 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
1956 ciptr->set_value = ctrl_cx2341x_set;
1958 strncpy(hdw->mpeg_ctrl_info[idx].desc,qctrl.name,
1959 PVR2_CTLD_INFO_DESC_SIZE);
1960 hdw->mpeg_ctrl_info[idx].desc[PVR2_CTLD_INFO_DESC_SIZE-1] = 0;
1961 ciptr->default_value = qctrl.default_value;
1962 switch (qctrl.type) {
1964 case V4L2_CTRL_TYPE_INTEGER:
1965 ciptr->type = pvr2_ctl_int;
1966 ciptr->def.type_int.min_value = qctrl.minimum;
1967 ciptr->def.type_int.max_value = qctrl.maximum;
1969 case V4L2_CTRL_TYPE_BOOLEAN:
1970 ciptr->type = pvr2_ctl_bool;
1972 case V4L2_CTRL_TYPE_MENU:
1973 ciptr->type = pvr2_ctl_enum;
1974 ciptr->def.type_enum.value_names =
1975 cx2341x_ctrl_get_menu(ciptr->v4l_id);
1977 ciptr->def.type_enum.value_names[cnt1] != NULL;
1979 ciptr->def.type_enum.count = cnt1;
1985 // Initialize video standard enum dynamic control
1986 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDENUM);
1988 memcpy(&hdw->std_info_enum,cptr->info,
1989 sizeof(hdw->std_info_enum));
1990 cptr->info = &hdw->std_info_enum;
1993 // Initialize control data regarding video standard masks
1994 valid_std_mask = pvr2_std_get_usable();
1995 for (idx = 0; idx < 32; idx++) {
1996 if (!(valid_std_mask & (1 << idx))) continue;
1997 cnt1 = pvr2_std_id_to_str(
1998 hdw->std_mask_names[idx],
1999 sizeof(hdw->std_mask_names[idx])-1,
2001 hdw->std_mask_names[idx][cnt1] = 0;
2003 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2005 memcpy(&hdw->std_info_avail,cptr->info,
2006 sizeof(hdw->std_info_avail));
2007 cptr->info = &hdw->std_info_avail;
2008 hdw->std_info_avail.def.type_bitmask.bit_names =
2010 hdw->std_info_avail.def.type_bitmask.valid_bits =
2013 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2015 memcpy(&hdw->std_info_cur,cptr->info,
2016 sizeof(hdw->std_info_cur));
2017 cptr->info = &hdw->std_info_cur;
2018 hdw->std_info_cur.def.type_bitmask.bit_names =
2020 hdw->std_info_avail.def.type_bitmask.valid_bits =
2024 hdw->eeprom_addr = -1;
2025 hdw->unit_number = -1;
2026 hdw->v4l_minor_number_video = -1;
2027 hdw->v4l_minor_number_vbi = -1;
2028 hdw->v4l_minor_number_radio = -1;
2029 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2030 if (!hdw->ctl_write_buffer) goto fail;
2031 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2032 if (!hdw->ctl_read_buffer) goto fail;
2033 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2034 if (!hdw->ctl_write_urb) goto fail;
2035 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2036 if (!hdw->ctl_read_urb) goto fail;
2038 mutex_lock(&pvr2_unit_mtx); do {
2039 for (idx = 0; idx < PVR_NUM; idx++) {
2040 if (unit_pointers[idx]) continue;
2041 hdw->unit_number = idx;
2042 unit_pointers[idx] = hdw;
2045 } while (0); mutex_unlock(&pvr2_unit_mtx);
2048 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2050 if (hdw->unit_number >= 0) {
2051 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2052 ('a' + hdw->unit_number));
2055 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2056 hdw->name[cnt1] = 0;
2058 hdw->workqueue = create_singlethread_workqueue(hdw->name);
2059 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2060 INIT_WORK(&hdw->worki2csync,pvr2_hdw_worker_i2c);
2062 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2063 hdw->unit_number,hdw->name);
2065 hdw->tuner_type = -1;
2068 hdw->usb_intf = intf;
2069 hdw->usb_dev = interface_to_usbdev(intf);
2071 scnprintf(hdw->bus_info,sizeof(hdw->bus_info),
2072 "usb %s address %d",
2073 hdw->usb_dev->dev.bus_id,
2074 hdw->usb_dev->devnum);
2076 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2077 usb_set_interface(hdw->usb_dev,ifnum,0);
2079 mutex_init(&hdw->ctl_lock_mutex);
2080 mutex_init(&hdw->big_lock_mutex);
2085 del_timer_sync(&hdw->quiescent_timer);
2086 del_timer_sync(&hdw->encoder_run_timer);
2087 del_timer_sync(&hdw->encoder_wait_timer);
2088 if (hdw->workqueue) {
2089 flush_workqueue(hdw->workqueue);
2090 destroy_workqueue(hdw->workqueue);
2091 hdw->workqueue = NULL;
2093 usb_free_urb(hdw->ctl_read_urb);
2094 usb_free_urb(hdw->ctl_write_urb);
2095 kfree(hdw->ctl_read_buffer);
2096 kfree(hdw->ctl_write_buffer);
2097 kfree(hdw->controls);
2098 kfree(hdw->mpeg_ctrl_info);
2099 kfree(hdw->std_defs);
2100 kfree(hdw->std_enum_names);
2107 /* Remove _all_ associations between this driver and the underlying USB
2109 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2111 if (hdw->flag_disconnected) return;
2112 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2113 if (hdw->ctl_read_urb) {
2114 usb_kill_urb(hdw->ctl_read_urb);
2115 usb_free_urb(hdw->ctl_read_urb);
2116 hdw->ctl_read_urb = NULL;
2118 if (hdw->ctl_write_urb) {
2119 usb_kill_urb(hdw->ctl_write_urb);
2120 usb_free_urb(hdw->ctl_write_urb);
2121 hdw->ctl_write_urb = NULL;
2123 if (hdw->ctl_read_buffer) {
2124 kfree(hdw->ctl_read_buffer);
2125 hdw->ctl_read_buffer = NULL;
2127 if (hdw->ctl_write_buffer) {
2128 kfree(hdw->ctl_write_buffer);
2129 hdw->ctl_write_buffer = NULL;
2131 hdw->flag_disconnected = !0;
2132 hdw->usb_dev = NULL;
2133 hdw->usb_intf = NULL;
2134 pvr2_hdw_render_useless(hdw);
2138 /* Destroy hardware interaction structure */
2139 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2142 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2143 if (hdw->workqueue) {
2144 flush_workqueue(hdw->workqueue);
2145 destroy_workqueue(hdw->workqueue);
2146 hdw->workqueue = NULL;
2148 del_timer_sync(&hdw->quiescent_timer);
2149 del_timer_sync(&hdw->encoder_run_timer);
2150 del_timer_sync(&hdw->encoder_wait_timer);
2151 if (hdw->fw_buffer) {
2152 kfree(hdw->fw_buffer);
2153 hdw->fw_buffer = NULL;
2155 if (hdw->vid_stream) {
2156 pvr2_stream_destroy(hdw->vid_stream);
2157 hdw->vid_stream = NULL;
2159 if (hdw->decoder_ctrl) {
2160 hdw->decoder_ctrl->detach(hdw->decoder_ctrl->ctxt);
2162 pvr2_i2c_core_done(hdw);
2163 pvr2_hdw_remove_usb_stuff(hdw);
2164 mutex_lock(&pvr2_unit_mtx); do {
2165 if ((hdw->unit_number >= 0) &&
2166 (hdw->unit_number < PVR_NUM) &&
2167 (unit_pointers[hdw->unit_number] == hdw)) {
2168 unit_pointers[hdw->unit_number] = NULL;
2170 } while (0); mutex_unlock(&pvr2_unit_mtx);
2171 kfree(hdw->controls);
2172 kfree(hdw->mpeg_ctrl_info);
2173 kfree(hdw->std_defs);
2174 kfree(hdw->std_enum_names);
2179 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2181 return (hdw && hdw->flag_ok);
2185 /* Called when hardware has been unplugged */
2186 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2188 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2189 LOCK_TAKE(hdw->big_lock);
2190 LOCK_TAKE(hdw->ctl_lock);
2191 pvr2_hdw_remove_usb_stuff(hdw);
2192 LOCK_GIVE(hdw->ctl_lock);
2193 LOCK_GIVE(hdw->big_lock);
2197 // Attempt to autoselect an appropriate value for std_enum_cur given
2198 // whatever is currently in std_mask_cur
2199 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
2202 for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
2203 if (hdw->std_defs[idx-1].id == hdw->std_mask_cur) {
2204 hdw->std_enum_cur = idx;
2208 hdw->std_enum_cur = 0;
2212 // Calculate correct set of enumerated standards based on currently known
2213 // set of available standards bits.
2214 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
2216 struct v4l2_standard *newstd;
2217 unsigned int std_cnt;
2220 newstd = pvr2_std_create_enum(&std_cnt,hdw->std_mask_avail);
2222 if (hdw->std_defs) {
2223 kfree(hdw->std_defs);
2224 hdw->std_defs = NULL;
2226 hdw->std_enum_cnt = 0;
2227 if (hdw->std_enum_names) {
2228 kfree(hdw->std_enum_names);
2229 hdw->std_enum_names = NULL;
2234 PVR2_TRACE_ERROR_LEGS,
2235 "WARNING: Failed to identify any viable standards");
2237 hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
2238 hdw->std_enum_names[0] = "none";
2239 for (idx = 0; idx < std_cnt; idx++) {
2240 hdw->std_enum_names[idx+1] =
2243 // Set up the dynamic control for this standard
2244 hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
2245 hdw->std_info_enum.def.type_enum.count = std_cnt+1;
2246 hdw->std_defs = newstd;
2247 hdw->std_enum_cnt = std_cnt+1;
2248 hdw->std_enum_cur = 0;
2249 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
2253 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,
2254 struct v4l2_standard *std,
2258 if (!idx) return ret;
2259 LOCK_TAKE(hdw->big_lock); do {
2260 if (idx >= hdw->std_enum_cnt) break;
2262 memcpy(std,hdw->std_defs+idx,sizeof(*std));
2264 } while (0); LOCK_GIVE(hdw->big_lock);
2269 /* Get the number of defined controls */
2270 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2272 return hdw->control_cnt;
2276 /* Retrieve a control handle given its index (0..count-1) */
2277 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2280 if (idx >= hdw->control_cnt) return NULL;
2281 return hdw->controls + idx;
2285 /* Retrieve a control handle given its index (0..count-1) */
2286 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2287 unsigned int ctl_id)
2289 struct pvr2_ctrl *cptr;
2293 /* This could be made a lot more efficient, but for now... */
2294 for (idx = 0; idx < hdw->control_cnt; idx++) {
2295 cptr = hdw->controls + idx;
2296 i = cptr->info->internal_id;
2297 if (i && (i == ctl_id)) return cptr;
2303 /* Given a V4L ID, retrieve the control structure associated with it. */
2304 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2306 struct pvr2_ctrl *cptr;
2310 /* This could be made a lot more efficient, but for now... */
2311 for (idx = 0; idx < hdw->control_cnt; idx++) {
2312 cptr = hdw->controls + idx;
2313 i = cptr->info->v4l_id;
2314 if (i && (i == ctl_id)) return cptr;
2320 /* Given a V4L ID for its immediate predecessor, retrieve the control
2321 structure associated with it. */
2322 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2323 unsigned int ctl_id)
2325 struct pvr2_ctrl *cptr,*cp2;
2329 /* This could be made a lot more efficient, but for now... */
2331 for (idx = 0; idx < hdw->control_cnt; idx++) {
2332 cptr = hdw->controls + idx;
2333 i = cptr->info->v4l_id;
2335 if (i <= ctl_id) continue;
2336 if (cp2 && (cp2->info->v4l_id < i)) continue;
2344 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2347 case pvr2_ctl_int: return "integer";
2348 case pvr2_ctl_enum: return "enum";
2349 case pvr2_ctl_bool: return "boolean";
2350 case pvr2_ctl_bitmask: return "bitmask";
2356 /* Figure out if we need to commit control changes. If so, mark internal
2357 state flags to indicate this fact and return true. Otherwise do nothing
2358 else and return false. */
2359 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
2362 struct pvr2_ctrl *cptr;
2364 int commit_flag = 0;
2366 unsigned int bcnt,ccnt;
2368 for (idx = 0; idx < hdw->control_cnt; idx++) {
2369 cptr = hdw->controls + idx;
2370 if (!cptr->info->is_dirty) continue;
2371 if (!cptr->info->is_dirty(cptr)) continue;
2374 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
2375 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
2378 cptr->info->get_value(cptr,&value);
2379 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
2381 sizeof(buf)-bcnt,&ccnt);
2383 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
2384 get_ctrl_typename(cptr->info->type));
2385 pvr2_trace(PVR2_TRACE_CTL,
2386 "/*--TRACE_COMMIT--*/ %.*s",
2391 /* Nothing has changed */
2395 hdw->state_pipeline_config = 0;
2396 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
2397 pvr2_hdw_state_sched(hdw);
2403 /* Perform all operations needed to commit all control changes. This must
2404 be performed in synchronization with the pipeline state and is thus
2405 expected to be called as part of the driver's worker thread. Return
2406 true if commit successful, otherwise return false to indicate that
2407 commit isn't possible at this time. */
2408 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
2411 struct pvr2_ctrl *cptr;
2412 int disruptive_change;
2414 /* When video standard changes, reset the hres and vres values -
2415 but if the user has pending changes there, then let the changes
2417 if (hdw->std_dirty) {
2418 /* Rewrite the vertical resolution to be appropriate to the
2419 video standard that has been selected. */
2421 if (hdw->std_mask_cur & V4L2_STD_525_60) {
2426 if (nvres != hdw->res_ver_val) {
2427 hdw->res_ver_val = nvres;
2428 hdw->res_ver_dirty = !0;
2432 if (hdw->input_dirty && hdw->state_pathway_ok &&
2433 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
2434 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
2435 hdw->pathway_state)) {
2436 /* Change of mode being asked for... */
2437 hdw->state_pathway_ok = 0;
2438 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
2440 if (!hdw->state_pathway_ok) {
2441 /* Can't commit anything until pathway is ok. */
2444 /* If any of the below has changed, then we can't do the update
2445 while the pipeline is running. Pipeline must be paused first
2446 and decoder -> encoder connection be made quiescent before we
2450 hdw->enc_unsafe_stale ||
2452 hdw->res_ver_dirty ||
2453 hdw->res_hor_dirty ||
2455 (hdw->active_stream_type != hdw->desired_stream_type));
2456 if (disruptive_change && !hdw->state_pipeline_idle) {
2457 /* Pipeline is not idle; we can't proceed. Arrange to
2458 cause pipeline to stop so that we can try this again
2460 hdw->state_pipeline_pause = !0;
2464 if (hdw->srate_dirty) {
2465 /* Write new sample rate into control structure since
2466 * the master copy is stale. We must track srate
2467 * separate from the mpeg control structure because
2468 * other logic also uses this value. */
2469 struct v4l2_ext_controls cs;
2470 struct v4l2_ext_control c1;
2471 memset(&cs,0,sizeof(cs));
2472 memset(&c1,0,sizeof(c1));
2475 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
2476 c1.value = hdw->srate_val;
2477 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
2480 /* Scan i2c core at this point - before we clear all the dirty
2481 bits. Various parts of the i2c core will notice dirty bits as
2482 appropriate and arrange to broadcast or directly send updates to
2483 the client drivers in order to keep everything in sync */
2484 pvr2_i2c_core_check_stale(hdw);
2486 for (idx = 0; idx < hdw->control_cnt; idx++) {
2487 cptr = hdw->controls + idx;
2488 if (!cptr->info->clear_dirty) continue;
2489 cptr->info->clear_dirty(cptr);
2492 if (hdw->active_stream_type != hdw->desired_stream_type) {
2493 /* Handle any side effects of stream config here */
2494 hdw->active_stream_type = hdw->desired_stream_type;
2497 /* Now execute i2c core update */
2498 pvr2_i2c_core_sync(hdw);
2500 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
2501 hdw->state_encoder_run) {
2502 /* If encoder isn't running or it can't be touched, then
2503 this will get worked out later when we start the
2505 if (pvr2_encoder_adjust(hdw) < 0) return !0;
2508 hdw->state_pipeline_config = !0;
2509 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
2514 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
2517 LOCK_TAKE(hdw->big_lock);
2518 fl = pvr2_hdw_commit_setup(hdw);
2519 LOCK_GIVE(hdw->big_lock);
2521 return pvr2_hdw_wait(hdw,0);
2525 static void pvr2_hdw_worker_i2c(struct work_struct *work)
2527 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,worki2csync);
2528 LOCK_TAKE(hdw->big_lock); do {
2529 pvr2_i2c_core_sync(hdw);
2530 } while (0); LOCK_GIVE(hdw->big_lock);
2534 static void pvr2_hdw_worker_poll(struct work_struct *work)
2537 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
2538 LOCK_TAKE(hdw->big_lock); do {
2539 fl = pvr2_hdw_state_eval(hdw);
2540 } while (0); LOCK_GIVE(hdw->big_lock);
2541 if (fl && hdw->state_func) {
2542 hdw->state_func(hdw->state_data);
2547 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
2549 return wait_event_interruptible(
2550 hdw->state_wait_data,
2551 (hdw->state_stale == 0) &&
2552 (!state || (hdw->master_state != state)));
2556 /* Return name for this driver instance */
2557 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
2563 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
2565 return hdw->hdw_desc->description;
2569 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
2571 return hdw->hdw_desc->shortname;
2575 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
2578 LOCK_TAKE(hdw->ctl_lock); do {
2579 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
2580 result = pvr2_send_request(hdw,
2583 if (result < 0) break;
2584 result = (hdw->cmd_buffer[0] != 0);
2585 } while(0); LOCK_GIVE(hdw->ctl_lock);
2590 /* Execute poll of tuner status */
2591 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
2593 LOCK_TAKE(hdw->big_lock); do {
2594 pvr2_i2c_core_status_poll(hdw);
2595 } while (0); LOCK_GIVE(hdw->big_lock);
2599 /* Return information about the tuner */
2600 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
2602 LOCK_TAKE(hdw->big_lock); do {
2603 if (hdw->tuner_signal_stale) {
2604 pvr2_i2c_core_status_poll(hdw);
2606 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
2607 } while (0); LOCK_GIVE(hdw->big_lock);
2612 /* Get handle to video output stream */
2613 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
2615 return hp->vid_stream;
2619 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
2621 int nr = pvr2_hdw_get_unit_number(hdw);
2622 LOCK_TAKE(hdw->big_lock); do {
2623 hdw->log_requested = !0;
2624 printk(KERN_INFO "pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
2625 pvr2_i2c_core_check_stale(hdw);
2626 hdw->log_requested = 0;
2627 pvr2_i2c_core_sync(hdw);
2628 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
2629 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
2630 pvr2_hdw_state_log_state(hdw);
2631 printk(KERN_INFO "pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
2632 } while (0); LOCK_GIVE(hdw->big_lock);
2636 /* Grab EEPROM contents, needed for direct method. */
2637 #define EEPROM_SIZE 8192
2638 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
2639 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
2641 struct i2c_msg msg[2];
2650 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
2652 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2653 "Failed to allocate memory"
2654 " required to read eeprom");
2658 trace_eeprom("Value for eeprom addr from controller was 0x%x",
2660 addr = hdw->eeprom_addr;
2661 /* Seems that if the high bit is set, then the *real* eeprom
2662 address is shifted right now bit position (noticed this in
2663 newer PVR USB2 hardware) */
2664 if (addr & 0x80) addr >>= 1;
2666 /* FX2 documentation states that a 16bit-addressed eeprom is
2667 expected if the I2C address is an odd number (yeah, this is
2668 strange but it's what they do) */
2669 mode16 = (addr & 1);
2670 eepromSize = (mode16 ? EEPROM_SIZE : 256);
2671 trace_eeprom("Examining %d byte eeprom at location 0x%x"
2672 " using %d bit addressing",eepromSize,addr,
2677 msg[0].len = mode16 ? 2 : 1;
2680 msg[1].flags = I2C_M_RD;
2682 /* We have to do the actual eeprom data fetch ourselves, because
2683 (1) we're only fetching part of the eeprom, and (2) if we were
2684 getting the whole thing our I2C driver can't grab it in one
2685 pass - which is what tveeprom is otherwise going to attempt */
2686 memset(eeprom,0,EEPROM_SIZE);
2687 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
2689 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
2690 offs = tcnt + (eepromSize - EEPROM_SIZE);
2692 iadd[0] = offs >> 8;
2698 msg[1].buf = eeprom+tcnt;
2699 if ((ret = i2c_transfer(&hdw->i2c_adap,
2700 msg,ARRAY_SIZE(msg))) != 2) {
2701 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2702 "eeprom fetch set offs err=%d",ret);
2711 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
2718 LOCK_TAKE(hdw->big_lock); do {
2719 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
2722 pvr2_trace(PVR2_TRACE_FIRMWARE,
2723 "Cleaning up after CPU firmware fetch");
2724 kfree(hdw->fw_buffer);
2725 hdw->fw_buffer = NULL;
2727 if (hdw->fw_cpu_flag) {
2728 /* Now release the CPU. It will disconnect
2729 and reconnect later. */
2730 pvr2_hdw_cpureset_assert(hdw,0);
2735 hdw->fw_cpu_flag = (prom_flag == 0);
2736 if (hdw->fw_cpu_flag) {
2737 pvr2_trace(PVR2_TRACE_FIRMWARE,
2738 "Preparing to suck out CPU firmware");
2739 hdw->fw_size = 0x2000;
2740 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
2741 if (!hdw->fw_buffer) {
2746 /* We have to hold the CPU during firmware upload. */
2747 pvr2_hdw_cpureset_assert(hdw,1);
2749 /* download the firmware from address 0000-1fff in 2048
2750 (=0x800) bytes chunk. */
2752 pvr2_trace(PVR2_TRACE_FIRMWARE,
2753 "Grabbing CPU firmware");
2754 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
2755 for(address = 0; address < hdw->fw_size;
2757 ret = usb_control_msg(hdw->usb_dev,pipe,
2760 hdw->fw_buffer+address,
2765 pvr2_trace(PVR2_TRACE_FIRMWARE,
2766 "Done grabbing CPU firmware");
2768 pvr2_trace(PVR2_TRACE_FIRMWARE,
2769 "Sucking down EEPROM contents");
2770 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
2771 if (!hdw->fw_buffer) {
2772 pvr2_trace(PVR2_TRACE_FIRMWARE,
2773 "EEPROM content suck failed.");
2776 hdw->fw_size = EEPROM_SIZE;
2777 pvr2_trace(PVR2_TRACE_FIRMWARE,
2778 "Done sucking down EEPROM contents");
2781 } while (0); LOCK_GIVE(hdw->big_lock);
2785 /* Return true if we're in a mode for retrieval CPU firmware */
2786 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
2788 return hdw->fw_buffer != NULL;
2792 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
2793 char *buf,unsigned int cnt)
2796 LOCK_TAKE(hdw->big_lock); do {
2800 if (!hdw->fw_buffer) {
2805 if (offs >= hdw->fw_size) {
2806 pvr2_trace(PVR2_TRACE_FIRMWARE,
2807 "Read firmware data offs=%d EOF",
2813 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
2815 memcpy(buf,hdw->fw_buffer+offs,cnt);
2817 pvr2_trace(PVR2_TRACE_FIRMWARE,
2818 "Read firmware data offs=%d cnt=%d",
2821 } while (0); LOCK_GIVE(hdw->big_lock);
2827 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
2828 enum pvr2_v4l_type index)
2831 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
2832 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
2833 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
2839 /* Store a v4l minor device number */
2840 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
2841 enum pvr2_v4l_type index,int v)
2844 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;
2845 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;
2846 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;
2852 static void pvr2_ctl_write_complete(struct urb *urb)
2854 struct pvr2_hdw *hdw = urb->context;
2855 hdw->ctl_write_pend_flag = 0;
2856 if (hdw->ctl_read_pend_flag) return;
2857 complete(&hdw->ctl_done);
2861 static void pvr2_ctl_read_complete(struct urb *urb)
2863 struct pvr2_hdw *hdw = urb->context;
2864 hdw->ctl_read_pend_flag = 0;
2865 if (hdw->ctl_write_pend_flag) return;
2866 complete(&hdw->ctl_done);
2870 static void pvr2_ctl_timeout(unsigned long data)
2872 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
2873 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
2874 hdw->ctl_timeout_flag = !0;
2875 if (hdw->ctl_write_pend_flag)
2876 usb_unlink_urb(hdw->ctl_write_urb);
2877 if (hdw->ctl_read_pend_flag)
2878 usb_unlink_urb(hdw->ctl_read_urb);
2883 /* Issue a command and get a response from the device. This extended
2884 version includes a probe flag (which if set means that device errors
2885 should not be logged or treated as fatal) and a timeout in jiffies.
2886 This can be used to non-lethally probe the health of endpoint 1. */
2887 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
2888 unsigned int timeout,int probe_fl,
2889 void *write_data,unsigned int write_len,
2890 void *read_data,unsigned int read_len)
2894 struct timer_list timer;
2895 if (!hdw->ctl_lock_held) {
2896 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2897 "Attempted to execute control transfer"
2901 if (!hdw->flag_ok && !probe_fl) {
2902 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2903 "Attempted to execute control transfer"
2904 " when device not ok");
2907 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
2909 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2910 "Attempted to execute control transfer"
2911 " when USB is disconnected");
2916 /* Ensure that we have sane parameters */
2917 if (!write_data) write_len = 0;
2918 if (!read_data) read_len = 0;
2919 if (write_len > PVR2_CTL_BUFFSIZE) {
2921 PVR2_TRACE_ERROR_LEGS,
2922 "Attempted to execute %d byte"
2923 " control-write transfer (limit=%d)",
2924 write_len,PVR2_CTL_BUFFSIZE);
2927 if (read_len > PVR2_CTL_BUFFSIZE) {
2929 PVR2_TRACE_ERROR_LEGS,
2930 "Attempted to execute %d byte"
2931 " control-read transfer (limit=%d)",
2932 write_len,PVR2_CTL_BUFFSIZE);
2935 if ((!write_len) && (!read_len)) {
2937 PVR2_TRACE_ERROR_LEGS,
2938 "Attempted to execute null control transfer?");
2943 hdw->cmd_debug_state = 1;
2945 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
2947 hdw->cmd_debug_code = 0;
2949 hdw->cmd_debug_write_len = write_len;
2950 hdw->cmd_debug_read_len = read_len;
2952 /* Initialize common stuff */
2953 init_completion(&hdw->ctl_done);
2954 hdw->ctl_timeout_flag = 0;
2955 hdw->ctl_write_pend_flag = 0;
2956 hdw->ctl_read_pend_flag = 0;
2958 timer.expires = jiffies + timeout;
2959 timer.data = (unsigned long)hdw;
2960 timer.function = pvr2_ctl_timeout;
2963 hdw->cmd_debug_state = 2;
2964 /* Transfer write data to internal buffer */
2965 for (idx = 0; idx < write_len; idx++) {
2966 hdw->ctl_write_buffer[idx] =
2967 ((unsigned char *)write_data)[idx];
2969 /* Initiate a write request */
2970 usb_fill_bulk_urb(hdw->ctl_write_urb,
2972 usb_sndbulkpipe(hdw->usb_dev,
2973 PVR2_CTL_WRITE_ENDPOINT),
2974 hdw->ctl_write_buffer,
2976 pvr2_ctl_write_complete,
2978 hdw->ctl_write_urb->actual_length = 0;
2979 hdw->ctl_write_pend_flag = !0;
2980 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
2982 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2983 "Failed to submit write-control"
2984 " URB status=%d",status);
2985 hdw->ctl_write_pend_flag = 0;
2991 hdw->cmd_debug_state = 3;
2992 memset(hdw->ctl_read_buffer,0x43,read_len);
2993 /* Initiate a read request */
2994 usb_fill_bulk_urb(hdw->ctl_read_urb,
2996 usb_rcvbulkpipe(hdw->usb_dev,
2997 PVR2_CTL_READ_ENDPOINT),
2998 hdw->ctl_read_buffer,
3000 pvr2_ctl_read_complete,
3002 hdw->ctl_read_urb->actual_length = 0;
3003 hdw->ctl_read_pend_flag = !0;
3004 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3006 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3007 "Failed to submit read-control"
3008 " URB status=%d",status);
3009 hdw->ctl_read_pend_flag = 0;
3017 /* Now wait for all I/O to complete */
3018 hdw->cmd_debug_state = 4;
3019 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3020 wait_for_completion(&hdw->ctl_done);
3022 hdw->cmd_debug_state = 5;
3025 del_timer_sync(&timer);
3027 hdw->cmd_debug_state = 6;
3030 if (hdw->ctl_timeout_flag) {
3031 status = -ETIMEDOUT;
3033 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3034 "Timed out control-write");
3040 /* Validate results of write request */
3041 if ((hdw->ctl_write_urb->status != 0) &&
3042 (hdw->ctl_write_urb->status != -ENOENT) &&
3043 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3044 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3045 /* USB subsystem is reporting some kind of failure
3047 status = hdw->ctl_write_urb->status;
3049 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3050 "control-write URB failure,"
3056 if (hdw->ctl_write_urb->actual_length < write_len) {
3057 /* Failed to write enough data */
3060 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3061 "control-write URB short,"
3062 " expected=%d got=%d",
3064 hdw->ctl_write_urb->actual_length);
3070 /* Validate results of read request */
3071 if ((hdw->ctl_read_urb->status != 0) &&
3072 (hdw->ctl_read_urb->status != -ENOENT) &&
3073 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3074 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3075 /* USB subsystem is reporting some kind of failure
3077 status = hdw->ctl_read_urb->status;
3079 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3080 "control-read URB failure,"
3086 if (hdw->ctl_read_urb->actual_length < read_len) {
3087 /* Failed to read enough data */
3090 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3091 "control-read URB short,"
3092 " expected=%d got=%d",
3094 hdw->ctl_read_urb->actual_length);
3098 /* Transfer retrieved data out from internal buffer */
3099 for (idx = 0; idx < read_len; idx++) {
3100 ((unsigned char *)read_data)[idx] =
3101 hdw->ctl_read_buffer[idx];
3107 hdw->cmd_debug_state = 0;
3108 if ((status < 0) && (!probe_fl)) {
3109 pvr2_hdw_render_useless(hdw);
3115 int pvr2_send_request(struct pvr2_hdw *hdw,
3116 void *write_data,unsigned int write_len,
3117 void *read_data,unsigned int read_len)
3119 return pvr2_send_request_ex(hdw,HZ*4,0,
3120 write_data,write_len,
3121 read_data,read_len);
3125 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3128 unsigned int cnt = 1;
3129 unsigned int args = 0;
3130 LOCK_TAKE(hdw->ctl_lock);
3131 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3132 args = (cmdcode >> 8) & 0xffu;
3133 args = (args > 2) ? 2 : args;
3136 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3138 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3141 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3143 unsigned int ccnt,bcnt;
3147 ccnt = scnprintf(tbuf+bcnt,
3149 "Sending FX2 command 0x%x",cmdcode);
3151 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3152 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3153 ccnt = scnprintf(tbuf+bcnt,
3156 pvr2_fx2cmd_desc[idx].desc);
3162 ccnt = scnprintf(tbuf+bcnt,
3164 " (%u",hdw->cmd_buffer[1]);
3167 ccnt = scnprintf(tbuf+bcnt,
3169 ",%u",hdw->cmd_buffer[2]);
3172 ccnt = scnprintf(tbuf+bcnt,
3177 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3179 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3180 LOCK_GIVE(hdw->ctl_lock);
3185 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3189 LOCK_TAKE(hdw->ctl_lock);
3191 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
3192 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
3193 hdw->cmd_buffer[5] = 0;
3194 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3195 hdw->cmd_buffer[7] = reg & 0xff;
3198 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
3200 LOCK_GIVE(hdw->ctl_lock);
3206 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
3210 LOCK_TAKE(hdw->ctl_lock);
3212 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
3213 hdw->cmd_buffer[1] = 0;
3214 hdw->cmd_buffer[2] = 0;
3215 hdw->cmd_buffer[3] = 0;
3216 hdw->cmd_buffer[4] = 0;
3217 hdw->cmd_buffer[5] = 0;
3218 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3219 hdw->cmd_buffer[7] = reg & 0xff;
3221 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
3222 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
3224 LOCK_GIVE(hdw->ctl_lock);
3230 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
3232 if (!hdw->flag_ok) return;
3233 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3234 "Device being rendered inoperable");
3235 if (hdw->vid_stream) {
3236 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
3239 trace_stbit("flag_ok",hdw->flag_ok);
3240 pvr2_hdw_state_sched(hdw);
3244 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
3247 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
3248 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
3250 ret = usb_reset_device(hdw->usb_dev);
3251 usb_unlock_device(hdw->usb_dev);
3253 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3254 "Failed to lock USB device ret=%d",ret);
3256 if (init_pause_msec) {
3257 pvr2_trace(PVR2_TRACE_INFO,
3258 "Waiting %u msec for hardware to settle",
3260 msleep(init_pause_msec);
3266 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
3272 if (!hdw->usb_dev) return;
3274 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
3276 da[0] = val ? 0x01 : 0x00;
3278 /* Write the CPUCS register on the 8051. The lsb of the register
3279 is the reset bit; a 1 asserts reset while a 0 clears it. */
3280 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
3281 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
3283 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3284 "cpureset_assert(%d) error=%d",val,ret);
3285 pvr2_hdw_render_useless(hdw);
3290 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
3292 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
3296 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
3298 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
3302 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw *hdw)
3304 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_OFF);
3308 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
3310 if (!hdw->decoder_ctrl) {
3311 pvr2_trace(PVR2_TRACE_INIT,
3312 "Unable to reset decoder: nothing attached");
3316 if (!hdw->decoder_ctrl->force_reset) {
3317 pvr2_trace(PVR2_TRACE_INIT,
3318 "Unable to reset decoder: not implemented");
3322 pvr2_trace(PVR2_TRACE_INIT,
3323 "Requesting decoder reset");
3324 hdw->decoder_ctrl->force_reset(hdw->decoder_ctrl->ctxt);
3329 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
3332 return pvr2_issue_simple_cmd(hdw,
3333 FX2CMD_HCW_DEMOD_RESETIN |
3335 ((onoff ? 1 : 0) << 16));
3339 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
3342 return pvr2_issue_simple_cmd(hdw,(onoff ?
3343 FX2CMD_ONAIR_DTV_POWER_ON :
3344 FX2CMD_ONAIR_DTV_POWER_OFF));
3348 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
3351 return pvr2_issue_simple_cmd(hdw,(onoff ?
3352 FX2CMD_ONAIR_DTV_STREAMING_ON :
3353 FX2CMD_ONAIR_DTV_STREAMING_OFF));
3357 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
3360 /* Compare digital/analog desired setting with current setting. If
3361 they don't match, fix it... */
3362 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
3363 if (cmode == hdw->pathway_state) {
3364 /* They match; nothing to do */
3368 switch (hdw->hdw_desc->digital_control_scheme) {
3369 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
3370 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
3371 if (cmode == PVR2_PATHWAY_ANALOG) {
3372 /* If moving to analog mode, also force the decoder
3373 to reset. If no decoder is attached, then it's
3374 ok to ignore this because if/when the decoder
3375 attaches, it will reset itself at that time. */
3376 pvr2_hdw_cmd_decoder_reset(hdw);
3379 case PVR2_DIGITAL_SCHEME_ONAIR:
3380 /* Supposedly we should always have the power on whether in
3381 digital or analog mode. But for now do what appears to
3383 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
3388 pvr2_hdw_untrip_unlocked(hdw);
3389 hdw->pathway_state = cmode;
3393 void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
3395 /* change some GPIO data
3397 * note: bit d7 of dir appears to control the LED,
3398 * so we shut it off here.
3402 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
3404 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
3406 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
3410 typedef void (*led_method_func)(struct pvr2_hdw *,int);
3412 static led_method_func led_methods[] = {
3413 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
3418 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
3420 unsigned int scheme_id;
3423 if ((!onoff) == (!hdw->led_on)) return;
3425 hdw->led_on = onoff != 0;
3427 scheme_id = hdw->hdw_desc->led_scheme;
3428 if (scheme_id < ARRAY_SIZE(led_methods)) {
3429 fp = led_methods[scheme_id];
3434 if (fp) (*fp)(hdw,onoff);
3438 /* Stop / start video stream transport */
3439 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
3443 /* If we're in analog mode, then just issue the usual analog
3445 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
3446 return pvr2_issue_simple_cmd(hdw,
3448 FX2CMD_STREAMING_ON :
3449 FX2CMD_STREAMING_OFF));
3450 /*Note: Not reached */
3453 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
3454 /* Whoops, we don't know what mode we're in... */
3458 /* To get here we have to be in digital mode. The mechanism here
3459 is unfortunately different for different vendors. So we switch
3460 on the device's digital scheme attribute in order to figure out
3462 switch (hdw->hdw_desc->digital_control_scheme) {
3463 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
3464 return pvr2_issue_simple_cmd(hdw,
3466 FX2CMD_HCW_DTV_STREAMING_ON :
3467 FX2CMD_HCW_DTV_STREAMING_OFF));
3468 case PVR2_DIGITAL_SCHEME_ONAIR:
3469 ret = pvr2_issue_simple_cmd(hdw,
3471 FX2CMD_STREAMING_ON :
3472 FX2CMD_STREAMING_OFF));
3473 if (ret) return ret;
3474 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
3481 /* Evaluate whether or not state_pathway_ok can change */
3482 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
3484 if (hdw->state_pathway_ok) {
3485 /* Nothing to do if pathway is already ok */
3488 if (!hdw->state_pipeline_idle) {
3489 /* Not allowed to change anything if pipeline is not idle */
3492 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
3493 hdw->state_pathway_ok = !0;
3494 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
3499 /* Evaluate whether or not state_encoder_ok can change */
3500 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
3502 if (hdw->state_encoder_ok) return 0;
3503 if (hdw->flag_tripped) return 0;
3504 if (hdw->state_encoder_run) return 0;
3505 if (hdw->state_encoder_config) return 0;
3506 if (hdw->state_decoder_run) return 0;
3507 if (hdw->state_usbstream_run) return 0;
3508 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
3509 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
3510 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
3514 if (pvr2_upload_firmware2(hdw) < 0) {
3515 hdw->flag_tripped = !0;
3516 trace_stbit("flag_tripped",hdw->flag_tripped);
3519 hdw->state_encoder_ok = !0;
3520 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
3525 /* Evaluate whether or not state_encoder_config can change */
3526 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
3528 if (hdw->state_encoder_config) {
3529 if (hdw->state_encoder_ok) {
3530 if (hdw->state_pipeline_req &&
3531 !hdw->state_pipeline_pause) return 0;
3533 hdw->state_encoder_config = 0;
3534 hdw->state_encoder_waitok = 0;
3535 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
3536 /* paranoia - solve race if timer just completed */
3537 del_timer_sync(&hdw->encoder_wait_timer);
3539 if (!hdw->state_pathway_ok ||
3540 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
3541 !hdw->state_encoder_ok ||
3542 !hdw->state_pipeline_idle ||
3543 hdw->state_pipeline_pause ||
3544 !hdw->state_pipeline_req ||
3545 !hdw->state_pipeline_config) {
3546 /* We must reset the enforced wait interval if
3547 anything has happened that might have disturbed
3548 the encoder. This should be a rare case. */
3549 if (timer_pending(&hdw->encoder_wait_timer)) {
3550 del_timer_sync(&hdw->encoder_wait_timer);
3552 if (hdw->state_encoder_waitok) {
3553 /* Must clear the state - therefore we did
3554 something to a state bit and must also
3556 hdw->state_encoder_waitok = 0;
3557 trace_stbit("state_encoder_waitok",
3558 hdw->state_encoder_waitok);
3563 if (!hdw->state_encoder_waitok) {
3564 if (!timer_pending(&hdw->encoder_wait_timer)) {
3565 /* waitok flag wasn't set and timer isn't
3566 running. Check flag once more to avoid
3567 a race then start the timer. This is
3568 the point when we measure out a minimal
3569 quiet interval before doing something to
3571 if (!hdw->state_encoder_waitok) {
3572 hdw->encoder_wait_timer.expires =
3573 jiffies + (HZ*50/1000);
3574 add_timer(&hdw->encoder_wait_timer);
3577 /* We can't continue until we know we have been
3578 quiet for the interval measured by this
3582 pvr2_encoder_configure(hdw);
3583 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
3585 trace_stbit("state_encoder_config",hdw->state_encoder_config);
3590 /* Return true if the encoder should not be running. */
3591 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
3593 if (!hdw->state_encoder_ok) {
3594 /* Encoder isn't healthy at the moment, so stop it. */
3597 if (!hdw->state_pathway_ok) {
3598 /* Mode is not understood at the moment (i.e. it wants to
3599 change), so encoder must be stopped. */
3603 switch (hdw->pathway_state) {
3604 case PVR2_PATHWAY_ANALOG:
3605 if (!hdw->state_decoder_run) {
3606 /* We're in analog mode and the decoder is not
3607 running; thus the encoder should be stopped as
3612 case PVR2_PATHWAY_DIGITAL:
3613 if (hdw->state_encoder_runok) {
3614 /* This is a funny case. We're in digital mode so
3615 really the encoder should be stopped. However
3616 if it really is running, only kill it after
3617 runok has been set. This gives a chance for the
3618 onair quirk to function (encoder must run
3619 briefly first, at least once, before onair
3620 digital streaming can work). */
3625 /* Unknown mode; so encoder should be stopped. */
3629 /* If we get here, we haven't found a reason to stop the
3635 /* Return true if the encoder should be running. */
3636 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
3638 if (!hdw->state_encoder_ok) {
3639 /* Don't run the encoder if it isn't healthy... */
3642 if (!hdw->state_pathway_ok) {
3643 /* Don't run the encoder if we don't (yet) know what mode
3644 we need to be in... */
3648 switch (hdw->pathway_state) {
3649 case PVR2_PATHWAY_ANALOG:
3650 if (hdw->state_decoder_run) {
3651 /* In analog mode, if the decoder is running, then
3656 case PVR2_PATHWAY_DIGITAL:
3657 if ((hdw->hdw_desc->digital_control_scheme ==
3658 PVR2_DIGITAL_SCHEME_ONAIR) &&
3659 !hdw->state_encoder_runok) {
3660 /* This is a quirk. OnAir hardware won't stream
3661 digital until the encoder has been run at least
3662 once, for a minimal period of time (empiricially
3663 measured to be 1/4 second). So if we're on
3664 OnAir hardware and the encoder has never been
3665 run at all, then start the encoder. Normal
3666 state machine logic in the driver will
3667 automatically handle the remaining bits. */
3672 /* For completeness (unknown mode; encoder won't run ever) */
3675 /* If we get here, then we haven't found any reason to run the
3676 encoder, so don't run it. */
3681 /* Evaluate whether or not state_encoder_run can change */
3682 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
3684 if (hdw->state_encoder_run) {
3685 if (!state_check_disable_encoder_run(hdw)) return 0;
3686 if (hdw->state_encoder_ok) {
3687 del_timer_sync(&hdw->encoder_run_timer);
3688 if (pvr2_encoder_stop(hdw) < 0) return !0;
3690 hdw->state_encoder_run = 0;
3692 if (!state_check_enable_encoder_run(hdw)) return 0;
3693 if (pvr2_encoder_start(hdw) < 0) return !0;
3694 hdw->state_encoder_run = !0;
3695 if (!hdw->state_encoder_runok) {
3696 hdw->encoder_run_timer.expires =
3697 jiffies + (HZ*250/1000);
3698 add_timer(&hdw->encoder_run_timer);
3701 trace_stbit("state_encoder_run",hdw->state_encoder_run);
3706 /* Timeout function for quiescent timer. */
3707 static void pvr2_hdw_quiescent_timeout(unsigned long data)
3709 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3710 hdw->state_decoder_quiescent = !0;
3711 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
3712 hdw->state_stale = !0;
3713 queue_work(hdw->workqueue,&hdw->workpoll);
3717 /* Timeout function for encoder wait timer. */
3718 static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
3720 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3721 hdw->state_encoder_waitok = !0;
3722 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
3723 hdw->state_stale = !0;
3724 queue_work(hdw->workqueue,&hdw->workpoll);
3728 /* Timeout function for encoder run timer. */
3729 static void pvr2_hdw_encoder_run_timeout(unsigned long data)
3731 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3732 if (!hdw->state_encoder_runok) {
3733 hdw->state_encoder_runok = !0;
3734 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
3735 hdw->state_stale = !0;
3736 queue_work(hdw->workqueue,&hdw->workpoll);
3741 /* Evaluate whether or not state_decoder_run can change */
3742 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
3744 if (hdw->state_decoder_run) {
3745 if (hdw->state_encoder_ok) {
3746 if (hdw->state_pipeline_req &&
3747 !hdw->state_pipeline_pause &&
3748 hdw->state_pathway_ok) return 0;
3750 if (!hdw->flag_decoder_missed) {
3751 pvr2_decoder_enable(hdw,0);
3753 hdw->state_decoder_quiescent = 0;
3754 hdw->state_decoder_run = 0;
3755 /* paranoia - solve race if timer just completed */
3756 del_timer_sync(&hdw->quiescent_timer);
3758 if (!hdw->state_decoder_quiescent) {
3759 if (!timer_pending(&hdw->quiescent_timer)) {
3760 /* We don't do something about the
3761 quiescent timer until right here because
3762 we also want to catch cases where the
3763 decoder was already not running (like
3764 after initialization) as opposed to
3765 knowing that we had just stopped it.
3766 The second flag check is here to cover a
3767 race - the timer could have run and set
3768 this flag just after the previous check
3769 but before we did the pending check. */
3770 if (!hdw->state_decoder_quiescent) {
3771 hdw->quiescent_timer.expires =
3772 jiffies + (HZ*50/1000);
3773 add_timer(&hdw->quiescent_timer);
3776 /* Don't allow decoder to start again until it has
3777 been quiesced first. This little detail should
3778 hopefully further stabilize the encoder. */
3781 if (!hdw->state_pathway_ok ||
3782 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
3783 !hdw->state_pipeline_req ||
3784 hdw->state_pipeline_pause ||
3785 !hdw->state_pipeline_config ||
3786 !hdw->state_encoder_config ||
3787 !hdw->state_encoder_ok) return 0;
3788 del_timer_sync(&hdw->quiescent_timer);
3789 if (hdw->flag_decoder_missed) return 0;
3790 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
3791 hdw->state_decoder_quiescent = 0;
3792 hdw->state_decoder_run = !0;
3794 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
3795 trace_stbit("state_decoder_run",hdw->state_decoder_run);
3800 /* Evaluate whether or not state_usbstream_run can change */
3801 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
3803 if (hdw->state_usbstream_run) {
3805 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
3806 fl = (hdw->state_encoder_ok &&
3807 hdw->state_encoder_run);
3808 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
3809 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
3810 fl = hdw->state_encoder_ok;
3813 hdw->state_pipeline_req &&
3814 !hdw->state_pipeline_pause &&
3815 hdw->state_pathway_ok) {
3818 pvr2_hdw_cmd_usbstream(hdw,0);
3819 hdw->state_usbstream_run = 0;
3821 if (!hdw->state_pipeline_req ||
3822 hdw->state_pipeline_pause ||
3823 !hdw->state_pathway_ok) return 0;
3824 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
3825 if (!hdw->state_encoder_ok ||
3826 !hdw->state_encoder_run) return 0;
3827 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
3828 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
3829 if (!hdw->state_encoder_ok) return 0;
3830 if (hdw->state_encoder_run) return 0;
3831 if (hdw->hdw_desc->digital_control_scheme ==
3832 PVR2_DIGITAL_SCHEME_ONAIR) {
3833 /* OnAir digital receivers won't stream
3834 unless the analog encoder has run first.
3835 Why? I have no idea. But don't even
3836 try until we know the analog side is
3837 known to have run. */
3838 if (!hdw->state_encoder_runok) return 0;
3841 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
3842 hdw->state_usbstream_run = !0;
3844 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
3849 /* Attempt to configure pipeline, if needed */
3850 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
3852 if (hdw->state_pipeline_config ||
3853 hdw->state_pipeline_pause) return 0;
3854 pvr2_hdw_commit_execute(hdw);
3859 /* Update pipeline idle and pipeline pause tracking states based on other
3860 inputs. This must be called whenever the other relevant inputs have
3862 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
3866 /* Update pipeline state */
3867 st = !(hdw->state_encoder_run ||
3868 hdw->state_decoder_run ||
3869 hdw->state_usbstream_run ||
3870 (!hdw->state_decoder_quiescent));
3871 if (!st != !hdw->state_pipeline_idle) {
3872 hdw->state_pipeline_idle = st;
3875 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
3876 hdw->state_pipeline_pause = 0;
3883 typedef int (*state_eval_func)(struct pvr2_hdw *);
3885 /* Set of functions to be run to evaluate various states in the driver. */
3886 static const state_eval_func eval_funcs[] = {
3887 state_eval_pathway_ok,
3888 state_eval_pipeline_config,
3889 state_eval_encoder_ok,
3890 state_eval_encoder_config,
3891 state_eval_decoder_run,
3892 state_eval_encoder_run,
3893 state_eval_usbstream_run,
3897 /* Process various states and return true if we did anything interesting. */
3898 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
3901 int state_updated = 0;
3904 if (!hdw->state_stale) return 0;
3905 if ((hdw->fw1_state != FW1_STATE_OK) ||
3907 hdw->state_stale = 0;
3910 /* This loop is the heart of the entire driver. It keeps trying to
3911 evaluate various bits of driver state until nothing changes for
3912 one full iteration. Each "bit of state" tracks some global
3913 aspect of the driver, e.g. whether decoder should run, if
3914 pipeline is configured, usb streaming is on, etc. We separately
3915 evaluate each of those questions based on other driver state to
3916 arrive at the correct running configuration. */
3919 state_update_pipeline_state(hdw);
3920 /* Iterate over each bit of state */
3921 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
3922 if ((*eval_funcs[i])(hdw)) {
3925 state_update_pipeline_state(hdw);
3928 } while (check_flag && hdw->flag_ok);
3929 hdw->state_stale = 0;
3930 trace_stbit("state_stale",hdw->state_stale);
3931 return state_updated;
3935 static unsigned int print_input_mask(unsigned int msk,
3936 char *buf,unsigned int acnt)
3938 unsigned int idx,ccnt;
3939 unsigned int tcnt = 0;
3940 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
3941 if (!((1 << idx) & msk)) continue;
3942 ccnt = scnprintf(buf+tcnt,
3946 control_values_input[idx]);
3953 static const char *pvr2_pathway_state_name(int id)
3956 case PVR2_PATHWAY_ANALOG: return "analog";
3957 case PVR2_PATHWAY_DIGITAL: return "digital";
3958 default: return "unknown";
3963 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
3964 char *buf,unsigned int acnt)
3970 "driver:%s%s%s%s%s <mode=%s>",
3971 (hdw->flag_ok ? " <ok>" : " <fail>"),
3972 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
3973 (hdw->flag_disconnected ? " <disconnected>" :
3975 (hdw->flag_tripped ? " <tripped>" : ""),
3976 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
3977 pvr2_pathway_state_name(hdw->pathway_state));
3982 "pipeline:%s%s%s%s",
3983 (hdw->state_pipeline_idle ? " <idle>" : ""),
3984 (hdw->state_pipeline_config ?
3985 " <configok>" : " <stale>"),
3986 (hdw->state_pipeline_req ? " <req>" : ""),
3987 (hdw->state_pipeline_pause ? " <pause>" : ""));
3991 "worker:%s%s%s%s%s%s%s",
3992 (hdw->state_decoder_run ?
3994 (hdw->state_decoder_quiescent ?
3995 "" : " <decode:stop>")),
3996 (hdw->state_decoder_quiescent ?
3997 " <decode:quiescent>" : ""),
3998 (hdw->state_encoder_ok ?
3999 "" : " <encode:init>"),
4000 (hdw->state_encoder_run ?
4001 (hdw->state_encoder_runok ?
4003 " <encode:firstrun>") :
4004 (hdw->state_encoder_runok ?
4006 " <encode:virgin>")),
4007 (hdw->state_encoder_config ?
4008 " <encode:configok>" :
4009 (hdw->state_encoder_waitok ?
4010 "" : " <encode:waitok>")),
4011 (hdw->state_usbstream_run ?
4012 " <usb:run>" : " <usb:stop>"),
4013 (hdw->state_pathway_ok ?
4014 " <pathway:ok>" : ""));
4019 pvr2_get_state_name(hdw->master_state));
4021 unsigned int tcnt = 0;
4024 ccnt = scnprintf(buf,
4026 "Hardware supported inputs: ");
4028 tcnt += print_input_mask(hdw->input_avail_mask,
4031 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4032 ccnt = scnprintf(buf+tcnt,
4034 "; allowed inputs: ");
4036 tcnt += print_input_mask(hdw->input_allowed_mask,
4043 struct pvr2_stream_stats stats;
4044 if (!hdw->vid_stream) break;
4045 pvr2_stream_get_stats(hdw->vid_stream,
4051 " URBs: queued=%u idle=%u ready=%u"
4052 " processed=%u failed=%u",
4053 stats.bytes_processed,
4054 stats.buffers_in_queue,
4055 stats.buffers_in_idle,
4056 stats.buffers_in_ready,
4057 stats.buffers_processed,
4058 stats.buffers_failed);
4066 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4067 char *buf,unsigned int acnt)
4069 unsigned int bcnt,ccnt,idx;
4071 LOCK_TAKE(hdw->big_lock);
4072 for (idx = 0; ; idx++) {
4073 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4075 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4077 buf[0] = '\n'; ccnt = 1;
4078 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4080 LOCK_GIVE(hdw->big_lock);
4085 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4088 unsigned int idx,ccnt;
4090 for (idx = 0; ; idx++) {
4091 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4093 printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
4098 /* Evaluate and update the driver's current state, taking various actions
4099 as appropriate for the update. */
4100 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4103 int state_updated = 0;
4104 int callback_flag = 0;
4107 pvr2_trace(PVR2_TRACE_STBITS,
4108 "Drive state check START");
4109 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4110 pvr2_hdw_state_log_state(hdw);
4113 /* Process all state and get back over disposition */
4114 state_updated = pvr2_hdw_state_update(hdw);
4116 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4118 /* Update master state based upon all other states. */
4119 if (!hdw->flag_ok) {
4120 st = PVR2_STATE_DEAD;
4121 } else if (hdw->fw1_state != FW1_STATE_OK) {
4122 st = PVR2_STATE_COLD;
4123 } else if ((analog_mode ||
4124 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4125 !hdw->state_encoder_ok) {
4126 st = PVR2_STATE_WARM;
4127 } else if (hdw->flag_tripped ||
4128 (analog_mode && hdw->flag_decoder_missed)) {
4129 st = PVR2_STATE_ERROR;
4130 } else if (hdw->state_usbstream_run &&
4132 (hdw->state_encoder_run && hdw->state_decoder_run))) {
4133 st = PVR2_STATE_RUN;
4135 st = PVR2_STATE_READY;
4137 if (hdw->master_state != st) {
4138 pvr2_trace(PVR2_TRACE_STATE,
4139 "Device state change from %s to %s",
4140 pvr2_get_state_name(hdw->master_state),
4141 pvr2_get_state_name(st));
4142 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
4143 hdw->master_state = st;
4147 if (state_updated) {
4148 /* Trigger anyone waiting on any state changes here. */
4149 wake_up(&hdw->state_wait_data);
4152 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4153 pvr2_hdw_state_log_state(hdw);
4155 pvr2_trace(PVR2_TRACE_STBITS,
4156 "Drive state check DONE callback=%d",callback_flag);
4158 return callback_flag;
4162 /* Cause kernel thread to check / update driver state */
4163 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
4165 if (hdw->state_stale) return;
4166 hdw->state_stale = !0;
4167 trace_stbit("state_stale",hdw->state_stale);
4168 queue_work(hdw->workqueue,&hdw->workpoll);
4172 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
4174 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
4178 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
4180 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
4184 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
4186 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
4190 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
4195 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
4196 if (ret) return ret;
4197 nval = (cval & ~msk) | (val & msk);
4198 pvr2_trace(PVR2_TRACE_GPIO,
4199 "GPIO direction changing 0x%x:0x%x"
4200 " from 0x%x to 0x%x",
4204 pvr2_trace(PVR2_TRACE_GPIO,
4205 "GPIO direction changing to 0x%x",nval);
4207 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
4211 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
4216 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
4217 if (ret) return ret;
4218 nval = (cval & ~msk) | (val & msk);
4219 pvr2_trace(PVR2_TRACE_GPIO,
4220 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
4224 pvr2_trace(PVR2_TRACE_GPIO,
4225 "GPIO output changing to 0x%x",nval);
4227 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
4231 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
4233 return hdw->input_avail_mask;
4237 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
4239 return hdw->input_allowed_mask;
4243 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
4245 if (hdw->input_val != v) {
4247 hdw->input_dirty = !0;
4250 /* Handle side effects - if we switch to a mode that needs the RF
4251 tuner, then select the right frequency choice as well and mark
4253 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
4254 hdw->freqSelector = 0;
4255 hdw->freqDirty = !0;
4256 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
4257 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
4258 hdw->freqSelector = 1;
4259 hdw->freqDirty = !0;
4265 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
4266 unsigned int change_mask,
4267 unsigned int change_val)
4270 unsigned int nv,m,idx;
4271 LOCK_TAKE(hdw->big_lock);
4273 nv = hdw->input_allowed_mask & ~change_mask;
4274 nv |= (change_val & change_mask);
4275 nv &= hdw->input_avail_mask;
4277 /* No legal modes left; return error instead. */
4281 hdw->input_allowed_mask = nv;
4282 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
4283 /* Current mode is still in the allowed mask, so
4287 /* Select and switch to a mode that is still in the allowed
4289 if (!hdw->input_allowed_mask) {
4290 /* Nothing legal; give up */
4293 m = hdw->input_allowed_mask;
4294 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
4295 if (!((1 << idx) & m)) continue;
4296 pvr2_hdw_set_input(hdw,idx);
4300 LOCK_GIVE(hdw->big_lock);
4305 /* Find I2C address of eeprom */
4306 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
4309 LOCK_TAKE(hdw->ctl_lock); do {
4310 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
4311 result = pvr2_send_request(hdw,
4314 if (result < 0) break;
4315 result = hdw->cmd_buffer[0];
4316 } while(0); LOCK_GIVE(hdw->ctl_lock);
4321 int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
4322 u32 match_type, u32 match_chip, u64 reg_id,
4323 int setFl,u64 *val_ptr)
4325 #ifdef CONFIG_VIDEO_ADV_DEBUG
4326 struct pvr2_i2c_client *cp;
4327 struct v4l2_register req;
4331 if (!capable(CAP_SYS_ADMIN)) return -EPERM;
4333 req.match_type = match_type;
4334 req.match_chip = match_chip;
4336 if (setFl) req.val = *val_ptr;
4337 mutex_lock(&hdw->i2c_list_lock); do {
4338 list_for_each_entry(cp, &hdw->i2c_clients, list) {
4339 if (!v4l2_chip_match_i2c_client(
4341 req.match_type, req.match_chip)) {
4344 stat = pvr2_i2c_client_cmd(
4345 cp,(setFl ? VIDIOC_DBG_S_REGISTER :
4346 VIDIOC_DBG_G_REGISTER),&req);
4347 if (!setFl) *val_ptr = req.val;
4351 } while (0); mutex_unlock(&hdw->i2c_list_lock);
4363 Stuff for Emacs to see, in order to encourage consistent editing style:
4364 *** Local Variables: ***
4366 *** fill-column: 75 ***
4367 *** tab-width: 8 ***
4368 *** c-basic-offset: 8 ***