1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
7 #include <linux/errno.h>
8 #include <linux/string.h>
9 #include <linux/slab.h>
10 #include <linux/module.h>
11 #include <linux/firmware.h>
12 #include <linux/videodev2.h>
13 #include <media/v4l2-common.h>
14 #include <media/tuner.h>
16 #include "pvrusb2-std.h"
17 #include "pvrusb2-util.h"
18 #include "pvrusb2-hdw.h"
19 #include "pvrusb2-i2c-core.h"
20 #include "pvrusb2-eeprom.h"
21 #include "pvrusb2-hdw-internal.h"
22 #include "pvrusb2-encoder.h"
23 #include "pvrusb2-debug.h"
24 #include "pvrusb2-fx2-cmd.h"
25 #include "pvrusb2-wm8775.h"
26 #include "pvrusb2-video-v4l.h"
27 #include "pvrusb2-cx2584x-v4l.h"
28 #include "pvrusb2-cs53l32a.h"
29 #include "pvrusb2-audio.h"
31 #define TV_MIN_FREQ 55250000L
32 #define TV_MAX_FREQ 850000000L
34 /* This defines a minimum interval that the decoder must remain quiet
35 before we are allowed to start it running. */
36 #define TIME_MSEC_DECODER_WAIT 50
38 /* This defines a minimum interval that the decoder must be allowed to run
39 before we can safely begin using its streaming output. */
40 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
42 /* This defines a minimum interval that the encoder must remain quiet
43 before we are allowed to configure it. */
44 #define TIME_MSEC_ENCODER_WAIT 50
46 /* This defines the minimum interval that the encoder must successfully run
47 before we consider that the encoder has run at least once since its
48 firmware has been loaded. This measurement is in important for cases
49 where we can't do something until we know that the encoder has been run
51 #define TIME_MSEC_ENCODER_OK 250
53 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
54 static DEFINE_MUTEX(pvr2_unit_mtx);
57 static int procreload;
58 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
59 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
60 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
61 static int init_pause_msec;
63 module_param(ctlchg, int, S_IRUGO|S_IWUSR);
64 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
65 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
66 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
67 module_param(procreload, int, S_IRUGO|S_IWUSR);
68 MODULE_PARM_DESC(procreload,
69 "Attempt init failure recovery with firmware reload");
70 module_param_array(tuner, int, NULL, 0444);
71 MODULE_PARM_DESC(tuner,"specify installed tuner type");
72 module_param_array(video_std, int, NULL, 0444);
73 MODULE_PARM_DESC(video_std,"specify initial video standard");
74 module_param_array(tolerance, int, NULL, 0444);
75 MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
77 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
78 static int default_tv_freq = 61250000L;
79 /* 104.3 MHz, a usable FM station for my area */
80 static int default_radio_freq = 104300000L;
82 module_param_named(tv_freq, default_tv_freq, int, 0444);
83 MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
84 module_param_named(radio_freq, default_radio_freq, int, 0444);
85 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
87 #define PVR2_CTL_WRITE_ENDPOINT 0x01
88 #define PVR2_CTL_READ_ENDPOINT 0x81
90 #define PVR2_GPIO_IN 0x9008
91 #define PVR2_GPIO_OUT 0x900c
92 #define PVR2_GPIO_DIR 0x9020
94 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
96 #define PVR2_FIRMWARE_ENDPOINT 0x02
98 /* size of a firmware chunk */
99 #define FIRMWARE_CHUNK_SIZE 0x2000
101 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
102 struct v4l2_subdev *);
104 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
105 [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
106 [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
107 [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
108 [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update,
109 [PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update,
112 static const char *module_names[] = {
113 [PVR2_CLIENT_ID_MSP3400] = "msp3400",
114 [PVR2_CLIENT_ID_CX25840] = "cx25840",
115 [PVR2_CLIENT_ID_SAA7115] = "saa7115",
116 [PVR2_CLIENT_ID_TUNER] = "tuner",
117 [PVR2_CLIENT_ID_DEMOD] = "tuner",
118 [PVR2_CLIENT_ID_CS53L32A] = "cs53l32a",
119 [PVR2_CLIENT_ID_WM8775] = "wm8775",
123 static const unsigned char *module_i2c_addresses[] = {
124 [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
125 [PVR2_CLIENT_ID_DEMOD] = "\x43",
126 [PVR2_CLIENT_ID_MSP3400] = "\x40",
127 [PVR2_CLIENT_ID_SAA7115] = "\x21",
128 [PVR2_CLIENT_ID_WM8775] = "\x1b",
129 [PVR2_CLIENT_ID_CX25840] = "\x44",
130 [PVR2_CLIENT_ID_CS53L32A] = "\x11",
134 static const char *ir_scheme_names[] = {
135 [PVR2_IR_SCHEME_NONE] = "none",
136 [PVR2_IR_SCHEME_29XXX] = "29xxx",
137 [PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)",
138 [PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)",
139 [PVR2_IR_SCHEME_ZILOG] = "Zilog",
143 /* Define the list of additional controls we'll dynamically construct based
144 on query of the cx2341x module. */
145 struct pvr2_mpeg_ids {
149 static const struct pvr2_mpeg_ids mpeg_ids[] = {
151 .strid = "audio_layer",
152 .id = V4L2_CID_MPEG_AUDIO_ENCODING,
154 .strid = "audio_bitrate",
155 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
157 /* Already using audio_mode elsewhere :-( */
158 .strid = "mpeg_audio_mode",
159 .id = V4L2_CID_MPEG_AUDIO_MODE,
161 .strid = "mpeg_audio_mode_extension",
162 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
164 .strid = "audio_emphasis",
165 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
167 .strid = "audio_crc",
168 .id = V4L2_CID_MPEG_AUDIO_CRC,
170 .strid = "video_aspect",
171 .id = V4L2_CID_MPEG_VIDEO_ASPECT,
173 .strid = "video_b_frames",
174 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
176 .strid = "video_gop_size",
177 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
179 .strid = "video_gop_closure",
180 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
182 .strid = "video_bitrate_mode",
183 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
185 .strid = "video_bitrate",
186 .id = V4L2_CID_MPEG_VIDEO_BITRATE,
188 .strid = "video_bitrate_peak",
189 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
191 .strid = "video_temporal_decimation",
192 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
194 .strid = "stream_type",
195 .id = V4L2_CID_MPEG_STREAM_TYPE,
197 .strid = "video_spatial_filter_mode",
198 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
200 .strid = "video_spatial_filter",
201 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
203 .strid = "video_luma_spatial_filter_type",
204 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
206 .strid = "video_chroma_spatial_filter_type",
207 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
209 .strid = "video_temporal_filter_mode",
210 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
212 .strid = "video_temporal_filter",
213 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
215 .strid = "video_median_filter_type",
216 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
218 .strid = "video_luma_median_filter_top",
219 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
221 .strid = "video_luma_median_filter_bottom",
222 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
224 .strid = "video_chroma_median_filter_top",
225 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
227 .strid = "video_chroma_median_filter_bottom",
228 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
231 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
234 static const char *control_values_srate[] = {
235 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz",
236 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz",
237 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz",
242 static const char *control_values_input[] = {
243 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
244 [PVR2_CVAL_INPUT_DTV] = "dtv",
245 [PVR2_CVAL_INPUT_RADIO] = "radio",
246 [PVR2_CVAL_INPUT_SVIDEO] = "s-video",
247 [PVR2_CVAL_INPUT_COMPOSITE] = "composite",
251 static const char *control_values_audiomode[] = {
252 [V4L2_TUNER_MODE_MONO] = "Mono",
253 [V4L2_TUNER_MODE_STEREO] = "Stereo",
254 [V4L2_TUNER_MODE_LANG1] = "Lang1",
255 [V4L2_TUNER_MODE_LANG2] = "Lang2",
256 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
260 static const char *control_values_hsm[] = {
261 [PVR2_CVAL_HSM_FAIL] = "Fail",
262 [PVR2_CVAL_HSM_HIGH] = "High",
263 [PVR2_CVAL_HSM_FULL] = "Full",
267 static const char *pvr2_state_names[] = {
268 [PVR2_STATE_NONE] = "none",
269 [PVR2_STATE_DEAD] = "dead",
270 [PVR2_STATE_COLD] = "cold",
271 [PVR2_STATE_WARM] = "warm",
272 [PVR2_STATE_ERROR] = "error",
273 [PVR2_STATE_READY] = "ready",
274 [PVR2_STATE_RUN] = "run",
278 struct pvr2_fx2cmd_descdef {
283 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
284 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
285 {FX2CMD_MEM_READ_DWORD, "read encoder dword"},
286 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
287 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
288 {FX2CMD_REG_WRITE, "write encoder register"},
289 {FX2CMD_REG_READ, "read encoder register"},
290 {FX2CMD_MEMSEL, "encoder memsel"},
291 {FX2CMD_I2C_WRITE, "i2c write"},
292 {FX2CMD_I2C_READ, "i2c read"},
293 {FX2CMD_GET_USB_SPEED, "get USB speed"},
294 {FX2CMD_STREAMING_ON, "stream on"},
295 {FX2CMD_STREAMING_OFF, "stream off"},
296 {FX2CMD_FWPOST1, "fwpost1"},
297 {FX2CMD_POWER_OFF, "power off"},
298 {FX2CMD_POWER_ON, "power on"},
299 {FX2CMD_DEEP_RESET, "deep reset"},
300 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
301 {FX2CMD_GET_IR_CODE, "get IR code"},
302 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
303 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
304 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
305 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
306 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
307 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
308 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
312 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
313 static void pvr2_hdw_state_sched(struct pvr2_hdw *);
314 static int pvr2_hdw_state_eval(struct pvr2_hdw *);
315 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
316 static void pvr2_hdw_worker_poll(struct work_struct *work);
317 static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
318 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
319 static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
320 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
321 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
322 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
323 static void pvr2_hdw_quiescent_timeout(struct timer_list *);
324 static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *);
325 static void pvr2_hdw_encoder_wait_timeout(struct timer_list *);
326 static void pvr2_hdw_encoder_run_timeout(struct timer_list *);
327 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
328 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
329 unsigned int timeout,int probe_fl,
330 void *write_data,unsigned int write_len,
331 void *read_data,unsigned int read_len);
332 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
333 static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw);
335 static void trace_stbit(const char *name,int val)
337 pvr2_trace(PVR2_TRACE_STBITS,
338 "State bit %s <-- %s",
339 name,(val ? "true" : "false"));
342 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
344 struct pvr2_hdw *hdw = cptr->hdw;
345 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
346 *vp = hdw->freqTable[hdw->freqProgSlot-1];
353 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
355 struct pvr2_hdw *hdw = cptr->hdw;
356 unsigned int slotId = hdw->freqProgSlot;
357 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
358 hdw->freqTable[slotId-1] = v;
359 /* Handle side effects correctly - if we're tuned to this
360 slot, then forgot the slot id relation since the stored
361 frequency has been changed. */
362 if (hdw->freqSelector) {
363 if (hdw->freqSlotRadio == slotId) {
364 hdw->freqSlotRadio = 0;
367 if (hdw->freqSlotTelevision == slotId) {
368 hdw->freqSlotTelevision = 0;
375 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
377 *vp = cptr->hdw->freqProgSlot;
381 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
383 struct pvr2_hdw *hdw = cptr->hdw;
384 if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
385 hdw->freqProgSlot = v;
390 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
392 struct pvr2_hdw *hdw = cptr->hdw;
393 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
397 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
400 struct pvr2_hdw *hdw = cptr->hdw;
401 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
403 freq = hdw->freqTable[slotId-1];
405 pvr2_hdw_set_cur_freq(hdw,freq);
407 if (hdw->freqSelector) {
408 hdw->freqSlotRadio = slotId;
410 hdw->freqSlotTelevision = slotId;
415 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
417 *vp = pvr2_hdw_get_cur_freq(cptr->hdw);
421 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
423 return cptr->hdw->freqDirty != 0;
426 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
428 cptr->hdw->freqDirty = 0;
431 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
433 pvr2_hdw_set_cur_freq(cptr->hdw,v);
437 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
439 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
440 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
444 *left = cap->bounds.left;
448 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
450 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
451 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
455 *left = cap->bounds.left;
456 if (cap->bounds.width > cptr->hdw->cropw_val) {
457 *left += cap->bounds.width - cptr->hdw->cropw_val;
462 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
464 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
465 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
469 *top = cap->bounds.top;
473 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
475 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
476 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
480 *top = cap->bounds.top;
481 if (cap->bounds.height > cptr->hdw->croph_val) {
482 *top += cap->bounds.height - cptr->hdw->croph_val;
487 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *width)
489 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
490 int stat, bleftend, cleft;
492 stat = pvr2_hdw_check_cropcap(cptr->hdw);
496 bleftend = cap->bounds.left+cap->bounds.width;
497 cleft = cptr->hdw->cropl_val;
499 *width = cleft < bleftend ? bleftend-cleft : 0;
503 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *height)
505 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
506 int stat, btopend, ctop;
508 stat = pvr2_hdw_check_cropcap(cptr->hdw);
512 btopend = cap->bounds.top+cap->bounds.height;
513 ctop = cptr->hdw->cropt_val;
515 *height = ctop < btopend ? btopend-ctop : 0;
519 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
521 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
522 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
526 *val = cap->bounds.left;
530 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
532 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
533 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
537 *val = cap->bounds.top;
541 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
543 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
544 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
548 *val = cap->bounds.width;
552 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
554 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
555 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
559 *val = cap->bounds.height;
563 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
565 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
566 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
570 *val = cap->defrect.left;
574 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
576 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
577 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
581 *val = cap->defrect.top;
585 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
587 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
588 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
592 *val = cap->defrect.width;
596 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
598 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
599 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
603 *val = cap->defrect.height;
607 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
609 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
610 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
614 *val = cap->pixelaspect.numerator;
618 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
620 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
621 int stat = pvr2_hdw_check_cropcap(cptr->hdw);
625 *val = cap->pixelaspect.denominator;
629 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
631 /* Actual maximum depends on the video standard in effect. */
632 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
640 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
642 /* Actual minimum depends on device digitizer type. */
643 if (cptr->hdw->hdw_desc->flag_has_cx25840) {
651 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
653 *vp = cptr->hdw->input_val;
657 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
659 if (v < 0 || v > PVR2_CVAL_INPUT_MAX)
661 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0;
664 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
666 return pvr2_hdw_set_input(cptr->hdw,v);
669 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
671 return cptr->hdw->input_dirty != 0;
674 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
676 cptr->hdw->input_dirty = 0;
680 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
683 struct pvr2_hdw *hdw = cptr->hdw;
684 if (hdw->tuner_signal_stale) {
685 pvr2_hdw_status_poll(hdw);
687 fv = hdw->tuner_signal_info.rangehigh;
689 /* Safety fallback */
693 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
702 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
705 struct pvr2_hdw *hdw = cptr->hdw;
706 if (hdw->tuner_signal_stale) {
707 pvr2_hdw_status_poll(hdw);
709 fv = hdw->tuner_signal_info.rangelow;
711 /* Safety fallback */
715 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
724 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
726 return cptr->hdw->enc_stale != 0;
729 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
731 cptr->hdw->enc_stale = 0;
732 cptr->hdw->enc_unsafe_stale = 0;
735 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
738 struct v4l2_ext_controls cs;
739 struct v4l2_ext_control c1;
740 memset(&cs,0,sizeof(cs));
741 memset(&c1,0,sizeof(c1));
744 c1.id = cptr->info->v4l_id;
745 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
752 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
755 struct pvr2_hdw *hdw = cptr->hdw;
756 struct v4l2_ext_controls cs;
757 struct v4l2_ext_control c1;
758 memset(&cs,0,sizeof(cs));
759 memset(&c1,0,sizeof(c1));
762 c1.id = cptr->info->v4l_id;
764 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
765 hdw->state_encoder_run, &cs,
768 /* Oops. cx2341x is telling us it's not safe to change
769 this control while we're capturing. Make a note of this
770 fact so that the pipeline will be stopped the next time
771 controls are committed. Then go on ahead and store this
773 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
776 if (!ret) hdw->enc_unsafe_stale = !0;
783 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
785 struct v4l2_queryctrl qctrl;
786 struct pvr2_ctl_info *info;
787 qctrl.id = cptr->info->v4l_id;
788 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
789 /* Strip out the const so we can adjust a function pointer. It's
790 OK to do this here because we know this is a dynamically created
791 control, so the underlying storage for the info pointer is (a)
792 private to us, and (b) not in read-only storage. Either we do
793 this or we significantly complicate the underlying control
795 info = (struct pvr2_ctl_info *)(cptr->info);
796 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
797 if (info->set_value) {
798 info->set_value = NULL;
801 if (!(info->set_value)) {
802 info->set_value = ctrl_cx2341x_set;
808 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
810 *vp = cptr->hdw->state_pipeline_req;
814 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
816 *vp = cptr->hdw->master_state;
820 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
822 int result = pvr2_hdw_is_hsm(cptr->hdw);
823 *vp = PVR2_CVAL_HSM_FULL;
824 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
825 if (result) *vp = PVR2_CVAL_HSM_HIGH;
829 static int ctrl_stddetect_get(struct pvr2_ctrl *cptr, int *vp)
831 *vp = pvr2_hdw_get_detected_std(cptr->hdw);
835 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
837 *vp = cptr->hdw->std_mask_avail;
841 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
843 struct pvr2_hdw *hdw = cptr->hdw;
845 ns = hdw->std_mask_avail;
846 ns = (ns & ~m) | (v & m);
847 if (ns == hdw->std_mask_avail) return 0;
848 hdw->std_mask_avail = ns;
849 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
853 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
854 char *bufPtr,unsigned int bufSize,
857 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
861 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
862 const char *bufPtr,unsigned int bufSize,
867 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize);
868 if (ret < 0) return ret;
869 if (mskp) *mskp = id;
870 if (valp) *valp = id;
874 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
876 *vp = cptr->hdw->std_mask_cur;
880 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
882 struct pvr2_hdw *hdw = cptr->hdw;
884 ns = hdw->std_mask_cur;
885 ns = (ns & ~m) | (v & m);
886 if (ns == hdw->std_mask_cur) return 0;
887 hdw->std_mask_cur = ns;
892 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
894 return cptr->hdw->std_dirty != 0;
897 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
899 cptr->hdw->std_dirty = 0;
902 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
904 struct pvr2_hdw *hdw = cptr->hdw;
905 pvr2_hdw_status_poll(hdw);
906 *vp = hdw->tuner_signal_info.signal;
910 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
913 unsigned int subchan;
914 struct pvr2_hdw *hdw = cptr->hdw;
915 pvr2_hdw_status_poll(hdw);
916 subchan = hdw->tuner_signal_info.rxsubchans;
917 if (subchan & V4L2_TUNER_SUB_MONO) {
918 val |= (1 << V4L2_TUNER_MODE_MONO);
920 if (subchan & V4L2_TUNER_SUB_STEREO) {
921 val |= (1 << V4L2_TUNER_MODE_STEREO);
923 if (subchan & V4L2_TUNER_SUB_LANG1) {
924 val |= (1 << V4L2_TUNER_MODE_LANG1);
926 if (subchan & V4L2_TUNER_SUB_LANG2) {
927 val |= (1 << V4L2_TUNER_MODE_LANG2);
934 #define DEFINT(vmin,vmax) \
935 .type = pvr2_ctl_int, \
936 .def.type_int.min_value = vmin, \
937 .def.type_int.max_value = vmax
939 #define DEFENUM(tab) \
940 .type = pvr2_ctl_enum, \
941 .def.type_enum.count = ARRAY_SIZE(tab), \
942 .def.type_enum.value_names = tab
945 .type = pvr2_ctl_bool
947 #define DEFMASK(msk,tab) \
948 .type = pvr2_ctl_bitmask, \
949 .def.type_bitmask.valid_bits = msk, \
950 .def.type_bitmask.bit_names = tab
952 #define DEFREF(vname) \
953 .set_value = ctrl_set_##vname, \
954 .get_value = ctrl_get_##vname, \
955 .is_dirty = ctrl_isdirty_##vname, \
956 .clear_dirty = ctrl_cleardirty_##vname
959 #define VCREATE_FUNCS(vname) \
960 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
961 {*vp = cptr->hdw->vname##_val; return 0;} \
962 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
963 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
964 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
965 {return cptr->hdw->vname##_dirty != 0;} \
966 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
967 {cptr->hdw->vname##_dirty = 0;}
969 VCREATE_FUNCS(brightness)
970 VCREATE_FUNCS(contrast)
971 VCREATE_FUNCS(saturation)
973 VCREATE_FUNCS(volume)
974 VCREATE_FUNCS(balance)
976 VCREATE_FUNCS(treble)
982 VCREATE_FUNCS(audiomode)
983 VCREATE_FUNCS(res_hor)
984 VCREATE_FUNCS(res_ver)
987 /* Table definition of all controls which can be manipulated */
988 static const struct pvr2_ctl_info control_defs[] = {
990 .v4l_id = V4L2_CID_BRIGHTNESS,
991 .desc = "Brightness",
992 .name = "brightness",
993 .default_value = 128,
997 .v4l_id = V4L2_CID_CONTRAST,
1000 .default_value = 68,
1004 .v4l_id = V4L2_CID_SATURATION,
1005 .desc = "Saturation",
1006 .name = "saturation",
1007 .default_value = 64,
1011 .v4l_id = V4L2_CID_HUE,
1018 .v4l_id = V4L2_CID_AUDIO_VOLUME,
1021 .default_value = 62000,
1025 .v4l_id = V4L2_CID_AUDIO_BALANCE,
1030 DEFINT(-32768,32767),
1032 .v4l_id = V4L2_CID_AUDIO_BASS,
1037 DEFINT(-32768,32767),
1039 .v4l_id = V4L2_CID_AUDIO_TREBLE,
1044 DEFINT(-32768,32767),
1046 .v4l_id = V4L2_CID_AUDIO_MUTE,
1053 .desc = "Capture crop left margin",
1054 .name = "crop_left",
1055 .internal_id = PVR2_CID_CROPL,
1059 .get_min_value = ctrl_cropl_min_get,
1060 .get_max_value = ctrl_cropl_max_get,
1061 .get_def_value = ctrl_get_cropcapdl,
1063 .desc = "Capture crop top margin",
1065 .internal_id = PVR2_CID_CROPT,
1069 .get_min_value = ctrl_cropt_min_get,
1070 .get_max_value = ctrl_cropt_max_get,
1071 .get_def_value = ctrl_get_cropcapdt,
1073 .desc = "Capture crop width",
1074 .name = "crop_width",
1075 .internal_id = PVR2_CID_CROPW,
1076 .default_value = 720,
1079 .get_max_value = ctrl_cropw_max_get,
1080 .get_def_value = ctrl_get_cropcapdw,
1082 .desc = "Capture crop height",
1083 .name = "crop_height",
1084 .internal_id = PVR2_CID_CROPH,
1085 .default_value = 480,
1088 .get_max_value = ctrl_croph_max_get,
1089 .get_def_value = ctrl_get_cropcapdh,
1091 .desc = "Capture capability pixel aspect numerator",
1092 .name = "cropcap_pixel_numerator",
1093 .internal_id = PVR2_CID_CROPCAPPAN,
1094 .get_value = ctrl_get_cropcappan,
1096 .desc = "Capture capability pixel aspect denominator",
1097 .name = "cropcap_pixel_denominator",
1098 .internal_id = PVR2_CID_CROPCAPPAD,
1099 .get_value = ctrl_get_cropcappad,
1101 .desc = "Capture capability bounds top",
1102 .name = "cropcap_bounds_top",
1103 .internal_id = PVR2_CID_CROPCAPBT,
1104 .get_value = ctrl_get_cropcapbt,
1106 .desc = "Capture capability bounds left",
1107 .name = "cropcap_bounds_left",
1108 .internal_id = PVR2_CID_CROPCAPBL,
1109 .get_value = ctrl_get_cropcapbl,
1111 .desc = "Capture capability bounds width",
1112 .name = "cropcap_bounds_width",
1113 .internal_id = PVR2_CID_CROPCAPBW,
1114 .get_value = ctrl_get_cropcapbw,
1116 .desc = "Capture capability bounds height",
1117 .name = "cropcap_bounds_height",
1118 .internal_id = PVR2_CID_CROPCAPBH,
1119 .get_value = ctrl_get_cropcapbh,
1121 .desc = "Video Source",
1123 .internal_id = PVR2_CID_INPUT,
1124 .default_value = PVR2_CVAL_INPUT_TV,
1125 .check_value = ctrl_check_input,
1127 DEFENUM(control_values_input),
1129 .desc = "Audio Mode",
1130 .name = "audio_mode",
1131 .internal_id = PVR2_CID_AUDIOMODE,
1132 .default_value = V4L2_TUNER_MODE_STEREO,
1134 DEFENUM(control_values_audiomode),
1136 .desc = "Horizontal capture resolution",
1137 .name = "resolution_hor",
1138 .internal_id = PVR2_CID_HRES,
1139 .default_value = 720,
1143 .desc = "Vertical capture resolution",
1144 .name = "resolution_ver",
1145 .internal_id = PVR2_CID_VRES,
1146 .default_value = 480,
1149 /* Hook in check for video standard and adjust maximum
1150 depending on the standard. */
1151 .get_max_value = ctrl_vres_max_get,
1152 .get_min_value = ctrl_vres_min_get,
1154 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
1155 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
1156 .desc = "Audio Sampling Frequency",
1159 DEFENUM(control_values_srate),
1161 .desc = "Tuner Frequency (Hz)",
1162 .name = "frequency",
1163 .internal_id = PVR2_CID_FREQUENCY,
1165 .set_value = ctrl_freq_set,
1166 .get_value = ctrl_freq_get,
1167 .is_dirty = ctrl_freq_is_dirty,
1168 .clear_dirty = ctrl_freq_clear_dirty,
1170 /* Hook in check for input value (tv/radio) and adjust
1171 max/min values accordingly */
1172 .get_max_value = ctrl_freq_max_get,
1173 .get_min_value = ctrl_freq_min_get,
1177 .set_value = ctrl_channel_set,
1178 .get_value = ctrl_channel_get,
1179 DEFINT(0,FREQTABLE_SIZE),
1181 .desc = "Channel Program Frequency",
1182 .name = "freq_table_value",
1183 .set_value = ctrl_channelfreq_set,
1184 .get_value = ctrl_channelfreq_get,
1186 /* Hook in check for input value (tv/radio) and adjust
1187 max/min values accordingly */
1188 .get_max_value = ctrl_freq_max_get,
1189 .get_min_value = ctrl_freq_min_get,
1191 .desc = "Channel Program ID",
1192 .name = "freq_table_channel",
1193 .set_value = ctrl_channelprog_set,
1194 .get_value = ctrl_channelprog_get,
1195 DEFINT(0,FREQTABLE_SIZE),
1197 .desc = "Streaming Enabled",
1198 .name = "streaming_enabled",
1199 .get_value = ctrl_streamingenabled_get,
1202 .desc = "USB Speed",
1203 .name = "usb_speed",
1204 .get_value = ctrl_hsm_get,
1205 DEFENUM(control_values_hsm),
1207 .desc = "Master State",
1208 .name = "master_state",
1209 .get_value = ctrl_masterstate_get,
1210 DEFENUM(pvr2_state_names),
1212 .desc = "Signal Present",
1213 .name = "signal_present",
1214 .get_value = ctrl_signal_get,
1217 .desc = "Audio Modes Present",
1218 .name = "audio_modes_present",
1219 .get_value = ctrl_audio_modes_present_get,
1220 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1221 v4l. Nothing outside of this module cares about this,
1222 but I reuse it in order to also reuse the
1223 control_values_audiomode string table. */
1224 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
1225 (1 << V4L2_TUNER_MODE_STEREO)|
1226 (1 << V4L2_TUNER_MODE_LANG1)|
1227 (1 << V4L2_TUNER_MODE_LANG2)),
1228 control_values_audiomode),
1230 .desc = "Video Standards Available Mask",
1231 .name = "video_standard_mask_available",
1232 .internal_id = PVR2_CID_STDAVAIL,
1234 .get_value = ctrl_stdavail_get,
1235 .set_value = ctrl_stdavail_set,
1236 .val_to_sym = ctrl_std_val_to_sym,
1237 .sym_to_val = ctrl_std_sym_to_val,
1238 .type = pvr2_ctl_bitmask,
1240 .desc = "Video Standards In Use Mask",
1241 .name = "video_standard_mask_active",
1242 .internal_id = PVR2_CID_STDCUR,
1244 .get_value = ctrl_stdcur_get,
1245 .set_value = ctrl_stdcur_set,
1246 .is_dirty = ctrl_stdcur_is_dirty,
1247 .clear_dirty = ctrl_stdcur_clear_dirty,
1248 .val_to_sym = ctrl_std_val_to_sym,
1249 .sym_to_val = ctrl_std_sym_to_val,
1250 .type = pvr2_ctl_bitmask,
1252 .desc = "Video Standards Detected Mask",
1253 .name = "video_standard_mask_detected",
1254 .internal_id = PVR2_CID_STDDETECT,
1256 .get_value = ctrl_stddetect_get,
1257 .val_to_sym = ctrl_std_val_to_sym,
1258 .sym_to_val = ctrl_std_sym_to_val,
1259 .type = pvr2_ctl_bitmask,
1263 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1266 const char *pvr2_config_get_name(enum pvr2_config cfg)
1269 case pvr2_config_empty: return "empty";
1270 case pvr2_config_mpeg: return "mpeg";
1271 case pvr2_config_vbi: return "vbi";
1272 case pvr2_config_pcm: return "pcm";
1273 case pvr2_config_rawvideo: return "raw video";
1279 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
1281 return hdw->usb_dev;
1285 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
1287 return hdw->serial_number;
1291 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
1293 return hdw->bus_info;
1297 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
1299 return hdw->identifier;
1303 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
1305 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
1308 /* Set the currently tuned frequency and account for all possible
1309 driver-core side effects of this action. */
1310 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
1312 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
1313 if (hdw->freqSelector) {
1314 /* Swing over to radio frequency selection */
1315 hdw->freqSelector = 0;
1316 hdw->freqDirty = !0;
1318 if (hdw->freqValRadio != val) {
1319 hdw->freqValRadio = val;
1320 hdw->freqSlotRadio = 0;
1321 hdw->freqDirty = !0;
1324 if (!(hdw->freqSelector)) {
1325 /* Swing over to television frequency selection */
1326 hdw->freqSelector = 1;
1327 hdw->freqDirty = !0;
1329 if (hdw->freqValTelevision != val) {
1330 hdw->freqValTelevision = val;
1331 hdw->freqSlotTelevision = 0;
1332 hdw->freqDirty = !0;
1337 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
1339 return hdw->unit_number;
1343 /* Attempt to locate one of the given set of files. Messages are logged
1344 appropriate to what has been found. The return value will be 0 or
1345 greater on success (it will be the index of the file name found) and
1346 fw_entry will be filled in. Otherwise a negative error is returned on
1347 failure. If the return value is -ENOENT then no viable firmware file
1348 could be located. */
1349 static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
1350 const struct firmware **fw_entry,
1351 const char *fwtypename,
1352 unsigned int fwcount,
1353 const char *fwnames[])
1357 for (idx = 0; idx < fwcount; idx++) {
1358 ret = request_firmware(fw_entry,
1360 &hdw->usb_dev->dev);
1362 trace_firmware("Located %s firmware: %s; uploading...",
1367 if (ret == -ENOENT) continue;
1368 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1369 "request_firmware fatal error with code=%d",ret);
1372 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1373 "***WARNING*** Device %s firmware seems to be missing.",
1375 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1376 "Did you install the pvrusb2 firmware files in their proper location?");
1378 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1379 "request_firmware unable to locate %s file %s",
1380 fwtypename,fwnames[0]);
1382 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1383 "request_firmware unable to locate one of the following %s files:",
1385 for (idx = 0; idx < fwcount; idx++) {
1386 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1387 "request_firmware: Failed to find %s",
1396 * pvr2_upload_firmware1().
1398 * Send the 8051 firmware to the device. After the upload, arrange for
1399 * device to re-enumerate.
1401 * NOTE : the pointer to the firmware data given by request_firmware()
1402 * is not suitable for an usb transaction.
1405 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1407 const struct firmware *fw_entry = NULL;
1410 unsigned int fwsize;
1414 if (!hdw->hdw_desc->fx2_firmware.cnt) {
1415 hdw->fw1_state = FW1_STATE_OK;
1416 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1417 "Connected device type defines no firmware to upload; ignoring firmware");
1421 hdw->fw1_state = FW1_STATE_FAILED; // default result
1423 trace_firmware("pvr2_upload_firmware1");
1425 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
1426 hdw->hdw_desc->fx2_firmware.cnt,
1427 hdw->hdw_desc->fx2_firmware.lst);
1429 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
1433 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1435 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
1436 fwsize = fw_entry->size;
1438 if ((fwsize != 0x2000) &&
1439 (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) {
1440 if (hdw->hdw_desc->flag_fx2_16kb) {
1441 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1442 "Wrong fx2 firmware size (expected 8192 or 16384, got %u)",
1445 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1446 "Wrong fx2 firmware size (expected 8192, got %u)",
1449 release_firmware(fw_entry);
1453 fw_ptr = kmalloc(0x800, GFP_KERNEL);
1454 if (fw_ptr == NULL){
1455 release_firmware(fw_entry);
1459 /* We have to hold the CPU during firmware upload. */
1460 pvr2_hdw_cpureset_assert(hdw,1);
1462 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1466 for (address = 0; address < fwsize; address += 0x800) {
1467 memcpy(fw_ptr, fw_entry->data + address, 0x800);
1468 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
1469 0, fw_ptr, 0x800, HZ);
1472 trace_firmware("Upload done, releasing device's CPU");
1474 /* Now release the CPU. It will disconnect and reconnect later. */
1475 pvr2_hdw_cpureset_assert(hdw,0);
1478 release_firmware(fw_entry);
1480 trace_firmware("Upload done (%d bytes sent)",ret);
1482 /* We should have written fwsize bytes */
1483 if (ret == fwsize) {
1484 hdw->fw1_state = FW1_STATE_RELOAD;
1493 * pvr2_upload_firmware2()
1495 * This uploads encoder firmware on endpoint 2.
1499 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1501 const struct firmware *fw_entry = NULL;
1503 unsigned int pipe, fw_len, fw_done, bcnt, icnt;
1507 static const char *fw_files[] = {
1508 CX2341X_FIRM_ENC_FILENAME,
1511 if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
1515 trace_firmware("pvr2_upload_firmware2");
1517 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
1518 ARRAY_SIZE(fw_files), fw_files);
1519 if (ret < 0) return ret;
1522 /* Since we're about to completely reinitialize the encoder,
1523 invalidate our cached copy of its configuration state. Next
1524 time we configure the encoder, then we'll fully configure it. */
1525 hdw->enc_cur_valid = 0;
1527 /* Encoder is about to be reset so note that as far as we're
1528 concerned now, the encoder has never been run. */
1529 del_timer_sync(&hdw->encoder_run_timer);
1530 if (hdw->state_encoder_runok) {
1531 hdw->state_encoder_runok = 0;
1532 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1535 /* First prepare firmware loading */
1536 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1537 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
1538 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1539 ret |= pvr2_hdw_cmd_deep_reset(hdw);
1540 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
1541 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
1542 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
1543 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
1544 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
1545 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1546 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1547 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
1548 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
1549 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
1550 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
1551 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
1552 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
1553 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1556 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1557 "firmware2 upload prep failed, ret=%d",ret);
1558 release_firmware(fw_entry);
1562 /* Now send firmware */
1564 fw_len = fw_entry->size;
1566 if (fw_len % sizeof(u32)) {
1567 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1568 "size of %s firmware must be a multiple of %zu bytes",
1569 fw_files[fwidx],sizeof(u32));
1570 release_firmware(fw_entry);
1575 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
1576 if (fw_ptr == NULL){
1577 release_firmware(fw_entry);
1578 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1579 "failed to allocate memory for firmware2 upload");
1584 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
1587 for (fw_done = 0; fw_done < fw_len;) {
1588 bcnt = fw_len - fw_done;
1589 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
1590 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
1591 /* Usbsnoop log shows that we must swap bytes... */
1592 /* Some background info: The data being swapped here is a
1593 firmware image destined for the mpeg encoder chip that
1594 lives at the other end of a USB endpoint. The encoder
1595 chip always talks in 32 bit chunks and its storage is
1596 organized into 32 bit words. However from the file
1597 system to the encoder chip everything is purely a byte
1598 stream. The firmware file's contents are always 32 bit
1599 swapped from what the encoder expects. Thus the need
1600 always exists to swap the bytes regardless of the endian
1601 type of the host processor and therefore swab32() makes
1603 for (icnt = 0; icnt < bcnt/4 ; icnt++)
1604 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
1606 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
1607 &actual_length, HZ);
1608 ret |= (actual_length != bcnt);
1613 trace_firmware("upload of %s : %i / %i ",
1614 fw_files[fwidx],fw_done,fw_len);
1617 release_firmware(fw_entry);
1620 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1621 "firmware2 upload transfer failure");
1627 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
1628 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
1629 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
1632 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1633 "firmware2 upload post-proc failure");
1637 if (hdw->hdw_desc->signal_routing_scheme ==
1638 PVR2_ROUTING_SCHEME_GOTVIEW) {
1639 /* Ensure that GPIO 11 is set to output for GOTVIEW
1641 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
1647 static const char *pvr2_get_state_name(unsigned int st)
1649 if (st < ARRAY_SIZE(pvr2_state_names)) {
1650 return pvr2_state_names[st];
1655 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
1657 /* Even though we really only care about the video decoder chip at
1658 this point, we'll broadcast stream on/off to all sub-devices
1659 anyway, just in case somebody else wants to hear the
1661 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
1662 (enablefl ? "on" : "off"));
1663 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
1664 v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl);
1665 if (hdw->decoder_client_id) {
1666 /* We get here if the encoder has been noticed. Otherwise
1667 we'll issue a warning to the user (which should
1668 normally never happen). */
1671 if (!hdw->flag_decoder_missed) {
1672 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1673 "WARNING: No decoder present");
1674 hdw->flag_decoder_missed = !0;
1675 trace_stbit("flag_decoder_missed",
1676 hdw->flag_decoder_missed);
1682 int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
1684 return hdw->master_state;
1688 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
1690 if (!hdw->flag_tripped) return 0;
1691 hdw->flag_tripped = 0;
1692 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1693 "Clearing driver error status");
1698 int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
1701 LOCK_TAKE(hdw->big_lock); do {
1702 fl = pvr2_hdw_untrip_unlocked(hdw);
1703 } while (0); LOCK_GIVE(hdw->big_lock);
1704 if (fl) pvr2_hdw_state_sched(hdw);
1711 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
1713 return hdw->state_pipeline_req != 0;
1717 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
1720 LOCK_TAKE(hdw->big_lock); do {
1721 pvr2_hdw_untrip_unlocked(hdw);
1722 if ((!enable_flag) != !(hdw->state_pipeline_req)) {
1723 hdw->state_pipeline_req = enable_flag != 0;
1724 pvr2_trace(PVR2_TRACE_START_STOP,
1725 "/*--TRACE_STREAM--*/ %s",
1726 enable_flag ? "enable" : "disable");
1728 pvr2_hdw_state_sched(hdw);
1729 } while (0); LOCK_GIVE(hdw->big_lock);
1730 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
1732 while ((st = hdw->master_state) != PVR2_STATE_RUN) {
1733 if (st != PVR2_STATE_READY) return -EIO;
1734 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
1741 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
1744 LOCK_TAKE(hdw->big_lock);
1745 if ((fl = (hdw->desired_stream_type != config)) != 0) {
1746 hdw->desired_stream_type = config;
1747 hdw->state_pipeline_config = 0;
1748 trace_stbit("state_pipeline_config",
1749 hdw->state_pipeline_config);
1750 pvr2_hdw_state_sched(hdw);
1752 LOCK_GIVE(hdw->big_lock);
1754 return pvr2_hdw_wait(hdw,0);
1758 static int get_default_tuner_type(struct pvr2_hdw *hdw)
1760 int unit_number = hdw->unit_number;
1762 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1763 tp = tuner[unit_number];
1765 if (tp < 0) return -EINVAL;
1766 hdw->tuner_type = tp;
1767 hdw->tuner_updated = !0;
1772 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
1774 int unit_number = hdw->unit_number;
1776 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1777 tp = video_std[unit_number];
1784 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
1786 int unit_number = hdw->unit_number;
1788 if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
1789 tp = tolerance[unit_number];
1795 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
1797 /* Try a harmless request to fetch the eeprom's address over
1798 endpoint 1. See what happens. Only the full FX2 image can
1799 respond to this. If this probe fails then likely the FX2
1800 firmware needs be loaded. */
1802 LOCK_TAKE(hdw->ctl_lock); do {
1803 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
1804 result = pvr2_send_request_ex(hdw,HZ*1,!0,
1807 if (result < 0) break;
1808 } while(0); LOCK_GIVE(hdw->ctl_lock);
1810 pvr2_trace(PVR2_TRACE_INIT,
1811 "Probe of device endpoint 1 result status %d",
1814 pvr2_trace(PVR2_TRACE_INIT,
1815 "Probe of device endpoint 1 succeeded");
1820 struct pvr2_std_hack {
1821 v4l2_std_id pat; /* Pattern to match */
1822 v4l2_std_id msk; /* Which bits we care about */
1823 v4l2_std_id std; /* What additional standards or default to set */
1826 /* This data structure labels specific combinations of standards from
1827 tveeprom that we'll try to recognize. If we recognize one, then assume
1828 a specified default standard to use. This is here because tveeprom only
1829 tells us about available standards not the intended default standard (if
1830 any) for the device in question. We guess the default based on what has
1831 been reported as available. Note that this is only for guessing a
1832 default - which can always be overridden explicitly - and if the user
1833 has otherwise named a default then that default will always be used in
1834 place of this table. */
1835 static const struct pvr2_std_hack std_eeprom_maps[] = {
1837 .pat = V4L2_STD_B|V4L2_STD_GH,
1838 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
1842 .std = V4L2_STD_NTSC_M,
1845 .pat = V4L2_STD_PAL_I,
1846 .std = V4L2_STD_PAL_I,
1849 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1850 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
1854 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
1858 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
1862 v4l2_std_id std1,std2,std3;
1864 std1 = get_default_standard(hdw);
1865 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
1867 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
1868 pvr2_trace(PVR2_TRACE_STD,
1869 "Supported video standard(s) reported available in hardware: %.*s",
1872 hdw->std_mask_avail = hdw->std_mask_eeprom;
1874 std2 = (std1|std3) & ~hdw->std_mask_avail;
1876 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
1877 pvr2_trace(PVR2_TRACE_STD,
1878 "Expanding supported video standards to include: %.*s",
1880 hdw->std_mask_avail |= std2;
1883 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
1886 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
1887 pvr2_trace(PVR2_TRACE_STD,
1888 "Initial video standard forced to %.*s",
1890 hdw->std_mask_cur = std1;
1891 hdw->std_dirty = !0;
1895 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
1896 pvr2_trace(PVR2_TRACE_STD,
1897 "Initial video standard (determined by device type): %.*s",
1899 hdw->std_mask_cur = std3;
1900 hdw->std_dirty = !0;
1906 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
1907 if (std_eeprom_maps[idx].msk ?
1908 ((std_eeprom_maps[idx].pat ^
1909 hdw->std_mask_eeprom) &
1910 std_eeprom_maps[idx].msk) :
1911 (std_eeprom_maps[idx].pat !=
1912 hdw->std_mask_eeprom)) continue;
1913 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
1914 std_eeprom_maps[idx].std);
1915 pvr2_trace(PVR2_TRACE_STD,
1916 "Initial video standard guessed as %.*s",
1918 hdw->std_mask_cur = std_eeprom_maps[idx].std;
1919 hdw->std_dirty = !0;
1927 static unsigned int pvr2_copy_i2c_addr_list(
1928 unsigned short *dst, const unsigned char *src,
1929 unsigned int dst_max)
1931 unsigned int cnt = 0;
1933 while (src[cnt] && (cnt + 1) < dst_max) {
1934 dst[cnt] = src[cnt];
1937 dst[cnt] = I2C_CLIENT_END;
1942 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw)
1945 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
1946 for cx25840 causes that module to correctly set up its video
1947 scaling. This is really a problem in the cx25840 module itself,
1948 but we work around it here. The problem has not been seen in
1949 ivtv because there VBI is supported and set up. We don't do VBI
1950 here (at least not yet) and thus we never attempted to even set
1953 struct v4l2_format fmt;
1954 if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) {
1955 /* We're not using a cx25840 so don't enable the hack */
1959 pvr2_trace(PVR2_TRACE_INIT,
1960 "Module ID %u: Executing cx25840 VBI hack",
1961 hdw->decoder_client_id);
1962 memset(&fmt, 0, sizeof(fmt));
1963 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
1964 fmt.fmt.sliced.service_lines[0][21] = V4L2_SLICED_CAPTION_525;
1965 fmt.fmt.sliced.service_lines[1][21] = V4L2_SLICED_CAPTION_525;
1966 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
1967 vbi, s_sliced_fmt, &fmt.fmt.sliced);
1971 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
1972 const struct pvr2_device_client_desc *cd)
1976 struct v4l2_subdev *sd;
1977 unsigned int i2ccnt;
1978 const unsigned char *p;
1979 /* Arbitrary count - max # i2c addresses we will probe */
1980 unsigned short i2caddr[25];
1982 mid = cd->module_id;
1983 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
1985 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1986 "Module ID %u for device %s has no name? The driver might have a configuration problem.",
1988 hdw->hdw_desc->description);
1991 pvr2_trace(PVR2_TRACE_INIT,
1992 "Module ID %u (%s) for device %s being loaded...",
1994 hdw->hdw_desc->description);
1996 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
1997 ARRAY_SIZE(i2caddr));
1998 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
1999 module_i2c_addresses[mid] : NULL) != NULL)) {
2000 /* Second chance: Try default i2c address list */
2001 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
2002 ARRAY_SIZE(i2caddr));
2004 pvr2_trace(PVR2_TRACE_INIT,
2005 "Module ID %u: Using default i2c address list",
2011 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2012 "Module ID %u (%s) for device %s: No i2c addresses. The driver might have a configuration problem.",
2013 mid, fname, hdw->hdw_desc->description);
2018 pvr2_trace(PVR2_TRACE_INIT,
2019 "Module ID %u: Setting up with specified i2c address 0x%x",
2021 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2022 fname, i2caddr[0], NULL);
2024 pvr2_trace(PVR2_TRACE_INIT,
2025 "Module ID %u: Setting up with address probe list",
2027 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2032 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2033 "Module ID %u (%s) for device %s failed to load. Possible missing sub-device kernel module or initialization failure within module.",
2034 mid, fname, hdw->hdw_desc->description);
2038 /* Tag this sub-device instance with the module ID we know about.
2039 In other places we'll use that tag to determine if the instance
2040 requires special handling. */
2043 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
2046 /* client-specific setup... */
2048 case PVR2_CLIENT_ID_CX25840:
2049 case PVR2_CLIENT_ID_SAA7115:
2050 hdw->decoder_client_id = mid;
2059 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
2062 const struct pvr2_string_table *cm;
2063 const struct pvr2_device_client_table *ct;
2066 cm = &hdw->hdw_desc->client_modules;
2067 for (idx = 0; idx < cm->cnt; idx++) {
2068 request_module(cm->lst[idx]);
2071 ct = &hdw->hdw_desc->client_table;
2072 for (idx = 0; idx < ct->cnt; idx++) {
2073 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
2076 hdw->flag_modulefail = !0;
2077 pvr2_hdw_render_useless(hdw);
2082 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2086 struct pvr2_ctrl *cptr;
2088 if (hdw->hdw_desc->fx2_firmware.cnt) {
2091 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
2094 pvr2_trace(PVR2_TRACE_INIT,
2095 "USB endpoint config looks strange; possibly firmware needs to be loaded");
2099 reloadFl = !pvr2_hdw_check_firmware(hdw);
2101 pvr2_trace(PVR2_TRACE_INIT,
2102 "Check for FX2 firmware failed; possibly firmware needs to be loaded");
2106 if (pvr2_upload_firmware1(hdw) != 0) {
2107 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2108 "Failure uploading firmware1");
2113 hdw->fw1_state = FW1_STATE_OK;
2115 if (!pvr2_hdw_dev_ok(hdw)) return;
2117 hdw->force_dirty = !0;
2119 if (!hdw->hdw_desc->flag_no_powerup) {
2120 pvr2_hdw_cmd_powerup(hdw);
2121 if (!pvr2_hdw_dev_ok(hdw)) return;
2124 /* Take the IR chip out of reset, if appropriate */
2125 if (hdw->ir_scheme_active == PVR2_IR_SCHEME_ZILOG) {
2126 pvr2_issue_simple_cmd(hdw,
2127 FX2CMD_HCW_ZILOG_RESET |
2132 // This step MUST happen after the earlier powerup step.
2133 pvr2_i2c_core_init(hdw);
2134 if (!pvr2_hdw_dev_ok(hdw)) return;
2136 pvr2_hdw_load_modules(hdw);
2137 if (!pvr2_hdw_dev_ok(hdw)) return;
2139 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
2141 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2142 cptr = hdw->controls + idx;
2143 if (cptr->info->skip_init) continue;
2144 if (!cptr->info->set_value) continue;
2145 cptr->info->set_value(cptr,~0,cptr->info->default_value);
2148 pvr2_hdw_cx25840_vbi_hack(hdw);
2150 /* Set up special default values for the television and radio
2151 frequencies here. It's not really important what these defaults
2152 are, but I set them to something usable in the Chicago area just
2153 to make driver testing a little easier. */
2155 hdw->freqValTelevision = default_tv_freq;
2156 hdw->freqValRadio = default_radio_freq;
2158 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2159 // thread-safe against the normal pvr2_send_request() mechanism.
2160 // (We should make it thread safe).
2162 if (hdw->hdw_desc->flag_has_hauppauge_rom) {
2163 ret = pvr2_hdw_get_eeprom_addr(hdw);
2164 if (!pvr2_hdw_dev_ok(hdw)) return;
2166 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2167 "Unable to determine location of eeprom, skipping");
2169 hdw->eeprom_addr = ret;
2170 pvr2_eeprom_analyze(hdw);
2171 if (!pvr2_hdw_dev_ok(hdw)) return;
2174 hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
2175 hdw->tuner_updated = !0;
2176 hdw->std_mask_eeprom = V4L2_STD_ALL;
2179 if (hdw->serial_number) {
2180 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2181 "sn-%lu", hdw->serial_number);
2182 } else if (hdw->unit_number >= 0) {
2183 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2185 hdw->unit_number + 'a');
2187 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
2190 hdw->identifier[idx] = 0;
2192 pvr2_hdw_setup_std(hdw);
2194 if (!get_default_tuner_type(hdw)) {
2195 pvr2_trace(PVR2_TRACE_INIT,
2196 "pvr2_hdw_setup: Tuner type overridden to %d",
2201 if (!pvr2_hdw_dev_ok(hdw)) return;
2203 if (hdw->hdw_desc->signal_routing_scheme ==
2204 PVR2_ROUTING_SCHEME_GOTVIEW) {
2205 /* Ensure that GPIO 11 is set to output for GOTVIEW
2207 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
2210 pvr2_hdw_commit_setup(hdw);
2212 hdw->vid_stream = pvr2_stream_create();
2213 if (!pvr2_hdw_dev_ok(hdw)) return;
2214 pvr2_trace(PVR2_TRACE_INIT,
2215 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
2216 if (hdw->vid_stream) {
2217 idx = get_default_error_tolerance(hdw);
2219 pvr2_trace(PVR2_TRACE_INIT,
2220 "pvr2_hdw_setup: video stream %p setting tolerance %u",
2221 hdw->vid_stream,idx);
2223 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
2224 PVR2_VID_ENDPOINT,idx);
2227 if (!pvr2_hdw_dev_ok(hdw)) return;
2229 hdw->flag_init_ok = !0;
2231 pvr2_hdw_state_sched(hdw);
2235 /* Set up the structure and attempt to put the device into a usable state.
2236 This can be a time-consuming operation, which is why it is not done
2237 internally as part of the create() step. */
2238 static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
2240 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
2242 pvr2_hdw_setup_low(hdw);
2243 pvr2_trace(PVR2_TRACE_INIT,
2244 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2245 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
2246 if (pvr2_hdw_dev_ok(hdw)) {
2247 if (hdw->flag_init_ok) {
2250 "Device initialization completed successfully.");
2253 if (hdw->fw1_state == FW1_STATE_RELOAD) {
2256 "Device microcontroller firmware (re)loaded; it should now reset and reconnect.");
2260 PVR2_TRACE_ERROR_LEGS,
2261 "Device initialization was not successful.");
2262 if (hdw->fw1_state == FW1_STATE_MISSING) {
2264 PVR2_TRACE_ERROR_LEGS,
2265 "Giving up since device microcontroller firmware appears to be missing.");
2269 if (hdw->flag_modulefail) {
2271 PVR2_TRACE_ERROR_LEGS,
2272 "***WARNING*** pvrusb2 driver initialization failed due to the failure of one or more sub-device kernel modules.");
2274 PVR2_TRACE_ERROR_LEGS,
2275 "You need to resolve the failing condition before this driver can function. There should be some earlier messages giving more information about the problem.");
2280 PVR2_TRACE_ERROR_LEGS,
2281 "Attempting pvrusb2 recovery by reloading primary firmware.");
2283 PVR2_TRACE_ERROR_LEGS,
2284 "If this works, device should disconnect and reconnect in a sane state.");
2285 hdw->fw1_state = FW1_STATE_UNKNOWN;
2286 pvr2_upload_firmware1(hdw);
2289 PVR2_TRACE_ERROR_LEGS,
2290 "***WARNING*** pvrusb2 device hardware appears to be jammed and I can't clear it.");
2292 PVR2_TRACE_ERROR_LEGS,
2293 "You might need to power cycle the pvrusb2 device in order to recover.");
2296 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
2300 /* Perform second stage initialization. Set callback pointer first so that
2301 we can avoid a possible initialization race (if the kernel thread runs
2302 before the callback has been set). */
2303 int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
2304 void (*callback_func)(void *),
2305 void *callback_data)
2307 LOCK_TAKE(hdw->big_lock); do {
2308 if (hdw->flag_disconnected) {
2309 /* Handle a race here: If we're already
2310 disconnected by this point, then give up. If we
2311 get past this then we'll remain connected for
2312 the duration of initialization since the entire
2313 initialization sequence is now protected by the
2317 hdw->state_data = callback_data;
2318 hdw->state_func = callback_func;
2319 pvr2_hdw_setup(hdw);
2320 } while (0); LOCK_GIVE(hdw->big_lock);
2321 return hdw->flag_init_ok;
2325 /* Create, set up, and return a structure for interacting with the
2326 underlying hardware. */
2327 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2328 const struct usb_device_id *devid)
2330 unsigned int idx,cnt1,cnt2,m;
2331 struct pvr2_hdw *hdw = NULL;
2333 struct pvr2_ctrl *cptr;
2334 struct usb_device *usb_dev;
2335 const struct pvr2_device_desc *hdw_desc;
2337 struct v4l2_queryctrl qctrl;
2338 struct pvr2_ctl_info *ciptr;
2340 usb_dev = interface_to_usbdev(intf);
2342 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
2344 if (hdw_desc == NULL) {
2345 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create: No device description pointer, unable to continue.");
2346 pvr2_trace(PVR2_TRACE_INIT,
2347 "If you have a new device type, please contact Mike Isely <isely@pobox.com> to get it included in the driver");
2351 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
2352 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2353 hdw,hdw_desc->description);
2354 pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s",
2355 hdw_desc->description);
2356 if (hdw_desc->flag_is_experimental) {
2357 pvr2_trace(PVR2_TRACE_INFO, "**********");
2358 pvr2_trace(PVR2_TRACE_INFO,
2359 "WARNING: Support for this device (%s) is experimental.",
2360 hdw_desc->description);
2361 pvr2_trace(PVR2_TRACE_INFO,
2362 "Important functionality might not be entirely working.");
2363 pvr2_trace(PVR2_TRACE_INFO,
2364 "Please consider contacting the driver author to help with further stabilization of the driver.");
2365 pvr2_trace(PVR2_TRACE_INFO, "**********");
2367 if (!hdw) goto fail;
2369 timer_setup(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout, 0);
2371 timer_setup(&hdw->decoder_stabilization_timer,
2372 pvr2_hdw_decoder_stabilization_timeout, 0);
2374 timer_setup(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout,
2377 timer_setup(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout, 0);
2379 hdw->master_state = PVR2_STATE_DEAD;
2381 init_waitqueue_head(&hdw->state_wait_data);
2383 hdw->tuner_signal_stale = !0;
2384 cx2341x_fill_defaults(&hdw->enc_ctl_state);
2386 /* Calculate which inputs are OK */
2388 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
2389 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
2390 m |= 1 << PVR2_CVAL_INPUT_DTV;
2392 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
2393 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
2394 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
2395 hdw->input_avail_mask = m;
2396 hdw->input_allowed_mask = hdw->input_avail_mask;
2398 /* If not a hybrid device, pathway_state never changes. So
2399 initialize it here to what it should forever be. */
2400 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
2401 hdw->pathway_state = PVR2_PATHWAY_ANALOG;
2402 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
2403 hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
2406 hdw->control_cnt = CTRLDEF_COUNT;
2407 hdw->control_cnt += MPEGDEF_COUNT;
2408 hdw->controls = kcalloc(hdw->control_cnt, sizeof(struct pvr2_ctrl),
2410 if (!hdw->controls) goto fail;
2411 hdw->hdw_desc = hdw_desc;
2412 hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
2413 for (idx = 0; idx < hdw->control_cnt; idx++) {
2414 cptr = hdw->controls + idx;
2417 for (idx = 0; idx < 32; idx++) {
2418 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
2420 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2421 cptr = hdw->controls + idx;
2422 cptr->info = control_defs+idx;
2425 /* Ensure that default input choice is a valid one. */
2426 m = hdw->input_avail_mask;
2427 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
2428 if (!((1 << idx) & m)) continue;
2429 hdw->input_val = idx;
2433 /* Define and configure additional controls from cx2341x module. */
2434 hdw->mpeg_ctrl_info = kcalloc(MPEGDEF_COUNT,
2435 sizeof(*(hdw->mpeg_ctrl_info)),
2437 if (!hdw->mpeg_ctrl_info) goto fail;
2438 for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
2439 cptr = hdw->controls + idx + CTRLDEF_COUNT;
2440 ciptr = &(hdw->mpeg_ctrl_info[idx].info);
2441 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
2442 ciptr->name = mpeg_ids[idx].strid;
2443 ciptr->v4l_id = mpeg_ids[idx].id;
2444 ciptr->skip_init = !0;
2445 ciptr->get_value = ctrl_cx2341x_get;
2446 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
2447 ciptr->is_dirty = ctrl_cx2341x_is_dirty;
2448 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
2449 qctrl.id = ciptr->v4l_id;
2450 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
2451 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
2452 ciptr->set_value = ctrl_cx2341x_set;
2454 strscpy(hdw->mpeg_ctrl_info[idx].desc, qctrl.name,
2455 sizeof(hdw->mpeg_ctrl_info[idx].desc));
2456 ciptr->default_value = qctrl.default_value;
2457 switch (qctrl.type) {
2459 case V4L2_CTRL_TYPE_INTEGER:
2460 ciptr->type = pvr2_ctl_int;
2461 ciptr->def.type_int.min_value = qctrl.minimum;
2462 ciptr->def.type_int.max_value = qctrl.maximum;
2464 case V4L2_CTRL_TYPE_BOOLEAN:
2465 ciptr->type = pvr2_ctl_bool;
2467 case V4L2_CTRL_TYPE_MENU:
2468 ciptr->type = pvr2_ctl_enum;
2469 ciptr->def.type_enum.value_names =
2470 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
2473 ciptr->def.type_enum.value_names[cnt1] != NULL;
2475 ciptr->def.type_enum.count = cnt1;
2481 // Initialize control data regarding video standard masks
2482 valid_std_mask = pvr2_std_get_usable();
2483 for (idx = 0; idx < 32; idx++) {
2484 if (!(valid_std_mask & (1 << idx))) continue;
2485 cnt1 = pvr2_std_id_to_str(
2486 hdw->std_mask_names[idx],
2487 sizeof(hdw->std_mask_names[idx])-1,
2489 hdw->std_mask_names[idx][cnt1] = 0;
2491 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
2493 memcpy(&hdw->std_info_avail,cptr->info,
2494 sizeof(hdw->std_info_avail));
2495 cptr->info = &hdw->std_info_avail;
2496 hdw->std_info_avail.def.type_bitmask.bit_names =
2498 hdw->std_info_avail.def.type_bitmask.valid_bits =
2501 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
2503 memcpy(&hdw->std_info_cur,cptr->info,
2504 sizeof(hdw->std_info_cur));
2505 cptr->info = &hdw->std_info_cur;
2506 hdw->std_info_cur.def.type_bitmask.bit_names =
2508 hdw->std_info_cur.def.type_bitmask.valid_bits =
2511 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDDETECT);
2513 memcpy(&hdw->std_info_detect,cptr->info,
2514 sizeof(hdw->std_info_detect));
2515 cptr->info = &hdw->std_info_detect;
2516 hdw->std_info_detect.def.type_bitmask.bit_names =
2518 hdw->std_info_detect.def.type_bitmask.valid_bits =
2522 hdw->cropcap_stale = !0;
2523 hdw->eeprom_addr = -1;
2524 hdw->unit_number = -1;
2525 hdw->v4l_minor_number_video = -1;
2526 hdw->v4l_minor_number_vbi = -1;
2527 hdw->v4l_minor_number_radio = -1;
2528 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2529 if (!hdw->ctl_write_buffer) goto fail;
2530 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
2531 if (!hdw->ctl_read_buffer) goto fail;
2532 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
2533 if (!hdw->ctl_write_urb) goto fail;
2534 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2535 if (!hdw->ctl_read_urb) goto fail;
2537 if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
2538 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2539 "Error registering with v4l core, giving up");
2542 mutex_lock(&pvr2_unit_mtx);
2544 for (idx = 0; idx < PVR_NUM; idx++) {
2545 if (unit_pointers[idx]) continue;
2546 hdw->unit_number = idx;
2547 unit_pointers[idx] = hdw;
2551 mutex_unlock(&pvr2_unit_mtx);
2554 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
2556 if (hdw->unit_number >= 0) {
2557 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
2558 ('a' + hdw->unit_number));
2561 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
2562 hdw->name[cnt1] = 0;
2564 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
2566 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
2567 hdw->unit_number,hdw->name);
2569 hdw->tuner_type = -1;
2572 hdw->usb_intf = intf;
2573 hdw->usb_dev = usb_dev;
2575 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
2577 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
2578 usb_set_interface(hdw->usb_dev,ifnum,0);
2580 mutex_init(&hdw->ctl_lock_mutex);
2581 mutex_init(&hdw->big_lock_mutex);
2586 del_timer_sync(&hdw->quiescent_timer);
2587 del_timer_sync(&hdw->decoder_stabilization_timer);
2588 del_timer_sync(&hdw->encoder_run_timer);
2589 del_timer_sync(&hdw->encoder_wait_timer);
2590 flush_work(&hdw->workpoll);
2591 usb_free_urb(hdw->ctl_read_urb);
2592 usb_free_urb(hdw->ctl_write_urb);
2593 kfree(hdw->ctl_read_buffer);
2594 kfree(hdw->ctl_write_buffer);
2595 kfree(hdw->controls);
2596 kfree(hdw->mpeg_ctrl_info);
2603 /* Remove _all_ associations between this driver and the underlying USB
2605 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
2607 if (hdw->flag_disconnected) return;
2608 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
2609 if (hdw->ctl_read_urb) {
2610 usb_kill_urb(hdw->ctl_read_urb);
2611 usb_free_urb(hdw->ctl_read_urb);
2612 hdw->ctl_read_urb = NULL;
2614 if (hdw->ctl_write_urb) {
2615 usb_kill_urb(hdw->ctl_write_urb);
2616 usb_free_urb(hdw->ctl_write_urb);
2617 hdw->ctl_write_urb = NULL;
2619 if (hdw->ctl_read_buffer) {
2620 kfree(hdw->ctl_read_buffer);
2621 hdw->ctl_read_buffer = NULL;
2623 if (hdw->ctl_write_buffer) {
2624 kfree(hdw->ctl_write_buffer);
2625 hdw->ctl_write_buffer = NULL;
2627 hdw->flag_disconnected = !0;
2628 /* If we don't do this, then there will be a dangling struct device
2629 reference to our disappearing device persisting inside the V4L
2631 v4l2_device_disconnect(&hdw->v4l2_dev);
2632 hdw->usb_dev = NULL;
2633 hdw->usb_intf = NULL;
2634 pvr2_hdw_render_useless(hdw);
2637 void pvr2_hdw_set_v4l2_dev(struct pvr2_hdw *hdw, struct video_device *vdev)
2639 vdev->v4l2_dev = &hdw->v4l2_dev;
2642 /* Destroy hardware interaction structure */
2643 void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2646 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
2647 flush_work(&hdw->workpoll);
2648 del_timer_sync(&hdw->quiescent_timer);
2649 del_timer_sync(&hdw->decoder_stabilization_timer);
2650 del_timer_sync(&hdw->encoder_run_timer);
2651 del_timer_sync(&hdw->encoder_wait_timer);
2652 if (hdw->fw_buffer) {
2653 kfree(hdw->fw_buffer);
2654 hdw->fw_buffer = NULL;
2656 if (hdw->vid_stream) {
2657 pvr2_stream_destroy(hdw->vid_stream);
2658 hdw->vid_stream = NULL;
2660 pvr2_i2c_core_done(hdw);
2661 v4l2_device_unregister(&hdw->v4l2_dev);
2662 pvr2_hdw_remove_usb_stuff(hdw);
2663 mutex_lock(&pvr2_unit_mtx);
2665 if ((hdw->unit_number >= 0) &&
2666 (hdw->unit_number < PVR_NUM) &&
2667 (unit_pointers[hdw->unit_number] == hdw)) {
2668 unit_pointers[hdw->unit_number] = NULL;
2671 mutex_unlock(&pvr2_unit_mtx);
2672 kfree(hdw->controls);
2673 kfree(hdw->mpeg_ctrl_info);
2678 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
2680 return (hdw && hdw->flag_ok);
2684 /* Called when hardware has been unplugged */
2685 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
2687 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
2688 LOCK_TAKE(hdw->big_lock);
2689 LOCK_TAKE(hdw->ctl_lock);
2690 pvr2_hdw_remove_usb_stuff(hdw);
2691 LOCK_GIVE(hdw->ctl_lock);
2692 LOCK_GIVE(hdw->big_lock);
2696 /* Get the number of defined controls */
2697 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
2699 return hdw->control_cnt;
2703 /* Retrieve a control handle given its index (0..count-1) */
2704 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
2707 if (idx >= hdw->control_cnt) return NULL;
2708 return hdw->controls + idx;
2712 /* Retrieve a control handle given its index (0..count-1) */
2713 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
2714 unsigned int ctl_id)
2716 struct pvr2_ctrl *cptr;
2720 /* This could be made a lot more efficient, but for now... */
2721 for (idx = 0; idx < hdw->control_cnt; idx++) {
2722 cptr = hdw->controls + idx;
2723 i = cptr->info->internal_id;
2724 if (i && (i == ctl_id)) return cptr;
2730 /* Given a V4L ID, retrieve the control structure associated with it. */
2731 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
2733 struct pvr2_ctrl *cptr;
2737 /* This could be made a lot more efficient, but for now... */
2738 for (idx = 0; idx < hdw->control_cnt; idx++) {
2739 cptr = hdw->controls + idx;
2740 i = cptr->info->v4l_id;
2741 if (i && (i == ctl_id)) return cptr;
2747 /* Given a V4L ID for its immediate predecessor, retrieve the control
2748 structure associated with it. */
2749 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
2750 unsigned int ctl_id)
2752 struct pvr2_ctrl *cptr,*cp2;
2756 /* This could be made a lot more efficient, but for now... */
2758 for (idx = 0; idx < hdw->control_cnt; idx++) {
2759 cptr = hdw->controls + idx;
2760 i = cptr->info->v4l_id;
2762 if (i <= ctl_id) continue;
2763 if (cp2 && (cp2->info->v4l_id < i)) continue;
2771 static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
2774 case pvr2_ctl_int: return "integer";
2775 case pvr2_ctl_enum: return "enum";
2776 case pvr2_ctl_bool: return "boolean";
2777 case pvr2_ctl_bitmask: return "bitmask";
2783 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
2784 const char *name, int val)
2786 struct v4l2_control ctrl;
2787 struct v4l2_subdev *sd;
2789 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
2790 memset(&ctrl, 0, sizeof(ctrl));
2794 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev)
2795 v4l2_s_ctrl(NULL, sd->ctrl_handler, &ctrl);
2798 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2799 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2800 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2803 static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw)
2806 std = (v4l2_std_id)hdw->std_mask_avail;
2807 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2808 video, querystd, &std);
2812 /* Execute whatever commands are required to update the state of all the
2813 sub-devices so that they match our current control values. */
2814 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2816 struct v4l2_subdev *sd;
2818 pvr2_subdev_update_func fp;
2820 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
2822 if (hdw->tuner_updated || hdw->force_dirty) {
2823 struct tuner_setup setup;
2824 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2826 if (((int)(hdw->tuner_type)) >= 0) {
2827 memset(&setup, 0, sizeof(setup));
2828 setup.addr = ADDR_UNSET;
2829 setup.type = hdw->tuner_type;
2830 setup.mode_mask = T_RADIO | T_ANALOG_TV;
2831 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2832 tuner, s_type_addr, &setup);
2836 if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
2837 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
2838 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2839 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2843 vs = hdw->std_mask_cur;
2844 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2846 pvr2_hdw_cx25840_vbi_hack(hdw);
2848 hdw->tuner_signal_stale = !0;
2849 hdw->cropcap_stale = !0;
2852 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
2853 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
2854 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
2855 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
2856 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
2857 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
2858 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
2859 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
2860 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
2862 if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
2863 struct v4l2_tuner vt;
2864 memset(&vt, 0, sizeof(vt));
2865 vt.type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
2866 V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
2867 vt.audmode = hdw->audiomode_val;
2868 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
2871 if (hdw->freqDirty || hdw->force_dirty) {
2873 struct v4l2_frequency freq;
2874 fv = pvr2_hdw_get_cur_freq(hdw);
2875 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
2876 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
2877 memset(&freq, 0, sizeof(freq));
2878 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
2879 /* ((fv * 1000) / 62500) */
2880 freq.frequency = (fv * 2) / 125;
2882 freq.frequency = fv / 62500;
2884 /* tuner-core currently doesn't seem to care about this, but
2885 let's set it anyway for completeness. */
2886 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
2887 freq.type = V4L2_TUNER_RADIO;
2889 freq.type = V4L2_TUNER_ANALOG_TV;
2892 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
2893 s_frequency, &freq);
2896 if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
2897 struct v4l2_subdev_format format = {
2898 .which = V4L2_SUBDEV_FORMAT_ACTIVE,
2901 format.format.width = hdw->res_hor_val;
2902 format.format.height = hdw->res_ver_val;
2903 format.format.code = MEDIA_BUS_FMT_FIXED;
2904 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)",
2905 format.format.width, format.format.height);
2906 v4l2_device_call_all(&hdw->v4l2_dev, 0, pad, set_fmt,
2910 if (hdw->srate_dirty || hdw->force_dirty) {
2912 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
2914 switch (hdw->srate_val) {
2916 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
2919 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
2922 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
2926 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2927 audio, s_clock_freq, val);
2930 /* Unable to set crop parameters; there is apparently no equivalent
2931 for VIDIOC_S_CROP */
2933 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
2935 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
2936 fp = pvr2_module_update_functions[id];
2941 if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
2942 pvr2_hdw_status_poll(hdw);
2947 /* Figure out if we need to commit control changes. If so, mark internal
2948 state flags to indicate this fact and return true. Otherwise do nothing
2949 else and return false. */
2950 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
2953 struct pvr2_ctrl *cptr;
2955 int commit_flag = hdw->force_dirty;
2957 unsigned int bcnt,ccnt;
2959 for (idx = 0; idx < hdw->control_cnt; idx++) {
2960 cptr = hdw->controls + idx;
2961 if (!cptr->info->is_dirty) continue;
2962 if (!cptr->info->is_dirty(cptr)) continue;
2965 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
2966 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
2969 cptr->info->get_value(cptr,&value);
2970 pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
2972 sizeof(buf)-bcnt,&ccnt);
2974 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
2975 get_ctrl_typename(cptr->info->type));
2976 pvr2_trace(PVR2_TRACE_CTL,
2977 "/*--TRACE_COMMIT--*/ %.*s",
2982 /* Nothing has changed */
2986 hdw->state_pipeline_config = 0;
2987 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
2988 pvr2_hdw_state_sched(hdw);
2994 /* Perform all operations needed to commit all control changes. This must
2995 be performed in synchronization with the pipeline state and is thus
2996 expected to be called as part of the driver's worker thread. Return
2997 true if commit successful, otherwise return false to indicate that
2998 commit isn't possible at this time. */
2999 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
3002 struct pvr2_ctrl *cptr;
3003 int disruptive_change;
3005 if (hdw->input_dirty && hdw->state_pathway_ok &&
3006 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
3007 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
3008 hdw->pathway_state)) {
3009 /* Change of mode being asked for... */
3010 hdw->state_pathway_ok = 0;
3011 trace_stbit("state_pathway_ok", hdw->state_pathway_ok);
3013 if (!hdw->state_pathway_ok) {
3014 /* Can't commit anything until pathway is ok. */
3018 /* Handle some required side effects when the video standard is
3020 if (hdw->std_dirty) {
3023 if (hdw->std_mask_cur & V4L2_STD_525_60) {
3030 /* Rewrite the vertical resolution to be appropriate to the
3031 video standard that has been selected. */
3032 if (nvres != hdw->res_ver_val) {
3033 hdw->res_ver_val = nvres;
3034 hdw->res_ver_dirty = !0;
3036 /* Rewrite the GOP size to be appropriate to the video
3037 standard that has been selected. */
3038 if (gop_size != hdw->enc_ctl_state.video_gop_size) {
3039 struct v4l2_ext_controls cs;
3040 struct v4l2_ext_control c1;
3041 memset(&cs, 0, sizeof(cs));
3042 memset(&c1, 0, sizeof(c1));
3045 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
3046 c1.value = gop_size;
3047 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
3048 VIDIOC_S_EXT_CTRLS);
3052 /* The broadcast decoder can only scale down, so if
3053 * res_*_dirty && crop window < output format ==> enlarge crop.
3055 * The mpeg encoder receives fields of res_hor_val dots and
3056 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3058 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
3059 hdw->cropw_val = hdw->res_hor_val;
3060 hdw->cropw_dirty = !0;
3061 } else if (hdw->cropw_dirty) {
3062 hdw->res_hor_dirty = !0; /* must rescale */
3063 hdw->res_hor_val = min(720, hdw->cropw_val);
3065 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
3066 hdw->croph_val = hdw->res_ver_val;
3067 hdw->croph_dirty = !0;
3068 } else if (hdw->croph_dirty) {
3069 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
3070 hdw->res_ver_dirty = !0;
3071 hdw->res_ver_val = min(nvres, hdw->croph_val);
3074 /* If any of the below has changed, then we can't do the update
3075 while the pipeline is running. Pipeline must be paused first
3076 and decoder -> encoder connection be made quiescent before we
3080 hdw->enc_unsafe_stale ||
3082 hdw->res_ver_dirty ||
3083 hdw->res_hor_dirty ||
3087 (hdw->active_stream_type != hdw->desired_stream_type));
3088 if (disruptive_change && !hdw->state_pipeline_idle) {
3089 /* Pipeline is not idle; we can't proceed. Arrange to
3090 cause pipeline to stop so that we can try this again
3092 hdw->state_pipeline_pause = !0;
3096 if (hdw->srate_dirty) {
3097 /* Write new sample rate into control structure since
3098 * the master copy is stale. We must track srate
3099 * separate from the mpeg control structure because
3100 * other logic also uses this value. */
3101 struct v4l2_ext_controls cs;
3102 struct v4l2_ext_control c1;
3103 memset(&cs,0,sizeof(cs));
3104 memset(&c1,0,sizeof(c1));
3107 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
3108 c1.value = hdw->srate_val;
3109 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
3112 if (hdw->active_stream_type != hdw->desired_stream_type) {
3113 /* Handle any side effects of stream config here */
3114 hdw->active_stream_type = hdw->desired_stream_type;
3117 if (hdw->hdw_desc->signal_routing_scheme ==
3118 PVR2_ROUTING_SCHEME_GOTVIEW) {
3120 /* Handle GOTVIEW audio switching */
3121 pvr2_hdw_gpio_get_out(hdw,&b);
3122 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
3124 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
3127 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
3131 /* Check and update state for all sub-devices. */
3132 pvr2_subdev_update(hdw);
3134 hdw->tuner_updated = 0;
3135 hdw->force_dirty = 0;
3136 for (idx = 0; idx < hdw->control_cnt; idx++) {
3137 cptr = hdw->controls + idx;
3138 if (!cptr->info->clear_dirty) continue;
3139 cptr->info->clear_dirty(cptr);
3142 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
3143 hdw->state_encoder_run) {
3144 /* If encoder isn't running or it can't be touched, then
3145 this will get worked out later when we start the
3147 if (pvr2_encoder_adjust(hdw) < 0) return !0;
3150 hdw->state_pipeline_config = !0;
3151 /* Hardware state may have changed in a way to cause the cropping
3152 capabilities to have changed. So mark it stale, which will
3153 cause a later re-fetch. */
3154 trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
3159 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
3162 LOCK_TAKE(hdw->big_lock);
3163 fl = pvr2_hdw_commit_setup(hdw);
3164 LOCK_GIVE(hdw->big_lock);
3166 return pvr2_hdw_wait(hdw,0);
3170 static void pvr2_hdw_worker_poll(struct work_struct *work)
3173 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
3174 LOCK_TAKE(hdw->big_lock); do {
3175 fl = pvr2_hdw_state_eval(hdw);
3176 } while (0); LOCK_GIVE(hdw->big_lock);
3177 if (fl && hdw->state_func) {
3178 hdw->state_func(hdw->state_data);
3183 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
3185 return wait_event_interruptible(
3186 hdw->state_wait_data,
3187 (hdw->state_stale == 0) &&
3188 (!state || (hdw->master_state != state)));
3192 /* Return name for this driver instance */
3193 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
3199 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
3201 return hdw->hdw_desc->description;
3205 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
3207 return hdw->hdw_desc->shortname;
3211 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
3214 LOCK_TAKE(hdw->ctl_lock); do {
3215 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
3216 result = pvr2_send_request(hdw,
3219 if (result < 0) break;
3220 result = (hdw->cmd_buffer[0] != 0);
3221 } while(0); LOCK_GIVE(hdw->ctl_lock);
3226 /* Execute poll of tuner status */
3227 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
3229 LOCK_TAKE(hdw->big_lock); do {
3230 pvr2_hdw_status_poll(hdw);
3231 } while (0); LOCK_GIVE(hdw->big_lock);
3235 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
3237 if (!hdw->cropcap_stale) {
3240 pvr2_hdw_status_poll(hdw);
3241 if (hdw->cropcap_stale) {
3248 /* Return information about cropping capabilities */
3249 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
3252 LOCK_TAKE(hdw->big_lock);
3253 stat = pvr2_hdw_check_cropcap(hdw);
3255 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
3257 LOCK_GIVE(hdw->big_lock);
3262 /* Return information about the tuner */
3263 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
3265 LOCK_TAKE(hdw->big_lock); do {
3266 if (hdw->tuner_signal_stale) {
3267 pvr2_hdw_status_poll(hdw);
3269 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
3270 } while (0); LOCK_GIVE(hdw->big_lock);
3275 /* Get handle to video output stream */
3276 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
3278 return hp->vid_stream;
3282 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
3284 int nr = pvr2_hdw_get_unit_number(hdw);
3285 LOCK_TAKE(hdw->big_lock);
3287 pr_info("pvrusb2: ================= START STATUS CARD #%d =================\n", nr);
3288 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
3289 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
3290 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
3291 pvr2_hdw_state_log_state(hdw);
3292 pr_info("pvrusb2: ================== END STATUS CARD #%d ==================\n", nr);
3294 LOCK_GIVE(hdw->big_lock);
3298 /* Grab EEPROM contents, needed for direct method. */
3299 #define EEPROM_SIZE 8192
3300 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3301 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
3303 struct i2c_msg msg[2];
3312 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL);
3314 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3315 "Failed to allocate memory required to read eeprom");
3319 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3321 addr = hdw->eeprom_addr;
3322 /* Seems that if the high bit is set, then the *real* eeprom
3323 address is shifted right now bit position (noticed this in
3324 newer PVR USB2 hardware) */
3325 if (addr & 0x80) addr >>= 1;
3327 /* FX2 documentation states that a 16bit-addressed eeprom is
3328 expected if the I2C address is an odd number (yeah, this is
3329 strange but it's what they do) */
3330 mode16 = (addr & 1);
3331 eepromSize = (mode16 ? EEPROM_SIZE : 256);
3332 trace_eeprom("Examining %d byte eeprom at location 0x%x using %d bit addressing",
3338 msg[0].len = mode16 ? 2 : 1;
3341 msg[1].flags = I2C_M_RD;
3343 /* We have to do the actual eeprom data fetch ourselves, because
3344 (1) we're only fetching part of the eeprom, and (2) if we were
3345 getting the whole thing our I2C driver can't grab it in one
3346 pass - which is what tveeprom is otherwise going to attempt */
3347 memset(eeprom,0,EEPROM_SIZE);
3348 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
3350 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
3351 offs = tcnt + (eepromSize - EEPROM_SIZE);
3353 iadd[0] = offs >> 8;
3359 msg[1].buf = eeprom+tcnt;
3360 if ((ret = i2c_transfer(&hdw->i2c_adap,
3361 msg,ARRAY_SIZE(msg))) != 2) {
3362 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3363 "eeprom fetch set offs err=%d",ret);
3372 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
3379 LOCK_TAKE(hdw->big_lock); do {
3380 if ((hdw->fw_buffer == NULL) == !enable_flag) break;
3383 pvr2_trace(PVR2_TRACE_FIRMWARE,
3384 "Cleaning up after CPU firmware fetch");
3385 kfree(hdw->fw_buffer);
3386 hdw->fw_buffer = NULL;
3388 if (hdw->fw_cpu_flag) {
3389 /* Now release the CPU. It will disconnect
3390 and reconnect later. */
3391 pvr2_hdw_cpureset_assert(hdw,0);
3396 hdw->fw_cpu_flag = (mode != 2);
3397 if (hdw->fw_cpu_flag) {
3398 hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000;
3399 pvr2_trace(PVR2_TRACE_FIRMWARE,
3400 "Preparing to suck out CPU firmware (size=%u)",
3402 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
3403 if (!hdw->fw_buffer) {
3408 /* We have to hold the CPU during firmware upload. */
3409 pvr2_hdw_cpureset_assert(hdw,1);
3411 /* download the firmware from address 0000-1fff in 2048
3412 (=0x800) bytes chunk. */
3414 pvr2_trace(PVR2_TRACE_FIRMWARE,
3415 "Grabbing CPU firmware");
3416 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
3417 for(address = 0; address < hdw->fw_size;
3419 ret = usb_control_msg(hdw->usb_dev,pipe,
3422 hdw->fw_buffer+address,
3427 pvr2_trace(PVR2_TRACE_FIRMWARE,
3428 "Done grabbing CPU firmware");
3430 pvr2_trace(PVR2_TRACE_FIRMWARE,
3431 "Sucking down EEPROM contents");
3432 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
3433 if (!hdw->fw_buffer) {
3434 pvr2_trace(PVR2_TRACE_FIRMWARE,
3435 "EEPROM content suck failed.");
3438 hdw->fw_size = EEPROM_SIZE;
3439 pvr2_trace(PVR2_TRACE_FIRMWARE,
3440 "Done sucking down EEPROM contents");
3443 } while (0); LOCK_GIVE(hdw->big_lock);
3447 /* Return true if we're in a mode for retrieval CPU firmware */
3448 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
3450 return hdw->fw_buffer != NULL;
3454 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
3455 char *buf,unsigned int cnt)
3458 LOCK_TAKE(hdw->big_lock); do {
3462 if (!hdw->fw_buffer) {
3467 if (offs >= hdw->fw_size) {
3468 pvr2_trace(PVR2_TRACE_FIRMWARE,
3469 "Read firmware data offs=%d EOF",
3475 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
3477 memcpy(buf,hdw->fw_buffer+offs,cnt);
3479 pvr2_trace(PVR2_TRACE_FIRMWARE,
3480 "Read firmware data offs=%d cnt=%d",
3483 } while (0); LOCK_GIVE(hdw->big_lock);
3489 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
3490 enum pvr2_v4l_type index)
3493 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
3494 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
3495 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
3501 /* Store a v4l minor device number */
3502 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
3503 enum pvr2_v4l_type index,int v)
3506 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;break;
3507 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;break;
3508 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;break;
3514 static void pvr2_ctl_write_complete(struct urb *urb)
3516 struct pvr2_hdw *hdw = urb->context;
3517 hdw->ctl_write_pend_flag = 0;
3518 if (hdw->ctl_read_pend_flag) return;
3519 complete(&hdw->ctl_done);
3523 static void pvr2_ctl_read_complete(struct urb *urb)
3525 struct pvr2_hdw *hdw = urb->context;
3526 hdw->ctl_read_pend_flag = 0;
3527 if (hdw->ctl_write_pend_flag) return;
3528 complete(&hdw->ctl_done);
3532 struct timer_list timer;
3533 struct pvr2_hdw *hdw;
3536 static void pvr2_ctl_timeout(struct timer_list *t)
3538 struct hdw_timer *timer = from_timer(timer, t, timer);
3539 struct pvr2_hdw *hdw = timer->hdw;
3541 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3542 hdw->ctl_timeout_flag = !0;
3543 if (hdw->ctl_write_pend_flag)
3544 usb_unlink_urb(hdw->ctl_write_urb);
3545 if (hdw->ctl_read_pend_flag)
3546 usb_unlink_urb(hdw->ctl_read_urb);
3551 /* Issue a command and get a response from the device. This extended
3552 version includes a probe flag (which if set means that device errors
3553 should not be logged or treated as fatal) and a timeout in jiffies.
3554 This can be used to non-lethally probe the health of endpoint 1. */
3555 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
3556 unsigned int timeout,int probe_fl,
3557 void *write_data,unsigned int write_len,
3558 void *read_data,unsigned int read_len)
3562 struct hdw_timer timer = {
3566 if (!hdw->ctl_lock_held) {
3567 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3568 "Attempted to execute control transfer without lock!!");
3571 if (!hdw->flag_ok && !probe_fl) {
3572 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3573 "Attempted to execute control transfer when device not ok");
3576 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
3578 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3579 "Attempted to execute control transfer when USB is disconnected");
3584 /* Ensure that we have sane parameters */
3585 if (!write_data) write_len = 0;
3586 if (!read_data) read_len = 0;
3587 if (write_len > PVR2_CTL_BUFFSIZE) {
3589 PVR2_TRACE_ERROR_LEGS,
3590 "Attempted to execute %d byte control-write transfer (limit=%d)",
3591 write_len,PVR2_CTL_BUFFSIZE);
3594 if (read_len > PVR2_CTL_BUFFSIZE) {
3596 PVR2_TRACE_ERROR_LEGS,
3597 "Attempted to execute %d byte control-read transfer (limit=%d)",
3598 write_len,PVR2_CTL_BUFFSIZE);
3601 if ((!write_len) && (!read_len)) {
3603 PVR2_TRACE_ERROR_LEGS,
3604 "Attempted to execute null control transfer?");
3609 hdw->cmd_debug_state = 1;
3610 if (write_len && write_data)
3611 hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
3613 hdw->cmd_debug_code = 0;
3614 hdw->cmd_debug_write_len = write_len;
3615 hdw->cmd_debug_read_len = read_len;
3617 /* Initialize common stuff */
3618 init_completion(&hdw->ctl_done);
3619 hdw->ctl_timeout_flag = 0;
3620 hdw->ctl_write_pend_flag = 0;
3621 hdw->ctl_read_pend_flag = 0;
3622 timer_setup_on_stack(&timer.timer, pvr2_ctl_timeout, 0);
3623 timer.timer.expires = jiffies + timeout;
3625 if (write_len && write_data) {
3626 hdw->cmd_debug_state = 2;
3627 /* Transfer write data to internal buffer */
3628 for (idx = 0; idx < write_len; idx++) {
3629 hdw->ctl_write_buffer[idx] =
3630 ((unsigned char *)write_data)[idx];
3632 /* Initiate a write request */
3633 usb_fill_bulk_urb(hdw->ctl_write_urb,
3635 usb_sndbulkpipe(hdw->usb_dev,
3636 PVR2_CTL_WRITE_ENDPOINT),
3637 hdw->ctl_write_buffer,
3639 pvr2_ctl_write_complete,
3641 hdw->ctl_write_urb->actual_length = 0;
3642 hdw->ctl_write_pend_flag = !0;
3643 if (usb_urb_ep_type_check(hdw->ctl_write_urb)) {
3645 PVR2_TRACE_ERROR_LEGS,
3646 "Invalid write control endpoint");
3649 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
3651 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3652 "Failed to submit write-control URB status=%d",
3654 hdw->ctl_write_pend_flag = 0;
3660 hdw->cmd_debug_state = 3;
3661 memset(hdw->ctl_read_buffer,0x43,read_len);
3662 /* Initiate a read request */
3663 usb_fill_bulk_urb(hdw->ctl_read_urb,
3665 usb_rcvbulkpipe(hdw->usb_dev,
3666 PVR2_CTL_READ_ENDPOINT),
3667 hdw->ctl_read_buffer,
3669 pvr2_ctl_read_complete,
3671 hdw->ctl_read_urb->actual_length = 0;
3672 hdw->ctl_read_pend_flag = !0;
3673 if (usb_urb_ep_type_check(hdw->ctl_read_urb)) {
3675 PVR2_TRACE_ERROR_LEGS,
3676 "Invalid read control endpoint");
3679 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
3681 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3682 "Failed to submit read-control URB status=%d",
3684 hdw->ctl_read_pend_flag = 0;
3690 add_timer(&timer.timer);
3692 /* Now wait for all I/O to complete */
3693 hdw->cmd_debug_state = 4;
3694 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
3695 wait_for_completion(&hdw->ctl_done);
3697 hdw->cmd_debug_state = 5;
3700 del_timer_sync(&timer.timer);
3702 hdw->cmd_debug_state = 6;
3705 if (hdw->ctl_timeout_flag) {
3706 status = -ETIMEDOUT;
3708 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3709 "Timed out control-write");
3715 /* Validate results of write request */
3716 if ((hdw->ctl_write_urb->status != 0) &&
3717 (hdw->ctl_write_urb->status != -ENOENT) &&
3718 (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
3719 (hdw->ctl_write_urb->status != -ECONNRESET)) {
3720 /* USB subsystem is reporting some kind of failure
3722 status = hdw->ctl_write_urb->status;
3724 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3725 "control-write URB failure, status=%d",
3730 if (hdw->ctl_write_urb->actual_length < write_len) {
3731 /* Failed to write enough data */
3734 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3735 "control-write URB short, expected=%d got=%d",
3737 hdw->ctl_write_urb->actual_length);
3742 if (read_len && read_data) {
3743 /* Validate results of read request */
3744 if ((hdw->ctl_read_urb->status != 0) &&
3745 (hdw->ctl_read_urb->status != -ENOENT) &&
3746 (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
3747 (hdw->ctl_read_urb->status != -ECONNRESET)) {
3748 /* USB subsystem is reporting some kind of failure
3750 status = hdw->ctl_read_urb->status;
3752 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3753 "control-read URB failure, status=%d",
3758 if (hdw->ctl_read_urb->actual_length < read_len) {
3759 /* Failed to read enough data */
3762 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3763 "control-read URB short, expected=%d got=%d",
3765 hdw->ctl_read_urb->actual_length);
3769 /* Transfer retrieved data out from internal buffer */
3770 for (idx = 0; idx < read_len; idx++) {
3771 ((unsigned char *)read_data)[idx] =
3772 hdw->ctl_read_buffer[idx];
3778 hdw->cmd_debug_state = 0;
3779 if ((status < 0) && (!probe_fl)) {
3780 pvr2_hdw_render_useless(hdw);
3782 destroy_timer_on_stack(&timer.timer);
3788 int pvr2_send_request(struct pvr2_hdw *hdw,
3789 void *write_data,unsigned int write_len,
3790 void *read_data,unsigned int read_len)
3792 return pvr2_send_request_ex(hdw,HZ*4,0,
3793 write_data,write_len,
3794 read_data,read_len);
3798 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
3801 unsigned int cnt = 1;
3802 unsigned int args = 0;
3803 LOCK_TAKE(hdw->ctl_lock);
3804 hdw->cmd_buffer[0] = cmdcode & 0xffu;
3805 args = (cmdcode >> 8) & 0xffu;
3806 args = (args > 2) ? 2 : args;
3809 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
3811 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
3814 if (pvrusb2_debug & PVR2_TRACE_INIT) {
3816 unsigned int ccnt,bcnt;
3820 ccnt = scnprintf(tbuf+bcnt,
3822 "Sending FX2 command 0x%x",cmdcode);
3824 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
3825 if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
3826 ccnt = scnprintf(tbuf+bcnt,
3829 pvr2_fx2cmd_desc[idx].desc);
3835 ccnt = scnprintf(tbuf+bcnt,
3837 " (%u",hdw->cmd_buffer[1]);
3840 ccnt = scnprintf(tbuf+bcnt,
3842 ",%u",hdw->cmd_buffer[2]);
3845 ccnt = scnprintf(tbuf+bcnt,
3850 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
3852 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
3853 LOCK_GIVE(hdw->ctl_lock);
3858 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
3862 LOCK_TAKE(hdw->ctl_lock);
3864 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */
3865 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
3866 hdw->cmd_buffer[5] = 0;
3867 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3868 hdw->cmd_buffer[7] = reg & 0xff;
3871 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
3873 LOCK_GIVE(hdw->ctl_lock);
3879 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
3883 LOCK_TAKE(hdw->ctl_lock);
3885 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */
3886 hdw->cmd_buffer[1] = 0;
3887 hdw->cmd_buffer[2] = 0;
3888 hdw->cmd_buffer[3] = 0;
3889 hdw->cmd_buffer[4] = 0;
3890 hdw->cmd_buffer[5] = 0;
3891 hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
3892 hdw->cmd_buffer[7] = reg & 0xff;
3894 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
3895 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
3897 LOCK_GIVE(hdw->ctl_lock);
3903 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
3905 if (!hdw->flag_ok) return;
3906 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3907 "Device being rendered inoperable");
3908 if (hdw->vid_stream) {
3909 pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
3912 trace_stbit("flag_ok",hdw->flag_ok);
3913 pvr2_hdw_state_sched(hdw);
3917 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
3920 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
3921 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
3923 ret = usb_reset_device(hdw->usb_dev);
3924 usb_unlock_device(hdw->usb_dev);
3926 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3927 "Failed to lock USB device ret=%d",ret);
3929 if (init_pause_msec) {
3930 pvr2_trace(PVR2_TRACE_INFO,
3931 "Waiting %u msec for hardware to settle",
3933 msleep(init_pause_msec);
3939 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
3945 if (!hdw->usb_dev) return;
3947 da = kmalloc(16, GFP_KERNEL);
3950 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3951 "Unable to allocate memory to control CPU reset");
3955 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
3957 da[0] = val ? 0x01 : 0x00;
3959 /* Write the CPUCS register on the 8051. The lsb of the register
3960 is the reset bit; a 1 asserts reset while a 0 clears it. */
3961 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
3962 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ);
3964 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
3965 "cpureset_assert(%d) error=%d",val,ret);
3966 pvr2_hdw_render_useless(hdw);
3973 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
3975 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
3979 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
3981 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
3986 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
3988 pvr2_trace(PVR2_TRACE_INIT,
3989 "Requesting decoder reset");
3990 if (hdw->decoder_client_id) {
3991 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
3993 pvr2_hdw_cx25840_vbi_hack(hdw);
3996 pvr2_trace(PVR2_TRACE_INIT,
3997 "Unable to reset decoder: nothing attached");
4002 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
4005 return pvr2_issue_simple_cmd(hdw,
4006 FX2CMD_HCW_DEMOD_RESETIN |
4008 ((onoff ? 1 : 0) << 16));
4012 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
4015 return pvr2_issue_simple_cmd(hdw,(onoff ?
4016 FX2CMD_ONAIR_DTV_POWER_ON :
4017 FX2CMD_ONAIR_DTV_POWER_OFF));
4021 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
4024 return pvr2_issue_simple_cmd(hdw,(onoff ?
4025 FX2CMD_ONAIR_DTV_STREAMING_ON :
4026 FX2CMD_ONAIR_DTV_STREAMING_OFF));
4030 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
4033 /* Compare digital/analog desired setting with current setting. If
4034 they don't match, fix it... */
4035 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
4036 if (cmode == hdw->pathway_state) {
4037 /* They match; nothing to do */
4041 switch (hdw->hdw_desc->digital_control_scheme) {
4042 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4043 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
4044 if (cmode == PVR2_PATHWAY_ANALOG) {
4045 /* If moving to analog mode, also force the decoder
4046 to reset. If no decoder is attached, then it's
4047 ok to ignore this because if/when the decoder
4048 attaches, it will reset itself at that time. */
4049 pvr2_hdw_cmd_decoder_reset(hdw);
4052 case PVR2_DIGITAL_SCHEME_ONAIR:
4053 /* Supposedly we should always have the power on whether in
4054 digital or analog mode. But for now do what appears to
4056 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
4061 pvr2_hdw_untrip_unlocked(hdw);
4062 hdw->pathway_state = cmode;
4066 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
4068 /* change some GPIO data
4070 * note: bit d7 of dir appears to control the LED,
4071 * so we shut it off here.
4075 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
4077 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
4079 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
4083 typedef void (*led_method_func)(struct pvr2_hdw *,int);
4085 static led_method_func led_methods[] = {
4086 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
4091 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
4093 unsigned int scheme_id;
4096 if ((!onoff) == (!hdw->led_on)) return;
4098 hdw->led_on = onoff != 0;
4100 scheme_id = hdw->hdw_desc->led_scheme;
4101 if (scheme_id < ARRAY_SIZE(led_methods)) {
4102 fp = led_methods[scheme_id];
4107 if (fp) (*fp)(hdw,onoff);
4111 /* Stop / start video stream transport */
4112 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
4116 /* If we're in analog mode, then just issue the usual analog
4118 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4119 return pvr2_issue_simple_cmd(hdw,
4121 FX2CMD_STREAMING_ON :
4122 FX2CMD_STREAMING_OFF));
4123 /*Note: Not reached */
4126 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
4127 /* Whoops, we don't know what mode we're in... */
4131 /* To get here we have to be in digital mode. The mechanism here
4132 is unfortunately different for different vendors. So we switch
4133 on the device's digital scheme attribute in order to figure out
4135 switch (hdw->hdw_desc->digital_control_scheme) {
4136 case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
4137 return pvr2_issue_simple_cmd(hdw,
4139 FX2CMD_HCW_DTV_STREAMING_ON :
4140 FX2CMD_HCW_DTV_STREAMING_OFF));
4141 case PVR2_DIGITAL_SCHEME_ONAIR:
4142 ret = pvr2_issue_simple_cmd(hdw,
4144 FX2CMD_STREAMING_ON :
4145 FX2CMD_STREAMING_OFF));
4146 if (ret) return ret;
4147 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
4154 /* Evaluate whether or not state_pathway_ok can change */
4155 static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
4157 if (hdw->state_pathway_ok) {
4158 /* Nothing to do if pathway is already ok */
4161 if (!hdw->state_pipeline_idle) {
4162 /* Not allowed to change anything if pipeline is not idle */
4165 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
4166 hdw->state_pathway_ok = !0;
4167 trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
4172 /* Evaluate whether or not state_encoder_ok can change */
4173 static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
4175 if (hdw->state_encoder_ok) return 0;
4176 if (hdw->flag_tripped) return 0;
4177 if (hdw->state_encoder_run) return 0;
4178 if (hdw->state_encoder_config) return 0;
4179 if (hdw->state_decoder_run) return 0;
4180 if (hdw->state_usbstream_run) return 0;
4181 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
4182 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
4183 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
4187 if (pvr2_upload_firmware2(hdw) < 0) {
4188 hdw->flag_tripped = !0;
4189 trace_stbit("flag_tripped",hdw->flag_tripped);
4192 hdw->state_encoder_ok = !0;
4193 trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
4198 /* Evaluate whether or not state_encoder_config can change */
4199 static int state_eval_encoder_config(struct pvr2_hdw *hdw)
4201 if (hdw->state_encoder_config) {
4202 if (hdw->state_encoder_ok) {
4203 if (hdw->state_pipeline_req &&
4204 !hdw->state_pipeline_pause) return 0;
4206 hdw->state_encoder_config = 0;
4207 hdw->state_encoder_waitok = 0;
4208 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4209 /* paranoia - solve race if timer just completed */
4210 del_timer_sync(&hdw->encoder_wait_timer);
4212 if (!hdw->state_pathway_ok ||
4213 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4214 !hdw->state_encoder_ok ||
4215 !hdw->state_pipeline_idle ||
4216 hdw->state_pipeline_pause ||
4217 !hdw->state_pipeline_req ||
4218 !hdw->state_pipeline_config) {
4219 /* We must reset the enforced wait interval if
4220 anything has happened that might have disturbed
4221 the encoder. This should be a rare case. */
4222 if (timer_pending(&hdw->encoder_wait_timer)) {
4223 del_timer_sync(&hdw->encoder_wait_timer);
4225 if (hdw->state_encoder_waitok) {
4226 /* Must clear the state - therefore we did
4227 something to a state bit and must also
4229 hdw->state_encoder_waitok = 0;
4230 trace_stbit("state_encoder_waitok",
4231 hdw->state_encoder_waitok);
4236 if (!hdw->state_encoder_waitok) {
4237 if (!timer_pending(&hdw->encoder_wait_timer)) {
4238 /* waitok flag wasn't set and timer isn't
4239 running. Check flag once more to avoid
4240 a race then start the timer. This is
4241 the point when we measure out a minimal
4242 quiet interval before doing something to
4244 if (!hdw->state_encoder_waitok) {
4245 hdw->encoder_wait_timer.expires =
4246 jiffies + msecs_to_jiffies(
4247 TIME_MSEC_ENCODER_WAIT);
4248 add_timer(&hdw->encoder_wait_timer);
4251 /* We can't continue until we know we have been
4252 quiet for the interval measured by this
4256 pvr2_encoder_configure(hdw);
4257 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
4259 trace_stbit("state_encoder_config",hdw->state_encoder_config);
4264 /* Return true if the encoder should not be running. */
4265 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
4267 if (!hdw->state_encoder_ok) {
4268 /* Encoder isn't healthy at the moment, so stop it. */
4271 if (!hdw->state_pathway_ok) {
4272 /* Mode is not understood at the moment (i.e. it wants to
4273 change), so encoder must be stopped. */
4277 switch (hdw->pathway_state) {
4278 case PVR2_PATHWAY_ANALOG:
4279 if (!hdw->state_decoder_run) {
4280 /* We're in analog mode and the decoder is not
4281 running; thus the encoder should be stopped as
4286 case PVR2_PATHWAY_DIGITAL:
4287 if (hdw->state_encoder_runok) {
4288 /* This is a funny case. We're in digital mode so
4289 really the encoder should be stopped. However
4290 if it really is running, only kill it after
4291 runok has been set. This gives a chance for the
4292 onair quirk to function (encoder must run
4293 briefly first, at least once, before onair
4294 digital streaming can work). */
4299 /* Unknown mode; so encoder should be stopped. */
4303 /* If we get here, we haven't found a reason to stop the
4309 /* Return true if the encoder should be running. */
4310 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
4312 if (!hdw->state_encoder_ok) {
4313 /* Don't run the encoder if it isn't healthy... */
4316 if (!hdw->state_pathway_ok) {
4317 /* Don't run the encoder if we don't (yet) know what mode
4318 we need to be in... */
4322 switch (hdw->pathway_state) {
4323 case PVR2_PATHWAY_ANALOG:
4324 if (hdw->state_decoder_run && hdw->state_decoder_ready) {
4325 /* In analog mode, if the decoder is running, then
4330 case PVR2_PATHWAY_DIGITAL:
4331 if ((hdw->hdw_desc->digital_control_scheme ==
4332 PVR2_DIGITAL_SCHEME_ONAIR) &&
4333 !hdw->state_encoder_runok) {
4334 /* This is a quirk. OnAir hardware won't stream
4335 digital until the encoder has been run at least
4336 once, for a minimal period of time (empiricially
4337 measured to be 1/4 second). So if we're on
4338 OnAir hardware and the encoder has never been
4339 run at all, then start the encoder. Normal
4340 state machine logic in the driver will
4341 automatically handle the remaining bits. */
4346 /* For completeness (unknown mode; encoder won't run ever) */
4349 /* If we get here, then we haven't found any reason to run the
4350 encoder, so don't run it. */
4355 /* Evaluate whether or not state_encoder_run can change */
4356 static int state_eval_encoder_run(struct pvr2_hdw *hdw)
4358 if (hdw->state_encoder_run) {
4359 if (!state_check_disable_encoder_run(hdw)) return 0;
4360 if (hdw->state_encoder_ok) {
4361 del_timer_sync(&hdw->encoder_run_timer);
4362 if (pvr2_encoder_stop(hdw) < 0) return !0;
4364 hdw->state_encoder_run = 0;
4366 if (!state_check_enable_encoder_run(hdw)) return 0;
4367 if (pvr2_encoder_start(hdw) < 0) return !0;
4368 hdw->state_encoder_run = !0;
4369 if (!hdw->state_encoder_runok) {
4370 hdw->encoder_run_timer.expires = jiffies +
4371 msecs_to_jiffies(TIME_MSEC_ENCODER_OK);
4372 add_timer(&hdw->encoder_run_timer);
4375 trace_stbit("state_encoder_run",hdw->state_encoder_run);
4380 /* Timeout function for quiescent timer. */
4381 static void pvr2_hdw_quiescent_timeout(struct timer_list *t)
4383 struct pvr2_hdw *hdw = from_timer(hdw, t, quiescent_timer);
4384 hdw->state_decoder_quiescent = !0;
4385 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4386 hdw->state_stale = !0;
4387 schedule_work(&hdw->workpoll);
4391 /* Timeout function for decoder stabilization timer. */
4392 static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *t)
4394 struct pvr2_hdw *hdw = from_timer(hdw, t, decoder_stabilization_timer);
4395 hdw->state_decoder_ready = !0;
4396 trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4397 hdw->state_stale = !0;
4398 schedule_work(&hdw->workpoll);
4402 /* Timeout function for encoder wait timer. */
4403 static void pvr2_hdw_encoder_wait_timeout(struct timer_list *t)
4405 struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_wait_timer);
4406 hdw->state_encoder_waitok = !0;
4407 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
4408 hdw->state_stale = !0;
4409 schedule_work(&hdw->workpoll);
4413 /* Timeout function for encoder run timer. */
4414 static void pvr2_hdw_encoder_run_timeout(struct timer_list *t)
4416 struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_run_timer);
4417 if (!hdw->state_encoder_runok) {
4418 hdw->state_encoder_runok = !0;
4419 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
4420 hdw->state_stale = !0;
4421 schedule_work(&hdw->workpoll);
4426 /* Evaluate whether or not state_decoder_run can change */
4427 static int state_eval_decoder_run(struct pvr2_hdw *hdw)
4429 if (hdw->state_decoder_run) {
4430 if (hdw->state_encoder_ok) {
4431 if (hdw->state_pipeline_req &&
4432 !hdw->state_pipeline_pause &&
4433 hdw->state_pathway_ok) return 0;
4435 if (!hdw->flag_decoder_missed) {
4436 pvr2_decoder_enable(hdw,0);
4438 hdw->state_decoder_quiescent = 0;
4439 hdw->state_decoder_run = 0;
4440 /* paranoia - solve race if timer(s) just completed */
4441 del_timer_sync(&hdw->quiescent_timer);
4442 /* Kill the stabilization timer, in case we're killing the
4443 encoder before the previous stabilization interval has
4444 been properly timed. */
4445 del_timer_sync(&hdw->decoder_stabilization_timer);
4446 hdw->state_decoder_ready = 0;
4448 if (!hdw->state_decoder_quiescent) {
4449 if (!timer_pending(&hdw->quiescent_timer)) {
4450 /* We don't do something about the
4451 quiescent timer until right here because
4452 we also want to catch cases where the
4453 decoder was already not running (like
4454 after initialization) as opposed to
4455 knowing that we had just stopped it.
4456 The second flag check is here to cover a
4457 race - the timer could have run and set
4458 this flag just after the previous check
4459 but before we did the pending check. */
4460 if (!hdw->state_decoder_quiescent) {
4461 hdw->quiescent_timer.expires =
4462 jiffies + msecs_to_jiffies(
4463 TIME_MSEC_DECODER_WAIT);
4464 add_timer(&hdw->quiescent_timer);
4467 /* Don't allow decoder to start again until it has
4468 been quiesced first. This little detail should
4469 hopefully further stabilize the encoder. */
4472 if (!hdw->state_pathway_ok ||
4473 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
4474 !hdw->state_pipeline_req ||
4475 hdw->state_pipeline_pause ||
4476 !hdw->state_pipeline_config ||
4477 !hdw->state_encoder_config ||
4478 !hdw->state_encoder_ok) return 0;
4479 del_timer_sync(&hdw->quiescent_timer);
4480 if (hdw->flag_decoder_missed) return 0;
4481 if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
4482 hdw->state_decoder_quiescent = 0;
4483 hdw->state_decoder_ready = 0;
4484 hdw->state_decoder_run = !0;
4485 if (hdw->decoder_client_id == PVR2_CLIENT_ID_SAA7115) {
4486 hdw->decoder_stabilization_timer.expires =
4487 jiffies + msecs_to_jiffies(
4488 TIME_MSEC_DECODER_STABILIZATION_WAIT);
4489 add_timer(&hdw->decoder_stabilization_timer);
4491 hdw->state_decoder_ready = !0;
4494 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
4495 trace_stbit("state_decoder_run",hdw->state_decoder_run);
4496 trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
4501 /* Evaluate whether or not state_usbstream_run can change */
4502 static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
4504 if (hdw->state_usbstream_run) {
4506 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4507 fl = (hdw->state_encoder_ok &&
4508 hdw->state_encoder_run);
4509 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4510 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4511 fl = hdw->state_encoder_ok;
4514 hdw->state_pipeline_req &&
4515 !hdw->state_pipeline_pause &&
4516 hdw->state_pathway_ok) {
4519 pvr2_hdw_cmd_usbstream(hdw,0);
4520 hdw->state_usbstream_run = 0;
4522 if (!hdw->state_pipeline_req ||
4523 hdw->state_pipeline_pause ||
4524 !hdw->state_pathway_ok) return 0;
4525 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
4526 if (!hdw->state_encoder_ok ||
4527 !hdw->state_encoder_run) return 0;
4528 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
4529 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
4530 if (!hdw->state_encoder_ok) return 0;
4531 if (hdw->state_encoder_run) return 0;
4532 if (hdw->hdw_desc->digital_control_scheme ==
4533 PVR2_DIGITAL_SCHEME_ONAIR) {
4534 /* OnAir digital receivers won't stream
4535 unless the analog encoder has run first.
4536 Why? I have no idea. But don't even
4537 try until we know the analog side is
4538 known to have run. */
4539 if (!hdw->state_encoder_runok) return 0;
4542 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
4543 hdw->state_usbstream_run = !0;
4545 trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
4550 /* Attempt to configure pipeline, if needed */
4551 static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
4553 if (hdw->state_pipeline_config ||
4554 hdw->state_pipeline_pause) return 0;
4555 pvr2_hdw_commit_execute(hdw);
4560 /* Update pipeline idle and pipeline pause tracking states based on other
4561 inputs. This must be called whenever the other relevant inputs have
4563 static int state_update_pipeline_state(struct pvr2_hdw *hdw)
4567 /* Update pipeline state */
4568 st = !(hdw->state_encoder_run ||
4569 hdw->state_decoder_run ||
4570 hdw->state_usbstream_run ||
4571 (!hdw->state_decoder_quiescent));
4572 if (!st != !hdw->state_pipeline_idle) {
4573 hdw->state_pipeline_idle = st;
4576 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
4577 hdw->state_pipeline_pause = 0;
4584 typedef int (*state_eval_func)(struct pvr2_hdw *);
4586 /* Set of functions to be run to evaluate various states in the driver. */
4587 static const state_eval_func eval_funcs[] = {
4588 state_eval_pathway_ok,
4589 state_eval_pipeline_config,
4590 state_eval_encoder_ok,
4591 state_eval_encoder_config,
4592 state_eval_decoder_run,
4593 state_eval_encoder_run,
4594 state_eval_usbstream_run,
4598 /* Process various states and return true if we did anything interesting. */
4599 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
4602 int state_updated = 0;
4605 if (!hdw->state_stale) return 0;
4606 if ((hdw->fw1_state != FW1_STATE_OK) ||
4608 hdw->state_stale = 0;
4611 /* This loop is the heart of the entire driver. It keeps trying to
4612 evaluate various bits of driver state until nothing changes for
4613 one full iteration. Each "bit of state" tracks some global
4614 aspect of the driver, e.g. whether decoder should run, if
4615 pipeline is configured, usb streaming is on, etc. We separately
4616 evaluate each of those questions based on other driver state to
4617 arrive at the correct running configuration. */
4620 state_update_pipeline_state(hdw);
4621 /* Iterate over each bit of state */
4622 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
4623 if ((*eval_funcs[i])(hdw)) {
4626 state_update_pipeline_state(hdw);
4629 } while (check_flag && hdw->flag_ok);
4630 hdw->state_stale = 0;
4631 trace_stbit("state_stale",hdw->state_stale);
4632 return state_updated;
4636 static unsigned int print_input_mask(unsigned int msk,
4637 char *buf,unsigned int acnt)
4639 unsigned int idx,ccnt;
4640 unsigned int tcnt = 0;
4641 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
4642 if (!((1 << idx) & msk)) continue;
4643 ccnt = scnprintf(buf+tcnt,
4647 control_values_input[idx]);
4654 static const char *pvr2_pathway_state_name(int id)
4657 case PVR2_PATHWAY_ANALOG: return "analog";
4658 case PVR2_PATHWAY_DIGITAL: return "digital";
4659 default: return "unknown";
4664 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
4665 char *buf,unsigned int acnt)
4671 "driver:%s%s%s%s%s <mode=%s>",
4672 (hdw->flag_ok ? " <ok>" : " <fail>"),
4673 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
4674 (hdw->flag_disconnected ? " <disconnected>" :
4676 (hdw->flag_tripped ? " <tripped>" : ""),
4677 (hdw->flag_decoder_missed ? " <no decoder>" : ""),
4678 pvr2_pathway_state_name(hdw->pathway_state));
4683 "pipeline:%s%s%s%s",
4684 (hdw->state_pipeline_idle ? " <idle>" : ""),
4685 (hdw->state_pipeline_config ?
4686 " <configok>" : " <stale>"),
4687 (hdw->state_pipeline_req ? " <req>" : ""),
4688 (hdw->state_pipeline_pause ? " <pause>" : ""));
4692 "worker:%s%s%s%s%s%s%s",
4693 (hdw->state_decoder_run ?
4694 (hdw->state_decoder_ready ?
4695 "<decode:run>" : " <decode:start>") :
4696 (hdw->state_decoder_quiescent ?
4697 "" : " <decode:stop>")),
4698 (hdw->state_decoder_quiescent ?
4699 " <decode:quiescent>" : ""),
4700 (hdw->state_encoder_ok ?
4701 "" : " <encode:init>"),
4702 (hdw->state_encoder_run ?
4703 (hdw->state_encoder_runok ?
4705 " <encode:firstrun>") :
4706 (hdw->state_encoder_runok ?
4708 " <encode:virgin>")),
4709 (hdw->state_encoder_config ?
4710 " <encode:configok>" :
4711 (hdw->state_encoder_waitok ?
4712 "" : " <encode:waitok>")),
4713 (hdw->state_usbstream_run ?
4714 " <usb:run>" : " <usb:stop>"),
4715 (hdw->state_pathway_ok ?
4716 " <pathway:ok>" : ""));
4721 pvr2_get_state_name(hdw->master_state));
4723 unsigned int tcnt = 0;
4726 ccnt = scnprintf(buf,
4728 "Hardware supported inputs: ");
4730 tcnt += print_input_mask(hdw->input_avail_mask,
4733 if (hdw->input_avail_mask != hdw->input_allowed_mask) {
4734 ccnt = scnprintf(buf+tcnt,
4736 "; allowed inputs: ");
4738 tcnt += print_input_mask(hdw->input_allowed_mask,
4745 struct pvr2_stream_stats stats;
4746 if (!hdw->vid_stream) break;
4747 pvr2_stream_get_stats(hdw->vid_stream,
4752 "Bytes streamed=%u URBs: queued=%u idle=%u ready=%u processed=%u failed=%u",
4753 stats.bytes_processed,
4754 stats.buffers_in_queue,
4755 stats.buffers_in_idle,
4756 stats.buffers_in_ready,
4757 stats.buffers_processed,
4758 stats.buffers_failed);
4761 unsigned int id = hdw->ir_scheme_active;
4762 return scnprintf(buf, acnt, "ir scheme: id=%d %s", id,
4763 (id >= ARRAY_SIZE(ir_scheme_names) ?
4764 "?" : ir_scheme_names[id]));
4772 /* Generate report containing info about attached sub-devices and attached
4773 i2c clients, including an indication of which attached i2c clients are
4774 actually sub-devices. */
4775 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
4776 char *buf, unsigned int acnt)
4778 struct v4l2_subdev *sd;
4779 unsigned int tcnt = 0;
4781 struct i2c_client *client;
4785 ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
4787 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
4790 if (id < ARRAY_SIZE(module_names)) p = module_names[id];
4792 ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s:", p);
4795 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4796 " (unknown id=%u):", id);
4799 client = v4l2_get_subdevdata(sd);
4801 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4802 " %s @ %02x\n", client->name,
4806 ccnt = scnprintf(buf + tcnt, acnt - tcnt,
4807 " no i2c client\n");
4815 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
4816 char *buf,unsigned int acnt)
4818 unsigned int bcnt,ccnt,idx;
4820 LOCK_TAKE(hdw->big_lock);
4821 for (idx = 0; ; idx++) {
4822 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
4824 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4826 buf[0] = '\n'; ccnt = 1;
4827 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4829 ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
4830 bcnt += ccnt; acnt -= ccnt; buf += ccnt;
4831 LOCK_GIVE(hdw->big_lock);
4836 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
4839 unsigned int idx, ccnt;
4840 unsigned int lcnt, ucnt;
4842 for (idx = 0; ; idx++) {
4843 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
4845 pr_info("%s %.*s\n", hdw->name, ccnt, buf);
4847 ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
4848 if (ccnt >= sizeof(buf))
4852 while (ucnt < ccnt) {
4854 while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
4857 pr_info("%s %.*s\n", hdw->name, lcnt, buf + ucnt);
4863 /* Evaluate and update the driver's current state, taking various actions
4864 as appropriate for the update. */
4865 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
4868 int state_updated = 0;
4869 int callback_flag = 0;
4872 pvr2_trace(PVR2_TRACE_STBITS,
4873 "Drive state check START");
4874 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4875 pvr2_hdw_state_log_state(hdw);
4878 /* Process all state and get back over disposition */
4879 state_updated = pvr2_hdw_state_update(hdw);
4881 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
4883 /* Update master state based upon all other states. */
4884 if (!hdw->flag_ok) {
4885 st = PVR2_STATE_DEAD;
4886 } else if (hdw->fw1_state != FW1_STATE_OK) {
4887 st = PVR2_STATE_COLD;
4888 } else if ((analog_mode ||
4889 hdw->hdw_desc->flag_digital_requires_cx23416) &&
4890 !hdw->state_encoder_ok) {
4891 st = PVR2_STATE_WARM;
4892 } else if (hdw->flag_tripped ||
4893 (analog_mode && hdw->flag_decoder_missed)) {
4894 st = PVR2_STATE_ERROR;
4895 } else if (hdw->state_usbstream_run &&
4897 (hdw->state_encoder_run && hdw->state_decoder_run))) {
4898 st = PVR2_STATE_RUN;
4900 st = PVR2_STATE_READY;
4902 if (hdw->master_state != st) {
4903 pvr2_trace(PVR2_TRACE_STATE,
4904 "Device state change from %s to %s",
4905 pvr2_get_state_name(hdw->master_state),
4906 pvr2_get_state_name(st));
4907 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
4908 hdw->master_state = st;
4912 if (state_updated) {
4913 /* Trigger anyone waiting on any state changes here. */
4914 wake_up(&hdw->state_wait_data);
4917 if (pvrusb2_debug & PVR2_TRACE_STBITS) {
4918 pvr2_hdw_state_log_state(hdw);
4920 pvr2_trace(PVR2_TRACE_STBITS,
4921 "Drive state check DONE callback=%d",callback_flag);
4923 return callback_flag;
4927 /* Cause kernel thread to check / update driver state */
4928 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
4930 if (hdw->state_stale) return;
4931 hdw->state_stale = !0;
4932 trace_stbit("state_stale",hdw->state_stale);
4933 schedule_work(&hdw->workpoll);
4937 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
4939 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
4943 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
4945 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
4949 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
4951 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
4955 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
4960 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
4961 if (ret) return ret;
4962 nval = (cval & ~msk) | (val & msk);
4963 pvr2_trace(PVR2_TRACE_GPIO,
4964 "GPIO direction changing 0x%x:0x%x from 0x%x to 0x%x",
4968 pvr2_trace(PVR2_TRACE_GPIO,
4969 "GPIO direction changing to 0x%x",nval);
4971 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
4975 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
4980 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
4981 if (ret) return ret;
4982 nval = (cval & ~msk) | (val & msk);
4983 pvr2_trace(PVR2_TRACE_GPIO,
4984 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
4988 pvr2_trace(PVR2_TRACE_GPIO,
4989 "GPIO output changing to 0x%x",nval);
4991 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
4995 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
4997 struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
4998 memset(vtp, 0, sizeof(*vtp));
4999 vtp->type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
5000 V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
5001 hdw->tuner_signal_stale = 0;
5002 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5003 using v4l2-subdev - therefore we can't support that AT ALL right
5004 now. (Of course, no sub-drivers seem to implement it either.
5005 But now it's a a chicken and egg problem...) */
5006 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner, vtp);
5007 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll type=%u strength=%u audio=0x%x cap=0x%x low=%u hi=%u",
5009 vtp->signal, vtp->rxsubchans, vtp->capability,
5010 vtp->rangelow, vtp->rangehigh);
5012 /* We have to do this to avoid getting into constant polling if
5013 there's nobody to answer a poll of cropcap info. */
5014 hdw->cropcap_stale = 0;
5018 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
5020 return hdw->input_avail_mask;
5024 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
5026 return hdw->input_allowed_mask;
5030 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
5032 if (hdw->input_val != v) {
5034 hdw->input_dirty = !0;
5037 /* Handle side effects - if we switch to a mode that needs the RF
5038 tuner, then select the right frequency choice as well and mark
5040 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
5041 hdw->freqSelector = 0;
5042 hdw->freqDirty = !0;
5043 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
5044 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
5045 hdw->freqSelector = 1;
5046 hdw->freqDirty = !0;
5052 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
5053 unsigned int change_mask,
5054 unsigned int change_val)
5057 unsigned int nv,m,idx;
5058 LOCK_TAKE(hdw->big_lock);
5060 nv = hdw->input_allowed_mask & ~change_mask;
5061 nv |= (change_val & change_mask);
5062 nv &= hdw->input_avail_mask;
5064 /* No legal modes left; return error instead. */
5068 hdw->input_allowed_mask = nv;
5069 if ((1 << hdw->input_val) & hdw->input_allowed_mask) {
5070 /* Current mode is still in the allowed mask, so
5074 /* Select and switch to a mode that is still in the allowed
5076 if (!hdw->input_allowed_mask) {
5077 /* Nothing legal; give up */
5080 m = hdw->input_allowed_mask;
5081 for (idx = 0; idx < (sizeof(m) << 3); idx++) {
5082 if (!((1 << idx) & m)) continue;
5083 pvr2_hdw_set_input(hdw,idx);
5087 LOCK_GIVE(hdw->big_lock);
5092 /* Find I2C address of eeprom */
5093 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
5096 LOCK_TAKE(hdw->ctl_lock); do {
5097 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
5098 result = pvr2_send_request(hdw,
5101 if (result < 0) break;
5102 result = hdw->cmd_buffer[0];
5103 } while(0); LOCK_GIVE(hdw->ctl_lock);