4 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <linux/errno.h>
22 #include <linux/string.h>
23 #include <linux/slab.h>
24 #include <linux/module.h>
25 #include <linux/firmware.h>
26 #include <linux/videodev2.h>
27 #include <media/v4l2-common.h>
28 #include <media/tuner.h>
30 #include "pvrusb2-std.h"
31 #include "pvrusb2-util.h"
32 #include "pvrusb2-hdw.h"
33 #include "pvrusb2-i2c-core.h"
34 #include "pvrusb2-eeprom.h"
35 #include "pvrusb2-hdw-internal.h"
36 #include "pvrusb2-encoder.h"
37 #include "pvrusb2-debug.h"
38 #include "pvrusb2-fx2-cmd.h"
39 #include "pvrusb2-wm8775.h"
40 #include "pvrusb2-video-v4l.h"
41 #include "pvrusb2-cx2584x-v4l.h"
42 #include "pvrusb2-cs53l32a.h"
43 #include "pvrusb2-audio.h"
45 #define TV_MIN_FREQ 55250000L
46 #define TV_MAX_FREQ 850000000L
48 /* This defines a minimum interval that the decoder must remain quiet
49 before we are allowed to start it running. */
50 #define TIME_MSEC_DECODER_WAIT 50
52 /* This defines a minimum interval that the decoder must be allowed to run
53 before we can safely begin using its streaming output. */
54 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
56 /* This defines a minimum interval that the encoder must remain quiet
57 before we are allowed to configure it. */
58 #define TIME_MSEC_ENCODER_WAIT 50
60 /* This defines the minimum interval that the encoder must successfully run
61 before we consider that the encoder has run at least once since its
62 firmware has been loaded. This measurement is in important for cases
63 where we can't do something until we know that the encoder has been run
65 #define TIME_MSEC_ENCODER_OK 250
67 static struct pvr2_hdw
*unit_pointers
[PVR_NUM
] = {[ 0 ... PVR_NUM
-1 ] = NULL
};
68 static DEFINE_MUTEX(pvr2_unit_mtx
);
71 static int procreload
;
72 static int tuner
[PVR_NUM
] = { [0 ... PVR_NUM
-1] = -1 };
73 static int tolerance
[PVR_NUM
] = { [0 ... PVR_NUM
-1] = 0 };
74 static int video_std
[PVR_NUM
] = { [0 ... PVR_NUM
-1] = 0 };
75 static int init_pause_msec
;
77 module_param(ctlchg
, int, S_IRUGO
|S_IWUSR
);
78 MODULE_PARM_DESC(ctlchg
, "0=optimize ctl change 1=always accept new ctl value");
79 module_param(init_pause_msec
, int, S_IRUGO
|S_IWUSR
);
80 MODULE_PARM_DESC(init_pause_msec
, "hardware initialization settling delay");
81 module_param(procreload
, int, S_IRUGO
|S_IWUSR
);
82 MODULE_PARM_DESC(procreload
,
83 "Attempt init failure recovery with firmware reload");
84 module_param_array(tuner
, int, NULL
, 0444);
85 MODULE_PARM_DESC(tuner
,"specify installed tuner type");
86 module_param_array(video_std
, int, NULL
, 0444);
87 MODULE_PARM_DESC(video_std
,"specify initial video standard");
88 module_param_array(tolerance
, int, NULL
, 0444);
89 MODULE_PARM_DESC(tolerance
,"specify stream error tolerance");
91 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
92 static int default_tv_freq
= 61250000L;
93 /* 104.3 MHz, a usable FM station for my area */
94 static int default_radio_freq
= 104300000L;
96 module_param_named(tv_freq
, default_tv_freq
, int, 0444);
97 MODULE_PARM_DESC(tv_freq
, "specify initial television frequency");
98 module_param_named(radio_freq
, default_radio_freq
, int, 0444);
99 MODULE_PARM_DESC(radio_freq
, "specify initial radio frequency");
101 #define PVR2_CTL_WRITE_ENDPOINT 0x01
102 #define PVR2_CTL_READ_ENDPOINT 0x81
104 #define PVR2_GPIO_IN 0x9008
105 #define PVR2_GPIO_OUT 0x900c
106 #define PVR2_GPIO_DIR 0x9020
108 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
110 #define PVR2_FIRMWARE_ENDPOINT 0x02
112 /* size of a firmware chunk */
113 #define FIRMWARE_CHUNK_SIZE 0x2000
115 typedef void (*pvr2_subdev_update_func
)(struct pvr2_hdw
*,
116 struct v4l2_subdev
*);
118 static const pvr2_subdev_update_func pvr2_module_update_functions
[] = {
119 [PVR2_CLIENT_ID_WM8775
] = pvr2_wm8775_subdev_update
,
120 [PVR2_CLIENT_ID_SAA7115
] = pvr2_saa7115_subdev_update
,
121 [PVR2_CLIENT_ID_MSP3400
] = pvr2_msp3400_subdev_update
,
122 [PVR2_CLIENT_ID_CX25840
] = pvr2_cx25840_subdev_update
,
123 [PVR2_CLIENT_ID_CS53L32A
] = pvr2_cs53l32a_subdev_update
,
126 static const char *module_names
[] = {
127 [PVR2_CLIENT_ID_MSP3400
] = "msp3400",
128 [PVR2_CLIENT_ID_CX25840
] = "cx25840",
129 [PVR2_CLIENT_ID_SAA7115
] = "saa7115",
130 [PVR2_CLIENT_ID_TUNER
] = "tuner",
131 [PVR2_CLIENT_ID_DEMOD
] = "tuner",
132 [PVR2_CLIENT_ID_CS53L32A
] = "cs53l32a",
133 [PVR2_CLIENT_ID_WM8775
] = "wm8775",
137 static const unsigned char *module_i2c_addresses
[] = {
138 [PVR2_CLIENT_ID_TUNER
] = "\x60\x61\x62\x63",
139 [PVR2_CLIENT_ID_DEMOD
] = "\x43",
140 [PVR2_CLIENT_ID_MSP3400
] = "\x40",
141 [PVR2_CLIENT_ID_SAA7115
] = "\x21",
142 [PVR2_CLIENT_ID_WM8775
] = "\x1b",
143 [PVR2_CLIENT_ID_CX25840
] = "\x44",
144 [PVR2_CLIENT_ID_CS53L32A
] = "\x11",
148 static const char *ir_scheme_names
[] = {
149 [PVR2_IR_SCHEME_NONE
] = "none",
150 [PVR2_IR_SCHEME_29XXX
] = "29xxx",
151 [PVR2_IR_SCHEME_24XXX
] = "24xxx (29xxx emulation)",
152 [PVR2_IR_SCHEME_24XXX_MCE
] = "24xxx (MCE device)",
153 [PVR2_IR_SCHEME_ZILOG
] = "Zilog",
157 /* Define the list of additional controls we'll dynamically construct based
158 on query of the cx2341x module. */
159 struct pvr2_mpeg_ids
{
163 static const struct pvr2_mpeg_ids mpeg_ids
[] = {
165 .strid
= "audio_layer",
166 .id
= V4L2_CID_MPEG_AUDIO_ENCODING
,
168 .strid
= "audio_bitrate",
169 .id
= V4L2_CID_MPEG_AUDIO_L2_BITRATE
,
171 /* Already using audio_mode elsewhere :-( */
172 .strid
= "mpeg_audio_mode",
173 .id
= V4L2_CID_MPEG_AUDIO_MODE
,
175 .strid
= "mpeg_audio_mode_extension",
176 .id
= V4L2_CID_MPEG_AUDIO_MODE_EXTENSION
,
178 .strid
= "audio_emphasis",
179 .id
= V4L2_CID_MPEG_AUDIO_EMPHASIS
,
181 .strid
= "audio_crc",
182 .id
= V4L2_CID_MPEG_AUDIO_CRC
,
184 .strid
= "video_aspect",
185 .id
= V4L2_CID_MPEG_VIDEO_ASPECT
,
187 .strid
= "video_b_frames",
188 .id
= V4L2_CID_MPEG_VIDEO_B_FRAMES
,
190 .strid
= "video_gop_size",
191 .id
= V4L2_CID_MPEG_VIDEO_GOP_SIZE
,
193 .strid
= "video_gop_closure",
194 .id
= V4L2_CID_MPEG_VIDEO_GOP_CLOSURE
,
196 .strid
= "video_bitrate_mode",
197 .id
= V4L2_CID_MPEG_VIDEO_BITRATE_MODE
,
199 .strid
= "video_bitrate",
200 .id
= V4L2_CID_MPEG_VIDEO_BITRATE
,
202 .strid
= "video_bitrate_peak",
203 .id
= V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
,
205 .strid
= "video_temporal_decimation",
206 .id
= V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION
,
208 .strid
= "stream_type",
209 .id
= V4L2_CID_MPEG_STREAM_TYPE
,
211 .strid
= "video_spatial_filter_mode",
212 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE
,
214 .strid
= "video_spatial_filter",
215 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER
,
217 .strid
= "video_luma_spatial_filter_type",
218 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE
,
220 .strid
= "video_chroma_spatial_filter_type",
221 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE
,
223 .strid
= "video_temporal_filter_mode",
224 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE
,
226 .strid
= "video_temporal_filter",
227 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER
,
229 .strid
= "video_median_filter_type",
230 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE
,
232 .strid
= "video_luma_median_filter_top",
233 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP
,
235 .strid
= "video_luma_median_filter_bottom",
236 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM
,
238 .strid
= "video_chroma_median_filter_top",
239 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP
,
241 .strid
= "video_chroma_median_filter_bottom",
242 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM
,
245 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
248 static const char *control_values_srate
[] = {
249 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100
] = "44.1 kHz",
250 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000
] = "48 kHz",
251 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000
] = "32 kHz",
256 static const char *control_values_input
[] = {
257 [PVR2_CVAL_INPUT_TV
] = "television", /*xawtv needs this name*/
258 [PVR2_CVAL_INPUT_DTV
] = "dtv",
259 [PVR2_CVAL_INPUT_RADIO
] = "radio",
260 [PVR2_CVAL_INPUT_SVIDEO
] = "s-video",
261 [PVR2_CVAL_INPUT_COMPOSITE
] = "composite",
265 static const char *control_values_audiomode
[] = {
266 [V4L2_TUNER_MODE_MONO
] = "Mono",
267 [V4L2_TUNER_MODE_STEREO
] = "Stereo",
268 [V4L2_TUNER_MODE_LANG1
] = "Lang1",
269 [V4L2_TUNER_MODE_LANG2
] = "Lang2",
270 [V4L2_TUNER_MODE_LANG1_LANG2
] = "Lang1+Lang2",
274 static const char *control_values_hsm
[] = {
275 [PVR2_CVAL_HSM_FAIL
] = "Fail",
276 [PVR2_CVAL_HSM_HIGH
] = "High",
277 [PVR2_CVAL_HSM_FULL
] = "Full",
281 static const char *pvr2_state_names
[] = {
282 [PVR2_STATE_NONE
] = "none",
283 [PVR2_STATE_DEAD
] = "dead",
284 [PVR2_STATE_COLD
] = "cold",
285 [PVR2_STATE_WARM
] = "warm",
286 [PVR2_STATE_ERROR
] = "error",
287 [PVR2_STATE_READY
] = "ready",
288 [PVR2_STATE_RUN
] = "run",
292 struct pvr2_fx2cmd_descdef
{
297 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc
[] = {
298 {FX2CMD_MEM_WRITE_DWORD
, "write encoder dword"},
299 {FX2CMD_MEM_READ_DWORD
, "read encoder dword"},
300 {FX2CMD_HCW_ZILOG_RESET
, "zilog IR reset control"},
301 {FX2CMD_MEM_READ_64BYTES
, "read encoder 64bytes"},
302 {FX2CMD_REG_WRITE
, "write encoder register"},
303 {FX2CMD_REG_READ
, "read encoder register"},
304 {FX2CMD_MEMSEL
, "encoder memsel"},
305 {FX2CMD_I2C_WRITE
, "i2c write"},
306 {FX2CMD_I2C_READ
, "i2c read"},
307 {FX2CMD_GET_USB_SPEED
, "get USB speed"},
308 {FX2CMD_STREAMING_ON
, "stream on"},
309 {FX2CMD_STREAMING_OFF
, "stream off"},
310 {FX2CMD_FWPOST1
, "fwpost1"},
311 {FX2CMD_POWER_OFF
, "power off"},
312 {FX2CMD_POWER_ON
, "power on"},
313 {FX2CMD_DEEP_RESET
, "deep reset"},
314 {FX2CMD_GET_EEPROM_ADDR
, "get rom addr"},
315 {FX2CMD_GET_IR_CODE
, "get IR code"},
316 {FX2CMD_HCW_DEMOD_RESETIN
, "hcw demod resetin"},
317 {FX2CMD_HCW_DTV_STREAMING_ON
, "hcw dtv stream on"},
318 {FX2CMD_HCW_DTV_STREAMING_OFF
, "hcw dtv stream off"},
319 {FX2CMD_ONAIR_DTV_STREAMING_ON
, "onair dtv stream on"},
320 {FX2CMD_ONAIR_DTV_STREAMING_OFF
, "onair dtv stream off"},
321 {FX2CMD_ONAIR_DTV_POWER_ON
, "onair dtv power on"},
322 {FX2CMD_ONAIR_DTV_POWER_OFF
, "onair dtv power off"},
326 static int pvr2_hdw_set_input(struct pvr2_hdw
*hdw
,int v
);
327 static void pvr2_hdw_state_sched(struct pvr2_hdw
*);
328 static int pvr2_hdw_state_eval(struct pvr2_hdw
*);
329 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw
*,unsigned long);
330 static void pvr2_hdw_worker_poll(struct work_struct
*work
);
331 static int pvr2_hdw_wait(struct pvr2_hdw
*,int state
);
332 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw
*);
333 static void pvr2_hdw_state_log_state(struct pvr2_hdw
*);
334 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw
*hdw
,int runFl
);
335 static int pvr2_hdw_commit_setup(struct pvr2_hdw
*hdw
);
336 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw
*hdw
);
337 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw
*hdw
);
338 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw
*hdw
);
339 static void pvr2_hdw_quiescent_timeout(unsigned long);
340 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
341 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
342 static void pvr2_hdw_encoder_run_timeout(unsigned long);
343 static int pvr2_issue_simple_cmd(struct pvr2_hdw
*,u32
);
344 static int pvr2_send_request_ex(struct pvr2_hdw
*hdw
,
345 unsigned int timeout
,int probe_fl
,
346 void *write_data
,unsigned int write_len
,
347 void *read_data
,unsigned int read_len
);
348 static int pvr2_hdw_check_cropcap(struct pvr2_hdw
*hdw
);
351 static void trace_stbit(const char *name
,int val
)
353 pvr2_trace(PVR2_TRACE_STBITS
,
354 "State bit %s <-- %s",
355 name
,(val
? "true" : "false"));
358 static int ctrl_channelfreq_get(struct pvr2_ctrl
*cptr
,int *vp
)
360 struct pvr2_hdw
*hdw
= cptr
->hdw
;
361 if ((hdw
->freqProgSlot
> 0) && (hdw
->freqProgSlot
<= FREQTABLE_SIZE
)) {
362 *vp
= hdw
->freqTable
[hdw
->freqProgSlot
-1];
369 static int ctrl_channelfreq_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
371 struct pvr2_hdw
*hdw
= cptr
->hdw
;
372 unsigned int slotId
= hdw
->freqProgSlot
;
373 if ((slotId
> 0) && (slotId
<= FREQTABLE_SIZE
)) {
374 hdw
->freqTable
[slotId
-1] = v
;
375 /* Handle side effects correctly - if we're tuned to this
376 slot, then forgot the slot id relation since the stored
377 frequency has been changed. */
378 if (hdw
->freqSelector
) {
379 if (hdw
->freqSlotRadio
== slotId
) {
380 hdw
->freqSlotRadio
= 0;
383 if (hdw
->freqSlotTelevision
== slotId
) {
384 hdw
->freqSlotTelevision
= 0;
391 static int ctrl_channelprog_get(struct pvr2_ctrl
*cptr
,int *vp
)
393 *vp
= cptr
->hdw
->freqProgSlot
;
397 static int ctrl_channelprog_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
399 struct pvr2_hdw
*hdw
= cptr
->hdw
;
400 if ((v
>= 0) && (v
<= FREQTABLE_SIZE
)) {
401 hdw
->freqProgSlot
= v
;
406 static int ctrl_channel_get(struct pvr2_ctrl
*cptr
,int *vp
)
408 struct pvr2_hdw
*hdw
= cptr
->hdw
;
409 *vp
= hdw
->freqSelector
? hdw
->freqSlotRadio
: hdw
->freqSlotTelevision
;
413 static int ctrl_channel_set(struct pvr2_ctrl
*cptr
,int m
,int slotId
)
416 struct pvr2_hdw
*hdw
= cptr
->hdw
;
417 if ((slotId
< 0) || (slotId
> FREQTABLE_SIZE
)) return 0;
419 freq
= hdw
->freqTable
[slotId
-1];
421 pvr2_hdw_set_cur_freq(hdw
,freq
);
423 if (hdw
->freqSelector
) {
424 hdw
->freqSlotRadio
= slotId
;
426 hdw
->freqSlotTelevision
= slotId
;
431 static int ctrl_freq_get(struct pvr2_ctrl
*cptr
,int *vp
)
433 *vp
= pvr2_hdw_get_cur_freq(cptr
->hdw
);
437 static int ctrl_freq_is_dirty(struct pvr2_ctrl
*cptr
)
439 return cptr
->hdw
->freqDirty
!= 0;
442 static void ctrl_freq_clear_dirty(struct pvr2_ctrl
*cptr
)
444 cptr
->hdw
->freqDirty
= 0;
447 static int ctrl_freq_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
449 pvr2_hdw_set_cur_freq(cptr
->hdw
,v
);
453 static int ctrl_cropl_min_get(struct pvr2_ctrl
*cptr
, int *left
)
455 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
456 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
460 *left
= cap
->bounds
.left
;
464 static int ctrl_cropl_max_get(struct pvr2_ctrl
*cptr
, int *left
)
466 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
467 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
471 *left
= cap
->bounds
.left
;
472 if (cap
->bounds
.width
> cptr
->hdw
->cropw_val
) {
473 *left
+= cap
->bounds
.width
- cptr
->hdw
->cropw_val
;
478 static int ctrl_cropt_min_get(struct pvr2_ctrl
*cptr
, int *top
)
480 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
481 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
485 *top
= cap
->bounds
.top
;
489 static int ctrl_cropt_max_get(struct pvr2_ctrl
*cptr
, int *top
)
491 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
492 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
496 *top
= cap
->bounds
.top
;
497 if (cap
->bounds
.height
> cptr
->hdw
->croph_val
) {
498 *top
+= cap
->bounds
.height
- cptr
->hdw
->croph_val
;
503 static int ctrl_cropw_max_get(struct pvr2_ctrl
*cptr
, int *width
)
505 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
506 int stat
, bleftend
, cleft
;
508 stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
512 bleftend
= cap
->bounds
.left
+cap
->bounds
.width
;
513 cleft
= cptr
->hdw
->cropl_val
;
515 *width
= cleft
< bleftend
? bleftend
-cleft
: 0;
519 static int ctrl_croph_max_get(struct pvr2_ctrl
*cptr
, int *height
)
521 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
522 int stat
, btopend
, ctop
;
524 stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
528 btopend
= cap
->bounds
.top
+cap
->bounds
.height
;
529 ctop
= cptr
->hdw
->cropt_val
;
531 *height
= ctop
< btopend
? btopend
-ctop
: 0;
535 static int ctrl_get_cropcapbl(struct pvr2_ctrl
*cptr
, int *val
)
537 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
538 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
542 *val
= cap
->bounds
.left
;
546 static int ctrl_get_cropcapbt(struct pvr2_ctrl
*cptr
, int *val
)
548 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
549 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
553 *val
= cap
->bounds
.top
;
557 static int ctrl_get_cropcapbw(struct pvr2_ctrl
*cptr
, int *val
)
559 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
560 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
564 *val
= cap
->bounds
.width
;
568 static int ctrl_get_cropcapbh(struct pvr2_ctrl
*cptr
, int *val
)
570 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
571 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
575 *val
= cap
->bounds
.height
;
579 static int ctrl_get_cropcapdl(struct pvr2_ctrl
*cptr
, int *val
)
581 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
582 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
586 *val
= cap
->defrect
.left
;
590 static int ctrl_get_cropcapdt(struct pvr2_ctrl
*cptr
, int *val
)
592 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
593 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
597 *val
= cap
->defrect
.top
;
601 static int ctrl_get_cropcapdw(struct pvr2_ctrl
*cptr
, int *val
)
603 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
604 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
608 *val
= cap
->defrect
.width
;
612 static int ctrl_get_cropcapdh(struct pvr2_ctrl
*cptr
, int *val
)
614 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
615 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
619 *val
= cap
->defrect
.height
;
623 static int ctrl_get_cropcappan(struct pvr2_ctrl
*cptr
, int *val
)
625 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
626 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
630 *val
= cap
->pixelaspect
.numerator
;
634 static int ctrl_get_cropcappad(struct pvr2_ctrl
*cptr
, int *val
)
636 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
637 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
641 *val
= cap
->pixelaspect
.denominator
;
645 static int ctrl_vres_max_get(struct pvr2_ctrl
*cptr
,int *vp
)
647 /* Actual maximum depends on the video standard in effect. */
648 if (cptr
->hdw
->std_mask_cur
& V4L2_STD_525_60
) {
656 static int ctrl_vres_min_get(struct pvr2_ctrl
*cptr
,int *vp
)
658 /* Actual minimum depends on device digitizer type. */
659 if (cptr
->hdw
->hdw_desc
->flag_has_cx25840
) {
667 static int ctrl_get_input(struct pvr2_ctrl
*cptr
,int *vp
)
669 *vp
= cptr
->hdw
->input_val
;
673 static int ctrl_check_input(struct pvr2_ctrl
*cptr
,int v
)
675 return ((1 << v
) & cptr
->hdw
->input_allowed_mask
) != 0;
678 static int ctrl_set_input(struct pvr2_ctrl
*cptr
,int m
,int v
)
680 return pvr2_hdw_set_input(cptr
->hdw
,v
);
683 static int ctrl_isdirty_input(struct pvr2_ctrl
*cptr
)
685 return cptr
->hdw
->input_dirty
!= 0;
688 static void ctrl_cleardirty_input(struct pvr2_ctrl
*cptr
)
690 cptr
->hdw
->input_dirty
= 0;
694 static int ctrl_freq_max_get(struct pvr2_ctrl
*cptr
, int *vp
)
697 struct pvr2_hdw
*hdw
= cptr
->hdw
;
698 if (hdw
->tuner_signal_stale
) {
699 pvr2_hdw_status_poll(hdw
);
701 fv
= hdw
->tuner_signal_info
.rangehigh
;
703 /* Safety fallback */
707 if (hdw
->tuner_signal_info
.capability
& V4L2_TUNER_CAP_LOW
) {
716 static int ctrl_freq_min_get(struct pvr2_ctrl
*cptr
, int *vp
)
719 struct pvr2_hdw
*hdw
= cptr
->hdw
;
720 if (hdw
->tuner_signal_stale
) {
721 pvr2_hdw_status_poll(hdw
);
723 fv
= hdw
->tuner_signal_info
.rangelow
;
725 /* Safety fallback */
729 if (hdw
->tuner_signal_info
.capability
& V4L2_TUNER_CAP_LOW
) {
738 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl
*cptr
)
740 return cptr
->hdw
->enc_stale
!= 0;
743 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl
*cptr
)
745 cptr
->hdw
->enc_stale
= 0;
746 cptr
->hdw
->enc_unsafe_stale
= 0;
749 static int ctrl_cx2341x_get(struct pvr2_ctrl
*cptr
,int *vp
)
752 struct v4l2_ext_controls cs
;
753 struct v4l2_ext_control c1
;
754 memset(&cs
,0,sizeof(cs
));
755 memset(&c1
,0,sizeof(c1
));
758 c1
.id
= cptr
->info
->v4l_id
;
759 ret
= cx2341x_ext_ctrls(&cptr
->hdw
->enc_ctl_state
, 0, &cs
,
766 static int ctrl_cx2341x_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
769 struct pvr2_hdw
*hdw
= cptr
->hdw
;
770 struct v4l2_ext_controls cs
;
771 struct v4l2_ext_control c1
;
772 memset(&cs
,0,sizeof(cs
));
773 memset(&c1
,0,sizeof(c1
));
776 c1
.id
= cptr
->info
->v4l_id
;
778 ret
= cx2341x_ext_ctrls(&hdw
->enc_ctl_state
,
779 hdw
->state_encoder_run
, &cs
,
782 /* Oops. cx2341x is telling us it's not safe to change
783 this control while we're capturing. Make a note of this
784 fact so that the pipeline will be stopped the next time
785 controls are committed. Then go on ahead and store this
787 ret
= cx2341x_ext_ctrls(&hdw
->enc_ctl_state
,
790 if (!ret
) hdw
->enc_unsafe_stale
= !0;
797 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl
*cptr
)
799 struct v4l2_queryctrl qctrl
;
800 struct pvr2_ctl_info
*info
;
801 qctrl
.id
= cptr
->info
->v4l_id
;
802 cx2341x_ctrl_query(&cptr
->hdw
->enc_ctl_state
,&qctrl
);
803 /* Strip out the const so we can adjust a function pointer. It's
804 OK to do this here because we know this is a dynamically created
805 control, so the underlying storage for the info pointer is (a)
806 private to us, and (b) not in read-only storage. Either we do
807 this or we significantly complicate the underlying control
809 info
= (struct pvr2_ctl_info
*)(cptr
->info
);
810 if (qctrl
.flags
& V4L2_CTRL_FLAG_READ_ONLY
) {
811 if (info
->set_value
) {
812 info
->set_value
= NULL
;
815 if (!(info
->set_value
)) {
816 info
->set_value
= ctrl_cx2341x_set
;
822 static int ctrl_streamingenabled_get(struct pvr2_ctrl
*cptr
,int *vp
)
824 *vp
= cptr
->hdw
->state_pipeline_req
;
828 static int ctrl_masterstate_get(struct pvr2_ctrl
*cptr
,int *vp
)
830 *vp
= cptr
->hdw
->master_state
;
834 static int ctrl_hsm_get(struct pvr2_ctrl
*cptr
,int *vp
)
836 int result
= pvr2_hdw_is_hsm(cptr
->hdw
);
837 *vp
= PVR2_CVAL_HSM_FULL
;
838 if (result
< 0) *vp
= PVR2_CVAL_HSM_FAIL
;
839 if (result
) *vp
= PVR2_CVAL_HSM_HIGH
;
843 static int ctrl_stdavail_get(struct pvr2_ctrl
*cptr
,int *vp
)
845 *vp
= cptr
->hdw
->std_mask_avail
;
849 static int ctrl_stdavail_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
851 struct pvr2_hdw
*hdw
= cptr
->hdw
;
853 ns
= hdw
->std_mask_avail
;
854 ns
= (ns
& ~m
) | (v
& m
);
855 if (ns
== hdw
->std_mask_avail
) return 0;
856 hdw
->std_mask_avail
= ns
;
857 pvr2_hdw_internal_set_std_avail(hdw
);
858 pvr2_hdw_internal_find_stdenum(hdw
);
862 static int ctrl_std_val_to_sym(struct pvr2_ctrl
*cptr
,int msk
,int val
,
863 char *bufPtr
,unsigned int bufSize
,
866 *len
= pvr2_std_id_to_str(bufPtr
,bufSize
,msk
& val
);
870 static int ctrl_std_sym_to_val(struct pvr2_ctrl
*cptr
,
871 const char *bufPtr
,unsigned int bufSize
,
876 ret
= pvr2_std_str_to_id(&id
,bufPtr
,bufSize
);
877 if (ret
< 0) return ret
;
878 if (mskp
) *mskp
= id
;
879 if (valp
) *valp
= id
;
883 static int ctrl_stdcur_get(struct pvr2_ctrl
*cptr
,int *vp
)
885 *vp
= cptr
->hdw
->std_mask_cur
;
889 static int ctrl_stdcur_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
891 struct pvr2_hdw
*hdw
= cptr
->hdw
;
893 ns
= hdw
->std_mask_cur
;
894 ns
= (ns
& ~m
) | (v
& m
);
895 if (ns
== hdw
->std_mask_cur
) return 0;
896 hdw
->std_mask_cur
= ns
;
898 pvr2_hdw_internal_find_stdenum(hdw
);
902 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl
*cptr
)
904 return cptr
->hdw
->std_dirty
!= 0;
907 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl
*cptr
)
909 cptr
->hdw
->std_dirty
= 0;
912 static int ctrl_signal_get(struct pvr2_ctrl
*cptr
,int *vp
)
914 struct pvr2_hdw
*hdw
= cptr
->hdw
;
915 pvr2_hdw_status_poll(hdw
);
916 *vp
= hdw
->tuner_signal_info
.signal
;
920 static int ctrl_audio_modes_present_get(struct pvr2_ctrl
*cptr
,int *vp
)
923 unsigned int subchan
;
924 struct pvr2_hdw
*hdw
= cptr
->hdw
;
925 pvr2_hdw_status_poll(hdw
);
926 subchan
= hdw
->tuner_signal_info
.rxsubchans
;
927 if (subchan
& V4L2_TUNER_SUB_MONO
) {
928 val
|= (1 << V4L2_TUNER_MODE_MONO
);
930 if (subchan
& V4L2_TUNER_SUB_STEREO
) {
931 val
|= (1 << V4L2_TUNER_MODE_STEREO
);
933 if (subchan
& V4L2_TUNER_SUB_LANG1
) {
934 val
|= (1 << V4L2_TUNER_MODE_LANG1
);
936 if (subchan
& V4L2_TUNER_SUB_LANG2
) {
937 val
|= (1 << V4L2_TUNER_MODE_LANG2
);
944 static int ctrl_stdenumcur_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
946 struct pvr2_hdw
*hdw
= cptr
->hdw
;
947 if (v
< 0) return -EINVAL
;
948 if (v
> hdw
->std_enum_cnt
) return -EINVAL
;
949 hdw
->std_enum_cur
= v
;
952 if (hdw
->std_mask_cur
== hdw
->std_defs
[v
].id
) return 0;
953 hdw
->std_mask_cur
= hdw
->std_defs
[v
].id
;
959 static int ctrl_stdenumcur_get(struct pvr2_ctrl
*cptr
,int *vp
)
961 *vp
= cptr
->hdw
->std_enum_cur
;
966 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl
*cptr
)
968 return cptr
->hdw
->std_dirty
!= 0;
972 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl
*cptr
)
974 cptr
->hdw
->std_dirty
= 0;
978 #define DEFINT(vmin,vmax) \
979 .type = pvr2_ctl_int, \
980 .def.type_int.min_value = vmin, \
981 .def.type_int.max_value = vmax
983 #define DEFENUM(tab) \
984 .type = pvr2_ctl_enum, \
985 .def.type_enum.count = ARRAY_SIZE(tab), \
986 .def.type_enum.value_names = tab
989 .type = pvr2_ctl_bool
991 #define DEFMASK(msk,tab) \
992 .type = pvr2_ctl_bitmask, \
993 .def.type_bitmask.valid_bits = msk, \
994 .def.type_bitmask.bit_names = tab
996 #define DEFREF(vname) \
997 .set_value = ctrl_set_##vname, \
998 .get_value = ctrl_get_##vname, \
999 .is_dirty = ctrl_isdirty_##vname, \
1000 .clear_dirty = ctrl_cleardirty_##vname
1003 #define VCREATE_FUNCS(vname) \
1004 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
1005 {*vp = cptr->hdw->vname##_val; return 0;} \
1006 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
1007 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
1008 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
1009 {return cptr->hdw->vname##_dirty != 0;} \
1010 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
1011 {cptr->hdw->vname##_dirty = 0;}
1013 VCREATE_FUNCS(brightness
)
1014 VCREATE_FUNCS(contrast
)
1015 VCREATE_FUNCS(saturation
)
1017 VCREATE_FUNCS(volume
)
1018 VCREATE_FUNCS(balance
)
1020 VCREATE_FUNCS(treble
)
1022 VCREATE_FUNCS(cropl
)
1023 VCREATE_FUNCS(cropt
)
1024 VCREATE_FUNCS(cropw
)
1025 VCREATE_FUNCS(croph
)
1026 VCREATE_FUNCS(audiomode
)
1027 VCREATE_FUNCS(res_hor
)
1028 VCREATE_FUNCS(res_ver
)
1029 VCREATE_FUNCS(srate
)
1031 /* Table definition of all controls which can be manipulated */
1032 static const struct pvr2_ctl_info control_defs
[] = {
1034 .v4l_id
= V4L2_CID_BRIGHTNESS
,
1035 .desc
= "Brightness",
1036 .name
= "brightness",
1037 .default_value
= 128,
1041 .v4l_id
= V4L2_CID_CONTRAST
,
1044 .default_value
= 68,
1048 .v4l_id
= V4L2_CID_SATURATION
,
1049 .desc
= "Saturation",
1050 .name
= "saturation",
1051 .default_value
= 64,
1055 .v4l_id
= V4L2_CID_HUE
,
1062 .v4l_id
= V4L2_CID_AUDIO_VOLUME
,
1065 .default_value
= 62000,
1069 .v4l_id
= V4L2_CID_AUDIO_BALANCE
,
1074 DEFINT(-32768,32767),
1076 .v4l_id
= V4L2_CID_AUDIO_BASS
,
1081 DEFINT(-32768,32767),
1083 .v4l_id
= V4L2_CID_AUDIO_TREBLE
,
1088 DEFINT(-32768,32767),
1090 .v4l_id
= V4L2_CID_AUDIO_MUTE
,
1097 .desc
= "Capture crop left margin",
1098 .name
= "crop_left",
1099 .internal_id
= PVR2_CID_CROPL
,
1103 .get_min_value
= ctrl_cropl_min_get
,
1104 .get_max_value
= ctrl_cropl_max_get
,
1105 .get_def_value
= ctrl_get_cropcapdl
,
1107 .desc
= "Capture crop top margin",
1109 .internal_id
= PVR2_CID_CROPT
,
1113 .get_min_value
= ctrl_cropt_min_get
,
1114 .get_max_value
= ctrl_cropt_max_get
,
1115 .get_def_value
= ctrl_get_cropcapdt
,
1117 .desc
= "Capture crop width",
1118 .name
= "crop_width",
1119 .internal_id
= PVR2_CID_CROPW
,
1120 .default_value
= 720,
1123 .get_max_value
= ctrl_cropw_max_get
,
1124 .get_def_value
= ctrl_get_cropcapdw
,
1126 .desc
= "Capture crop height",
1127 .name
= "crop_height",
1128 .internal_id
= PVR2_CID_CROPH
,
1129 .default_value
= 480,
1132 .get_max_value
= ctrl_croph_max_get
,
1133 .get_def_value
= ctrl_get_cropcapdh
,
1135 .desc
= "Capture capability pixel aspect numerator",
1136 .name
= "cropcap_pixel_numerator",
1137 .internal_id
= PVR2_CID_CROPCAPPAN
,
1138 .get_value
= ctrl_get_cropcappan
,
1140 .desc
= "Capture capability pixel aspect denominator",
1141 .name
= "cropcap_pixel_denominator",
1142 .internal_id
= PVR2_CID_CROPCAPPAD
,
1143 .get_value
= ctrl_get_cropcappad
,
1145 .desc
= "Capture capability bounds top",
1146 .name
= "cropcap_bounds_top",
1147 .internal_id
= PVR2_CID_CROPCAPBT
,
1148 .get_value
= ctrl_get_cropcapbt
,
1150 .desc
= "Capture capability bounds left",
1151 .name
= "cropcap_bounds_left",
1152 .internal_id
= PVR2_CID_CROPCAPBL
,
1153 .get_value
= ctrl_get_cropcapbl
,
1155 .desc
= "Capture capability bounds width",
1156 .name
= "cropcap_bounds_width",
1157 .internal_id
= PVR2_CID_CROPCAPBW
,
1158 .get_value
= ctrl_get_cropcapbw
,
1160 .desc
= "Capture capability bounds height",
1161 .name
= "cropcap_bounds_height",
1162 .internal_id
= PVR2_CID_CROPCAPBH
,
1163 .get_value
= ctrl_get_cropcapbh
,
1165 .desc
= "Video Source",
1167 .internal_id
= PVR2_CID_INPUT
,
1168 .default_value
= PVR2_CVAL_INPUT_TV
,
1169 .check_value
= ctrl_check_input
,
1171 DEFENUM(control_values_input
),
1173 .desc
= "Audio Mode",
1174 .name
= "audio_mode",
1175 .internal_id
= PVR2_CID_AUDIOMODE
,
1176 .default_value
= V4L2_TUNER_MODE_STEREO
,
1178 DEFENUM(control_values_audiomode
),
1180 .desc
= "Horizontal capture resolution",
1181 .name
= "resolution_hor",
1182 .internal_id
= PVR2_CID_HRES
,
1183 .default_value
= 720,
1187 .desc
= "Vertical capture resolution",
1188 .name
= "resolution_ver",
1189 .internal_id
= PVR2_CID_VRES
,
1190 .default_value
= 480,
1193 /* Hook in check for video standard and adjust maximum
1194 depending on the standard. */
1195 .get_max_value
= ctrl_vres_max_get
,
1196 .get_min_value
= ctrl_vres_min_get
,
1198 .v4l_id
= V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ
,
1199 .default_value
= V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000
,
1200 .desc
= "Audio Sampling Frequency",
1203 DEFENUM(control_values_srate
),
1205 .desc
= "Tuner Frequency (Hz)",
1206 .name
= "frequency",
1207 .internal_id
= PVR2_CID_FREQUENCY
,
1209 .set_value
= ctrl_freq_set
,
1210 .get_value
= ctrl_freq_get
,
1211 .is_dirty
= ctrl_freq_is_dirty
,
1212 .clear_dirty
= ctrl_freq_clear_dirty
,
1214 /* Hook in check for input value (tv/radio) and adjust
1215 max/min values accordingly */
1216 .get_max_value
= ctrl_freq_max_get
,
1217 .get_min_value
= ctrl_freq_min_get
,
1221 .set_value
= ctrl_channel_set
,
1222 .get_value
= ctrl_channel_get
,
1223 DEFINT(0,FREQTABLE_SIZE
),
1225 .desc
= "Channel Program Frequency",
1226 .name
= "freq_table_value",
1227 .set_value
= ctrl_channelfreq_set
,
1228 .get_value
= ctrl_channelfreq_get
,
1230 /* Hook in check for input value (tv/radio) and adjust
1231 max/min values accordingly */
1232 .get_max_value
= ctrl_freq_max_get
,
1233 .get_min_value
= ctrl_freq_min_get
,
1235 .desc
= "Channel Program ID",
1236 .name
= "freq_table_channel",
1237 .set_value
= ctrl_channelprog_set
,
1238 .get_value
= ctrl_channelprog_get
,
1239 DEFINT(0,FREQTABLE_SIZE
),
1241 .desc
= "Streaming Enabled",
1242 .name
= "streaming_enabled",
1243 .get_value
= ctrl_streamingenabled_get
,
1246 .desc
= "USB Speed",
1247 .name
= "usb_speed",
1248 .get_value
= ctrl_hsm_get
,
1249 DEFENUM(control_values_hsm
),
1251 .desc
= "Master State",
1252 .name
= "master_state",
1253 .get_value
= ctrl_masterstate_get
,
1254 DEFENUM(pvr2_state_names
),
1256 .desc
= "Signal Present",
1257 .name
= "signal_present",
1258 .get_value
= ctrl_signal_get
,
1261 .desc
= "Audio Modes Present",
1262 .name
= "audio_modes_present",
1263 .get_value
= ctrl_audio_modes_present_get
,
1264 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1265 v4l. Nothing outside of this module cares about this,
1266 but I reuse it in order to also reuse the
1267 control_values_audiomode string table. */
1268 DEFMASK(((1 << V4L2_TUNER_MODE_MONO
)|
1269 (1 << V4L2_TUNER_MODE_STEREO
)|
1270 (1 << V4L2_TUNER_MODE_LANG1
)|
1271 (1 << V4L2_TUNER_MODE_LANG2
)),
1272 control_values_audiomode
),
1274 .desc
= "Video Standards Available Mask",
1275 .name
= "video_standard_mask_available",
1276 .internal_id
= PVR2_CID_STDAVAIL
,
1278 .get_value
= ctrl_stdavail_get
,
1279 .set_value
= ctrl_stdavail_set
,
1280 .val_to_sym
= ctrl_std_val_to_sym
,
1281 .sym_to_val
= ctrl_std_sym_to_val
,
1282 .type
= pvr2_ctl_bitmask
,
1284 .desc
= "Video Standards In Use Mask",
1285 .name
= "video_standard_mask_active",
1286 .internal_id
= PVR2_CID_STDCUR
,
1288 .get_value
= ctrl_stdcur_get
,
1289 .set_value
= ctrl_stdcur_set
,
1290 .is_dirty
= ctrl_stdcur_is_dirty
,
1291 .clear_dirty
= ctrl_stdcur_clear_dirty
,
1292 .val_to_sym
= ctrl_std_val_to_sym
,
1293 .sym_to_val
= ctrl_std_sym_to_val
,
1294 .type
= pvr2_ctl_bitmask
,
1296 .desc
= "Video Standard Name",
1297 .name
= "video_standard",
1298 .internal_id
= PVR2_CID_STDENUM
,
1300 .get_value
= ctrl_stdenumcur_get
,
1301 .set_value
= ctrl_stdenumcur_set
,
1302 .is_dirty
= ctrl_stdenumcur_is_dirty
,
1303 .clear_dirty
= ctrl_stdenumcur_clear_dirty
,
1304 .type
= pvr2_ctl_enum
,
1308 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1311 const char *pvr2_config_get_name(enum pvr2_config cfg
)
1314 case pvr2_config_empty
: return "empty";
1315 case pvr2_config_mpeg
: return "mpeg";
1316 case pvr2_config_vbi
: return "vbi";
1317 case pvr2_config_pcm
: return "pcm";
1318 case pvr2_config_rawvideo
: return "raw video";
1324 struct usb_device
*pvr2_hdw_get_dev(struct pvr2_hdw
*hdw
)
1326 return hdw
->usb_dev
;
1330 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw
*hdw
)
1332 return hdw
->serial_number
;
1336 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw
*hdw
)
1338 return hdw
->bus_info
;
1342 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw
*hdw
)
1344 return hdw
->identifier
;
1348 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw
*hdw
)
1350 return hdw
->freqSelector
? hdw
->freqValTelevision
: hdw
->freqValRadio
;
1353 /* Set the currently tuned frequency and account for all possible
1354 driver-core side effects of this action. */
1355 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw
*hdw
,unsigned long val
)
1357 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
1358 if (hdw
->freqSelector
) {
1359 /* Swing over to radio frequency selection */
1360 hdw
->freqSelector
= 0;
1361 hdw
->freqDirty
= !0;
1363 if (hdw
->freqValRadio
!= val
) {
1364 hdw
->freqValRadio
= val
;
1365 hdw
->freqSlotRadio
= 0;
1366 hdw
->freqDirty
= !0;
1369 if (!(hdw
->freqSelector
)) {
1370 /* Swing over to television frequency selection */
1371 hdw
->freqSelector
= 1;
1372 hdw
->freqDirty
= !0;
1374 if (hdw
->freqValTelevision
!= val
) {
1375 hdw
->freqValTelevision
= val
;
1376 hdw
->freqSlotTelevision
= 0;
1377 hdw
->freqDirty
= !0;
1382 int pvr2_hdw_get_unit_number(struct pvr2_hdw
*hdw
)
1384 return hdw
->unit_number
;
1388 /* Attempt to locate one of the given set of files. Messages are logged
1389 appropriate to what has been found. The return value will be 0 or
1390 greater on success (it will be the index of the file name found) and
1391 fw_entry will be filled in. Otherwise a negative error is returned on
1392 failure. If the return value is -ENOENT then no viable firmware file
1393 could be located. */
1394 static int pvr2_locate_firmware(struct pvr2_hdw
*hdw
,
1395 const struct firmware
**fw_entry
,
1396 const char *fwtypename
,
1397 unsigned int fwcount
,
1398 const char *fwnames
[])
1402 for (idx
= 0; idx
< fwcount
; idx
++) {
1403 ret
= request_firmware(fw_entry
,
1405 &hdw
->usb_dev
->dev
);
1407 trace_firmware("Located %s firmware: %s;"
1413 if (ret
== -ENOENT
) continue;
1414 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1415 "request_firmware fatal error with code=%d",ret
);
1418 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1420 " Device %s firmware"
1421 " seems to be missing.",
1423 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1424 "Did you install the pvrusb2 firmware files"
1425 " in their proper location?");
1427 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1428 "request_firmware unable to locate %s file %s",
1429 fwtypename
,fwnames
[0]);
1431 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1432 "request_firmware unable to locate"
1433 " one of the following %s files:",
1435 for (idx
= 0; idx
< fwcount
; idx
++) {
1436 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1437 "request_firmware: Failed to find %s",
1446 * pvr2_upload_firmware1().
1448 * Send the 8051 firmware to the device. After the upload, arrange for
1449 * device to re-enumerate.
1451 * NOTE : the pointer to the firmware data given by request_firmware()
1452 * is not suitable for an usb transaction.
1455 static int pvr2_upload_firmware1(struct pvr2_hdw
*hdw
)
1457 const struct firmware
*fw_entry
= NULL
;
1460 unsigned int fwsize
;
1464 if (!hdw
->hdw_desc
->fx2_firmware
.cnt
) {
1465 hdw
->fw1_state
= FW1_STATE_OK
;
1466 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1467 "Connected device type defines"
1468 " no firmware to upload; ignoring firmware");
1472 hdw
->fw1_state
= FW1_STATE_FAILED
; // default result
1474 trace_firmware("pvr2_upload_firmware1");
1476 ret
= pvr2_locate_firmware(hdw
,&fw_entry
,"fx2 controller",
1477 hdw
->hdw_desc
->fx2_firmware
.cnt
,
1478 hdw
->hdw_desc
->fx2_firmware
.lst
);
1480 if (ret
== -ENOENT
) hdw
->fw1_state
= FW1_STATE_MISSING
;
1484 usb_clear_halt(hdw
->usb_dev
, usb_sndbulkpipe(hdw
->usb_dev
, 0 & 0x7f));
1486 pipe
= usb_sndctrlpipe(hdw
->usb_dev
, 0);
1487 fwsize
= fw_entry
->size
;
1489 if ((fwsize
!= 0x2000) &&
1490 (!(hdw
->hdw_desc
->flag_fx2_16kb
&& (fwsize
== 0x4000)))) {
1491 if (hdw
->hdw_desc
->flag_fx2_16kb
) {
1492 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1493 "Wrong fx2 firmware size"
1494 " (expected 8192 or 16384, got %u)",
1497 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1498 "Wrong fx2 firmware size"
1499 " (expected 8192, got %u)",
1502 release_firmware(fw_entry
);
1506 fw_ptr
= kmalloc(0x800, GFP_KERNEL
);
1507 if (fw_ptr
== NULL
){
1508 release_firmware(fw_entry
);
1512 /* We have to hold the CPU during firmware upload. */
1513 pvr2_hdw_cpureset_assert(hdw
,1);
1515 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1519 for (address
= 0; address
< fwsize
; address
+= 0x800) {
1520 memcpy(fw_ptr
, fw_entry
->data
+ address
, 0x800);
1521 ret
+= usb_control_msg(hdw
->usb_dev
, pipe
, 0xa0, 0x40, address
,
1522 0, fw_ptr
, 0x800, HZ
);
1525 trace_firmware("Upload done, releasing device's CPU");
1527 /* Now release the CPU. It will disconnect and reconnect later. */
1528 pvr2_hdw_cpureset_assert(hdw
,0);
1531 release_firmware(fw_entry
);
1533 trace_firmware("Upload done (%d bytes sent)",ret
);
1535 /* We should have written fwsize bytes */
1536 if (ret
== fwsize
) {
1537 hdw
->fw1_state
= FW1_STATE_RELOAD
;
1546 * pvr2_upload_firmware2()
1548 * This uploads encoder firmware on endpoint 2.
1552 int pvr2_upload_firmware2(struct pvr2_hdw
*hdw
)
1554 const struct firmware
*fw_entry
= NULL
;
1556 unsigned int pipe
, fw_len
, fw_done
, bcnt
, icnt
;
1560 static const char *fw_files
[] = {
1561 CX2341X_FIRM_ENC_FILENAME
,
1564 if (hdw
->hdw_desc
->flag_skip_cx23416_firmware
) {
1568 trace_firmware("pvr2_upload_firmware2");
1570 ret
= pvr2_locate_firmware(hdw
,&fw_entry
,"encoder",
1571 ARRAY_SIZE(fw_files
), fw_files
);
1572 if (ret
< 0) return ret
;
1575 /* Since we're about to completely reinitialize the encoder,
1576 invalidate our cached copy of its configuration state. Next
1577 time we configure the encoder, then we'll fully configure it. */
1578 hdw
->enc_cur_valid
= 0;
1580 /* Encoder is about to be reset so note that as far as we're
1581 concerned now, the encoder has never been run. */
1582 del_timer_sync(&hdw
->encoder_run_timer
);
1583 if (hdw
->state_encoder_runok
) {
1584 hdw
->state_encoder_runok
= 0;
1585 trace_stbit("state_encoder_runok",hdw
->state_encoder_runok
);
1588 /* First prepare firmware loading */
1589 ret
|= pvr2_write_register(hdw
, 0x0048, 0xffffffff); /*interrupt mask*/
1590 ret
|= pvr2_hdw_gpio_chg_dir(hdw
,0xffffffff,0x00000088); /*gpio dir*/
1591 ret
|= pvr2_hdw_gpio_chg_out(hdw
,0xffffffff,0x00000008); /*gpio output state*/
1592 ret
|= pvr2_hdw_cmd_deep_reset(hdw
);
1593 ret
|= pvr2_write_register(hdw
, 0xa064, 0x00000000); /*APU command*/
1594 ret
|= pvr2_hdw_gpio_chg_dir(hdw
,0xffffffff,0x00000408); /*gpio dir*/
1595 ret
|= pvr2_hdw_gpio_chg_out(hdw
,0xffffffff,0x00000008); /*gpio output state*/
1596 ret
|= pvr2_write_register(hdw
, 0x9058, 0xffffffed); /*VPU ctrl*/
1597 ret
|= pvr2_write_register(hdw
, 0x9054, 0xfffffffd); /*reset hw blocks*/
1598 ret
|= pvr2_write_register(hdw
, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1599 ret
|= pvr2_write_register(hdw
, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1600 ret
|= pvr2_write_register(hdw
, 0x0700, 0x00000000); /*I2C clock*/
1601 ret
|= pvr2_write_register(hdw
, 0xaa00, 0x00000000); /*unknown*/
1602 ret
|= pvr2_write_register(hdw
, 0xaa04, 0x00057810); /*unknown*/
1603 ret
|= pvr2_write_register(hdw
, 0xaa10, 0x00148500); /*unknown*/
1604 ret
|= pvr2_write_register(hdw
, 0xaa18, 0x00840000); /*unknown*/
1605 ret
|= pvr2_issue_simple_cmd(hdw
,FX2CMD_FWPOST1
);
1606 ret
|= pvr2_issue_simple_cmd(hdw
,FX2CMD_MEMSEL
| (1 << 8) | (0 << 16));
1609 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1610 "firmware2 upload prep failed, ret=%d",ret
);
1611 release_firmware(fw_entry
);
1615 /* Now send firmware */
1617 fw_len
= fw_entry
->size
;
1619 if (fw_len
% sizeof(u32
)) {
1620 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1621 "size of %s firmware"
1622 " must be a multiple of %zu bytes",
1623 fw_files
[fwidx
],sizeof(u32
));
1624 release_firmware(fw_entry
);
1629 fw_ptr
= kmalloc(FIRMWARE_CHUNK_SIZE
, GFP_KERNEL
);
1630 if (fw_ptr
== NULL
){
1631 release_firmware(fw_entry
);
1632 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1633 "failed to allocate memory for firmware2 upload");
1638 pipe
= usb_sndbulkpipe(hdw
->usb_dev
, PVR2_FIRMWARE_ENDPOINT
);
1641 for (fw_done
= 0; fw_done
< fw_len
;) {
1642 bcnt
= fw_len
- fw_done
;
1643 if (bcnt
> FIRMWARE_CHUNK_SIZE
) bcnt
= FIRMWARE_CHUNK_SIZE
;
1644 memcpy(fw_ptr
, fw_entry
->data
+ fw_done
, bcnt
);
1645 /* Usbsnoop log shows that we must swap bytes... */
1646 /* Some background info: The data being swapped here is a
1647 firmware image destined for the mpeg encoder chip that
1648 lives at the other end of a USB endpoint. The encoder
1649 chip always talks in 32 bit chunks and its storage is
1650 organized into 32 bit words. However from the file
1651 system to the encoder chip everything is purely a byte
1652 stream. The firmware file's contents are always 32 bit
1653 swapped from what the encoder expects. Thus the need
1654 always exists to swap the bytes regardless of the endian
1655 type of the host processor and therefore swab32() makes
1657 for (icnt
= 0; icnt
< bcnt
/4 ; icnt
++)
1658 ((u32
*)fw_ptr
)[icnt
] = swab32(((u32
*)fw_ptr
)[icnt
]);
1660 ret
|= usb_bulk_msg(hdw
->usb_dev
, pipe
, fw_ptr
,bcnt
,
1661 &actual_length
, HZ
);
1662 ret
|= (actual_length
!= bcnt
);
1667 trace_firmware("upload of %s : %i / %i ",
1668 fw_files
[fwidx
],fw_done
,fw_len
);
1671 release_firmware(fw_entry
);
1674 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1675 "firmware2 upload transfer failure");
1681 ret
|= pvr2_write_register(hdw
, 0x9054, 0xffffffff); /*reset hw blocks*/
1682 ret
|= pvr2_write_register(hdw
, 0x9058, 0xffffffe8); /*VPU ctrl*/
1683 ret
|= pvr2_issue_simple_cmd(hdw
,FX2CMD_MEMSEL
| (1 << 8) | (0 << 16));
1686 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1687 "firmware2 upload post-proc failure");
1691 if (hdw
->hdw_desc
->signal_routing_scheme
==
1692 PVR2_ROUTING_SCHEME_GOTVIEW
) {
1693 /* Ensure that GPIO 11 is set to output for GOTVIEW
1695 pvr2_hdw_gpio_chg_dir(hdw
,(1 << 11),~0);
1701 static const char *pvr2_get_state_name(unsigned int st
)
1703 if (st
< ARRAY_SIZE(pvr2_state_names
)) {
1704 return pvr2_state_names
[st
];
1709 static int pvr2_decoder_enable(struct pvr2_hdw
*hdw
,int enablefl
)
1711 /* Even though we really only care about the video decoder chip at
1712 this point, we'll broadcast stream on/off to all sub-devices
1713 anyway, just in case somebody else wants to hear the
1715 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 stream=%s",
1716 (enablefl
? "on" : "off"));
1717 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, video
, s_stream
, enablefl
);
1718 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, audio
, s_stream
, enablefl
);
1719 if (hdw
->decoder_client_id
) {
1720 /* We get here if the encoder has been noticed. Otherwise
1721 we'll issue a warning to the user (which should
1722 normally never happen). */
1725 if (!hdw
->flag_decoder_missed
) {
1726 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1727 "WARNING: No decoder present");
1728 hdw
->flag_decoder_missed
= !0;
1729 trace_stbit("flag_decoder_missed",
1730 hdw
->flag_decoder_missed
);
1736 int pvr2_hdw_get_state(struct pvr2_hdw
*hdw
)
1738 return hdw
->master_state
;
1742 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw
*hdw
)
1744 if (!hdw
->flag_tripped
) return 0;
1745 hdw
->flag_tripped
= 0;
1746 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1747 "Clearing driver error statuss");
1752 int pvr2_hdw_untrip(struct pvr2_hdw
*hdw
)
1755 LOCK_TAKE(hdw
->big_lock
); do {
1756 fl
= pvr2_hdw_untrip_unlocked(hdw
);
1757 } while (0); LOCK_GIVE(hdw
->big_lock
);
1758 if (fl
) pvr2_hdw_state_sched(hdw
);
1765 int pvr2_hdw_get_streaming(struct pvr2_hdw
*hdw
)
1767 return hdw
->state_pipeline_req
!= 0;
1771 int pvr2_hdw_set_streaming(struct pvr2_hdw
*hdw
,int enable_flag
)
1774 LOCK_TAKE(hdw
->big_lock
); do {
1775 pvr2_hdw_untrip_unlocked(hdw
);
1776 if ((!enable_flag
) != !(hdw
->state_pipeline_req
)) {
1777 hdw
->state_pipeline_req
= enable_flag
!= 0;
1778 pvr2_trace(PVR2_TRACE_START_STOP
,
1779 "/*--TRACE_STREAM--*/ %s",
1780 enable_flag
? "enable" : "disable");
1782 pvr2_hdw_state_sched(hdw
);
1783 } while (0); LOCK_GIVE(hdw
->big_lock
);
1784 if ((ret
= pvr2_hdw_wait(hdw
,0)) < 0) return ret
;
1786 while ((st
= hdw
->master_state
) != PVR2_STATE_RUN
) {
1787 if (st
!= PVR2_STATE_READY
) return -EIO
;
1788 if ((ret
= pvr2_hdw_wait(hdw
,st
)) < 0) return ret
;
1795 int pvr2_hdw_set_stream_type(struct pvr2_hdw
*hdw
,enum pvr2_config config
)
1798 LOCK_TAKE(hdw
->big_lock
);
1799 if ((fl
= (hdw
->desired_stream_type
!= config
)) != 0) {
1800 hdw
->desired_stream_type
= config
;
1801 hdw
->state_pipeline_config
= 0;
1802 trace_stbit("state_pipeline_config",
1803 hdw
->state_pipeline_config
);
1804 pvr2_hdw_state_sched(hdw
);
1806 LOCK_GIVE(hdw
->big_lock
);
1808 return pvr2_hdw_wait(hdw
,0);
1812 static int get_default_tuner_type(struct pvr2_hdw
*hdw
)
1814 int unit_number
= hdw
->unit_number
;
1816 if ((unit_number
>= 0) && (unit_number
< PVR_NUM
)) {
1817 tp
= tuner
[unit_number
];
1819 if (tp
< 0) return -EINVAL
;
1820 hdw
->tuner_type
= tp
;
1821 hdw
->tuner_updated
= !0;
1826 static v4l2_std_id
get_default_standard(struct pvr2_hdw
*hdw
)
1828 int unit_number
= hdw
->unit_number
;
1830 if ((unit_number
>= 0) && (unit_number
< PVR_NUM
)) {
1831 tp
= video_std
[unit_number
];
1838 static unsigned int get_default_error_tolerance(struct pvr2_hdw
*hdw
)
1840 int unit_number
= hdw
->unit_number
;
1842 if ((unit_number
>= 0) && (unit_number
< PVR_NUM
)) {
1843 tp
= tolerance
[unit_number
];
1849 static int pvr2_hdw_check_firmware(struct pvr2_hdw
*hdw
)
1851 /* Try a harmless request to fetch the eeprom's address over
1852 endpoint 1. See what happens. Only the full FX2 image can
1853 respond to this. If this probe fails then likely the FX2
1854 firmware needs be loaded. */
1856 LOCK_TAKE(hdw
->ctl_lock
); do {
1857 hdw
->cmd_buffer
[0] = FX2CMD_GET_EEPROM_ADDR
;
1858 result
= pvr2_send_request_ex(hdw
,HZ
*1,!0,
1861 if (result
< 0) break;
1862 } while(0); LOCK_GIVE(hdw
->ctl_lock
);
1864 pvr2_trace(PVR2_TRACE_INIT
,
1865 "Probe of device endpoint 1 result status %d",
1868 pvr2_trace(PVR2_TRACE_INIT
,
1869 "Probe of device endpoint 1 succeeded");
1874 struct pvr2_std_hack
{
1875 v4l2_std_id pat
; /* Pattern to match */
1876 v4l2_std_id msk
; /* Which bits we care about */
1877 v4l2_std_id std
; /* What additional standards or default to set */
1880 /* This data structure labels specific combinations of standards from
1881 tveeprom that we'll try to recognize. If we recognize one, then assume
1882 a specified default standard to use. This is here because tveeprom only
1883 tells us about available standards not the intended default standard (if
1884 any) for the device in question. We guess the default based on what has
1885 been reported as available. Note that this is only for guessing a
1886 default - which can always be overridden explicitly - and if the user
1887 has otherwise named a default then that default will always be used in
1888 place of this table. */
1889 static const struct pvr2_std_hack std_eeprom_maps
[] = {
1891 .pat
= V4L2_STD_B
|V4L2_STD_GH
,
1892 .std
= V4L2_STD_PAL_B
|V4L2_STD_PAL_B1
|V4L2_STD_PAL_G
,
1896 .std
= V4L2_STD_NTSC_M
,
1899 .pat
= V4L2_STD_PAL_I
,
1900 .std
= V4L2_STD_PAL_I
,
1903 .pat
= V4L2_STD_SECAM_L
|V4L2_STD_SECAM_LC
,
1904 .std
= V4L2_STD_SECAM_L
|V4L2_STD_SECAM_LC
,
1908 .std
= V4L2_STD_PAL_D
|V4L2_STD_PAL_D1
|V4L2_STD_PAL_K
,
1912 static void pvr2_hdw_setup_std(struct pvr2_hdw
*hdw
)
1916 v4l2_std_id std1
,std2
,std3
;
1918 std1
= get_default_standard(hdw
);
1919 std3
= std1
? 0 : hdw
->hdw_desc
->default_std_mask
;
1921 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),hdw
->std_mask_eeprom
);
1922 pvr2_trace(PVR2_TRACE_STD
,
1923 "Supported video standard(s) reported available"
1924 " in hardware: %.*s",
1927 hdw
->std_mask_avail
= hdw
->std_mask_eeprom
;
1929 std2
= (std1
|std3
) & ~hdw
->std_mask_avail
;
1931 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),std2
);
1932 pvr2_trace(PVR2_TRACE_STD
,
1933 "Expanding supported video standards"
1934 " to include: %.*s",
1936 hdw
->std_mask_avail
|= std2
;
1939 pvr2_hdw_internal_set_std_avail(hdw
);
1942 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),std1
);
1943 pvr2_trace(PVR2_TRACE_STD
,
1944 "Initial video standard forced to %.*s",
1946 hdw
->std_mask_cur
= std1
;
1947 hdw
->std_dirty
= !0;
1948 pvr2_hdw_internal_find_stdenum(hdw
);
1952 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),std3
);
1953 pvr2_trace(PVR2_TRACE_STD
,
1954 "Initial video standard"
1955 " (determined by device type): %.*s",bcnt
,buf
);
1956 hdw
->std_mask_cur
= std3
;
1957 hdw
->std_dirty
= !0;
1958 pvr2_hdw_internal_find_stdenum(hdw
);
1964 for (idx
= 0; idx
< ARRAY_SIZE(std_eeprom_maps
); idx
++) {
1965 if (std_eeprom_maps
[idx
].msk
?
1966 ((std_eeprom_maps
[idx
].pat
^
1967 hdw
->std_mask_eeprom
) &
1968 std_eeprom_maps
[idx
].msk
) :
1969 (std_eeprom_maps
[idx
].pat
!=
1970 hdw
->std_mask_eeprom
)) continue;
1971 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),
1972 std_eeprom_maps
[idx
].std
);
1973 pvr2_trace(PVR2_TRACE_STD
,
1974 "Initial video standard guessed as %.*s",
1976 hdw
->std_mask_cur
= std_eeprom_maps
[idx
].std
;
1977 hdw
->std_dirty
= !0;
1978 pvr2_hdw_internal_find_stdenum(hdw
);
1983 if (hdw
->std_enum_cnt
> 1) {
1984 // Autoselect the first listed standard
1985 hdw
->std_enum_cur
= 1;
1986 hdw
->std_mask_cur
= hdw
->std_defs
[hdw
->std_enum_cur
-1].id
;
1987 hdw
->std_dirty
= !0;
1988 pvr2_trace(PVR2_TRACE_STD
,
1989 "Initial video standard auto-selected to %s",
1990 hdw
->std_defs
[hdw
->std_enum_cur
-1].name
);
1994 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1995 "Unable to select a viable initial video standard");
1999 static unsigned int pvr2_copy_i2c_addr_list(
2000 unsigned short *dst
, const unsigned char *src
,
2001 unsigned int dst_max
)
2003 unsigned int cnt
= 0;
2005 while (src
[cnt
] && (cnt
+ 1) < dst_max
) {
2006 dst
[cnt
] = src
[cnt
];
2009 dst
[cnt
] = I2C_CLIENT_END
;
2014 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw
*hdw
)
2017 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
2018 for cx25840 causes that module to correctly set up its video
2019 scaling. This is really a problem in the cx25840 module itself,
2020 but we work around it here. The problem has not been seen in
2021 ivtv because there VBI is supported and set up. We don't do VBI
2022 here (at least not yet) and thus we never attempted to even set
2025 struct v4l2_format fmt
;
2026 if (hdw
->decoder_client_id
!= PVR2_CLIENT_ID_CX25840
) {
2027 /* We're not using a cx25840 so don't enable the hack */
2031 pvr2_trace(PVR2_TRACE_INIT
,
2033 " Executing cx25840 VBI hack",
2034 hdw
->decoder_client_id
);
2035 memset(&fmt
, 0, sizeof(fmt
));
2036 fmt
.type
= V4L2_BUF_TYPE_SLICED_VBI_CAPTURE
;
2037 fmt
.fmt
.sliced
.service_lines
[0][21] = V4L2_SLICED_CAPTION_525
;
2038 fmt
.fmt
.sliced
.service_lines
[1][21] = V4L2_SLICED_CAPTION_525
;
2039 v4l2_device_call_all(&hdw
->v4l2_dev
, hdw
->decoder_client_id
,
2040 vbi
, s_sliced_fmt
, &fmt
.fmt
.sliced
);
2044 static int pvr2_hdw_load_subdev(struct pvr2_hdw
*hdw
,
2045 const struct pvr2_device_client_desc
*cd
)
2049 struct v4l2_subdev
*sd
;
2050 unsigned int i2ccnt
;
2051 const unsigned char *p
;
2052 /* Arbitrary count - max # i2c addresses we will probe */
2053 unsigned short i2caddr
[25];
2055 mid
= cd
->module_id
;
2056 fname
= (mid
< ARRAY_SIZE(module_names
)) ? module_names
[mid
] : NULL
;
2058 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2059 "Module ID %u for device %s has no name?"
2060 " The driver might have a configuration problem.",
2062 hdw
->hdw_desc
->description
);
2065 pvr2_trace(PVR2_TRACE_INIT
,
2066 "Module ID %u (%s) for device %s being loaded...",
2068 hdw
->hdw_desc
->description
);
2070 i2ccnt
= pvr2_copy_i2c_addr_list(i2caddr
, cd
->i2c_address_list
,
2071 ARRAY_SIZE(i2caddr
));
2072 if (!i2ccnt
&& ((p
= (mid
< ARRAY_SIZE(module_i2c_addresses
)) ?
2073 module_i2c_addresses
[mid
] : NULL
) != NULL
)) {
2074 /* Second chance: Try default i2c address list */
2075 i2ccnt
= pvr2_copy_i2c_addr_list(i2caddr
, p
,
2076 ARRAY_SIZE(i2caddr
));
2078 pvr2_trace(PVR2_TRACE_INIT
,
2080 " Using default i2c address list",
2086 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2087 "Module ID %u (%s) for device %s:"
2088 " No i2c addresses."
2089 " The driver might have a configuration problem.",
2090 mid
, fname
, hdw
->hdw_desc
->description
);
2095 pvr2_trace(PVR2_TRACE_INIT
,
2097 " Setting up with specified i2c address 0x%x",
2099 sd
= v4l2_i2c_new_subdev(&hdw
->v4l2_dev
, &hdw
->i2c_adap
,
2100 fname
, i2caddr
[0], NULL
);
2102 pvr2_trace(PVR2_TRACE_INIT
,
2104 " Setting up with address probe list",
2106 sd
= v4l2_i2c_new_subdev(&hdw
->v4l2_dev
, &hdw
->i2c_adap
,
2111 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2112 "Module ID %u (%s) for device %s failed to load."
2113 " Possible missing sub-device kernel module or"
2114 " initialization failure within module.",
2115 mid
, fname
, hdw
->hdw_desc
->description
);
2119 /* Tag this sub-device instance with the module ID we know about.
2120 In other places we'll use that tag to determine if the instance
2121 requires special handling. */
2124 pvr2_trace(PVR2_TRACE_INFO
, "Attached sub-driver %s", fname
);
2127 /* client-specific setup... */
2129 case PVR2_CLIENT_ID_CX25840
:
2130 case PVR2_CLIENT_ID_SAA7115
:
2131 hdw
->decoder_client_id
= mid
;
2140 static void pvr2_hdw_load_modules(struct pvr2_hdw
*hdw
)
2143 const struct pvr2_string_table
*cm
;
2144 const struct pvr2_device_client_table
*ct
;
2147 cm
= &hdw
->hdw_desc
->client_modules
;
2148 for (idx
= 0; idx
< cm
->cnt
; idx
++) {
2149 request_module(cm
->lst
[idx
]);
2152 ct
= &hdw
->hdw_desc
->client_table
;
2153 for (idx
= 0; idx
< ct
->cnt
; idx
++) {
2154 if (pvr2_hdw_load_subdev(hdw
, &ct
->lst
[idx
]) < 0) okFl
= 0;
2157 hdw
->flag_modulefail
= !0;
2158 pvr2_hdw_render_useless(hdw
);
2163 static void pvr2_hdw_setup_low(struct pvr2_hdw
*hdw
)
2167 struct pvr2_ctrl
*cptr
;
2169 if (hdw
->hdw_desc
->fx2_firmware
.cnt
) {
2172 (hdw
->usb_intf
->cur_altsetting
->desc
.bNumEndpoints
2175 pvr2_trace(PVR2_TRACE_INIT
,
2176 "USB endpoint config looks strange"
2177 "; possibly firmware needs to be"
2182 reloadFl
= !pvr2_hdw_check_firmware(hdw
);
2184 pvr2_trace(PVR2_TRACE_INIT
,
2185 "Check for FX2 firmware failed"
2186 "; possibly firmware needs to be"
2191 if (pvr2_upload_firmware1(hdw
) != 0) {
2192 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2193 "Failure uploading firmware1");
2198 hdw
->fw1_state
= FW1_STATE_OK
;
2200 if (!pvr2_hdw_dev_ok(hdw
)) return;
2202 hdw
->force_dirty
= !0;
2204 if (!hdw
->hdw_desc
->flag_no_powerup
) {
2205 pvr2_hdw_cmd_powerup(hdw
);
2206 if (!pvr2_hdw_dev_ok(hdw
)) return;
2209 /* Take the IR chip out of reset, if appropriate */
2210 if (hdw
->ir_scheme_active
== PVR2_IR_SCHEME_ZILOG
) {
2211 pvr2_issue_simple_cmd(hdw
,
2212 FX2CMD_HCW_ZILOG_RESET
|
2217 // This step MUST happen after the earlier powerup step.
2218 pvr2_i2c_core_init(hdw
);
2219 if (!pvr2_hdw_dev_ok(hdw
)) return;
2221 pvr2_hdw_load_modules(hdw
);
2222 if (!pvr2_hdw_dev_ok(hdw
)) return;
2224 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, load_fw
);
2226 for (idx
= 0; idx
< CTRLDEF_COUNT
; idx
++) {
2227 cptr
= hdw
->controls
+ idx
;
2228 if (cptr
->info
->skip_init
) continue;
2229 if (!cptr
->info
->set_value
) continue;
2230 cptr
->info
->set_value(cptr
,~0,cptr
->info
->default_value
);
2233 pvr2_hdw_cx25840_vbi_hack(hdw
);
2235 /* Set up special default values for the television and radio
2236 frequencies here. It's not really important what these defaults
2237 are, but I set them to something usable in the Chicago area just
2238 to make driver testing a little easier. */
2240 hdw
->freqValTelevision
= default_tv_freq
;
2241 hdw
->freqValRadio
= default_radio_freq
;
2243 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2244 // thread-safe against the normal pvr2_send_request() mechanism.
2245 // (We should make it thread safe).
2247 if (hdw
->hdw_desc
->flag_has_hauppauge_rom
) {
2248 ret
= pvr2_hdw_get_eeprom_addr(hdw
);
2249 if (!pvr2_hdw_dev_ok(hdw
)) return;
2251 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2252 "Unable to determine location of eeprom,"
2255 hdw
->eeprom_addr
= ret
;
2256 pvr2_eeprom_analyze(hdw
);
2257 if (!pvr2_hdw_dev_ok(hdw
)) return;
2260 hdw
->tuner_type
= hdw
->hdw_desc
->default_tuner_type
;
2261 hdw
->tuner_updated
= !0;
2262 hdw
->std_mask_eeprom
= V4L2_STD_ALL
;
2265 if (hdw
->serial_number
) {
2266 idx
= scnprintf(hdw
->identifier
, sizeof(hdw
->identifier
) - 1,
2267 "sn-%lu", hdw
->serial_number
);
2268 } else if (hdw
->unit_number
>= 0) {
2269 idx
= scnprintf(hdw
->identifier
, sizeof(hdw
->identifier
) - 1,
2271 hdw
->unit_number
+ 'a');
2273 idx
= scnprintf(hdw
->identifier
, sizeof(hdw
->identifier
) - 1,
2276 hdw
->identifier
[idx
] = 0;
2278 pvr2_hdw_setup_std(hdw
);
2280 if (!get_default_tuner_type(hdw
)) {
2281 pvr2_trace(PVR2_TRACE_INIT
,
2282 "pvr2_hdw_setup: Tuner type overridden to %d",
2287 if (!pvr2_hdw_dev_ok(hdw
)) return;
2289 if (hdw
->hdw_desc
->signal_routing_scheme
==
2290 PVR2_ROUTING_SCHEME_GOTVIEW
) {
2291 /* Ensure that GPIO 11 is set to output for GOTVIEW
2293 pvr2_hdw_gpio_chg_dir(hdw
,(1 << 11),~0);
2296 pvr2_hdw_commit_setup(hdw
);
2298 hdw
->vid_stream
= pvr2_stream_create();
2299 if (!pvr2_hdw_dev_ok(hdw
)) return;
2300 pvr2_trace(PVR2_TRACE_INIT
,
2301 "pvr2_hdw_setup: video stream is %p",hdw
->vid_stream
);
2302 if (hdw
->vid_stream
) {
2303 idx
= get_default_error_tolerance(hdw
);
2305 pvr2_trace(PVR2_TRACE_INIT
,
2306 "pvr2_hdw_setup: video stream %p"
2307 " setting tolerance %u",
2308 hdw
->vid_stream
,idx
);
2310 pvr2_stream_setup(hdw
->vid_stream
,hdw
->usb_dev
,
2311 PVR2_VID_ENDPOINT
,idx
);
2314 if (!pvr2_hdw_dev_ok(hdw
)) return;
2316 hdw
->flag_init_ok
= !0;
2318 pvr2_hdw_state_sched(hdw
);
2322 /* Set up the structure and attempt to put the device into a usable state.
2323 This can be a time-consuming operation, which is why it is not done
2324 internally as part of the create() step. */
2325 static void pvr2_hdw_setup(struct pvr2_hdw
*hdw
)
2327 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_setup(hdw=%p) begin",hdw
);
2329 pvr2_hdw_setup_low(hdw
);
2330 pvr2_trace(PVR2_TRACE_INIT
,
2331 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2332 hdw
,pvr2_hdw_dev_ok(hdw
),hdw
->flag_init_ok
);
2333 if (pvr2_hdw_dev_ok(hdw
)) {
2334 if (hdw
->flag_init_ok
) {
2337 "Device initialization"
2338 " completed successfully.");
2341 if (hdw
->fw1_state
== FW1_STATE_RELOAD
) {
2344 "Device microcontroller firmware"
2345 " (re)loaded; it should now reset"
2350 PVR2_TRACE_ERROR_LEGS
,
2351 "Device initialization was not successful.");
2352 if (hdw
->fw1_state
== FW1_STATE_MISSING
) {
2354 PVR2_TRACE_ERROR_LEGS
,
2355 "Giving up since device"
2356 " microcontroller firmware"
2357 " appears to be missing.");
2361 if (hdw
->flag_modulefail
) {
2363 PVR2_TRACE_ERROR_LEGS
,
2364 "***WARNING*** pvrusb2 driver initialization"
2365 " failed due to the failure of one or more"
2366 " sub-device kernel modules.");
2368 PVR2_TRACE_ERROR_LEGS
,
2369 "You need to resolve the failing condition"
2370 " before this driver can function. There"
2371 " should be some earlier messages giving more"
2372 " information about the problem.");
2377 PVR2_TRACE_ERROR_LEGS
,
2378 "Attempting pvrusb2 recovery by reloading"
2379 " primary firmware.");
2381 PVR2_TRACE_ERROR_LEGS
,
2382 "If this works, device should disconnect"
2383 " and reconnect in a sane state.");
2384 hdw
->fw1_state
= FW1_STATE_UNKNOWN
;
2385 pvr2_upload_firmware1(hdw
);
2388 PVR2_TRACE_ERROR_LEGS
,
2389 "***WARNING*** pvrusb2 device hardware"
2390 " appears to be jammed"
2391 " and I can't clear it.");
2393 PVR2_TRACE_ERROR_LEGS
,
2394 "You might need to power cycle"
2395 " the pvrusb2 device"
2396 " in order to recover.");
2399 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_setup(hdw=%p) end",hdw
);
2403 /* Perform second stage initialization. Set callback pointer first so that
2404 we can avoid a possible initialization race (if the kernel thread runs
2405 before the callback has been set). */
2406 int pvr2_hdw_initialize(struct pvr2_hdw
*hdw
,
2407 void (*callback_func
)(void *),
2408 void *callback_data
)
2410 LOCK_TAKE(hdw
->big_lock
); do {
2411 if (hdw
->flag_disconnected
) {
2412 /* Handle a race here: If we're already
2413 disconnected by this point, then give up. If we
2414 get past this then we'll remain connected for
2415 the duration of initialization since the entire
2416 initialization sequence is now protected by the
2420 hdw
->state_data
= callback_data
;
2421 hdw
->state_func
= callback_func
;
2422 pvr2_hdw_setup(hdw
);
2423 } while (0); LOCK_GIVE(hdw
->big_lock
);
2424 return hdw
->flag_init_ok
;
2428 /* Create, set up, and return a structure for interacting with the
2429 underlying hardware. */
2430 struct pvr2_hdw
*pvr2_hdw_create(struct usb_interface
*intf
,
2431 const struct usb_device_id
*devid
)
2433 unsigned int idx
,cnt1
,cnt2
,m
;
2434 struct pvr2_hdw
*hdw
= NULL
;
2436 struct pvr2_ctrl
*cptr
;
2437 struct usb_device
*usb_dev
;
2438 const struct pvr2_device_desc
*hdw_desc
;
2440 struct v4l2_queryctrl qctrl
;
2441 struct pvr2_ctl_info
*ciptr
;
2443 usb_dev
= interface_to_usbdev(intf
);
2445 hdw_desc
= (const struct pvr2_device_desc
*)(devid
->driver_info
);
2447 if (hdw_desc
== NULL
) {
2448 pvr2_trace(PVR2_TRACE_INIT
, "pvr2_hdw_create:"
2449 " No device description pointer,"
2450 " unable to continue.");
2451 pvr2_trace(PVR2_TRACE_INIT
, "If you have a new device type,"
2452 " please contact Mike Isely <isely@pobox.com>"
2453 " to get it included in the driver\n");
2457 hdw
= kzalloc(sizeof(*hdw
),GFP_KERNEL
);
2458 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2459 hdw
,hdw_desc
->description
);
2460 pvr2_trace(PVR2_TRACE_INFO
, "Hardware description: %s",
2461 hdw_desc
->description
);
2462 if (hdw_desc
->flag_is_experimental
) {
2463 pvr2_trace(PVR2_TRACE_INFO
, "**********");
2464 pvr2_trace(PVR2_TRACE_INFO
,
2465 "WARNING: Support for this device (%s) is"
2466 " experimental.", hdw_desc
->description
);
2467 pvr2_trace(PVR2_TRACE_INFO
,
2468 "Important functionality might not be"
2469 " entirely working.");
2470 pvr2_trace(PVR2_TRACE_INFO
,
2471 "Please consider contacting the driver author to"
2472 " help with further stabilization of the driver.");
2473 pvr2_trace(PVR2_TRACE_INFO
, "**********");
2475 if (!hdw
) goto fail
;
2477 init_timer(&hdw
->quiescent_timer
);
2478 hdw
->quiescent_timer
.data
= (unsigned long)hdw
;
2479 hdw
->quiescent_timer
.function
= pvr2_hdw_quiescent_timeout
;
2481 init_timer(&hdw
->decoder_stabilization_timer
);
2482 hdw
->decoder_stabilization_timer
.data
= (unsigned long)hdw
;
2483 hdw
->decoder_stabilization_timer
.function
=
2484 pvr2_hdw_decoder_stabilization_timeout
;
2486 init_timer(&hdw
->encoder_wait_timer
);
2487 hdw
->encoder_wait_timer
.data
= (unsigned long)hdw
;
2488 hdw
->encoder_wait_timer
.function
= pvr2_hdw_encoder_wait_timeout
;
2490 init_timer(&hdw
->encoder_run_timer
);
2491 hdw
->encoder_run_timer
.data
= (unsigned long)hdw
;
2492 hdw
->encoder_run_timer
.function
= pvr2_hdw_encoder_run_timeout
;
2494 hdw
->master_state
= PVR2_STATE_DEAD
;
2496 init_waitqueue_head(&hdw
->state_wait_data
);
2498 hdw
->tuner_signal_stale
= !0;
2499 cx2341x_fill_defaults(&hdw
->enc_ctl_state
);
2501 /* Calculate which inputs are OK */
2503 if (hdw_desc
->flag_has_analogtuner
) m
|= 1 << PVR2_CVAL_INPUT_TV
;
2504 if (hdw_desc
->digital_control_scheme
!= PVR2_DIGITAL_SCHEME_NONE
) {
2505 m
|= 1 << PVR2_CVAL_INPUT_DTV
;
2507 if (hdw_desc
->flag_has_svideo
) m
|= 1 << PVR2_CVAL_INPUT_SVIDEO
;
2508 if (hdw_desc
->flag_has_composite
) m
|= 1 << PVR2_CVAL_INPUT_COMPOSITE
;
2509 if (hdw_desc
->flag_has_fmradio
) m
|= 1 << PVR2_CVAL_INPUT_RADIO
;
2510 hdw
->input_avail_mask
= m
;
2511 hdw
->input_allowed_mask
= hdw
->input_avail_mask
;
2513 /* If not a hybrid device, pathway_state never changes. So
2514 initialize it here to what it should forever be. */
2515 if (!(hdw
->input_avail_mask
& (1 << PVR2_CVAL_INPUT_DTV
))) {
2516 hdw
->pathway_state
= PVR2_PATHWAY_ANALOG
;
2517 } else if (!(hdw
->input_avail_mask
& (1 << PVR2_CVAL_INPUT_TV
))) {
2518 hdw
->pathway_state
= PVR2_PATHWAY_DIGITAL
;
2521 hdw
->control_cnt
= CTRLDEF_COUNT
;
2522 hdw
->control_cnt
+= MPEGDEF_COUNT
;
2523 hdw
->controls
= kzalloc(sizeof(struct pvr2_ctrl
) * hdw
->control_cnt
,
2525 if (!hdw
->controls
) goto fail
;
2526 hdw
->hdw_desc
= hdw_desc
;
2527 hdw
->ir_scheme_active
= hdw
->hdw_desc
->ir_scheme
;
2528 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2529 cptr
= hdw
->controls
+ idx
;
2532 for (idx
= 0; idx
< 32; idx
++) {
2533 hdw
->std_mask_ptrs
[idx
] = hdw
->std_mask_names
[idx
];
2535 for (idx
= 0; idx
< CTRLDEF_COUNT
; idx
++) {
2536 cptr
= hdw
->controls
+ idx
;
2537 cptr
->info
= control_defs
+idx
;
2540 /* Ensure that default input choice is a valid one. */
2541 m
= hdw
->input_avail_mask
;
2542 if (m
) for (idx
= 0; idx
< (sizeof(m
) << 3); idx
++) {
2543 if (!((1 << idx
) & m
)) continue;
2544 hdw
->input_val
= idx
;
2548 /* Define and configure additional controls from cx2341x module. */
2549 hdw
->mpeg_ctrl_info
= kzalloc(
2550 sizeof(*(hdw
->mpeg_ctrl_info
)) * MPEGDEF_COUNT
, GFP_KERNEL
);
2551 if (!hdw
->mpeg_ctrl_info
) goto fail
;
2552 for (idx
= 0; idx
< MPEGDEF_COUNT
; idx
++) {
2553 cptr
= hdw
->controls
+ idx
+ CTRLDEF_COUNT
;
2554 ciptr
= &(hdw
->mpeg_ctrl_info
[idx
].info
);
2555 ciptr
->desc
= hdw
->mpeg_ctrl_info
[idx
].desc
;
2556 ciptr
->name
= mpeg_ids
[idx
].strid
;
2557 ciptr
->v4l_id
= mpeg_ids
[idx
].id
;
2558 ciptr
->skip_init
= !0;
2559 ciptr
->get_value
= ctrl_cx2341x_get
;
2560 ciptr
->get_v4lflags
= ctrl_cx2341x_getv4lflags
;
2561 ciptr
->is_dirty
= ctrl_cx2341x_is_dirty
;
2562 if (!idx
) ciptr
->clear_dirty
= ctrl_cx2341x_clear_dirty
;
2563 qctrl
.id
= ciptr
->v4l_id
;
2564 cx2341x_ctrl_query(&hdw
->enc_ctl_state
,&qctrl
);
2565 if (!(qctrl
.flags
& V4L2_CTRL_FLAG_READ_ONLY
)) {
2566 ciptr
->set_value
= ctrl_cx2341x_set
;
2568 strncpy(hdw
->mpeg_ctrl_info
[idx
].desc
,qctrl
.name
,
2569 PVR2_CTLD_INFO_DESC_SIZE
);
2570 hdw
->mpeg_ctrl_info
[idx
].desc
[PVR2_CTLD_INFO_DESC_SIZE
-1] = 0;
2571 ciptr
->default_value
= qctrl
.default_value
;
2572 switch (qctrl
.type
) {
2574 case V4L2_CTRL_TYPE_INTEGER
:
2575 ciptr
->type
= pvr2_ctl_int
;
2576 ciptr
->def
.type_int
.min_value
= qctrl
.minimum
;
2577 ciptr
->def
.type_int
.max_value
= qctrl
.maximum
;
2579 case V4L2_CTRL_TYPE_BOOLEAN
:
2580 ciptr
->type
= pvr2_ctl_bool
;
2582 case V4L2_CTRL_TYPE_MENU
:
2583 ciptr
->type
= pvr2_ctl_enum
;
2584 ciptr
->def
.type_enum
.value_names
=
2585 cx2341x_ctrl_get_menu(&hdw
->enc_ctl_state
,
2588 ciptr
->def
.type_enum
.value_names
[cnt1
] != NULL
;
2590 ciptr
->def
.type_enum
.count
= cnt1
;
2596 // Initialize video standard enum dynamic control
2597 cptr
= pvr2_hdw_get_ctrl_by_id(hdw
,PVR2_CID_STDENUM
);
2599 memcpy(&hdw
->std_info_enum
,cptr
->info
,
2600 sizeof(hdw
->std_info_enum
));
2601 cptr
->info
= &hdw
->std_info_enum
;
2604 // Initialize control data regarding video standard masks
2605 valid_std_mask
= pvr2_std_get_usable();
2606 for (idx
= 0; idx
< 32; idx
++) {
2607 if (!(valid_std_mask
& (1 << idx
))) continue;
2608 cnt1
= pvr2_std_id_to_str(
2609 hdw
->std_mask_names
[idx
],
2610 sizeof(hdw
->std_mask_names
[idx
])-1,
2612 hdw
->std_mask_names
[idx
][cnt1
] = 0;
2614 cptr
= pvr2_hdw_get_ctrl_by_id(hdw
,PVR2_CID_STDAVAIL
);
2616 memcpy(&hdw
->std_info_avail
,cptr
->info
,
2617 sizeof(hdw
->std_info_avail
));
2618 cptr
->info
= &hdw
->std_info_avail
;
2619 hdw
->std_info_avail
.def
.type_bitmask
.bit_names
=
2621 hdw
->std_info_avail
.def
.type_bitmask
.valid_bits
=
2624 cptr
= pvr2_hdw_get_ctrl_by_id(hdw
,PVR2_CID_STDCUR
);
2626 memcpy(&hdw
->std_info_cur
,cptr
->info
,
2627 sizeof(hdw
->std_info_cur
));
2628 cptr
->info
= &hdw
->std_info_cur
;
2629 hdw
->std_info_cur
.def
.type_bitmask
.bit_names
=
2631 hdw
->std_info_avail
.def
.type_bitmask
.valid_bits
=
2635 hdw
->cropcap_stale
= !0;
2636 hdw
->eeprom_addr
= -1;
2637 hdw
->unit_number
= -1;
2638 hdw
->v4l_minor_number_video
= -1;
2639 hdw
->v4l_minor_number_vbi
= -1;
2640 hdw
->v4l_minor_number_radio
= -1;
2641 hdw
->ctl_write_buffer
= kmalloc(PVR2_CTL_BUFFSIZE
,GFP_KERNEL
);
2642 if (!hdw
->ctl_write_buffer
) goto fail
;
2643 hdw
->ctl_read_buffer
= kmalloc(PVR2_CTL_BUFFSIZE
,GFP_KERNEL
);
2644 if (!hdw
->ctl_read_buffer
) goto fail
;
2645 hdw
->ctl_write_urb
= usb_alloc_urb(0,GFP_KERNEL
);
2646 if (!hdw
->ctl_write_urb
) goto fail
;
2647 hdw
->ctl_read_urb
= usb_alloc_urb(0,GFP_KERNEL
);
2648 if (!hdw
->ctl_read_urb
) goto fail
;
2650 if (v4l2_device_register(&intf
->dev
, &hdw
->v4l2_dev
) != 0) {
2651 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2652 "Error registering with v4l core, giving up");
2655 mutex_lock(&pvr2_unit_mtx
); do {
2656 for (idx
= 0; idx
< PVR_NUM
; idx
++) {
2657 if (unit_pointers
[idx
]) continue;
2658 hdw
->unit_number
= idx
;
2659 unit_pointers
[idx
] = hdw
;
2662 } while (0); mutex_unlock(&pvr2_unit_mtx
);
2665 cnt2
= scnprintf(hdw
->name
+cnt1
,sizeof(hdw
->name
)-cnt1
,"pvrusb2");
2667 if (hdw
->unit_number
>= 0) {
2668 cnt2
= scnprintf(hdw
->name
+cnt1
,sizeof(hdw
->name
)-cnt1
,"_%c",
2669 ('a' + hdw
->unit_number
));
2672 if (cnt1
>= sizeof(hdw
->name
)) cnt1
= sizeof(hdw
->name
)-1;
2673 hdw
->name
[cnt1
] = 0;
2675 hdw
->workqueue
= create_singlethread_workqueue(hdw
->name
);
2676 INIT_WORK(&hdw
->workpoll
,pvr2_hdw_worker_poll
);
2678 pvr2_trace(PVR2_TRACE_INIT
,"Driver unit number is %d, name is %s",
2679 hdw
->unit_number
,hdw
->name
);
2681 hdw
->tuner_type
= -1;
2684 hdw
->usb_intf
= intf
;
2685 hdw
->usb_dev
= usb_dev
;
2687 usb_make_path(hdw
->usb_dev
, hdw
->bus_info
, sizeof(hdw
->bus_info
));
2689 ifnum
= hdw
->usb_intf
->cur_altsetting
->desc
.bInterfaceNumber
;
2690 usb_set_interface(hdw
->usb_dev
,ifnum
,0);
2692 mutex_init(&hdw
->ctl_lock_mutex
);
2693 mutex_init(&hdw
->big_lock_mutex
);
2698 del_timer_sync(&hdw
->quiescent_timer
);
2699 del_timer_sync(&hdw
->decoder_stabilization_timer
);
2700 del_timer_sync(&hdw
->encoder_run_timer
);
2701 del_timer_sync(&hdw
->encoder_wait_timer
);
2702 if (hdw
->workqueue
) {
2703 flush_workqueue(hdw
->workqueue
);
2704 destroy_workqueue(hdw
->workqueue
);
2705 hdw
->workqueue
= NULL
;
2707 usb_free_urb(hdw
->ctl_read_urb
);
2708 usb_free_urb(hdw
->ctl_write_urb
);
2709 kfree(hdw
->ctl_read_buffer
);
2710 kfree(hdw
->ctl_write_buffer
);
2711 kfree(hdw
->controls
);
2712 kfree(hdw
->mpeg_ctrl_info
);
2713 kfree(hdw
->std_defs
);
2714 kfree(hdw
->std_enum_names
);
2721 /* Remove _all_ associations between this driver and the underlying USB
2723 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw
*hdw
)
2725 if (hdw
->flag_disconnected
) return;
2726 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw
);
2727 if (hdw
->ctl_read_urb
) {
2728 usb_kill_urb(hdw
->ctl_read_urb
);
2729 usb_free_urb(hdw
->ctl_read_urb
);
2730 hdw
->ctl_read_urb
= NULL
;
2732 if (hdw
->ctl_write_urb
) {
2733 usb_kill_urb(hdw
->ctl_write_urb
);
2734 usb_free_urb(hdw
->ctl_write_urb
);
2735 hdw
->ctl_write_urb
= NULL
;
2737 if (hdw
->ctl_read_buffer
) {
2738 kfree(hdw
->ctl_read_buffer
);
2739 hdw
->ctl_read_buffer
= NULL
;
2741 if (hdw
->ctl_write_buffer
) {
2742 kfree(hdw
->ctl_write_buffer
);
2743 hdw
->ctl_write_buffer
= NULL
;
2745 hdw
->flag_disconnected
= !0;
2746 /* If we don't do this, then there will be a dangling struct device
2747 reference to our disappearing device persisting inside the V4L
2749 v4l2_device_disconnect(&hdw
->v4l2_dev
);
2750 hdw
->usb_dev
= NULL
;
2751 hdw
->usb_intf
= NULL
;
2752 pvr2_hdw_render_useless(hdw
);
2756 /* Destroy hardware interaction structure */
2757 void pvr2_hdw_destroy(struct pvr2_hdw
*hdw
)
2760 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_destroy: hdw=%p",hdw
);
2761 if (hdw
->workqueue
) {
2762 flush_workqueue(hdw
->workqueue
);
2763 destroy_workqueue(hdw
->workqueue
);
2764 hdw
->workqueue
= NULL
;
2766 del_timer_sync(&hdw
->quiescent_timer
);
2767 del_timer_sync(&hdw
->decoder_stabilization_timer
);
2768 del_timer_sync(&hdw
->encoder_run_timer
);
2769 del_timer_sync(&hdw
->encoder_wait_timer
);
2770 if (hdw
->fw_buffer
) {
2771 kfree(hdw
->fw_buffer
);
2772 hdw
->fw_buffer
= NULL
;
2774 if (hdw
->vid_stream
) {
2775 pvr2_stream_destroy(hdw
->vid_stream
);
2776 hdw
->vid_stream
= NULL
;
2778 pvr2_i2c_core_done(hdw
);
2779 v4l2_device_unregister(&hdw
->v4l2_dev
);
2780 pvr2_hdw_remove_usb_stuff(hdw
);
2781 mutex_lock(&pvr2_unit_mtx
); do {
2782 if ((hdw
->unit_number
>= 0) &&
2783 (hdw
->unit_number
< PVR_NUM
) &&
2784 (unit_pointers
[hdw
->unit_number
] == hdw
)) {
2785 unit_pointers
[hdw
->unit_number
] = NULL
;
2787 } while (0); mutex_unlock(&pvr2_unit_mtx
);
2788 kfree(hdw
->controls
);
2789 kfree(hdw
->mpeg_ctrl_info
);
2790 kfree(hdw
->std_defs
);
2791 kfree(hdw
->std_enum_names
);
2796 int pvr2_hdw_dev_ok(struct pvr2_hdw
*hdw
)
2798 return (hdw
&& hdw
->flag_ok
);
2802 /* Called when hardware has been unplugged */
2803 void pvr2_hdw_disconnect(struct pvr2_hdw
*hdw
)
2805 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_disconnect(hdw=%p)",hdw
);
2806 LOCK_TAKE(hdw
->big_lock
);
2807 LOCK_TAKE(hdw
->ctl_lock
);
2808 pvr2_hdw_remove_usb_stuff(hdw
);
2809 LOCK_GIVE(hdw
->ctl_lock
);
2810 LOCK_GIVE(hdw
->big_lock
);
2814 // Attempt to autoselect an appropriate value for std_enum_cur given
2815 // whatever is currently in std_mask_cur
2816 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw
*hdw
)
2819 for (idx
= 1; idx
< hdw
->std_enum_cnt
; idx
++) {
2820 if (hdw
->std_defs
[idx
-1].id
== hdw
->std_mask_cur
) {
2821 hdw
->std_enum_cur
= idx
;
2825 hdw
->std_enum_cur
= 0;
2829 // Calculate correct set of enumerated standards based on currently known
2830 // set of available standards bits.
2831 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw
*hdw
)
2833 struct v4l2_standard
*newstd
;
2834 unsigned int std_cnt
;
2837 newstd
= pvr2_std_create_enum(&std_cnt
,hdw
->std_mask_avail
);
2839 if (hdw
->std_defs
) {
2840 kfree(hdw
->std_defs
);
2841 hdw
->std_defs
= NULL
;
2843 hdw
->std_enum_cnt
= 0;
2844 if (hdw
->std_enum_names
) {
2845 kfree(hdw
->std_enum_names
);
2846 hdw
->std_enum_names
= NULL
;
2851 PVR2_TRACE_ERROR_LEGS
,
2852 "WARNING: Failed to identify any viable standards");
2855 /* Set up the dynamic control for this standard */
2856 hdw
->std_enum_names
= kmalloc(sizeof(char *)*(std_cnt
+1),GFP_KERNEL
);
2857 if (hdw
->std_enum_names
) {
2858 hdw
->std_enum_names
[0] = "none";
2859 for (idx
= 0; idx
< std_cnt
; idx
++)
2860 hdw
->std_enum_names
[idx
+1] = newstd
[idx
].name
;
2861 hdw
->std_info_enum
.def
.type_enum
.value_names
=
2862 hdw
->std_enum_names
;
2863 hdw
->std_info_enum
.def
.type_enum
.count
= std_cnt
+1;
2866 PVR2_TRACE_ERROR_LEGS
,
2867 "WARNING: Failed to alloc memory for names");
2868 hdw
->std_info_enum
.def
.type_enum
.value_names
= NULL
;
2869 hdw
->std_info_enum
.def
.type_enum
.count
= 0;
2871 hdw
->std_defs
= newstd
;
2872 hdw
->std_enum_cnt
= std_cnt
+1;
2873 hdw
->std_enum_cur
= 0;
2874 hdw
->std_info_cur
.def
.type_bitmask
.valid_bits
= hdw
->std_mask_avail
;
2878 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw
*hdw
,
2879 struct v4l2_standard
*std
,
2883 if (!idx
) return ret
;
2884 LOCK_TAKE(hdw
->big_lock
); do {
2885 if (idx
>= hdw
->std_enum_cnt
) break;
2887 memcpy(std
,hdw
->std_defs
+idx
,sizeof(*std
));
2889 } while (0); LOCK_GIVE(hdw
->big_lock
);
2894 /* Get the number of defined controls */
2895 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw
*hdw
)
2897 return hdw
->control_cnt
;
2901 /* Retrieve a control handle given its index (0..count-1) */
2902 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw
*hdw
,
2905 if (idx
>= hdw
->control_cnt
) return NULL
;
2906 return hdw
->controls
+ idx
;
2910 /* Retrieve a control handle given its index (0..count-1) */
2911 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw
*hdw
,
2912 unsigned int ctl_id
)
2914 struct pvr2_ctrl
*cptr
;
2918 /* This could be made a lot more efficient, but for now... */
2919 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2920 cptr
= hdw
->controls
+ idx
;
2921 i
= cptr
->info
->internal_id
;
2922 if (i
&& (i
== ctl_id
)) return cptr
;
2928 /* Given a V4L ID, retrieve the control structure associated with it. */
2929 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw
*hdw
,unsigned int ctl_id
)
2931 struct pvr2_ctrl
*cptr
;
2935 /* This could be made a lot more efficient, but for now... */
2936 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2937 cptr
= hdw
->controls
+ idx
;
2938 i
= cptr
->info
->v4l_id
;
2939 if (i
&& (i
== ctl_id
)) return cptr
;
2945 /* Given a V4L ID for its immediate predecessor, retrieve the control
2946 structure associated with it. */
2947 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw
*hdw
,
2948 unsigned int ctl_id
)
2950 struct pvr2_ctrl
*cptr
,*cp2
;
2954 /* This could be made a lot more efficient, but for now... */
2956 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2957 cptr
= hdw
->controls
+ idx
;
2958 i
= cptr
->info
->v4l_id
;
2960 if (i
<= ctl_id
) continue;
2961 if (cp2
&& (cp2
->info
->v4l_id
< i
)) continue;
2969 static const char *get_ctrl_typename(enum pvr2_ctl_type tp
)
2972 case pvr2_ctl_int
: return "integer";
2973 case pvr2_ctl_enum
: return "enum";
2974 case pvr2_ctl_bool
: return "boolean";
2975 case pvr2_ctl_bitmask
: return "bitmask";
2981 static void pvr2_subdev_set_control(struct pvr2_hdw
*hdw
, int id
,
2982 const char *name
, int val
)
2984 struct v4l2_control ctrl
;
2985 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 %s=%d", name
, val
);
2986 memset(&ctrl
, 0, sizeof(ctrl
));
2989 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, s_ctrl
, &ctrl
);
2992 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2993 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2994 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2997 /* Execute whatever commands are required to update the state of all the
2998 sub-devices so that they match our current control values. */
2999 static void pvr2_subdev_update(struct pvr2_hdw
*hdw
)
3001 struct v4l2_subdev
*sd
;
3003 pvr2_subdev_update_func fp
;
3005 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev update...");
3007 if (hdw
->tuner_updated
|| hdw
->force_dirty
) {
3008 struct tuner_setup setup
;
3009 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev tuner set_type(%d)",
3011 if (((int)(hdw
->tuner_type
)) >= 0) {
3012 memset(&setup
, 0, sizeof(setup
));
3013 setup
.addr
= ADDR_UNSET
;
3014 setup
.type
= hdw
->tuner_type
;
3015 setup
.mode_mask
= T_RADIO
| T_ANALOG_TV
;
3016 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3017 tuner
, s_type_addr
, &setup
);
3021 if (hdw
->input_dirty
|| hdw
->std_dirty
|| hdw
->force_dirty
) {
3022 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_standard");
3023 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
3024 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3028 vs
= hdw
->std_mask_cur
;
3029 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3031 pvr2_hdw_cx25840_vbi_hack(hdw
);
3033 hdw
->tuner_signal_stale
= !0;
3034 hdw
->cropcap_stale
= !0;
3037 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_BRIGHTNESS
, brightness
);
3038 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_CONTRAST
, contrast
);
3039 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_SATURATION
, saturation
);
3040 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_HUE
, hue
);
3041 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_MUTE
, mute
);
3042 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_VOLUME
, volume
);
3043 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_BALANCE
, balance
);
3044 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_BASS
, bass
);
3045 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_TREBLE
, treble
);
3047 if (hdw
->input_dirty
|| hdw
->audiomode_dirty
|| hdw
->force_dirty
) {
3048 struct v4l2_tuner vt
;
3049 memset(&vt
, 0, sizeof(vt
));
3050 vt
.type
= (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) ?
3051 V4L2_TUNER_RADIO
: V4L2_TUNER_ANALOG_TV
;
3052 vt
.audmode
= hdw
->audiomode_val
;
3053 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, tuner
, s_tuner
, &vt
);
3056 if (hdw
->freqDirty
|| hdw
->force_dirty
) {
3058 struct v4l2_frequency freq
;
3059 fv
= pvr2_hdw_get_cur_freq(hdw
);
3060 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_freq(%lu)", fv
);
3061 if (hdw
->tuner_signal_stale
) pvr2_hdw_status_poll(hdw
);
3062 memset(&freq
, 0, sizeof(freq
));
3063 if (hdw
->tuner_signal_info
.capability
& V4L2_TUNER_CAP_LOW
) {
3064 /* ((fv * 1000) / 62500) */
3065 freq
.frequency
= (fv
* 2) / 125;
3067 freq
.frequency
= fv
/ 62500;
3069 /* tuner-core currently doesn't seem to care about this, but
3070 let's set it anyway for completeness. */
3071 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
3072 freq
.type
= V4L2_TUNER_RADIO
;
3074 freq
.type
= V4L2_TUNER_ANALOG_TV
;
3077 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, tuner
,
3078 s_frequency
, &freq
);
3081 if (hdw
->res_hor_dirty
|| hdw
->res_ver_dirty
|| hdw
->force_dirty
) {
3082 struct v4l2_mbus_framefmt fmt
;
3083 memset(&fmt
, 0, sizeof(fmt
));
3084 fmt
.width
= hdw
->res_hor_val
;
3085 fmt
.height
= hdw
->res_ver_val
;
3086 fmt
.code
= V4L2_MBUS_FMT_FIXED
;
3087 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_size(%dx%d)",
3088 fmt
.width
, fmt
.height
);
3089 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, video
, s_mbus_fmt
, &fmt
);
3092 if (hdw
->srate_dirty
|| hdw
->force_dirty
) {
3094 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_audio %d",
3096 switch (hdw
->srate_val
) {
3098 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000
:
3101 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100
:
3104 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000
:
3108 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3109 audio
, s_clock_freq
, val
);
3112 /* Unable to set crop parameters; there is apparently no equivalent
3113 for VIDIOC_S_CROP */
3115 v4l2_device_for_each_subdev(sd
, &hdw
->v4l2_dev
) {
3117 if (id
>= ARRAY_SIZE(pvr2_module_update_functions
)) continue;
3118 fp
= pvr2_module_update_functions
[id
];
3123 if (hdw
->tuner_signal_stale
|| hdw
->cropcap_stale
) {
3124 pvr2_hdw_status_poll(hdw
);
3129 /* Figure out if we need to commit control changes. If so, mark internal
3130 state flags to indicate this fact and return true. Otherwise do nothing
3131 else and return false. */
3132 static int pvr2_hdw_commit_setup(struct pvr2_hdw
*hdw
)
3135 struct pvr2_ctrl
*cptr
;
3137 int commit_flag
= hdw
->force_dirty
;
3139 unsigned int bcnt
,ccnt
;
3141 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
3142 cptr
= hdw
->controls
+ idx
;
3143 if (!cptr
->info
->is_dirty
) continue;
3144 if (!cptr
->info
->is_dirty(cptr
)) continue;
3147 if (!(pvrusb2_debug
& PVR2_TRACE_CTL
)) continue;
3148 bcnt
= scnprintf(buf
,sizeof(buf
),"\"%s\" <-- ",
3151 cptr
->info
->get_value(cptr
,&value
);
3152 pvr2_ctrl_value_to_sym_internal(cptr
,~0,value
,
3154 sizeof(buf
)-bcnt
,&ccnt
);
3156 bcnt
+= scnprintf(buf
+bcnt
,sizeof(buf
)-bcnt
," <%s>",
3157 get_ctrl_typename(cptr
->info
->type
));
3158 pvr2_trace(PVR2_TRACE_CTL
,
3159 "/*--TRACE_COMMIT--*/ %.*s",
3164 /* Nothing has changed */
3168 hdw
->state_pipeline_config
= 0;
3169 trace_stbit("state_pipeline_config",hdw
->state_pipeline_config
);
3170 pvr2_hdw_state_sched(hdw
);
3176 /* Perform all operations needed to commit all control changes. This must
3177 be performed in synchronization with the pipeline state and is thus
3178 expected to be called as part of the driver's worker thread. Return
3179 true if commit successful, otherwise return false to indicate that
3180 commit isn't possible at this time. */
3181 static int pvr2_hdw_commit_execute(struct pvr2_hdw
*hdw
)
3184 struct pvr2_ctrl
*cptr
;
3185 int disruptive_change
;
3187 if (hdw
->input_dirty
&& hdw
->state_pathway_ok
&&
3188 (((hdw
->input_val
== PVR2_CVAL_INPUT_DTV
) ?
3189 PVR2_PATHWAY_DIGITAL
: PVR2_PATHWAY_ANALOG
) !=
3190 hdw
->pathway_state
)) {
3191 /* Change of mode being asked for... */
3192 hdw
->state_pathway_ok
= 0;
3193 trace_stbit("state_pathway_ok", hdw
->state_pathway_ok
);
3195 if (!hdw
->state_pathway_ok
) {
3196 /* Can't commit anything until pathway is ok. */
3200 /* Handle some required side effects when the video standard is
3202 if (hdw
->std_dirty
) {
3205 if (hdw
->std_mask_cur
& V4L2_STD_525_60
) {
3212 /* Rewrite the vertical resolution to be appropriate to the
3213 video standard that has been selected. */
3214 if (nvres
!= hdw
->res_ver_val
) {
3215 hdw
->res_ver_val
= nvres
;
3216 hdw
->res_ver_dirty
= !0;
3218 /* Rewrite the GOP size to be appropriate to the video
3219 standard that has been selected. */
3220 if (gop_size
!= hdw
->enc_ctl_state
.video_gop_size
) {
3221 struct v4l2_ext_controls cs
;
3222 struct v4l2_ext_control c1
;
3223 memset(&cs
, 0, sizeof(cs
));
3224 memset(&c1
, 0, sizeof(c1
));
3227 c1
.id
= V4L2_CID_MPEG_VIDEO_GOP_SIZE
;
3228 c1
.value
= gop_size
;
3229 cx2341x_ext_ctrls(&hdw
->enc_ctl_state
, 0, &cs
,
3230 VIDIOC_S_EXT_CTRLS
);
3234 /* The broadcast decoder can only scale down, so if
3235 * res_*_dirty && crop window < output format ==> enlarge crop.
3237 * The mpeg encoder receives fields of res_hor_val dots and
3238 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3240 if (hdw
->res_hor_dirty
&& hdw
->cropw_val
< hdw
->res_hor_val
) {
3241 hdw
->cropw_val
= hdw
->res_hor_val
;
3242 hdw
->cropw_dirty
= !0;
3243 } else if (hdw
->cropw_dirty
) {
3244 hdw
->res_hor_dirty
= !0; /* must rescale */
3245 hdw
->res_hor_val
= min(720, hdw
->cropw_val
);
3247 if (hdw
->res_ver_dirty
&& hdw
->croph_val
< hdw
->res_ver_val
) {
3248 hdw
->croph_val
= hdw
->res_ver_val
;
3249 hdw
->croph_dirty
= !0;
3250 } else if (hdw
->croph_dirty
) {
3251 int nvres
= hdw
->std_mask_cur
& V4L2_STD_525_60
? 480 : 576;
3252 hdw
->res_ver_dirty
= !0;
3253 hdw
->res_ver_val
= min(nvres
, hdw
->croph_val
);
3256 /* If any of the below has changed, then we can't do the update
3257 while the pipeline is running. Pipeline must be paused first
3258 and decoder -> encoder connection be made quiescent before we
3262 hdw
->enc_unsafe_stale
||
3264 hdw
->res_ver_dirty
||
3265 hdw
->res_hor_dirty
||
3269 (hdw
->active_stream_type
!= hdw
->desired_stream_type
));
3270 if (disruptive_change
&& !hdw
->state_pipeline_idle
) {
3271 /* Pipeline is not idle; we can't proceed. Arrange to
3272 cause pipeline to stop so that we can try this again
3274 hdw
->state_pipeline_pause
= !0;
3278 if (hdw
->srate_dirty
) {
3279 /* Write new sample rate into control structure since
3280 * the master copy is stale. We must track srate
3281 * separate from the mpeg control structure because
3282 * other logic also uses this value. */
3283 struct v4l2_ext_controls cs
;
3284 struct v4l2_ext_control c1
;
3285 memset(&cs
,0,sizeof(cs
));
3286 memset(&c1
,0,sizeof(c1
));
3289 c1
.id
= V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ
;
3290 c1
.value
= hdw
->srate_val
;
3291 cx2341x_ext_ctrls(&hdw
->enc_ctl_state
, 0, &cs
,VIDIOC_S_EXT_CTRLS
);
3294 if (hdw
->active_stream_type
!= hdw
->desired_stream_type
) {
3295 /* Handle any side effects of stream config here */
3296 hdw
->active_stream_type
= hdw
->desired_stream_type
;
3299 if (hdw
->hdw_desc
->signal_routing_scheme
==
3300 PVR2_ROUTING_SCHEME_GOTVIEW
) {
3302 /* Handle GOTVIEW audio switching */
3303 pvr2_hdw_gpio_get_out(hdw
,&b
);
3304 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
3306 pvr2_hdw_gpio_chg_out(hdw
,(1 << 11),~0);
3309 pvr2_hdw_gpio_chg_out(hdw
,(1 << 11),0);
3313 /* Check and update state for all sub-devices. */
3314 pvr2_subdev_update(hdw
);
3316 hdw
->tuner_updated
= 0;
3317 hdw
->force_dirty
= 0;
3318 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
3319 cptr
= hdw
->controls
+ idx
;
3320 if (!cptr
->info
->clear_dirty
) continue;
3321 cptr
->info
->clear_dirty(cptr
);
3324 if ((hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) &&
3325 hdw
->state_encoder_run
) {
3326 /* If encoder isn't running or it can't be touched, then
3327 this will get worked out later when we start the
3329 if (pvr2_encoder_adjust(hdw
) < 0) return !0;
3332 hdw
->state_pipeline_config
= !0;
3333 /* Hardware state may have changed in a way to cause the cropping
3334 capabilities to have changed. So mark it stale, which will
3335 cause a later re-fetch. */
3336 trace_stbit("state_pipeline_config",hdw
->state_pipeline_config
);
3341 int pvr2_hdw_commit_ctl(struct pvr2_hdw
*hdw
)
3344 LOCK_TAKE(hdw
->big_lock
);
3345 fl
= pvr2_hdw_commit_setup(hdw
);
3346 LOCK_GIVE(hdw
->big_lock
);
3348 return pvr2_hdw_wait(hdw
,0);
3352 static void pvr2_hdw_worker_poll(struct work_struct
*work
)
3355 struct pvr2_hdw
*hdw
= container_of(work
,struct pvr2_hdw
,workpoll
);
3356 LOCK_TAKE(hdw
->big_lock
); do {
3357 fl
= pvr2_hdw_state_eval(hdw
);
3358 } while (0); LOCK_GIVE(hdw
->big_lock
);
3359 if (fl
&& hdw
->state_func
) {
3360 hdw
->state_func(hdw
->state_data
);
3365 static int pvr2_hdw_wait(struct pvr2_hdw
*hdw
,int state
)
3367 return wait_event_interruptible(
3368 hdw
->state_wait_data
,
3369 (hdw
->state_stale
== 0) &&
3370 (!state
|| (hdw
->master_state
!= state
)));
3374 /* Return name for this driver instance */
3375 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw
*hdw
)
3381 const char *pvr2_hdw_get_desc(struct pvr2_hdw
*hdw
)
3383 return hdw
->hdw_desc
->description
;
3387 const char *pvr2_hdw_get_type(struct pvr2_hdw
*hdw
)
3389 return hdw
->hdw_desc
->shortname
;
3393 int pvr2_hdw_is_hsm(struct pvr2_hdw
*hdw
)
3396 LOCK_TAKE(hdw
->ctl_lock
); do {
3397 hdw
->cmd_buffer
[0] = FX2CMD_GET_USB_SPEED
;
3398 result
= pvr2_send_request(hdw
,
3401 if (result
< 0) break;
3402 result
= (hdw
->cmd_buffer
[0] != 0);
3403 } while(0); LOCK_GIVE(hdw
->ctl_lock
);
3408 /* Execute poll of tuner status */
3409 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw
*hdw
)
3411 LOCK_TAKE(hdw
->big_lock
); do {
3412 pvr2_hdw_status_poll(hdw
);
3413 } while (0); LOCK_GIVE(hdw
->big_lock
);
3417 static int pvr2_hdw_check_cropcap(struct pvr2_hdw
*hdw
)
3419 if (!hdw
->cropcap_stale
) {
3422 pvr2_hdw_status_poll(hdw
);
3423 if (hdw
->cropcap_stale
) {
3430 /* Return information about cropping capabilities */
3431 int pvr2_hdw_get_cropcap(struct pvr2_hdw
*hdw
, struct v4l2_cropcap
*pp
)
3434 LOCK_TAKE(hdw
->big_lock
);
3435 stat
= pvr2_hdw_check_cropcap(hdw
);
3437 memcpy(pp
, &hdw
->cropcap_info
, sizeof(hdw
->cropcap_info
));
3439 LOCK_GIVE(hdw
->big_lock
);
3444 /* Return information about the tuner */
3445 int pvr2_hdw_get_tuner_status(struct pvr2_hdw
*hdw
,struct v4l2_tuner
*vtp
)
3447 LOCK_TAKE(hdw
->big_lock
); do {
3448 if (hdw
->tuner_signal_stale
) {
3449 pvr2_hdw_status_poll(hdw
);
3451 memcpy(vtp
,&hdw
->tuner_signal_info
,sizeof(struct v4l2_tuner
));
3452 } while (0); LOCK_GIVE(hdw
->big_lock
);
3457 /* Get handle to video output stream */
3458 struct pvr2_stream
*pvr2_hdw_get_video_stream(struct pvr2_hdw
*hp
)
3460 return hp
->vid_stream
;
3464 void pvr2_hdw_trigger_module_log(struct pvr2_hdw
*hdw
)
3466 int nr
= pvr2_hdw_get_unit_number(hdw
);
3467 LOCK_TAKE(hdw
->big_lock
); do {
3468 printk(KERN_INFO
"pvrusb2: ================= START STATUS CARD #%d =================\n", nr
);
3469 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, log_status
);
3470 pvr2_trace(PVR2_TRACE_INFO
,"cx2341x config:");
3471 cx2341x_log_status(&hdw
->enc_ctl_state
, "pvrusb2");
3472 pvr2_hdw_state_log_state(hdw
);
3473 printk(KERN_INFO
"pvrusb2: ================== END STATUS CARD #%d ==================\n", nr
);
3474 } while (0); LOCK_GIVE(hdw
->big_lock
);
3478 /* Grab EEPROM contents, needed for direct method. */
3479 #define EEPROM_SIZE 8192
3480 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3481 static u8
*pvr2_full_eeprom_fetch(struct pvr2_hdw
*hdw
)
3483 struct i2c_msg msg
[2];
3492 eeprom
= kmalloc(EEPROM_SIZE
,GFP_KERNEL
);
3494 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3495 "Failed to allocate memory"
3496 " required to read eeprom");
3500 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3502 addr
= hdw
->eeprom_addr
;
3503 /* Seems that if the high bit is set, then the *real* eeprom
3504 address is shifted right now bit position (noticed this in
3505 newer PVR USB2 hardware) */
3506 if (addr
& 0x80) addr
>>= 1;
3508 /* FX2 documentation states that a 16bit-addressed eeprom is
3509 expected if the I2C address is an odd number (yeah, this is
3510 strange but it's what they do) */
3511 mode16
= (addr
& 1);
3512 eepromSize
= (mode16
? EEPROM_SIZE
: 256);
3513 trace_eeprom("Examining %d byte eeprom at location 0x%x"
3514 " using %d bit addressing",eepromSize
,addr
,
3519 msg
[0].len
= mode16
? 2 : 1;
3522 msg
[1].flags
= I2C_M_RD
;
3524 /* We have to do the actual eeprom data fetch ourselves, because
3525 (1) we're only fetching part of the eeprom, and (2) if we were
3526 getting the whole thing our I2C driver can't grab it in one
3527 pass - which is what tveeprom is otherwise going to attempt */
3528 memset(eeprom
,0,EEPROM_SIZE
);
3529 for (tcnt
= 0; tcnt
< EEPROM_SIZE
; tcnt
+= pcnt
) {
3531 if (pcnt
+ tcnt
> EEPROM_SIZE
) pcnt
= EEPROM_SIZE
-tcnt
;
3532 offs
= tcnt
+ (eepromSize
- EEPROM_SIZE
);
3534 iadd
[0] = offs
>> 8;
3540 msg
[1].buf
= eeprom
+tcnt
;
3541 if ((ret
= i2c_transfer(&hdw
->i2c_adap
,
3542 msg
,ARRAY_SIZE(msg
))) != 2) {
3543 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3544 "eeprom fetch set offs err=%d",ret
);
3553 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw
*hdw
,
3560 LOCK_TAKE(hdw
->big_lock
); do {
3561 if ((hdw
->fw_buffer
== NULL
) == !enable_flag
) break;
3564 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3565 "Cleaning up after CPU firmware fetch");
3566 kfree(hdw
->fw_buffer
);
3567 hdw
->fw_buffer
= NULL
;
3569 if (hdw
->fw_cpu_flag
) {
3570 /* Now release the CPU. It will disconnect
3571 and reconnect later. */
3572 pvr2_hdw_cpureset_assert(hdw
,0);
3577 hdw
->fw_cpu_flag
= (mode
!= 2);
3578 if (hdw
->fw_cpu_flag
) {
3579 hdw
->fw_size
= (mode
== 1) ? 0x4000 : 0x2000;
3580 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3581 "Preparing to suck out CPU firmware"
3582 " (size=%u)", hdw
->fw_size
);
3583 hdw
->fw_buffer
= kzalloc(hdw
->fw_size
,GFP_KERNEL
);
3584 if (!hdw
->fw_buffer
) {
3589 /* We have to hold the CPU during firmware upload. */
3590 pvr2_hdw_cpureset_assert(hdw
,1);
3592 /* download the firmware from address 0000-1fff in 2048
3593 (=0x800) bytes chunk. */
3595 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3596 "Grabbing CPU firmware");
3597 pipe
= usb_rcvctrlpipe(hdw
->usb_dev
, 0);
3598 for(address
= 0; address
< hdw
->fw_size
;
3600 ret
= usb_control_msg(hdw
->usb_dev
,pipe
,
3603 hdw
->fw_buffer
+address
,
3608 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3609 "Done grabbing CPU firmware");
3611 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3612 "Sucking down EEPROM contents");
3613 hdw
->fw_buffer
= pvr2_full_eeprom_fetch(hdw
);
3614 if (!hdw
->fw_buffer
) {
3615 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3616 "EEPROM content suck failed.");
3619 hdw
->fw_size
= EEPROM_SIZE
;
3620 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3621 "Done sucking down EEPROM contents");
3624 } while (0); LOCK_GIVE(hdw
->big_lock
);
3628 /* Return true if we're in a mode for retrieval CPU firmware */
3629 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw
*hdw
)
3631 return hdw
->fw_buffer
!= NULL
;
3635 int pvr2_hdw_cpufw_get(struct pvr2_hdw
*hdw
,unsigned int offs
,
3636 char *buf
,unsigned int cnt
)
3639 LOCK_TAKE(hdw
->big_lock
); do {
3643 if (!hdw
->fw_buffer
) {
3648 if (offs
>= hdw
->fw_size
) {
3649 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3650 "Read firmware data offs=%d EOF",
3656 if (offs
+ cnt
> hdw
->fw_size
) cnt
= hdw
->fw_size
- offs
;
3658 memcpy(buf
,hdw
->fw_buffer
+offs
,cnt
);
3660 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3661 "Read firmware data offs=%d cnt=%d",
3664 } while (0); LOCK_GIVE(hdw
->big_lock
);
3670 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw
*hdw
,
3671 enum pvr2_v4l_type index
)
3674 case pvr2_v4l_type_video
: return hdw
->v4l_minor_number_video
;
3675 case pvr2_v4l_type_vbi
: return hdw
->v4l_minor_number_vbi
;
3676 case pvr2_v4l_type_radio
: return hdw
->v4l_minor_number_radio
;
3682 /* Store a v4l minor device number */
3683 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw
*hdw
,
3684 enum pvr2_v4l_type index
,int v
)
3687 case pvr2_v4l_type_video
: hdw
->v4l_minor_number_video
= v
;
3688 case pvr2_v4l_type_vbi
: hdw
->v4l_minor_number_vbi
= v
;
3689 case pvr2_v4l_type_radio
: hdw
->v4l_minor_number_radio
= v
;
3695 static void pvr2_ctl_write_complete(struct urb
*urb
)
3697 struct pvr2_hdw
*hdw
= urb
->context
;
3698 hdw
->ctl_write_pend_flag
= 0;
3699 if (hdw
->ctl_read_pend_flag
) return;
3700 complete(&hdw
->ctl_done
);
3704 static void pvr2_ctl_read_complete(struct urb
*urb
)
3706 struct pvr2_hdw
*hdw
= urb
->context
;
3707 hdw
->ctl_read_pend_flag
= 0;
3708 if (hdw
->ctl_write_pend_flag
) return;
3709 complete(&hdw
->ctl_done
);
3713 static void pvr2_ctl_timeout(unsigned long data
)
3715 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
3716 if (hdw
->ctl_write_pend_flag
|| hdw
->ctl_read_pend_flag
) {
3717 hdw
->ctl_timeout_flag
= !0;
3718 if (hdw
->ctl_write_pend_flag
)
3719 usb_unlink_urb(hdw
->ctl_write_urb
);
3720 if (hdw
->ctl_read_pend_flag
)
3721 usb_unlink_urb(hdw
->ctl_read_urb
);
3726 /* Issue a command and get a response from the device. This extended
3727 version includes a probe flag (which if set means that device errors
3728 should not be logged or treated as fatal) and a timeout in jiffies.
3729 This can be used to non-lethally probe the health of endpoint 1. */
3730 static int pvr2_send_request_ex(struct pvr2_hdw
*hdw
,
3731 unsigned int timeout
,int probe_fl
,
3732 void *write_data
,unsigned int write_len
,
3733 void *read_data
,unsigned int read_len
)
3737 struct timer_list timer
;
3738 if (!hdw
->ctl_lock_held
) {
3739 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3740 "Attempted to execute control transfer"
3744 if (!hdw
->flag_ok
&& !probe_fl
) {
3745 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3746 "Attempted to execute control transfer"
3747 " when device not ok");
3750 if (!(hdw
->ctl_read_urb
&& hdw
->ctl_write_urb
)) {
3752 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3753 "Attempted to execute control transfer"
3754 " when USB is disconnected");
3759 /* Ensure that we have sane parameters */
3760 if (!write_data
) write_len
= 0;
3761 if (!read_data
) read_len
= 0;
3762 if (write_len
> PVR2_CTL_BUFFSIZE
) {
3764 PVR2_TRACE_ERROR_LEGS
,
3765 "Attempted to execute %d byte"
3766 " control-write transfer (limit=%d)",
3767 write_len
,PVR2_CTL_BUFFSIZE
);
3770 if (read_len
> PVR2_CTL_BUFFSIZE
) {
3772 PVR2_TRACE_ERROR_LEGS
,
3773 "Attempted to execute %d byte"
3774 " control-read transfer (limit=%d)",
3775 write_len
,PVR2_CTL_BUFFSIZE
);
3778 if ((!write_len
) && (!read_len
)) {
3780 PVR2_TRACE_ERROR_LEGS
,
3781 "Attempted to execute null control transfer?");
3786 hdw
->cmd_debug_state
= 1;
3788 hdw
->cmd_debug_code
= ((unsigned char *)write_data
)[0];
3790 hdw
->cmd_debug_code
= 0;
3792 hdw
->cmd_debug_write_len
= write_len
;
3793 hdw
->cmd_debug_read_len
= read_len
;
3795 /* Initialize common stuff */
3796 init_completion(&hdw
->ctl_done
);
3797 hdw
->ctl_timeout_flag
= 0;
3798 hdw
->ctl_write_pend_flag
= 0;
3799 hdw
->ctl_read_pend_flag
= 0;
3801 timer
.expires
= jiffies
+ timeout
;
3802 timer
.data
= (unsigned long)hdw
;
3803 timer
.function
= pvr2_ctl_timeout
;
3806 hdw
->cmd_debug_state
= 2;
3807 /* Transfer write data to internal buffer */
3808 for (idx
= 0; idx
< write_len
; idx
++) {
3809 hdw
->ctl_write_buffer
[idx
] =
3810 ((unsigned char *)write_data
)[idx
];
3812 /* Initiate a write request */
3813 usb_fill_bulk_urb(hdw
->ctl_write_urb
,
3815 usb_sndbulkpipe(hdw
->usb_dev
,
3816 PVR2_CTL_WRITE_ENDPOINT
),
3817 hdw
->ctl_write_buffer
,
3819 pvr2_ctl_write_complete
,
3821 hdw
->ctl_write_urb
->actual_length
= 0;
3822 hdw
->ctl_write_pend_flag
= !0;
3823 status
= usb_submit_urb(hdw
->ctl_write_urb
,GFP_KERNEL
);
3825 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3826 "Failed to submit write-control"
3827 " URB status=%d",status
);
3828 hdw
->ctl_write_pend_flag
= 0;
3834 hdw
->cmd_debug_state
= 3;
3835 memset(hdw
->ctl_read_buffer
,0x43,read_len
);
3836 /* Initiate a read request */
3837 usb_fill_bulk_urb(hdw
->ctl_read_urb
,
3839 usb_rcvbulkpipe(hdw
->usb_dev
,
3840 PVR2_CTL_READ_ENDPOINT
),
3841 hdw
->ctl_read_buffer
,
3843 pvr2_ctl_read_complete
,
3845 hdw
->ctl_read_urb
->actual_length
= 0;
3846 hdw
->ctl_read_pend_flag
= !0;
3847 status
= usb_submit_urb(hdw
->ctl_read_urb
,GFP_KERNEL
);
3849 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3850 "Failed to submit read-control"
3851 " URB status=%d",status
);
3852 hdw
->ctl_read_pend_flag
= 0;
3860 /* Now wait for all I/O to complete */
3861 hdw
->cmd_debug_state
= 4;
3862 while (hdw
->ctl_write_pend_flag
|| hdw
->ctl_read_pend_flag
) {
3863 wait_for_completion(&hdw
->ctl_done
);
3865 hdw
->cmd_debug_state
= 5;
3868 del_timer_sync(&timer
);
3870 hdw
->cmd_debug_state
= 6;
3873 if (hdw
->ctl_timeout_flag
) {
3874 status
= -ETIMEDOUT
;
3876 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3877 "Timed out control-write");
3883 /* Validate results of write request */
3884 if ((hdw
->ctl_write_urb
->status
!= 0) &&
3885 (hdw
->ctl_write_urb
->status
!= -ENOENT
) &&
3886 (hdw
->ctl_write_urb
->status
!= -ESHUTDOWN
) &&
3887 (hdw
->ctl_write_urb
->status
!= -ECONNRESET
)) {
3888 /* USB subsystem is reporting some kind of failure
3890 status
= hdw
->ctl_write_urb
->status
;
3892 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3893 "control-write URB failure,"
3899 if (hdw
->ctl_write_urb
->actual_length
< write_len
) {
3900 /* Failed to write enough data */
3903 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3904 "control-write URB short,"
3905 " expected=%d got=%d",
3907 hdw
->ctl_write_urb
->actual_length
);
3913 /* Validate results of read request */
3914 if ((hdw
->ctl_read_urb
->status
!= 0) &&
3915 (hdw
->ctl_read_urb
->status
!= -ENOENT
) &&
3916 (hdw
->ctl_read_urb
->status
!= -ESHUTDOWN
) &&
3917 (hdw
->ctl_read_urb
->status
!= -ECONNRESET
)) {
3918 /* USB subsystem is reporting some kind of failure
3920 status
= hdw
->ctl_read_urb
->status
;
3922 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3923 "control-read URB failure,"
3929 if (hdw
->ctl_read_urb
->actual_length
< read_len
) {
3930 /* Failed to read enough data */
3933 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3934 "control-read URB short,"
3935 " expected=%d got=%d",
3937 hdw
->ctl_read_urb
->actual_length
);
3941 /* Transfer retrieved data out from internal buffer */
3942 for (idx
= 0; idx
< read_len
; idx
++) {
3943 ((unsigned char *)read_data
)[idx
] =
3944 hdw
->ctl_read_buffer
[idx
];
3950 hdw
->cmd_debug_state
= 0;
3951 if ((status
< 0) && (!probe_fl
)) {
3952 pvr2_hdw_render_useless(hdw
);
3958 int pvr2_send_request(struct pvr2_hdw
*hdw
,
3959 void *write_data
,unsigned int write_len
,
3960 void *read_data
,unsigned int read_len
)
3962 return pvr2_send_request_ex(hdw
,HZ
*4,0,
3963 write_data
,write_len
,
3964 read_data
,read_len
);
3968 static int pvr2_issue_simple_cmd(struct pvr2_hdw
*hdw
,u32 cmdcode
)
3971 unsigned int cnt
= 1;
3972 unsigned int args
= 0;
3973 LOCK_TAKE(hdw
->ctl_lock
);
3974 hdw
->cmd_buffer
[0] = cmdcode
& 0xffu
;
3975 args
= (cmdcode
>> 8) & 0xffu
;
3976 args
= (args
> 2) ? 2 : args
;
3979 hdw
->cmd_buffer
[1] = (cmdcode
>> 16) & 0xffu
;
3981 hdw
->cmd_buffer
[2] = (cmdcode
>> 24) & 0xffu
;
3984 if (pvrusb2_debug
& PVR2_TRACE_INIT
) {
3986 unsigned int ccnt
,bcnt
;
3990 ccnt
= scnprintf(tbuf
+bcnt
,
3992 "Sending FX2 command 0x%x",cmdcode
);
3994 for (idx
= 0; idx
< ARRAY_SIZE(pvr2_fx2cmd_desc
); idx
++) {
3995 if (pvr2_fx2cmd_desc
[idx
].id
== cmdcode
) {
3996 ccnt
= scnprintf(tbuf
+bcnt
,
3999 pvr2_fx2cmd_desc
[idx
].desc
);
4005 ccnt
= scnprintf(tbuf
+bcnt
,
4007 " (%u",hdw
->cmd_buffer
[1]);
4010 ccnt
= scnprintf(tbuf
+bcnt
,
4012 ",%u",hdw
->cmd_buffer
[2]);
4015 ccnt
= scnprintf(tbuf
+bcnt
,
4020 pvr2_trace(PVR2_TRACE_INIT
,"%.*s",bcnt
,tbuf
);
4022 ret
= pvr2_send_request(hdw
,hdw
->cmd_buffer
,cnt
,NULL
,0);
4023 LOCK_GIVE(hdw
->ctl_lock
);
4028 int pvr2_write_register(struct pvr2_hdw
*hdw
, u16 reg
, u32 data
)
4032 LOCK_TAKE(hdw
->ctl_lock
);
4034 hdw
->cmd_buffer
[0] = FX2CMD_REG_WRITE
; /* write register prefix */
4035 PVR2_DECOMPOSE_LE(hdw
->cmd_buffer
,1,data
);
4036 hdw
->cmd_buffer
[5] = 0;
4037 hdw
->cmd_buffer
[6] = (reg
>> 8) & 0xff;
4038 hdw
->cmd_buffer
[7] = reg
& 0xff;
4041 ret
= pvr2_send_request(hdw
, hdw
->cmd_buffer
, 8, hdw
->cmd_buffer
, 0);
4043 LOCK_GIVE(hdw
->ctl_lock
);
4049 static int pvr2_read_register(struct pvr2_hdw
*hdw
, u16 reg
, u32
*data
)
4053 LOCK_TAKE(hdw
->ctl_lock
);
4055 hdw
->cmd_buffer
[0] = FX2CMD_REG_READ
; /* read register prefix */
4056 hdw
->cmd_buffer
[1] = 0;
4057 hdw
->cmd_buffer
[2] = 0;
4058 hdw
->cmd_buffer
[3] = 0;
4059 hdw
->cmd_buffer
[4] = 0;
4060 hdw
->cmd_buffer
[5] = 0;
4061 hdw
->cmd_buffer
[6] = (reg
>> 8) & 0xff;
4062 hdw
->cmd_buffer
[7] = reg
& 0xff;
4064 ret
|= pvr2_send_request(hdw
, hdw
->cmd_buffer
, 8, hdw
->cmd_buffer
, 4);
4065 *data
= PVR2_COMPOSE_LE(hdw
->cmd_buffer
,0);
4067 LOCK_GIVE(hdw
->ctl_lock
);
4073 void pvr2_hdw_render_useless(struct pvr2_hdw
*hdw
)
4075 if (!hdw
->flag_ok
) return;
4076 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4077 "Device being rendered inoperable");
4078 if (hdw
->vid_stream
) {
4079 pvr2_stream_setup(hdw
->vid_stream
,NULL
,0,0);
4082 trace_stbit("flag_ok",hdw
->flag_ok
);
4083 pvr2_hdw_state_sched(hdw
);
4087 void pvr2_hdw_device_reset(struct pvr2_hdw
*hdw
)
4090 pvr2_trace(PVR2_TRACE_INIT
,"Performing a device reset...");
4091 ret
= usb_lock_device_for_reset(hdw
->usb_dev
,NULL
);
4093 ret
= usb_reset_device(hdw
->usb_dev
);
4094 usb_unlock_device(hdw
->usb_dev
);
4096 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4097 "Failed to lock USB device ret=%d",ret
);
4099 if (init_pause_msec
) {
4100 pvr2_trace(PVR2_TRACE_INFO
,
4101 "Waiting %u msec for hardware to settle",
4103 msleep(init_pause_msec
);
4109 void pvr2_hdw_cpureset_assert(struct pvr2_hdw
*hdw
,int val
)
4115 if (!hdw
->usb_dev
) return;
4117 da
= kmalloc(16, GFP_KERNEL
);
4120 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4121 "Unable to allocate memory to control CPU reset");
4125 pvr2_trace(PVR2_TRACE_INIT
,"cpureset_assert(%d)",val
);
4127 da
[0] = val
? 0x01 : 0x00;
4129 /* Write the CPUCS register on the 8051. The lsb of the register
4130 is the reset bit; a 1 asserts reset while a 0 clears it. */
4131 pipe
= usb_sndctrlpipe(hdw
->usb_dev
, 0);
4132 ret
= usb_control_msg(hdw
->usb_dev
,pipe
,0xa0,0x40,0xe600,0,da
,1,HZ
);
4134 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4135 "cpureset_assert(%d) error=%d",val
,ret
);
4136 pvr2_hdw_render_useless(hdw
);
4143 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw
*hdw
)
4145 return pvr2_issue_simple_cmd(hdw
,FX2CMD_DEEP_RESET
);
4149 int pvr2_hdw_cmd_powerup(struct pvr2_hdw
*hdw
)
4151 return pvr2_issue_simple_cmd(hdw
,FX2CMD_POWER_ON
);
4155 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw
*hdw
)
4157 return pvr2_issue_simple_cmd(hdw
,FX2CMD_POWER_OFF
);
4161 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw
*hdw
)
4163 pvr2_trace(PVR2_TRACE_INIT
,
4164 "Requesting decoder reset");
4165 if (hdw
->decoder_client_id
) {
4166 v4l2_device_call_all(&hdw
->v4l2_dev
, hdw
->decoder_client_id
,
4168 pvr2_hdw_cx25840_vbi_hack(hdw
);
4171 pvr2_trace(PVR2_TRACE_INIT
,
4172 "Unable to reset decoder: nothing attached");
4177 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw
*hdw
, int onoff
)
4180 return pvr2_issue_simple_cmd(hdw
,
4181 FX2CMD_HCW_DEMOD_RESETIN
|
4183 ((onoff
? 1 : 0) << 16));
4187 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw
*hdw
, int onoff
)
4190 return pvr2_issue_simple_cmd(hdw
,(onoff
?
4191 FX2CMD_ONAIR_DTV_POWER_ON
:
4192 FX2CMD_ONAIR_DTV_POWER_OFF
));
4196 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw
*hdw
,
4199 return pvr2_issue_simple_cmd(hdw
,(onoff
?
4200 FX2CMD_ONAIR_DTV_STREAMING_ON
:
4201 FX2CMD_ONAIR_DTV_STREAMING_OFF
));
4205 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw
*hdw
,int digitalFl
)
4208 /* Compare digital/analog desired setting with current setting. If
4209 they don't match, fix it... */
4210 cmode
= (digitalFl
? PVR2_PATHWAY_DIGITAL
: PVR2_PATHWAY_ANALOG
);
4211 if (cmode
== hdw
->pathway_state
) {
4212 /* They match; nothing to do */
4216 switch (hdw
->hdw_desc
->digital_control_scheme
) {
4217 case PVR2_DIGITAL_SCHEME_HAUPPAUGE
:
4218 pvr2_hdw_cmd_hcw_demod_reset(hdw
,digitalFl
);
4219 if (cmode
== PVR2_PATHWAY_ANALOG
) {
4220 /* If moving to analog mode, also force the decoder
4221 to reset. If no decoder is attached, then it's
4222 ok to ignore this because if/when the decoder
4223 attaches, it will reset itself at that time. */
4224 pvr2_hdw_cmd_decoder_reset(hdw
);
4227 case PVR2_DIGITAL_SCHEME_ONAIR
:
4228 /* Supposedly we should always have the power on whether in
4229 digital or analog mode. But for now do what appears to
4231 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw
,digitalFl
);
4236 pvr2_hdw_untrip_unlocked(hdw
);
4237 hdw
->pathway_state
= cmode
;
4241 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw
*hdw
, int onoff
)
4243 /* change some GPIO data
4245 * note: bit d7 of dir appears to control the LED,
4246 * so we shut it off here.
4250 pvr2_hdw_gpio_chg_dir(hdw
, 0xffffffff, 0x00000481);
4252 pvr2_hdw_gpio_chg_dir(hdw
, 0xffffffff, 0x00000401);
4254 pvr2_hdw_gpio_chg_out(hdw
, 0xffffffff, 0x00000000);
4258 typedef void (*led_method_func
)(struct pvr2_hdw
*,int);
4260 static led_method_func led_methods
[] = {
4261 [PVR2_LED_SCHEME_HAUPPAUGE
] = pvr2_led_ctrl_hauppauge
,
4266 static void pvr2_led_ctrl(struct pvr2_hdw
*hdw
,int onoff
)
4268 unsigned int scheme_id
;
4271 if ((!onoff
) == (!hdw
->led_on
)) return;
4273 hdw
->led_on
= onoff
!= 0;
4275 scheme_id
= hdw
->hdw_desc
->led_scheme
;
4276 if (scheme_id
< ARRAY_SIZE(led_methods
)) {
4277 fp
= led_methods
[scheme_id
];
4282 if (fp
) (*fp
)(hdw
,onoff
);
4286 /* Stop / start video stream transport */
4287 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw
*hdw
,int runFl
)
4291 /* If we're in analog mode, then just issue the usual analog
4293 if (hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) {
4294 return pvr2_issue_simple_cmd(hdw
,
4296 FX2CMD_STREAMING_ON
:
4297 FX2CMD_STREAMING_OFF
));
4298 /*Note: Not reached */
4301 if (hdw
->pathway_state
!= PVR2_PATHWAY_DIGITAL
) {
4302 /* Whoops, we don't know what mode we're in... */
4306 /* To get here we have to be in digital mode. The mechanism here
4307 is unfortunately different for different vendors. So we switch
4308 on the device's digital scheme attribute in order to figure out
4310 switch (hdw
->hdw_desc
->digital_control_scheme
) {
4311 case PVR2_DIGITAL_SCHEME_HAUPPAUGE
:
4312 return pvr2_issue_simple_cmd(hdw
,
4314 FX2CMD_HCW_DTV_STREAMING_ON
:
4315 FX2CMD_HCW_DTV_STREAMING_OFF
));
4316 case PVR2_DIGITAL_SCHEME_ONAIR
:
4317 ret
= pvr2_issue_simple_cmd(hdw
,
4319 FX2CMD_STREAMING_ON
:
4320 FX2CMD_STREAMING_OFF
));
4321 if (ret
) return ret
;
4322 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw
,runFl
);
4329 /* Evaluate whether or not state_pathway_ok can change */
4330 static int state_eval_pathway_ok(struct pvr2_hdw
*hdw
)
4332 if (hdw
->state_pathway_ok
) {
4333 /* Nothing to do if pathway is already ok */
4336 if (!hdw
->state_pipeline_idle
) {
4337 /* Not allowed to change anything if pipeline is not idle */
4340 pvr2_hdw_cmd_modeswitch(hdw
,hdw
->input_val
== PVR2_CVAL_INPUT_DTV
);
4341 hdw
->state_pathway_ok
= !0;
4342 trace_stbit("state_pathway_ok",hdw
->state_pathway_ok
);
4347 /* Evaluate whether or not state_encoder_ok can change */
4348 static int state_eval_encoder_ok(struct pvr2_hdw
*hdw
)
4350 if (hdw
->state_encoder_ok
) return 0;
4351 if (hdw
->flag_tripped
) return 0;
4352 if (hdw
->state_encoder_run
) return 0;
4353 if (hdw
->state_encoder_config
) return 0;
4354 if (hdw
->state_decoder_run
) return 0;
4355 if (hdw
->state_usbstream_run
) return 0;
4356 if (hdw
->pathway_state
== PVR2_PATHWAY_DIGITAL
) {
4357 if (!hdw
->hdw_desc
->flag_digital_requires_cx23416
) return 0;
4358 } else if (hdw
->pathway_state
!= PVR2_PATHWAY_ANALOG
) {
4362 if (pvr2_upload_firmware2(hdw
) < 0) {
4363 hdw
->flag_tripped
= !0;
4364 trace_stbit("flag_tripped",hdw
->flag_tripped
);
4367 hdw
->state_encoder_ok
= !0;
4368 trace_stbit("state_encoder_ok",hdw
->state_encoder_ok
);
4373 /* Evaluate whether or not state_encoder_config can change */
4374 static int state_eval_encoder_config(struct pvr2_hdw
*hdw
)
4376 if (hdw
->state_encoder_config
) {
4377 if (hdw
->state_encoder_ok
) {
4378 if (hdw
->state_pipeline_req
&&
4379 !hdw
->state_pipeline_pause
) return 0;
4381 hdw
->state_encoder_config
= 0;
4382 hdw
->state_encoder_waitok
= 0;
4383 trace_stbit("state_encoder_waitok",hdw
->state_encoder_waitok
);
4384 /* paranoia - solve race if timer just completed */
4385 del_timer_sync(&hdw
->encoder_wait_timer
);
4387 if (!hdw
->state_pathway_ok
||
4388 (hdw
->pathway_state
!= PVR2_PATHWAY_ANALOG
) ||
4389 !hdw
->state_encoder_ok
||
4390 !hdw
->state_pipeline_idle
||
4391 hdw
->state_pipeline_pause
||
4392 !hdw
->state_pipeline_req
||
4393 !hdw
->state_pipeline_config
) {
4394 /* We must reset the enforced wait interval if
4395 anything has happened that might have disturbed
4396 the encoder. This should be a rare case. */
4397 if (timer_pending(&hdw
->encoder_wait_timer
)) {
4398 del_timer_sync(&hdw
->encoder_wait_timer
);
4400 if (hdw
->state_encoder_waitok
) {
4401 /* Must clear the state - therefore we did
4402 something to a state bit and must also
4404 hdw
->state_encoder_waitok
= 0;
4405 trace_stbit("state_encoder_waitok",
4406 hdw
->state_encoder_waitok
);
4411 if (!hdw
->state_encoder_waitok
) {
4412 if (!timer_pending(&hdw
->encoder_wait_timer
)) {
4413 /* waitok flag wasn't set and timer isn't
4414 running. Check flag once more to avoid
4415 a race then start the timer. This is
4416 the point when we measure out a minimal
4417 quiet interval before doing something to
4419 if (!hdw
->state_encoder_waitok
) {
4420 hdw
->encoder_wait_timer
.expires
=
4422 (HZ
* TIME_MSEC_ENCODER_WAIT
4424 add_timer(&hdw
->encoder_wait_timer
);
4427 /* We can't continue until we know we have been
4428 quiet for the interval measured by this
4432 pvr2_encoder_configure(hdw
);
4433 if (hdw
->state_encoder_ok
) hdw
->state_encoder_config
= !0;
4435 trace_stbit("state_encoder_config",hdw
->state_encoder_config
);
4440 /* Return true if the encoder should not be running. */
4441 static int state_check_disable_encoder_run(struct pvr2_hdw
*hdw
)
4443 if (!hdw
->state_encoder_ok
) {
4444 /* Encoder isn't healthy at the moment, so stop it. */
4447 if (!hdw
->state_pathway_ok
) {
4448 /* Mode is not understood at the moment (i.e. it wants to
4449 change), so encoder must be stopped. */
4453 switch (hdw
->pathway_state
) {
4454 case PVR2_PATHWAY_ANALOG
:
4455 if (!hdw
->state_decoder_run
) {
4456 /* We're in analog mode and the decoder is not
4457 running; thus the encoder should be stopped as
4462 case PVR2_PATHWAY_DIGITAL
:
4463 if (hdw
->state_encoder_runok
) {
4464 /* This is a funny case. We're in digital mode so
4465 really the encoder should be stopped. However
4466 if it really is running, only kill it after
4467 runok has been set. This gives a chance for the
4468 onair quirk to function (encoder must run
4469 briefly first, at least once, before onair
4470 digital streaming can work). */
4475 /* Unknown mode; so encoder should be stopped. */
4479 /* If we get here, we haven't found a reason to stop the
4485 /* Return true if the encoder should be running. */
4486 static int state_check_enable_encoder_run(struct pvr2_hdw
*hdw
)
4488 if (!hdw
->state_encoder_ok
) {
4489 /* Don't run the encoder if it isn't healthy... */
4492 if (!hdw
->state_pathway_ok
) {
4493 /* Don't run the encoder if we don't (yet) know what mode
4494 we need to be in... */
4498 switch (hdw
->pathway_state
) {
4499 case PVR2_PATHWAY_ANALOG
:
4500 if (hdw
->state_decoder_run
&& hdw
->state_decoder_ready
) {
4501 /* In analog mode, if the decoder is running, then
4506 case PVR2_PATHWAY_DIGITAL
:
4507 if ((hdw
->hdw_desc
->digital_control_scheme
==
4508 PVR2_DIGITAL_SCHEME_ONAIR
) &&
4509 !hdw
->state_encoder_runok
) {
4510 /* This is a quirk. OnAir hardware won't stream
4511 digital until the encoder has been run at least
4512 once, for a minimal period of time (empiricially
4513 measured to be 1/4 second). So if we're on
4514 OnAir hardware and the encoder has never been
4515 run at all, then start the encoder. Normal
4516 state machine logic in the driver will
4517 automatically handle the remaining bits. */
4522 /* For completeness (unknown mode; encoder won't run ever) */
4525 /* If we get here, then we haven't found any reason to run the
4526 encoder, so don't run it. */
4531 /* Evaluate whether or not state_encoder_run can change */
4532 static int state_eval_encoder_run(struct pvr2_hdw
*hdw
)
4534 if (hdw
->state_encoder_run
) {
4535 if (!state_check_disable_encoder_run(hdw
)) return 0;
4536 if (hdw
->state_encoder_ok
) {
4537 del_timer_sync(&hdw
->encoder_run_timer
);
4538 if (pvr2_encoder_stop(hdw
) < 0) return !0;
4540 hdw
->state_encoder_run
= 0;
4542 if (!state_check_enable_encoder_run(hdw
)) return 0;
4543 if (pvr2_encoder_start(hdw
) < 0) return !0;
4544 hdw
->state_encoder_run
= !0;
4545 if (!hdw
->state_encoder_runok
) {
4546 hdw
->encoder_run_timer
.expires
=
4547 jiffies
+ (HZ
* TIME_MSEC_ENCODER_OK
/ 1000);
4548 add_timer(&hdw
->encoder_run_timer
);
4551 trace_stbit("state_encoder_run",hdw
->state_encoder_run
);
4556 /* Timeout function for quiescent timer. */
4557 static void pvr2_hdw_quiescent_timeout(unsigned long data
)
4559 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4560 hdw
->state_decoder_quiescent
= !0;
4561 trace_stbit("state_decoder_quiescent",hdw
->state_decoder_quiescent
);
4562 hdw
->state_stale
= !0;
4563 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
4567 /* Timeout function for decoder stabilization timer. */
4568 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data
)
4570 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4571 hdw
->state_decoder_ready
= !0;
4572 trace_stbit("state_decoder_ready", hdw
->state_decoder_ready
);
4573 hdw
->state_stale
= !0;
4574 queue_work(hdw
->workqueue
, &hdw
->workpoll
);
4578 /* Timeout function for encoder wait timer. */
4579 static void pvr2_hdw_encoder_wait_timeout(unsigned long data
)
4581 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4582 hdw
->state_encoder_waitok
= !0;
4583 trace_stbit("state_encoder_waitok",hdw
->state_encoder_waitok
);
4584 hdw
->state_stale
= !0;
4585 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
4589 /* Timeout function for encoder run timer. */
4590 static void pvr2_hdw_encoder_run_timeout(unsigned long data
)
4592 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4593 if (!hdw
->state_encoder_runok
) {
4594 hdw
->state_encoder_runok
= !0;
4595 trace_stbit("state_encoder_runok",hdw
->state_encoder_runok
);
4596 hdw
->state_stale
= !0;
4597 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
4602 /* Evaluate whether or not state_decoder_run can change */
4603 static int state_eval_decoder_run(struct pvr2_hdw
*hdw
)
4605 if (hdw
->state_decoder_run
) {
4606 if (hdw
->state_encoder_ok
) {
4607 if (hdw
->state_pipeline_req
&&
4608 !hdw
->state_pipeline_pause
&&
4609 hdw
->state_pathway_ok
) return 0;
4611 if (!hdw
->flag_decoder_missed
) {
4612 pvr2_decoder_enable(hdw
,0);
4614 hdw
->state_decoder_quiescent
= 0;
4615 hdw
->state_decoder_run
= 0;
4616 /* paranoia - solve race if timer(s) just completed */
4617 del_timer_sync(&hdw
->quiescent_timer
);
4618 /* Kill the stabilization timer, in case we're killing the
4619 encoder before the previous stabilization interval has
4620 been properly timed. */
4621 del_timer_sync(&hdw
->decoder_stabilization_timer
);
4622 hdw
->state_decoder_ready
= 0;
4624 if (!hdw
->state_decoder_quiescent
) {
4625 if (!timer_pending(&hdw
->quiescent_timer
)) {
4626 /* We don't do something about the
4627 quiescent timer until right here because
4628 we also want to catch cases where the
4629 decoder was already not running (like
4630 after initialization) as opposed to
4631 knowing that we had just stopped it.
4632 The second flag check is here to cover a
4633 race - the timer could have run and set
4634 this flag just after the previous check
4635 but before we did the pending check. */
4636 if (!hdw
->state_decoder_quiescent
) {
4637 hdw
->quiescent_timer
.expires
=
4639 (HZ
* TIME_MSEC_DECODER_WAIT
4641 add_timer(&hdw
->quiescent_timer
);
4644 /* Don't allow decoder to start again until it has
4645 been quiesced first. This little detail should
4646 hopefully further stabilize the encoder. */
4649 if (!hdw
->state_pathway_ok
||
4650 (hdw
->pathway_state
!= PVR2_PATHWAY_ANALOG
) ||
4651 !hdw
->state_pipeline_req
||
4652 hdw
->state_pipeline_pause
||
4653 !hdw
->state_pipeline_config
||
4654 !hdw
->state_encoder_config
||
4655 !hdw
->state_encoder_ok
) return 0;
4656 del_timer_sync(&hdw
->quiescent_timer
);
4657 if (hdw
->flag_decoder_missed
) return 0;
4658 if (pvr2_decoder_enable(hdw
,!0) < 0) return 0;
4659 hdw
->state_decoder_quiescent
= 0;
4660 hdw
->state_decoder_ready
= 0;
4661 hdw
->state_decoder_run
= !0;
4662 if (hdw
->decoder_client_id
== PVR2_CLIENT_ID_SAA7115
) {
4663 hdw
->decoder_stabilization_timer
.expires
=
4665 (HZ
* TIME_MSEC_DECODER_STABILIZATION_WAIT
/
4667 add_timer(&hdw
->decoder_stabilization_timer
);
4669 hdw
->state_decoder_ready
= !0;
4672 trace_stbit("state_decoder_quiescent",hdw
->state_decoder_quiescent
);
4673 trace_stbit("state_decoder_run",hdw
->state_decoder_run
);
4674 trace_stbit("state_decoder_ready", hdw
->state_decoder_ready
);
4679 /* Evaluate whether or not state_usbstream_run can change */
4680 static int state_eval_usbstream_run(struct pvr2_hdw
*hdw
)
4682 if (hdw
->state_usbstream_run
) {
4684 if (hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) {
4685 fl
= (hdw
->state_encoder_ok
&&
4686 hdw
->state_encoder_run
);
4687 } else if ((hdw
->pathway_state
== PVR2_PATHWAY_DIGITAL
) &&
4688 (hdw
->hdw_desc
->flag_digital_requires_cx23416
)) {
4689 fl
= hdw
->state_encoder_ok
;
4692 hdw
->state_pipeline_req
&&
4693 !hdw
->state_pipeline_pause
&&
4694 hdw
->state_pathway_ok
) {
4697 pvr2_hdw_cmd_usbstream(hdw
,0);
4698 hdw
->state_usbstream_run
= 0;
4700 if (!hdw
->state_pipeline_req
||
4701 hdw
->state_pipeline_pause
||
4702 !hdw
->state_pathway_ok
) return 0;
4703 if (hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) {
4704 if (!hdw
->state_encoder_ok
||
4705 !hdw
->state_encoder_run
) return 0;
4706 } else if ((hdw
->pathway_state
== PVR2_PATHWAY_DIGITAL
) &&
4707 (hdw
->hdw_desc
->flag_digital_requires_cx23416
)) {
4708 if (!hdw
->state_encoder_ok
) return 0;
4709 if (hdw
->state_encoder_run
) return 0;
4710 if (hdw
->hdw_desc
->digital_control_scheme
==
4711 PVR2_DIGITAL_SCHEME_ONAIR
) {
4712 /* OnAir digital receivers won't stream
4713 unless the analog encoder has run first.
4714 Why? I have no idea. But don't even
4715 try until we know the analog side is
4716 known to have run. */
4717 if (!hdw
->state_encoder_runok
) return 0;
4720 if (pvr2_hdw_cmd_usbstream(hdw
,!0) < 0) return 0;
4721 hdw
->state_usbstream_run
= !0;
4723 trace_stbit("state_usbstream_run",hdw
->state_usbstream_run
);
4728 /* Attempt to configure pipeline, if needed */
4729 static int state_eval_pipeline_config(struct pvr2_hdw
*hdw
)
4731 if (hdw
->state_pipeline_config
||
4732 hdw
->state_pipeline_pause
) return 0;
4733 pvr2_hdw_commit_execute(hdw
);
4738 /* Update pipeline idle and pipeline pause tracking states based on other
4739 inputs. This must be called whenever the other relevant inputs have
4741 static int state_update_pipeline_state(struct pvr2_hdw
*hdw
)
4745 /* Update pipeline state */
4746 st
= !(hdw
->state_encoder_run
||
4747 hdw
->state_decoder_run
||
4748 hdw
->state_usbstream_run
||
4749 (!hdw
->state_decoder_quiescent
));
4750 if (!st
!= !hdw
->state_pipeline_idle
) {
4751 hdw
->state_pipeline_idle
= st
;
4754 if (hdw
->state_pipeline_idle
&& hdw
->state_pipeline_pause
) {
4755 hdw
->state_pipeline_pause
= 0;
4762 typedef int (*state_eval_func
)(struct pvr2_hdw
*);
4764 /* Set of functions to be run to evaluate various states in the driver. */
4765 static const state_eval_func eval_funcs
[] = {
4766 state_eval_pathway_ok
,
4767 state_eval_pipeline_config
,
4768 state_eval_encoder_ok
,
4769 state_eval_encoder_config
,
4770 state_eval_decoder_run
,
4771 state_eval_encoder_run
,
4772 state_eval_usbstream_run
,
4776 /* Process various states and return true if we did anything interesting. */
4777 static int pvr2_hdw_state_update(struct pvr2_hdw
*hdw
)
4780 int state_updated
= 0;
4783 if (!hdw
->state_stale
) return 0;
4784 if ((hdw
->fw1_state
!= FW1_STATE_OK
) ||
4786 hdw
->state_stale
= 0;
4789 /* This loop is the heart of the entire driver. It keeps trying to
4790 evaluate various bits of driver state until nothing changes for
4791 one full iteration. Each "bit of state" tracks some global
4792 aspect of the driver, e.g. whether decoder should run, if
4793 pipeline is configured, usb streaming is on, etc. We separately
4794 evaluate each of those questions based on other driver state to
4795 arrive at the correct running configuration. */
4798 state_update_pipeline_state(hdw
);
4799 /* Iterate over each bit of state */
4800 for (i
= 0; (i
<ARRAY_SIZE(eval_funcs
)) && hdw
->flag_ok
; i
++) {
4801 if ((*eval_funcs
[i
])(hdw
)) {
4804 state_update_pipeline_state(hdw
);
4807 } while (check_flag
&& hdw
->flag_ok
);
4808 hdw
->state_stale
= 0;
4809 trace_stbit("state_stale",hdw
->state_stale
);
4810 return state_updated
;
4814 static unsigned int print_input_mask(unsigned int msk
,
4815 char *buf
,unsigned int acnt
)
4817 unsigned int idx
,ccnt
;
4818 unsigned int tcnt
= 0;
4819 for (idx
= 0; idx
< ARRAY_SIZE(control_values_input
); idx
++) {
4820 if (!((1 << idx
) & msk
)) continue;
4821 ccnt
= scnprintf(buf
+tcnt
,
4825 control_values_input
[idx
]);
4832 static const char *pvr2_pathway_state_name(int id
)
4835 case PVR2_PATHWAY_ANALOG
: return "analog";
4836 case PVR2_PATHWAY_DIGITAL
: return "digital";
4837 default: return "unknown";
4842 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw
*hdw
,int which
,
4843 char *buf
,unsigned int acnt
)
4849 "driver:%s%s%s%s%s <mode=%s>",
4850 (hdw
->flag_ok
? " <ok>" : " <fail>"),
4851 (hdw
->flag_init_ok
? " <init>" : " <uninitialized>"),
4852 (hdw
->flag_disconnected
? " <disconnected>" :
4854 (hdw
->flag_tripped
? " <tripped>" : ""),
4855 (hdw
->flag_decoder_missed
? " <no decoder>" : ""),
4856 pvr2_pathway_state_name(hdw
->pathway_state
));
4861 "pipeline:%s%s%s%s",
4862 (hdw
->state_pipeline_idle
? " <idle>" : ""),
4863 (hdw
->state_pipeline_config
?
4864 " <configok>" : " <stale>"),
4865 (hdw
->state_pipeline_req
? " <req>" : ""),
4866 (hdw
->state_pipeline_pause
? " <pause>" : ""));
4870 "worker:%s%s%s%s%s%s%s",
4871 (hdw
->state_decoder_run
?
4872 (hdw
->state_decoder_ready
?
4873 "<decode:run>" : " <decode:start>") :
4874 (hdw
->state_decoder_quiescent
?
4875 "" : " <decode:stop>")),
4876 (hdw
->state_decoder_quiescent
?
4877 " <decode:quiescent>" : ""),
4878 (hdw
->state_encoder_ok
?
4879 "" : " <encode:init>"),
4880 (hdw
->state_encoder_run
?
4881 (hdw
->state_encoder_runok
?
4883 " <encode:firstrun>") :
4884 (hdw
->state_encoder_runok
?
4886 " <encode:virgin>")),
4887 (hdw
->state_encoder_config
?
4888 " <encode:configok>" :
4889 (hdw
->state_encoder_waitok
?
4890 "" : " <encode:waitok>")),
4891 (hdw
->state_usbstream_run
?
4892 " <usb:run>" : " <usb:stop>"),
4893 (hdw
->state_pathway_ok
?
4894 " <pathway:ok>" : ""));
4899 pvr2_get_state_name(hdw
->master_state
));
4901 unsigned int tcnt
= 0;
4904 ccnt
= scnprintf(buf
,
4906 "Hardware supported inputs: ");
4908 tcnt
+= print_input_mask(hdw
->input_avail_mask
,
4911 if (hdw
->input_avail_mask
!= hdw
->input_allowed_mask
) {
4912 ccnt
= scnprintf(buf
+tcnt
,
4914 "; allowed inputs: ");
4916 tcnt
+= print_input_mask(hdw
->input_allowed_mask
,
4923 struct pvr2_stream_stats stats
;
4924 if (!hdw
->vid_stream
) break;
4925 pvr2_stream_get_stats(hdw
->vid_stream
,
4931 " URBs: queued=%u idle=%u ready=%u"
4932 " processed=%u failed=%u",
4933 stats
.bytes_processed
,
4934 stats
.buffers_in_queue
,
4935 stats
.buffers_in_idle
,
4936 stats
.buffers_in_ready
,
4937 stats
.buffers_processed
,
4938 stats
.buffers_failed
);
4941 unsigned int id
= hdw
->ir_scheme_active
;
4942 return scnprintf(buf
, acnt
, "ir scheme: id=%d %s", id
,
4943 (id
>= ARRAY_SIZE(ir_scheme_names
) ?
4944 "?" : ir_scheme_names
[id
]));
4952 /* Generate report containing info about attached sub-devices and attached
4953 i2c clients, including an indication of which attached i2c clients are
4954 actually sub-devices. */
4955 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw
*hdw
,
4956 char *buf
, unsigned int acnt
)
4958 struct v4l2_subdev
*sd
;
4959 unsigned int tcnt
= 0;
4961 struct i2c_client
*client
;
4965 ccnt
= scnprintf(buf
, acnt
, "Associated v4l2-subdev drivers and I2C clients:\n");
4967 v4l2_device_for_each_subdev(sd
, &hdw
->v4l2_dev
) {
4970 if (id
< ARRAY_SIZE(module_names
)) p
= module_names
[id
];
4972 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
, " %s:", p
);
4975 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
,
4976 " (unknown id=%u):", id
);
4979 client
= v4l2_get_subdevdata(sd
);
4981 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
,
4982 " %s @ %02x\n", client
->name
,
4986 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
,
4987 " no i2c client\n");
4995 unsigned int pvr2_hdw_state_report(struct pvr2_hdw
*hdw
,
4996 char *buf
,unsigned int acnt
)
4998 unsigned int bcnt
,ccnt
,idx
;
5000 LOCK_TAKE(hdw
->big_lock
);
5001 for (idx
= 0; ; idx
++) {
5002 ccnt
= pvr2_hdw_report_unlocked(hdw
,idx
,buf
,acnt
);
5004 bcnt
+= ccnt
; acnt
-= ccnt
; buf
+= ccnt
;
5006 buf
[0] = '\n'; ccnt
= 1;
5007 bcnt
+= ccnt
; acnt
-= ccnt
; buf
+= ccnt
;
5009 ccnt
= pvr2_hdw_report_clients(hdw
, buf
, acnt
);
5010 bcnt
+= ccnt
; acnt
-= ccnt
; buf
+= ccnt
;
5011 LOCK_GIVE(hdw
->big_lock
);
5016 static void pvr2_hdw_state_log_state(struct pvr2_hdw
*hdw
)
5019 unsigned int idx
, ccnt
;
5020 unsigned int lcnt
, ucnt
;
5022 for (idx
= 0; ; idx
++) {
5023 ccnt
= pvr2_hdw_report_unlocked(hdw
,idx
,buf
,sizeof(buf
));
5025 printk(KERN_INFO
"%s %.*s\n",hdw
->name
,ccnt
,buf
);
5027 ccnt
= pvr2_hdw_report_clients(hdw
, buf
, sizeof(buf
));
5029 while (ucnt
< ccnt
) {
5031 while ((lcnt
+ ucnt
< ccnt
) && (buf
[lcnt
+ ucnt
] != '\n')) {
5034 printk(KERN_INFO
"%s %.*s\n", hdw
->name
, lcnt
, buf
+ ucnt
);
5040 /* Evaluate and update the driver's current state, taking various actions
5041 as appropriate for the update. */
5042 static int pvr2_hdw_state_eval(struct pvr2_hdw
*hdw
)
5045 int state_updated
= 0;
5046 int callback_flag
= 0;
5049 pvr2_trace(PVR2_TRACE_STBITS
,
5050 "Drive state check START");
5051 if (pvrusb2_debug
& PVR2_TRACE_STBITS
) {
5052 pvr2_hdw_state_log_state(hdw
);
5055 /* Process all state and get back over disposition */
5056 state_updated
= pvr2_hdw_state_update(hdw
);
5058 analog_mode
= (hdw
->pathway_state
!= PVR2_PATHWAY_DIGITAL
);
5060 /* Update master state based upon all other states. */
5061 if (!hdw
->flag_ok
) {
5062 st
= PVR2_STATE_DEAD
;
5063 } else if (hdw
->fw1_state
!= FW1_STATE_OK
) {
5064 st
= PVR2_STATE_COLD
;
5065 } else if ((analog_mode
||
5066 hdw
->hdw_desc
->flag_digital_requires_cx23416
) &&
5067 !hdw
->state_encoder_ok
) {
5068 st
= PVR2_STATE_WARM
;
5069 } else if (hdw
->flag_tripped
||
5070 (analog_mode
&& hdw
->flag_decoder_missed
)) {
5071 st
= PVR2_STATE_ERROR
;
5072 } else if (hdw
->state_usbstream_run
&&
5074 (hdw
->state_encoder_run
&& hdw
->state_decoder_run
))) {
5075 st
= PVR2_STATE_RUN
;
5077 st
= PVR2_STATE_READY
;
5079 if (hdw
->master_state
!= st
) {
5080 pvr2_trace(PVR2_TRACE_STATE
,
5081 "Device state change from %s to %s",
5082 pvr2_get_state_name(hdw
->master_state
),
5083 pvr2_get_state_name(st
));
5084 pvr2_led_ctrl(hdw
,st
== PVR2_STATE_RUN
);
5085 hdw
->master_state
= st
;
5089 if (state_updated
) {
5090 /* Trigger anyone waiting on any state changes here. */
5091 wake_up(&hdw
->state_wait_data
);
5094 if (pvrusb2_debug
& PVR2_TRACE_STBITS
) {
5095 pvr2_hdw_state_log_state(hdw
);
5097 pvr2_trace(PVR2_TRACE_STBITS
,
5098 "Drive state check DONE callback=%d",callback_flag
);
5100 return callback_flag
;
5104 /* Cause kernel thread to check / update driver state */
5105 static void pvr2_hdw_state_sched(struct pvr2_hdw
*hdw
)
5107 if (hdw
->state_stale
) return;
5108 hdw
->state_stale
= !0;
5109 trace_stbit("state_stale",hdw
->state_stale
);
5110 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
5114 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw
*hdw
,u32
*dp
)
5116 return pvr2_read_register(hdw
,PVR2_GPIO_DIR
,dp
);
5120 int pvr2_hdw_gpio_get_out(struct pvr2_hdw
*hdw
,u32
*dp
)
5122 return pvr2_read_register(hdw
,PVR2_GPIO_OUT
,dp
);
5126 int pvr2_hdw_gpio_get_in(struct pvr2_hdw
*hdw
,u32
*dp
)
5128 return pvr2_read_register(hdw
,PVR2_GPIO_IN
,dp
);
5132 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw
*hdw
,u32 msk
,u32 val
)
5137 ret
= pvr2_read_register(hdw
,PVR2_GPIO_DIR
,&cval
);
5138 if (ret
) return ret
;
5139 nval
= (cval
& ~msk
) | (val
& msk
);
5140 pvr2_trace(PVR2_TRACE_GPIO
,
5141 "GPIO direction changing 0x%x:0x%x"
5142 " from 0x%x to 0x%x",
5146 pvr2_trace(PVR2_TRACE_GPIO
,
5147 "GPIO direction changing to 0x%x",nval
);
5149 return pvr2_write_register(hdw
,PVR2_GPIO_DIR
,nval
);
5153 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw
*hdw
,u32 msk
,u32 val
)
5158 ret
= pvr2_read_register(hdw
,PVR2_GPIO_OUT
,&cval
);
5159 if (ret
) return ret
;
5160 nval
= (cval
& ~msk
) | (val
& msk
);
5161 pvr2_trace(PVR2_TRACE_GPIO
,
5162 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5166 pvr2_trace(PVR2_TRACE_GPIO
,
5167 "GPIO output changing to 0x%x",nval
);
5169 return pvr2_write_register(hdw
,PVR2_GPIO_OUT
,nval
);
5173 void pvr2_hdw_status_poll(struct pvr2_hdw
*hdw
)
5175 struct v4l2_tuner
*vtp
= &hdw
->tuner_signal_info
;
5176 memset(vtp
, 0, sizeof(*vtp
));
5177 vtp
->type
= (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) ?
5178 V4L2_TUNER_RADIO
: V4L2_TUNER_ANALOG_TV
;
5179 hdw
->tuner_signal_stale
= 0;
5180 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5181 using v4l2-subdev - therefore we can't support that AT ALL right
5182 now. (Of course, no sub-drivers seem to implement it either.
5183 But now it's a a chicken and egg problem...) */
5184 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, tuner
, g_tuner
, vtp
);
5185 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev status poll"
5186 " type=%u strength=%u audio=0x%x cap=0x%x"
5189 vtp
->signal
, vtp
->rxsubchans
, vtp
->capability
,
5190 vtp
->rangelow
, vtp
->rangehigh
);
5192 /* We have to do this to avoid getting into constant polling if
5193 there's nobody to answer a poll of cropcap info. */
5194 hdw
->cropcap_stale
= 0;
5198 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw
*hdw
)
5200 return hdw
->input_avail_mask
;
5204 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw
*hdw
)
5206 return hdw
->input_allowed_mask
;
5210 static int pvr2_hdw_set_input(struct pvr2_hdw
*hdw
,int v
)
5212 if (hdw
->input_val
!= v
) {
5214 hdw
->input_dirty
= !0;
5217 /* Handle side effects - if we switch to a mode that needs the RF
5218 tuner, then select the right frequency choice as well and mark
5220 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
5221 hdw
->freqSelector
= 0;
5222 hdw
->freqDirty
= !0;
5223 } else if ((hdw
->input_val
== PVR2_CVAL_INPUT_TV
) ||
5224 (hdw
->input_val
== PVR2_CVAL_INPUT_DTV
)) {
5225 hdw
->freqSelector
= 1;
5226 hdw
->freqDirty
= !0;
5232 int pvr2_hdw_set_input_allowed(struct pvr2_hdw
*hdw
,
5233 unsigned int change_mask
,
5234 unsigned int change_val
)
5237 unsigned int nv
,m
,idx
;
5238 LOCK_TAKE(hdw
->big_lock
);
5240 nv
= hdw
->input_allowed_mask
& ~change_mask
;
5241 nv
|= (change_val
& change_mask
);
5242 nv
&= hdw
->input_avail_mask
;
5244 /* No legal modes left; return error instead. */
5248 hdw
->input_allowed_mask
= nv
;
5249 if ((1 << hdw
->input_val
) & hdw
->input_allowed_mask
) {
5250 /* Current mode is still in the allowed mask, so
5254 /* Select and switch to a mode that is still in the allowed
5256 if (!hdw
->input_allowed_mask
) {
5257 /* Nothing legal; give up */
5260 m
= hdw
->input_allowed_mask
;
5261 for (idx
= 0; idx
< (sizeof(m
) << 3); idx
++) {
5262 if (!((1 << idx
) & m
)) continue;
5263 pvr2_hdw_set_input(hdw
,idx
);
5267 LOCK_GIVE(hdw
->big_lock
);
5272 /* Find I2C address of eeprom */
5273 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw
*hdw
)
5276 LOCK_TAKE(hdw
->ctl_lock
); do {
5277 hdw
->cmd_buffer
[0] = FX2CMD_GET_EEPROM_ADDR
;
5278 result
= pvr2_send_request(hdw
,
5281 if (result
< 0) break;
5282 result
= hdw
->cmd_buffer
[0];
5283 } while(0); LOCK_GIVE(hdw
->ctl_lock
);
5288 int pvr2_hdw_register_access(struct pvr2_hdw
*hdw
,
5289 struct v4l2_dbg_match
*match
, u64 reg_id
,
5290 int setFl
, u64
*val_ptr
)
5292 #ifdef CONFIG_VIDEO_ADV_DEBUG
5293 struct v4l2_dbg_register req
;
5297 if (!capable(CAP_SYS_ADMIN
)) return -EPERM
;
5301 if (setFl
) req
.val
= *val_ptr
;
5302 /* It would be nice to know if a sub-device answered the request */
5303 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, g_register
, &req
);
5304 if (!setFl
) *val_ptr
= req
.val
;
5316 Stuff for Emacs to see, in order to encourage consistent editing style:
5317 *** Local Variables: ***
5319 *** fill-column: 75 ***
5320 *** tab-width: 8 ***
5321 *** c-basic-offset: 8 ***