4 * Copyright (C) 2005 Mike Isely <isely@pobox.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <linux/errno.h>
22 #include <linux/string.h>
23 #include <linux/slab.h>
24 #include <linux/firmware.h>
25 #include <linux/videodev2.h>
26 #include <media/v4l2-common.h>
27 #include <media/tuner.h>
29 #include "pvrusb2-std.h"
30 #include "pvrusb2-util.h"
31 #include "pvrusb2-hdw.h"
32 #include "pvrusb2-i2c-core.h"
33 #include "pvrusb2-eeprom.h"
34 #include "pvrusb2-hdw-internal.h"
35 #include "pvrusb2-encoder.h"
36 #include "pvrusb2-debug.h"
37 #include "pvrusb2-fx2-cmd.h"
38 #include "pvrusb2-wm8775.h"
39 #include "pvrusb2-video-v4l.h"
40 #include "pvrusb2-cx2584x-v4l.h"
41 #include "pvrusb2-cs53l32a.h"
42 #include "pvrusb2-audio.h"
44 #define TV_MIN_FREQ 55250000L
45 #define TV_MAX_FREQ 850000000L
47 /* This defines a minimum interval that the decoder must remain quiet
48 before we are allowed to start it running. */
49 #define TIME_MSEC_DECODER_WAIT 50
51 /* This defines a minimum interval that the decoder must be allowed to run
52 before we can safely begin using its streaming output. */
53 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
55 /* This defines a minimum interval that the encoder must remain quiet
56 before we are allowed to configure it. */
57 #define TIME_MSEC_ENCODER_WAIT 50
59 /* This defines the minimum interval that the encoder must successfully run
60 before we consider that the encoder has run at least once since its
61 firmware has been loaded. This measurement is in important for cases
62 where we can't do something until we know that the encoder has been run
64 #define TIME_MSEC_ENCODER_OK 250
66 static struct pvr2_hdw
*unit_pointers
[PVR_NUM
] = {[ 0 ... PVR_NUM
-1 ] = NULL
};
67 static DEFINE_MUTEX(pvr2_unit_mtx
);
70 static int procreload
;
71 static int tuner
[PVR_NUM
] = { [0 ... PVR_NUM
-1] = -1 };
72 static int tolerance
[PVR_NUM
] = { [0 ... PVR_NUM
-1] = 0 };
73 static int video_std
[PVR_NUM
] = { [0 ... PVR_NUM
-1] = 0 };
74 static int init_pause_msec
;
76 module_param(ctlchg
, int, S_IRUGO
|S_IWUSR
);
77 MODULE_PARM_DESC(ctlchg
, "0=optimize ctl change 1=always accept new ctl value");
78 module_param(init_pause_msec
, int, S_IRUGO
|S_IWUSR
);
79 MODULE_PARM_DESC(init_pause_msec
, "hardware initialization settling delay");
80 module_param(procreload
, int, S_IRUGO
|S_IWUSR
);
81 MODULE_PARM_DESC(procreload
,
82 "Attempt init failure recovery with firmware reload");
83 module_param_array(tuner
, int, NULL
, 0444);
84 MODULE_PARM_DESC(tuner
,"specify installed tuner type");
85 module_param_array(video_std
, int, NULL
, 0444);
86 MODULE_PARM_DESC(video_std
,"specify initial video standard");
87 module_param_array(tolerance
, int, NULL
, 0444);
88 MODULE_PARM_DESC(tolerance
,"specify stream error tolerance");
90 /* US Broadcast channel 3 (61.25 MHz), to help with testing */
91 static int default_tv_freq
= 61250000L;
92 /* 104.3 MHz, a usable FM station for my area */
93 static int default_radio_freq
= 104300000L;
95 module_param_named(tv_freq
, default_tv_freq
, int, 0444);
96 MODULE_PARM_DESC(tv_freq
, "specify initial television frequency");
97 module_param_named(radio_freq
, default_radio_freq
, int, 0444);
98 MODULE_PARM_DESC(radio_freq
, "specify initial radio frequency");
100 #define PVR2_CTL_WRITE_ENDPOINT 0x01
101 #define PVR2_CTL_READ_ENDPOINT 0x81
103 #define PVR2_GPIO_IN 0x9008
104 #define PVR2_GPIO_OUT 0x900c
105 #define PVR2_GPIO_DIR 0x9020
107 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
109 #define PVR2_FIRMWARE_ENDPOINT 0x02
111 /* size of a firmware chunk */
112 #define FIRMWARE_CHUNK_SIZE 0x2000
114 typedef void (*pvr2_subdev_update_func
)(struct pvr2_hdw
*,
115 struct v4l2_subdev
*);
117 static const pvr2_subdev_update_func pvr2_module_update_functions
[] = {
118 [PVR2_CLIENT_ID_WM8775
] = pvr2_wm8775_subdev_update
,
119 [PVR2_CLIENT_ID_SAA7115
] = pvr2_saa7115_subdev_update
,
120 [PVR2_CLIENT_ID_MSP3400
] = pvr2_msp3400_subdev_update
,
121 [PVR2_CLIENT_ID_CX25840
] = pvr2_cx25840_subdev_update
,
122 [PVR2_CLIENT_ID_CS53L32A
] = pvr2_cs53l32a_subdev_update
,
125 static const char *module_names
[] = {
126 [PVR2_CLIENT_ID_MSP3400
] = "msp3400",
127 [PVR2_CLIENT_ID_CX25840
] = "cx25840",
128 [PVR2_CLIENT_ID_SAA7115
] = "saa7115",
129 [PVR2_CLIENT_ID_TUNER
] = "tuner",
130 [PVR2_CLIENT_ID_DEMOD
] = "tuner",
131 [PVR2_CLIENT_ID_CS53L32A
] = "cs53l32a",
132 [PVR2_CLIENT_ID_WM8775
] = "wm8775",
136 static const unsigned char *module_i2c_addresses
[] = {
137 [PVR2_CLIENT_ID_TUNER
] = "\x60\x61\x62\x63",
138 [PVR2_CLIENT_ID_DEMOD
] = "\x43",
139 [PVR2_CLIENT_ID_MSP3400
] = "\x40",
140 [PVR2_CLIENT_ID_SAA7115
] = "\x21",
141 [PVR2_CLIENT_ID_WM8775
] = "\x1b",
142 [PVR2_CLIENT_ID_CX25840
] = "\x44",
143 [PVR2_CLIENT_ID_CS53L32A
] = "\x11",
147 static const char *ir_scheme_names
[] = {
148 [PVR2_IR_SCHEME_NONE
] = "none",
149 [PVR2_IR_SCHEME_29XXX
] = "29xxx",
150 [PVR2_IR_SCHEME_24XXX
] = "24xxx (29xxx emulation)",
151 [PVR2_IR_SCHEME_24XXX_MCE
] = "24xxx (MCE device)",
152 [PVR2_IR_SCHEME_ZILOG
] = "Zilog",
156 /* Define the list of additional controls we'll dynamically construct based
157 on query of the cx2341x module. */
158 struct pvr2_mpeg_ids
{
162 static const struct pvr2_mpeg_ids mpeg_ids
[] = {
164 .strid
= "audio_layer",
165 .id
= V4L2_CID_MPEG_AUDIO_ENCODING
,
167 .strid
= "audio_bitrate",
168 .id
= V4L2_CID_MPEG_AUDIO_L2_BITRATE
,
170 /* Already using audio_mode elsewhere :-( */
171 .strid
= "mpeg_audio_mode",
172 .id
= V4L2_CID_MPEG_AUDIO_MODE
,
174 .strid
= "mpeg_audio_mode_extension",
175 .id
= V4L2_CID_MPEG_AUDIO_MODE_EXTENSION
,
177 .strid
= "audio_emphasis",
178 .id
= V4L2_CID_MPEG_AUDIO_EMPHASIS
,
180 .strid
= "audio_crc",
181 .id
= V4L2_CID_MPEG_AUDIO_CRC
,
183 .strid
= "video_aspect",
184 .id
= V4L2_CID_MPEG_VIDEO_ASPECT
,
186 .strid
= "video_b_frames",
187 .id
= V4L2_CID_MPEG_VIDEO_B_FRAMES
,
189 .strid
= "video_gop_size",
190 .id
= V4L2_CID_MPEG_VIDEO_GOP_SIZE
,
192 .strid
= "video_gop_closure",
193 .id
= V4L2_CID_MPEG_VIDEO_GOP_CLOSURE
,
195 .strid
= "video_bitrate_mode",
196 .id
= V4L2_CID_MPEG_VIDEO_BITRATE_MODE
,
198 .strid
= "video_bitrate",
199 .id
= V4L2_CID_MPEG_VIDEO_BITRATE
,
201 .strid
= "video_bitrate_peak",
202 .id
= V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
,
204 .strid
= "video_temporal_decimation",
205 .id
= V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION
,
207 .strid
= "stream_type",
208 .id
= V4L2_CID_MPEG_STREAM_TYPE
,
210 .strid
= "video_spatial_filter_mode",
211 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE
,
213 .strid
= "video_spatial_filter",
214 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER
,
216 .strid
= "video_luma_spatial_filter_type",
217 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE
,
219 .strid
= "video_chroma_spatial_filter_type",
220 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE
,
222 .strid
= "video_temporal_filter_mode",
223 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE
,
225 .strid
= "video_temporal_filter",
226 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER
,
228 .strid
= "video_median_filter_type",
229 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE
,
231 .strid
= "video_luma_median_filter_top",
232 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP
,
234 .strid
= "video_luma_median_filter_bottom",
235 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM
,
237 .strid
= "video_chroma_median_filter_top",
238 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP
,
240 .strid
= "video_chroma_median_filter_bottom",
241 .id
= V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM
,
244 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
247 static const char *control_values_srate
[] = {
248 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100
] = "44.1 kHz",
249 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000
] = "48 kHz",
250 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000
] = "32 kHz",
255 static const char *control_values_input
[] = {
256 [PVR2_CVAL_INPUT_TV
] = "television", /*xawtv needs this name*/
257 [PVR2_CVAL_INPUT_DTV
] = "dtv",
258 [PVR2_CVAL_INPUT_RADIO
] = "radio",
259 [PVR2_CVAL_INPUT_SVIDEO
] = "s-video",
260 [PVR2_CVAL_INPUT_COMPOSITE
] = "composite",
264 static const char *control_values_audiomode
[] = {
265 [V4L2_TUNER_MODE_MONO
] = "Mono",
266 [V4L2_TUNER_MODE_STEREO
] = "Stereo",
267 [V4L2_TUNER_MODE_LANG1
] = "Lang1",
268 [V4L2_TUNER_MODE_LANG2
] = "Lang2",
269 [V4L2_TUNER_MODE_LANG1_LANG2
] = "Lang1+Lang2",
273 static const char *control_values_hsm
[] = {
274 [PVR2_CVAL_HSM_FAIL
] = "Fail",
275 [PVR2_CVAL_HSM_HIGH
] = "High",
276 [PVR2_CVAL_HSM_FULL
] = "Full",
280 static const char *pvr2_state_names
[] = {
281 [PVR2_STATE_NONE
] = "none",
282 [PVR2_STATE_DEAD
] = "dead",
283 [PVR2_STATE_COLD
] = "cold",
284 [PVR2_STATE_WARM
] = "warm",
285 [PVR2_STATE_ERROR
] = "error",
286 [PVR2_STATE_READY
] = "ready",
287 [PVR2_STATE_RUN
] = "run",
291 struct pvr2_fx2cmd_descdef
{
296 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc
[] = {
297 {FX2CMD_MEM_WRITE_DWORD
, "write encoder dword"},
298 {FX2CMD_MEM_READ_DWORD
, "read encoder dword"},
299 {FX2CMD_HCW_ZILOG_RESET
, "zilog IR reset control"},
300 {FX2CMD_MEM_READ_64BYTES
, "read encoder 64bytes"},
301 {FX2CMD_REG_WRITE
, "write encoder register"},
302 {FX2CMD_REG_READ
, "read encoder register"},
303 {FX2CMD_MEMSEL
, "encoder memsel"},
304 {FX2CMD_I2C_WRITE
, "i2c write"},
305 {FX2CMD_I2C_READ
, "i2c read"},
306 {FX2CMD_GET_USB_SPEED
, "get USB speed"},
307 {FX2CMD_STREAMING_ON
, "stream on"},
308 {FX2CMD_STREAMING_OFF
, "stream off"},
309 {FX2CMD_FWPOST1
, "fwpost1"},
310 {FX2CMD_POWER_OFF
, "power off"},
311 {FX2CMD_POWER_ON
, "power on"},
312 {FX2CMD_DEEP_RESET
, "deep reset"},
313 {FX2CMD_GET_EEPROM_ADDR
, "get rom addr"},
314 {FX2CMD_GET_IR_CODE
, "get IR code"},
315 {FX2CMD_HCW_DEMOD_RESETIN
, "hcw demod resetin"},
316 {FX2CMD_HCW_DTV_STREAMING_ON
, "hcw dtv stream on"},
317 {FX2CMD_HCW_DTV_STREAMING_OFF
, "hcw dtv stream off"},
318 {FX2CMD_ONAIR_DTV_STREAMING_ON
, "onair dtv stream on"},
319 {FX2CMD_ONAIR_DTV_STREAMING_OFF
, "onair dtv stream off"},
320 {FX2CMD_ONAIR_DTV_POWER_ON
, "onair dtv power on"},
321 {FX2CMD_ONAIR_DTV_POWER_OFF
, "onair dtv power off"},
325 static int pvr2_hdw_set_input(struct pvr2_hdw
*hdw
,int v
);
326 static void pvr2_hdw_state_sched(struct pvr2_hdw
*);
327 static int pvr2_hdw_state_eval(struct pvr2_hdw
*);
328 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw
*,unsigned long);
329 static void pvr2_hdw_worker_poll(struct work_struct
*work
);
330 static int pvr2_hdw_wait(struct pvr2_hdw
*,int state
);
331 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw
*);
332 static void pvr2_hdw_state_log_state(struct pvr2_hdw
*);
333 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw
*hdw
,int runFl
);
334 static int pvr2_hdw_commit_setup(struct pvr2_hdw
*hdw
);
335 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw
*hdw
);
336 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw
*hdw
);
337 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw
*hdw
);
338 static void pvr2_hdw_quiescent_timeout(unsigned long);
339 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
340 static void pvr2_hdw_encoder_wait_timeout(unsigned long);
341 static void pvr2_hdw_encoder_run_timeout(unsigned long);
342 static int pvr2_issue_simple_cmd(struct pvr2_hdw
*,u32
);
343 static int pvr2_send_request_ex(struct pvr2_hdw
*hdw
,
344 unsigned int timeout
,int probe_fl
,
345 void *write_data
,unsigned int write_len
,
346 void *read_data
,unsigned int read_len
);
347 static int pvr2_hdw_check_cropcap(struct pvr2_hdw
*hdw
);
350 static void trace_stbit(const char *name
,int val
)
352 pvr2_trace(PVR2_TRACE_STBITS
,
353 "State bit %s <-- %s",
354 name
,(val
? "true" : "false"));
357 static int ctrl_channelfreq_get(struct pvr2_ctrl
*cptr
,int *vp
)
359 struct pvr2_hdw
*hdw
= cptr
->hdw
;
360 if ((hdw
->freqProgSlot
> 0) && (hdw
->freqProgSlot
<= FREQTABLE_SIZE
)) {
361 *vp
= hdw
->freqTable
[hdw
->freqProgSlot
-1];
368 static int ctrl_channelfreq_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
370 struct pvr2_hdw
*hdw
= cptr
->hdw
;
371 unsigned int slotId
= hdw
->freqProgSlot
;
372 if ((slotId
> 0) && (slotId
<= FREQTABLE_SIZE
)) {
373 hdw
->freqTable
[slotId
-1] = v
;
374 /* Handle side effects correctly - if we're tuned to this
375 slot, then forgot the slot id relation since the stored
376 frequency has been changed. */
377 if (hdw
->freqSelector
) {
378 if (hdw
->freqSlotRadio
== slotId
) {
379 hdw
->freqSlotRadio
= 0;
382 if (hdw
->freqSlotTelevision
== slotId
) {
383 hdw
->freqSlotTelevision
= 0;
390 static int ctrl_channelprog_get(struct pvr2_ctrl
*cptr
,int *vp
)
392 *vp
= cptr
->hdw
->freqProgSlot
;
396 static int ctrl_channelprog_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
398 struct pvr2_hdw
*hdw
= cptr
->hdw
;
399 if ((v
>= 0) && (v
<= FREQTABLE_SIZE
)) {
400 hdw
->freqProgSlot
= v
;
405 static int ctrl_channel_get(struct pvr2_ctrl
*cptr
,int *vp
)
407 struct pvr2_hdw
*hdw
= cptr
->hdw
;
408 *vp
= hdw
->freqSelector
? hdw
->freqSlotRadio
: hdw
->freqSlotTelevision
;
412 static int ctrl_channel_set(struct pvr2_ctrl
*cptr
,int m
,int slotId
)
415 struct pvr2_hdw
*hdw
= cptr
->hdw
;
416 if ((slotId
< 0) || (slotId
> FREQTABLE_SIZE
)) return 0;
418 freq
= hdw
->freqTable
[slotId
-1];
420 pvr2_hdw_set_cur_freq(hdw
,freq
);
422 if (hdw
->freqSelector
) {
423 hdw
->freqSlotRadio
= slotId
;
425 hdw
->freqSlotTelevision
= slotId
;
430 static int ctrl_freq_get(struct pvr2_ctrl
*cptr
,int *vp
)
432 *vp
= pvr2_hdw_get_cur_freq(cptr
->hdw
);
436 static int ctrl_freq_is_dirty(struct pvr2_ctrl
*cptr
)
438 return cptr
->hdw
->freqDirty
!= 0;
441 static void ctrl_freq_clear_dirty(struct pvr2_ctrl
*cptr
)
443 cptr
->hdw
->freqDirty
= 0;
446 static int ctrl_freq_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
448 pvr2_hdw_set_cur_freq(cptr
->hdw
,v
);
452 static int ctrl_cropl_min_get(struct pvr2_ctrl
*cptr
, int *left
)
454 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
455 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
459 *left
= cap
->bounds
.left
;
463 static int ctrl_cropl_max_get(struct pvr2_ctrl
*cptr
, int *left
)
465 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
466 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
470 *left
= cap
->bounds
.left
;
471 if (cap
->bounds
.width
> cptr
->hdw
->cropw_val
) {
472 *left
+= cap
->bounds
.width
- cptr
->hdw
->cropw_val
;
477 static int ctrl_cropt_min_get(struct pvr2_ctrl
*cptr
, int *top
)
479 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
480 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
484 *top
= cap
->bounds
.top
;
488 static int ctrl_cropt_max_get(struct pvr2_ctrl
*cptr
, int *top
)
490 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
491 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
495 *top
= cap
->bounds
.top
;
496 if (cap
->bounds
.height
> cptr
->hdw
->croph_val
) {
497 *top
+= cap
->bounds
.height
- cptr
->hdw
->croph_val
;
502 static int ctrl_cropw_max_get(struct pvr2_ctrl
*cptr
, int *width
)
504 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
505 int stat
, bleftend
, cleft
;
507 stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
511 bleftend
= cap
->bounds
.left
+cap
->bounds
.width
;
512 cleft
= cptr
->hdw
->cropl_val
;
514 *width
= cleft
< bleftend
? bleftend
-cleft
: 0;
518 static int ctrl_croph_max_get(struct pvr2_ctrl
*cptr
, int *height
)
520 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
521 int stat
, btopend
, ctop
;
523 stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
527 btopend
= cap
->bounds
.top
+cap
->bounds
.height
;
528 ctop
= cptr
->hdw
->cropt_val
;
530 *height
= ctop
< btopend
? btopend
-ctop
: 0;
534 static int ctrl_get_cropcapbl(struct pvr2_ctrl
*cptr
, int *val
)
536 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
537 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
541 *val
= cap
->bounds
.left
;
545 static int ctrl_get_cropcapbt(struct pvr2_ctrl
*cptr
, int *val
)
547 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
548 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
552 *val
= cap
->bounds
.top
;
556 static int ctrl_get_cropcapbw(struct pvr2_ctrl
*cptr
, int *val
)
558 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
559 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
563 *val
= cap
->bounds
.width
;
567 static int ctrl_get_cropcapbh(struct pvr2_ctrl
*cptr
, int *val
)
569 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
570 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
574 *val
= cap
->bounds
.height
;
578 static int ctrl_get_cropcapdl(struct pvr2_ctrl
*cptr
, int *val
)
580 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
581 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
585 *val
= cap
->defrect
.left
;
589 static int ctrl_get_cropcapdt(struct pvr2_ctrl
*cptr
, int *val
)
591 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
592 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
596 *val
= cap
->defrect
.top
;
600 static int ctrl_get_cropcapdw(struct pvr2_ctrl
*cptr
, int *val
)
602 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
603 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
607 *val
= cap
->defrect
.width
;
611 static int ctrl_get_cropcapdh(struct pvr2_ctrl
*cptr
, int *val
)
613 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
614 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
618 *val
= cap
->defrect
.height
;
622 static int ctrl_get_cropcappan(struct pvr2_ctrl
*cptr
, int *val
)
624 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
625 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
629 *val
= cap
->pixelaspect
.numerator
;
633 static int ctrl_get_cropcappad(struct pvr2_ctrl
*cptr
, int *val
)
635 struct v4l2_cropcap
*cap
= &cptr
->hdw
->cropcap_info
;
636 int stat
= pvr2_hdw_check_cropcap(cptr
->hdw
);
640 *val
= cap
->pixelaspect
.denominator
;
644 static int ctrl_vres_max_get(struct pvr2_ctrl
*cptr
,int *vp
)
646 /* Actual maximum depends on the video standard in effect. */
647 if (cptr
->hdw
->std_mask_cur
& V4L2_STD_525_60
) {
655 static int ctrl_vres_min_get(struct pvr2_ctrl
*cptr
,int *vp
)
657 /* Actual minimum depends on device digitizer type. */
658 if (cptr
->hdw
->hdw_desc
->flag_has_cx25840
) {
666 static int ctrl_get_input(struct pvr2_ctrl
*cptr
,int *vp
)
668 *vp
= cptr
->hdw
->input_val
;
672 static int ctrl_check_input(struct pvr2_ctrl
*cptr
,int v
)
674 return ((1 << v
) & cptr
->hdw
->input_allowed_mask
) != 0;
677 static int ctrl_set_input(struct pvr2_ctrl
*cptr
,int m
,int v
)
679 return pvr2_hdw_set_input(cptr
->hdw
,v
);
682 static int ctrl_isdirty_input(struct pvr2_ctrl
*cptr
)
684 return cptr
->hdw
->input_dirty
!= 0;
687 static void ctrl_cleardirty_input(struct pvr2_ctrl
*cptr
)
689 cptr
->hdw
->input_dirty
= 0;
693 static int ctrl_freq_max_get(struct pvr2_ctrl
*cptr
, int *vp
)
696 struct pvr2_hdw
*hdw
= cptr
->hdw
;
697 if (hdw
->tuner_signal_stale
) {
698 pvr2_hdw_status_poll(hdw
);
700 fv
= hdw
->tuner_signal_info
.rangehigh
;
702 /* Safety fallback */
706 if (hdw
->tuner_signal_info
.capability
& V4L2_TUNER_CAP_LOW
) {
715 static int ctrl_freq_min_get(struct pvr2_ctrl
*cptr
, int *vp
)
718 struct pvr2_hdw
*hdw
= cptr
->hdw
;
719 if (hdw
->tuner_signal_stale
) {
720 pvr2_hdw_status_poll(hdw
);
722 fv
= hdw
->tuner_signal_info
.rangelow
;
724 /* Safety fallback */
728 if (hdw
->tuner_signal_info
.capability
& V4L2_TUNER_CAP_LOW
) {
737 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl
*cptr
)
739 return cptr
->hdw
->enc_stale
!= 0;
742 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl
*cptr
)
744 cptr
->hdw
->enc_stale
= 0;
745 cptr
->hdw
->enc_unsafe_stale
= 0;
748 static int ctrl_cx2341x_get(struct pvr2_ctrl
*cptr
,int *vp
)
751 struct v4l2_ext_controls cs
;
752 struct v4l2_ext_control c1
;
753 memset(&cs
,0,sizeof(cs
));
754 memset(&c1
,0,sizeof(c1
));
757 c1
.id
= cptr
->info
->v4l_id
;
758 ret
= cx2341x_ext_ctrls(&cptr
->hdw
->enc_ctl_state
, 0, &cs
,
765 static int ctrl_cx2341x_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
768 struct pvr2_hdw
*hdw
= cptr
->hdw
;
769 struct v4l2_ext_controls cs
;
770 struct v4l2_ext_control c1
;
771 memset(&cs
,0,sizeof(cs
));
772 memset(&c1
,0,sizeof(c1
));
775 c1
.id
= cptr
->info
->v4l_id
;
777 ret
= cx2341x_ext_ctrls(&hdw
->enc_ctl_state
,
778 hdw
->state_encoder_run
, &cs
,
781 /* Oops. cx2341x is telling us it's not safe to change
782 this control while we're capturing. Make a note of this
783 fact so that the pipeline will be stopped the next time
784 controls are committed. Then go on ahead and store this
786 ret
= cx2341x_ext_ctrls(&hdw
->enc_ctl_state
,
789 if (!ret
) hdw
->enc_unsafe_stale
= !0;
796 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl
*cptr
)
798 struct v4l2_queryctrl qctrl
;
799 struct pvr2_ctl_info
*info
;
800 qctrl
.id
= cptr
->info
->v4l_id
;
801 cx2341x_ctrl_query(&cptr
->hdw
->enc_ctl_state
,&qctrl
);
802 /* Strip out the const so we can adjust a function pointer. It's
803 OK to do this here because we know this is a dynamically created
804 control, so the underlying storage for the info pointer is (a)
805 private to us, and (b) not in read-only storage. Either we do
806 this or we significantly complicate the underlying control
808 info
= (struct pvr2_ctl_info
*)(cptr
->info
);
809 if (qctrl
.flags
& V4L2_CTRL_FLAG_READ_ONLY
) {
810 if (info
->set_value
) {
811 info
->set_value
= NULL
;
814 if (!(info
->set_value
)) {
815 info
->set_value
= ctrl_cx2341x_set
;
821 static int ctrl_streamingenabled_get(struct pvr2_ctrl
*cptr
,int *vp
)
823 *vp
= cptr
->hdw
->state_pipeline_req
;
827 static int ctrl_masterstate_get(struct pvr2_ctrl
*cptr
,int *vp
)
829 *vp
= cptr
->hdw
->master_state
;
833 static int ctrl_hsm_get(struct pvr2_ctrl
*cptr
,int *vp
)
835 int result
= pvr2_hdw_is_hsm(cptr
->hdw
);
836 *vp
= PVR2_CVAL_HSM_FULL
;
837 if (result
< 0) *vp
= PVR2_CVAL_HSM_FAIL
;
838 if (result
) *vp
= PVR2_CVAL_HSM_HIGH
;
842 static int ctrl_stdavail_get(struct pvr2_ctrl
*cptr
,int *vp
)
844 *vp
= cptr
->hdw
->std_mask_avail
;
848 static int ctrl_stdavail_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
850 struct pvr2_hdw
*hdw
= cptr
->hdw
;
852 ns
= hdw
->std_mask_avail
;
853 ns
= (ns
& ~m
) | (v
& m
);
854 if (ns
== hdw
->std_mask_avail
) return 0;
855 hdw
->std_mask_avail
= ns
;
856 pvr2_hdw_internal_set_std_avail(hdw
);
857 pvr2_hdw_internal_find_stdenum(hdw
);
861 static int ctrl_std_val_to_sym(struct pvr2_ctrl
*cptr
,int msk
,int val
,
862 char *bufPtr
,unsigned int bufSize
,
865 *len
= pvr2_std_id_to_str(bufPtr
,bufSize
,msk
& val
);
869 static int ctrl_std_sym_to_val(struct pvr2_ctrl
*cptr
,
870 const char *bufPtr
,unsigned int bufSize
,
875 ret
= pvr2_std_str_to_id(&id
,bufPtr
,bufSize
);
876 if (ret
< 0) return ret
;
877 if (mskp
) *mskp
= id
;
878 if (valp
) *valp
= id
;
882 static int ctrl_stdcur_get(struct pvr2_ctrl
*cptr
,int *vp
)
884 *vp
= cptr
->hdw
->std_mask_cur
;
888 static int ctrl_stdcur_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
890 struct pvr2_hdw
*hdw
= cptr
->hdw
;
892 ns
= hdw
->std_mask_cur
;
893 ns
= (ns
& ~m
) | (v
& m
);
894 if (ns
== hdw
->std_mask_cur
) return 0;
895 hdw
->std_mask_cur
= ns
;
897 pvr2_hdw_internal_find_stdenum(hdw
);
901 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl
*cptr
)
903 return cptr
->hdw
->std_dirty
!= 0;
906 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl
*cptr
)
908 cptr
->hdw
->std_dirty
= 0;
911 static int ctrl_signal_get(struct pvr2_ctrl
*cptr
,int *vp
)
913 struct pvr2_hdw
*hdw
= cptr
->hdw
;
914 pvr2_hdw_status_poll(hdw
);
915 *vp
= hdw
->tuner_signal_info
.signal
;
919 static int ctrl_audio_modes_present_get(struct pvr2_ctrl
*cptr
,int *vp
)
922 unsigned int subchan
;
923 struct pvr2_hdw
*hdw
= cptr
->hdw
;
924 pvr2_hdw_status_poll(hdw
);
925 subchan
= hdw
->tuner_signal_info
.rxsubchans
;
926 if (subchan
& V4L2_TUNER_SUB_MONO
) {
927 val
|= (1 << V4L2_TUNER_MODE_MONO
);
929 if (subchan
& V4L2_TUNER_SUB_STEREO
) {
930 val
|= (1 << V4L2_TUNER_MODE_STEREO
);
932 if (subchan
& V4L2_TUNER_SUB_LANG1
) {
933 val
|= (1 << V4L2_TUNER_MODE_LANG1
);
935 if (subchan
& V4L2_TUNER_SUB_LANG2
) {
936 val
|= (1 << V4L2_TUNER_MODE_LANG2
);
943 static int ctrl_stdenumcur_set(struct pvr2_ctrl
*cptr
,int m
,int v
)
945 struct pvr2_hdw
*hdw
= cptr
->hdw
;
946 if (v
< 0) return -EINVAL
;
947 if (v
> hdw
->std_enum_cnt
) return -EINVAL
;
948 hdw
->std_enum_cur
= v
;
951 if (hdw
->std_mask_cur
== hdw
->std_defs
[v
].id
) return 0;
952 hdw
->std_mask_cur
= hdw
->std_defs
[v
].id
;
958 static int ctrl_stdenumcur_get(struct pvr2_ctrl
*cptr
,int *vp
)
960 *vp
= cptr
->hdw
->std_enum_cur
;
965 static int ctrl_stdenumcur_is_dirty(struct pvr2_ctrl
*cptr
)
967 return cptr
->hdw
->std_dirty
!= 0;
971 static void ctrl_stdenumcur_clear_dirty(struct pvr2_ctrl
*cptr
)
973 cptr
->hdw
->std_dirty
= 0;
977 #define DEFINT(vmin,vmax) \
978 .type = pvr2_ctl_int, \
979 .def.type_int.min_value = vmin, \
980 .def.type_int.max_value = vmax
982 #define DEFENUM(tab) \
983 .type = pvr2_ctl_enum, \
984 .def.type_enum.count = ARRAY_SIZE(tab), \
985 .def.type_enum.value_names = tab
988 .type = pvr2_ctl_bool
990 #define DEFMASK(msk,tab) \
991 .type = pvr2_ctl_bitmask, \
992 .def.type_bitmask.valid_bits = msk, \
993 .def.type_bitmask.bit_names = tab
995 #define DEFREF(vname) \
996 .set_value = ctrl_set_##vname, \
997 .get_value = ctrl_get_##vname, \
998 .is_dirty = ctrl_isdirty_##vname, \
999 .clear_dirty = ctrl_cleardirty_##vname
1002 #define VCREATE_FUNCS(vname) \
1003 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
1004 {*vp = cptr->hdw->vname##_val; return 0;} \
1005 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
1006 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
1007 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
1008 {return cptr->hdw->vname##_dirty != 0;} \
1009 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
1010 {cptr->hdw->vname##_dirty = 0;}
1012 VCREATE_FUNCS(brightness
)
1013 VCREATE_FUNCS(contrast
)
1014 VCREATE_FUNCS(saturation
)
1016 VCREATE_FUNCS(volume
)
1017 VCREATE_FUNCS(balance
)
1019 VCREATE_FUNCS(treble
)
1021 VCREATE_FUNCS(cropl
)
1022 VCREATE_FUNCS(cropt
)
1023 VCREATE_FUNCS(cropw
)
1024 VCREATE_FUNCS(croph
)
1025 VCREATE_FUNCS(audiomode
)
1026 VCREATE_FUNCS(res_hor
)
1027 VCREATE_FUNCS(res_ver
)
1028 VCREATE_FUNCS(srate
)
1030 /* Table definition of all controls which can be manipulated */
1031 static const struct pvr2_ctl_info control_defs
[] = {
1033 .v4l_id
= V4L2_CID_BRIGHTNESS
,
1034 .desc
= "Brightness",
1035 .name
= "brightness",
1036 .default_value
= 128,
1040 .v4l_id
= V4L2_CID_CONTRAST
,
1043 .default_value
= 68,
1047 .v4l_id
= V4L2_CID_SATURATION
,
1048 .desc
= "Saturation",
1049 .name
= "saturation",
1050 .default_value
= 64,
1054 .v4l_id
= V4L2_CID_HUE
,
1061 .v4l_id
= V4L2_CID_AUDIO_VOLUME
,
1064 .default_value
= 62000,
1068 .v4l_id
= V4L2_CID_AUDIO_BALANCE
,
1073 DEFINT(-32768,32767),
1075 .v4l_id
= V4L2_CID_AUDIO_BASS
,
1080 DEFINT(-32768,32767),
1082 .v4l_id
= V4L2_CID_AUDIO_TREBLE
,
1087 DEFINT(-32768,32767),
1089 .v4l_id
= V4L2_CID_AUDIO_MUTE
,
1096 .desc
= "Capture crop left margin",
1097 .name
= "crop_left",
1098 .internal_id
= PVR2_CID_CROPL
,
1102 .get_min_value
= ctrl_cropl_min_get
,
1103 .get_max_value
= ctrl_cropl_max_get
,
1104 .get_def_value
= ctrl_get_cropcapdl
,
1106 .desc
= "Capture crop top margin",
1108 .internal_id
= PVR2_CID_CROPT
,
1112 .get_min_value
= ctrl_cropt_min_get
,
1113 .get_max_value
= ctrl_cropt_max_get
,
1114 .get_def_value
= ctrl_get_cropcapdt
,
1116 .desc
= "Capture crop width",
1117 .name
= "crop_width",
1118 .internal_id
= PVR2_CID_CROPW
,
1119 .default_value
= 720,
1122 .get_max_value
= ctrl_cropw_max_get
,
1123 .get_def_value
= ctrl_get_cropcapdw
,
1125 .desc
= "Capture crop height",
1126 .name
= "crop_height",
1127 .internal_id
= PVR2_CID_CROPH
,
1128 .default_value
= 480,
1131 .get_max_value
= ctrl_croph_max_get
,
1132 .get_def_value
= ctrl_get_cropcapdh
,
1134 .desc
= "Capture capability pixel aspect numerator",
1135 .name
= "cropcap_pixel_numerator",
1136 .internal_id
= PVR2_CID_CROPCAPPAN
,
1137 .get_value
= ctrl_get_cropcappan
,
1139 .desc
= "Capture capability pixel aspect denominator",
1140 .name
= "cropcap_pixel_denominator",
1141 .internal_id
= PVR2_CID_CROPCAPPAD
,
1142 .get_value
= ctrl_get_cropcappad
,
1144 .desc
= "Capture capability bounds top",
1145 .name
= "cropcap_bounds_top",
1146 .internal_id
= PVR2_CID_CROPCAPBT
,
1147 .get_value
= ctrl_get_cropcapbt
,
1149 .desc
= "Capture capability bounds left",
1150 .name
= "cropcap_bounds_left",
1151 .internal_id
= PVR2_CID_CROPCAPBL
,
1152 .get_value
= ctrl_get_cropcapbl
,
1154 .desc
= "Capture capability bounds width",
1155 .name
= "cropcap_bounds_width",
1156 .internal_id
= PVR2_CID_CROPCAPBW
,
1157 .get_value
= ctrl_get_cropcapbw
,
1159 .desc
= "Capture capability bounds height",
1160 .name
= "cropcap_bounds_height",
1161 .internal_id
= PVR2_CID_CROPCAPBH
,
1162 .get_value
= ctrl_get_cropcapbh
,
1164 .desc
= "Video Source",
1166 .internal_id
= PVR2_CID_INPUT
,
1167 .default_value
= PVR2_CVAL_INPUT_TV
,
1168 .check_value
= ctrl_check_input
,
1170 DEFENUM(control_values_input
),
1172 .desc
= "Audio Mode",
1173 .name
= "audio_mode",
1174 .internal_id
= PVR2_CID_AUDIOMODE
,
1175 .default_value
= V4L2_TUNER_MODE_STEREO
,
1177 DEFENUM(control_values_audiomode
),
1179 .desc
= "Horizontal capture resolution",
1180 .name
= "resolution_hor",
1181 .internal_id
= PVR2_CID_HRES
,
1182 .default_value
= 720,
1186 .desc
= "Vertical capture resolution",
1187 .name
= "resolution_ver",
1188 .internal_id
= PVR2_CID_VRES
,
1189 .default_value
= 480,
1192 /* Hook in check for video standard and adjust maximum
1193 depending on the standard. */
1194 .get_max_value
= ctrl_vres_max_get
,
1195 .get_min_value
= ctrl_vres_min_get
,
1197 .v4l_id
= V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ
,
1198 .default_value
= V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000
,
1199 .desc
= "Audio Sampling Frequency",
1202 DEFENUM(control_values_srate
),
1204 .desc
= "Tuner Frequency (Hz)",
1205 .name
= "frequency",
1206 .internal_id
= PVR2_CID_FREQUENCY
,
1208 .set_value
= ctrl_freq_set
,
1209 .get_value
= ctrl_freq_get
,
1210 .is_dirty
= ctrl_freq_is_dirty
,
1211 .clear_dirty
= ctrl_freq_clear_dirty
,
1213 /* Hook in check for input value (tv/radio) and adjust
1214 max/min values accordingly */
1215 .get_max_value
= ctrl_freq_max_get
,
1216 .get_min_value
= ctrl_freq_min_get
,
1220 .set_value
= ctrl_channel_set
,
1221 .get_value
= ctrl_channel_get
,
1222 DEFINT(0,FREQTABLE_SIZE
),
1224 .desc
= "Channel Program Frequency",
1225 .name
= "freq_table_value",
1226 .set_value
= ctrl_channelfreq_set
,
1227 .get_value
= ctrl_channelfreq_get
,
1229 /* Hook in check for input value (tv/radio) and adjust
1230 max/min values accordingly */
1231 .get_max_value
= ctrl_freq_max_get
,
1232 .get_min_value
= ctrl_freq_min_get
,
1234 .desc
= "Channel Program ID",
1235 .name
= "freq_table_channel",
1236 .set_value
= ctrl_channelprog_set
,
1237 .get_value
= ctrl_channelprog_get
,
1238 DEFINT(0,FREQTABLE_SIZE
),
1240 .desc
= "Streaming Enabled",
1241 .name
= "streaming_enabled",
1242 .get_value
= ctrl_streamingenabled_get
,
1245 .desc
= "USB Speed",
1246 .name
= "usb_speed",
1247 .get_value
= ctrl_hsm_get
,
1248 DEFENUM(control_values_hsm
),
1250 .desc
= "Master State",
1251 .name
= "master_state",
1252 .get_value
= ctrl_masterstate_get
,
1253 DEFENUM(pvr2_state_names
),
1255 .desc
= "Signal Present",
1256 .name
= "signal_present",
1257 .get_value
= ctrl_signal_get
,
1260 .desc
= "Audio Modes Present",
1261 .name
= "audio_modes_present",
1262 .get_value
= ctrl_audio_modes_present_get
,
1263 /* For this type we "borrow" the V4L2_TUNER_MODE enum from
1264 v4l. Nothing outside of this module cares about this,
1265 but I reuse it in order to also reuse the
1266 control_values_audiomode string table. */
1267 DEFMASK(((1 << V4L2_TUNER_MODE_MONO
)|
1268 (1 << V4L2_TUNER_MODE_STEREO
)|
1269 (1 << V4L2_TUNER_MODE_LANG1
)|
1270 (1 << V4L2_TUNER_MODE_LANG2
)),
1271 control_values_audiomode
),
1273 .desc
= "Video Standards Available Mask",
1274 .name
= "video_standard_mask_available",
1275 .internal_id
= PVR2_CID_STDAVAIL
,
1277 .get_value
= ctrl_stdavail_get
,
1278 .set_value
= ctrl_stdavail_set
,
1279 .val_to_sym
= ctrl_std_val_to_sym
,
1280 .sym_to_val
= ctrl_std_sym_to_val
,
1281 .type
= pvr2_ctl_bitmask
,
1283 .desc
= "Video Standards In Use Mask",
1284 .name
= "video_standard_mask_active",
1285 .internal_id
= PVR2_CID_STDCUR
,
1287 .get_value
= ctrl_stdcur_get
,
1288 .set_value
= ctrl_stdcur_set
,
1289 .is_dirty
= ctrl_stdcur_is_dirty
,
1290 .clear_dirty
= ctrl_stdcur_clear_dirty
,
1291 .val_to_sym
= ctrl_std_val_to_sym
,
1292 .sym_to_val
= ctrl_std_sym_to_val
,
1293 .type
= pvr2_ctl_bitmask
,
1295 .desc
= "Video Standard Name",
1296 .name
= "video_standard",
1297 .internal_id
= PVR2_CID_STDENUM
,
1299 .get_value
= ctrl_stdenumcur_get
,
1300 .set_value
= ctrl_stdenumcur_set
,
1301 .is_dirty
= ctrl_stdenumcur_is_dirty
,
1302 .clear_dirty
= ctrl_stdenumcur_clear_dirty
,
1303 .type
= pvr2_ctl_enum
,
1307 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
1310 const char *pvr2_config_get_name(enum pvr2_config cfg
)
1313 case pvr2_config_empty
: return "empty";
1314 case pvr2_config_mpeg
: return "mpeg";
1315 case pvr2_config_vbi
: return "vbi";
1316 case pvr2_config_pcm
: return "pcm";
1317 case pvr2_config_rawvideo
: return "raw video";
1323 struct usb_device
*pvr2_hdw_get_dev(struct pvr2_hdw
*hdw
)
1325 return hdw
->usb_dev
;
1329 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw
*hdw
)
1331 return hdw
->serial_number
;
1335 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw
*hdw
)
1337 return hdw
->bus_info
;
1341 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw
*hdw
)
1343 return hdw
->identifier
;
1347 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw
*hdw
)
1349 return hdw
->freqSelector
? hdw
->freqValTelevision
: hdw
->freqValRadio
;
1352 /* Set the currently tuned frequency and account for all possible
1353 driver-core side effects of this action. */
1354 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw
*hdw
,unsigned long val
)
1356 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
1357 if (hdw
->freqSelector
) {
1358 /* Swing over to radio frequency selection */
1359 hdw
->freqSelector
= 0;
1360 hdw
->freqDirty
= !0;
1362 if (hdw
->freqValRadio
!= val
) {
1363 hdw
->freqValRadio
= val
;
1364 hdw
->freqSlotRadio
= 0;
1365 hdw
->freqDirty
= !0;
1368 if (!(hdw
->freqSelector
)) {
1369 /* Swing over to television frequency selection */
1370 hdw
->freqSelector
= 1;
1371 hdw
->freqDirty
= !0;
1373 if (hdw
->freqValTelevision
!= val
) {
1374 hdw
->freqValTelevision
= val
;
1375 hdw
->freqSlotTelevision
= 0;
1376 hdw
->freqDirty
= !0;
1381 int pvr2_hdw_get_unit_number(struct pvr2_hdw
*hdw
)
1383 return hdw
->unit_number
;
1387 /* Attempt to locate one of the given set of files. Messages are logged
1388 appropriate to what has been found. The return value will be 0 or
1389 greater on success (it will be the index of the file name found) and
1390 fw_entry will be filled in. Otherwise a negative error is returned on
1391 failure. If the return value is -ENOENT then no viable firmware file
1392 could be located. */
1393 static int pvr2_locate_firmware(struct pvr2_hdw
*hdw
,
1394 const struct firmware
**fw_entry
,
1395 const char *fwtypename
,
1396 unsigned int fwcount
,
1397 const char *fwnames
[])
1401 for (idx
= 0; idx
< fwcount
; idx
++) {
1402 ret
= request_firmware(fw_entry
,
1404 &hdw
->usb_dev
->dev
);
1406 trace_firmware("Located %s firmware: %s;"
1412 if (ret
== -ENOENT
) continue;
1413 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1414 "request_firmware fatal error with code=%d",ret
);
1417 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1419 " Device %s firmware"
1420 " seems to be missing.",
1422 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1423 "Did you install the pvrusb2 firmware files"
1424 " in their proper location?");
1426 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1427 "request_firmware unable to locate %s file %s",
1428 fwtypename
,fwnames
[0]);
1430 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1431 "request_firmware unable to locate"
1432 " one of the following %s files:",
1434 for (idx
= 0; idx
< fwcount
; idx
++) {
1435 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1436 "request_firmware: Failed to find %s",
1445 * pvr2_upload_firmware1().
1447 * Send the 8051 firmware to the device. After the upload, arrange for
1448 * device to re-enumerate.
1450 * NOTE : the pointer to the firmware data given by request_firmware()
1451 * is not suitable for an usb transaction.
1454 static int pvr2_upload_firmware1(struct pvr2_hdw
*hdw
)
1456 const struct firmware
*fw_entry
= NULL
;
1459 unsigned int fwsize
;
1463 if (!hdw
->hdw_desc
->fx2_firmware
.cnt
) {
1464 hdw
->fw1_state
= FW1_STATE_OK
;
1465 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1466 "Connected device type defines"
1467 " no firmware to upload; ignoring firmware");
1471 hdw
->fw1_state
= FW1_STATE_FAILED
; // default result
1473 trace_firmware("pvr2_upload_firmware1");
1475 ret
= pvr2_locate_firmware(hdw
,&fw_entry
,"fx2 controller",
1476 hdw
->hdw_desc
->fx2_firmware
.cnt
,
1477 hdw
->hdw_desc
->fx2_firmware
.lst
);
1479 if (ret
== -ENOENT
) hdw
->fw1_state
= FW1_STATE_MISSING
;
1483 usb_clear_halt(hdw
->usb_dev
, usb_sndbulkpipe(hdw
->usb_dev
, 0 & 0x7f));
1485 pipe
= usb_sndctrlpipe(hdw
->usb_dev
, 0);
1486 fwsize
= fw_entry
->size
;
1488 if ((fwsize
!= 0x2000) &&
1489 (!(hdw
->hdw_desc
->flag_fx2_16kb
&& (fwsize
== 0x4000)))) {
1490 if (hdw
->hdw_desc
->flag_fx2_16kb
) {
1491 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1492 "Wrong fx2 firmware size"
1493 " (expected 8192 or 16384, got %u)",
1496 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1497 "Wrong fx2 firmware size"
1498 " (expected 8192, got %u)",
1501 release_firmware(fw_entry
);
1505 fw_ptr
= kmalloc(0x800, GFP_KERNEL
);
1506 if (fw_ptr
== NULL
){
1507 release_firmware(fw_entry
);
1511 /* We have to hold the CPU during firmware upload. */
1512 pvr2_hdw_cpureset_assert(hdw
,1);
1514 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
1518 for (address
= 0; address
< fwsize
; address
+= 0x800) {
1519 memcpy(fw_ptr
, fw_entry
->data
+ address
, 0x800);
1520 ret
+= usb_control_msg(hdw
->usb_dev
, pipe
, 0xa0, 0x40, address
,
1521 0, fw_ptr
, 0x800, HZ
);
1524 trace_firmware("Upload done, releasing device's CPU");
1526 /* Now release the CPU. It will disconnect and reconnect later. */
1527 pvr2_hdw_cpureset_assert(hdw
,0);
1530 release_firmware(fw_entry
);
1532 trace_firmware("Upload done (%d bytes sent)",ret
);
1534 /* We should have written fwsize bytes */
1535 if (ret
== fwsize
) {
1536 hdw
->fw1_state
= FW1_STATE_RELOAD
;
1545 * pvr2_upload_firmware2()
1547 * This uploads encoder firmware on endpoint 2.
1551 int pvr2_upload_firmware2(struct pvr2_hdw
*hdw
)
1553 const struct firmware
*fw_entry
= NULL
;
1555 unsigned int pipe
, fw_len
, fw_done
, bcnt
, icnt
;
1559 static const char *fw_files
[] = {
1560 CX2341X_FIRM_ENC_FILENAME
,
1563 if (hdw
->hdw_desc
->flag_skip_cx23416_firmware
) {
1567 trace_firmware("pvr2_upload_firmware2");
1569 ret
= pvr2_locate_firmware(hdw
,&fw_entry
,"encoder",
1570 ARRAY_SIZE(fw_files
), fw_files
);
1571 if (ret
< 0) return ret
;
1574 /* Since we're about to completely reinitialize the encoder,
1575 invalidate our cached copy of its configuration state. Next
1576 time we configure the encoder, then we'll fully configure it. */
1577 hdw
->enc_cur_valid
= 0;
1579 /* Encoder is about to be reset so note that as far as we're
1580 concerned now, the encoder has never been run. */
1581 del_timer_sync(&hdw
->encoder_run_timer
);
1582 if (hdw
->state_encoder_runok
) {
1583 hdw
->state_encoder_runok
= 0;
1584 trace_stbit("state_encoder_runok",hdw
->state_encoder_runok
);
1587 /* First prepare firmware loading */
1588 ret
|= pvr2_write_register(hdw
, 0x0048, 0xffffffff); /*interrupt mask*/
1589 ret
|= pvr2_hdw_gpio_chg_dir(hdw
,0xffffffff,0x00000088); /*gpio dir*/
1590 ret
|= pvr2_hdw_gpio_chg_out(hdw
,0xffffffff,0x00000008); /*gpio output state*/
1591 ret
|= pvr2_hdw_cmd_deep_reset(hdw
);
1592 ret
|= pvr2_write_register(hdw
, 0xa064, 0x00000000); /*APU command*/
1593 ret
|= pvr2_hdw_gpio_chg_dir(hdw
,0xffffffff,0x00000408); /*gpio dir*/
1594 ret
|= pvr2_hdw_gpio_chg_out(hdw
,0xffffffff,0x00000008); /*gpio output state*/
1595 ret
|= pvr2_write_register(hdw
, 0x9058, 0xffffffed); /*VPU ctrl*/
1596 ret
|= pvr2_write_register(hdw
, 0x9054, 0xfffffffd); /*reset hw blocks*/
1597 ret
|= pvr2_write_register(hdw
, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
1598 ret
|= pvr2_write_register(hdw
, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
1599 ret
|= pvr2_write_register(hdw
, 0x0700, 0x00000000); /*I2C clock*/
1600 ret
|= pvr2_write_register(hdw
, 0xaa00, 0x00000000); /*unknown*/
1601 ret
|= pvr2_write_register(hdw
, 0xaa04, 0x00057810); /*unknown*/
1602 ret
|= pvr2_write_register(hdw
, 0xaa10, 0x00148500); /*unknown*/
1603 ret
|= pvr2_write_register(hdw
, 0xaa18, 0x00840000); /*unknown*/
1604 ret
|= pvr2_issue_simple_cmd(hdw
,FX2CMD_FWPOST1
);
1605 ret
|= pvr2_issue_simple_cmd(hdw
,FX2CMD_MEMSEL
| (1 << 8) | (0 << 16));
1608 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1609 "firmware2 upload prep failed, ret=%d",ret
);
1610 release_firmware(fw_entry
);
1614 /* Now send firmware */
1616 fw_len
= fw_entry
->size
;
1618 if (fw_len
% sizeof(u32
)) {
1619 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1620 "size of %s firmware"
1621 " must be a multiple of %zu bytes",
1622 fw_files
[fwidx
],sizeof(u32
));
1623 release_firmware(fw_entry
);
1628 fw_ptr
= kmalloc(FIRMWARE_CHUNK_SIZE
, GFP_KERNEL
);
1629 if (fw_ptr
== NULL
){
1630 release_firmware(fw_entry
);
1631 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1632 "failed to allocate memory for firmware2 upload");
1637 pipe
= usb_sndbulkpipe(hdw
->usb_dev
, PVR2_FIRMWARE_ENDPOINT
);
1640 for (fw_done
= 0; fw_done
< fw_len
;) {
1641 bcnt
= fw_len
- fw_done
;
1642 if (bcnt
> FIRMWARE_CHUNK_SIZE
) bcnt
= FIRMWARE_CHUNK_SIZE
;
1643 memcpy(fw_ptr
, fw_entry
->data
+ fw_done
, bcnt
);
1644 /* Usbsnoop log shows that we must swap bytes... */
1645 /* Some background info: The data being swapped here is a
1646 firmware image destined for the mpeg encoder chip that
1647 lives at the other end of a USB endpoint. The encoder
1648 chip always talks in 32 bit chunks and its storage is
1649 organized into 32 bit words. However from the file
1650 system to the encoder chip everything is purely a byte
1651 stream. The firmware file's contents are always 32 bit
1652 swapped from what the encoder expects. Thus the need
1653 always exists to swap the bytes regardless of the endian
1654 type of the host processor and therefore swab32() makes
1656 for (icnt
= 0; icnt
< bcnt
/4 ; icnt
++)
1657 ((u32
*)fw_ptr
)[icnt
] = swab32(((u32
*)fw_ptr
)[icnt
]);
1659 ret
|= usb_bulk_msg(hdw
->usb_dev
, pipe
, fw_ptr
,bcnt
,
1660 &actual_length
, HZ
);
1661 ret
|= (actual_length
!= bcnt
);
1666 trace_firmware("upload of %s : %i / %i ",
1667 fw_files
[fwidx
],fw_done
,fw_len
);
1670 release_firmware(fw_entry
);
1673 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1674 "firmware2 upload transfer failure");
1680 ret
|= pvr2_write_register(hdw
, 0x9054, 0xffffffff); /*reset hw blocks*/
1681 ret
|= pvr2_write_register(hdw
, 0x9058, 0xffffffe8); /*VPU ctrl*/
1682 ret
|= pvr2_issue_simple_cmd(hdw
,FX2CMD_MEMSEL
| (1 << 8) | (0 << 16));
1685 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1686 "firmware2 upload post-proc failure");
1690 if (hdw
->hdw_desc
->signal_routing_scheme
==
1691 PVR2_ROUTING_SCHEME_GOTVIEW
) {
1692 /* Ensure that GPIO 11 is set to output for GOTVIEW
1694 pvr2_hdw_gpio_chg_dir(hdw
,(1 << 11),~0);
1700 static const char *pvr2_get_state_name(unsigned int st
)
1702 if (st
< ARRAY_SIZE(pvr2_state_names
)) {
1703 return pvr2_state_names
[st
];
1708 static int pvr2_decoder_enable(struct pvr2_hdw
*hdw
,int enablefl
)
1710 /* Even though we really only care about the video decoder chip at
1711 this point, we'll broadcast stream on/off to all sub-devices
1712 anyway, just in case somebody else wants to hear the
1714 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 stream=%s",
1715 (enablefl
? "on" : "off"));
1716 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, video
, s_stream
, enablefl
);
1717 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, audio
, s_stream
, enablefl
);
1718 if (hdw
->decoder_client_id
) {
1719 /* We get here if the encoder has been noticed. Otherwise
1720 we'll issue a warning to the user (which should
1721 normally never happen). */
1724 if (!hdw
->flag_decoder_missed
) {
1725 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1726 "WARNING: No decoder present");
1727 hdw
->flag_decoder_missed
= !0;
1728 trace_stbit("flag_decoder_missed",
1729 hdw
->flag_decoder_missed
);
1735 int pvr2_hdw_get_state(struct pvr2_hdw
*hdw
)
1737 return hdw
->master_state
;
1741 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw
*hdw
)
1743 if (!hdw
->flag_tripped
) return 0;
1744 hdw
->flag_tripped
= 0;
1745 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1746 "Clearing driver error statuss");
1751 int pvr2_hdw_untrip(struct pvr2_hdw
*hdw
)
1754 LOCK_TAKE(hdw
->big_lock
); do {
1755 fl
= pvr2_hdw_untrip_unlocked(hdw
);
1756 } while (0); LOCK_GIVE(hdw
->big_lock
);
1757 if (fl
) pvr2_hdw_state_sched(hdw
);
1764 int pvr2_hdw_get_streaming(struct pvr2_hdw
*hdw
)
1766 return hdw
->state_pipeline_req
!= 0;
1770 int pvr2_hdw_set_streaming(struct pvr2_hdw
*hdw
,int enable_flag
)
1773 LOCK_TAKE(hdw
->big_lock
); do {
1774 pvr2_hdw_untrip_unlocked(hdw
);
1775 if ((!enable_flag
) != !(hdw
->state_pipeline_req
)) {
1776 hdw
->state_pipeline_req
= enable_flag
!= 0;
1777 pvr2_trace(PVR2_TRACE_START_STOP
,
1778 "/*--TRACE_STREAM--*/ %s",
1779 enable_flag
? "enable" : "disable");
1781 pvr2_hdw_state_sched(hdw
);
1782 } while (0); LOCK_GIVE(hdw
->big_lock
);
1783 if ((ret
= pvr2_hdw_wait(hdw
,0)) < 0) return ret
;
1785 while ((st
= hdw
->master_state
) != PVR2_STATE_RUN
) {
1786 if (st
!= PVR2_STATE_READY
) return -EIO
;
1787 if ((ret
= pvr2_hdw_wait(hdw
,st
)) < 0) return ret
;
1794 int pvr2_hdw_set_stream_type(struct pvr2_hdw
*hdw
,enum pvr2_config config
)
1797 LOCK_TAKE(hdw
->big_lock
);
1798 if ((fl
= (hdw
->desired_stream_type
!= config
)) != 0) {
1799 hdw
->desired_stream_type
= config
;
1800 hdw
->state_pipeline_config
= 0;
1801 trace_stbit("state_pipeline_config",
1802 hdw
->state_pipeline_config
);
1803 pvr2_hdw_state_sched(hdw
);
1805 LOCK_GIVE(hdw
->big_lock
);
1807 return pvr2_hdw_wait(hdw
,0);
1811 static int get_default_tuner_type(struct pvr2_hdw
*hdw
)
1813 int unit_number
= hdw
->unit_number
;
1815 if ((unit_number
>= 0) && (unit_number
< PVR_NUM
)) {
1816 tp
= tuner
[unit_number
];
1818 if (tp
< 0) return -EINVAL
;
1819 hdw
->tuner_type
= tp
;
1820 hdw
->tuner_updated
= !0;
1825 static v4l2_std_id
get_default_standard(struct pvr2_hdw
*hdw
)
1827 int unit_number
= hdw
->unit_number
;
1829 if ((unit_number
>= 0) && (unit_number
< PVR_NUM
)) {
1830 tp
= video_std
[unit_number
];
1837 static unsigned int get_default_error_tolerance(struct pvr2_hdw
*hdw
)
1839 int unit_number
= hdw
->unit_number
;
1841 if ((unit_number
>= 0) && (unit_number
< PVR_NUM
)) {
1842 tp
= tolerance
[unit_number
];
1848 static int pvr2_hdw_check_firmware(struct pvr2_hdw
*hdw
)
1850 /* Try a harmless request to fetch the eeprom's address over
1851 endpoint 1. See what happens. Only the full FX2 image can
1852 respond to this. If this probe fails then likely the FX2
1853 firmware needs be loaded. */
1855 LOCK_TAKE(hdw
->ctl_lock
); do {
1856 hdw
->cmd_buffer
[0] = FX2CMD_GET_EEPROM_ADDR
;
1857 result
= pvr2_send_request_ex(hdw
,HZ
*1,!0,
1860 if (result
< 0) break;
1861 } while(0); LOCK_GIVE(hdw
->ctl_lock
);
1863 pvr2_trace(PVR2_TRACE_INIT
,
1864 "Probe of device endpoint 1 result status %d",
1867 pvr2_trace(PVR2_TRACE_INIT
,
1868 "Probe of device endpoint 1 succeeded");
1873 struct pvr2_std_hack
{
1874 v4l2_std_id pat
; /* Pattern to match */
1875 v4l2_std_id msk
; /* Which bits we care about */
1876 v4l2_std_id std
; /* What additional standards or default to set */
1879 /* This data structure labels specific combinations of standards from
1880 tveeprom that we'll try to recognize. If we recognize one, then assume
1881 a specified default standard to use. This is here because tveeprom only
1882 tells us about available standards not the intended default standard (if
1883 any) for the device in question. We guess the default based on what has
1884 been reported as available. Note that this is only for guessing a
1885 default - which can always be overridden explicitly - and if the user
1886 has otherwise named a default then that default will always be used in
1887 place of this table. */
1888 static const struct pvr2_std_hack std_eeprom_maps
[] = {
1890 .pat
= V4L2_STD_B
|V4L2_STD_GH
,
1891 .std
= V4L2_STD_PAL_B
|V4L2_STD_PAL_B1
|V4L2_STD_PAL_G
,
1895 .std
= V4L2_STD_NTSC_M
,
1898 .pat
= V4L2_STD_PAL_I
,
1899 .std
= V4L2_STD_PAL_I
,
1902 .pat
= V4L2_STD_SECAM_L
|V4L2_STD_SECAM_LC
,
1903 .std
= V4L2_STD_SECAM_L
|V4L2_STD_SECAM_LC
,
1907 .std
= V4L2_STD_PAL_D
|V4L2_STD_PAL_D1
|V4L2_STD_PAL_K
,
1911 static void pvr2_hdw_setup_std(struct pvr2_hdw
*hdw
)
1915 v4l2_std_id std1
,std2
,std3
;
1917 std1
= get_default_standard(hdw
);
1918 std3
= std1
? 0 : hdw
->hdw_desc
->default_std_mask
;
1920 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),hdw
->std_mask_eeprom
);
1921 pvr2_trace(PVR2_TRACE_STD
,
1922 "Supported video standard(s) reported available"
1923 " in hardware: %.*s",
1926 hdw
->std_mask_avail
= hdw
->std_mask_eeprom
;
1928 std2
= (std1
|std3
) & ~hdw
->std_mask_avail
;
1930 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),std2
);
1931 pvr2_trace(PVR2_TRACE_STD
,
1932 "Expanding supported video standards"
1933 " to include: %.*s",
1935 hdw
->std_mask_avail
|= std2
;
1938 pvr2_hdw_internal_set_std_avail(hdw
);
1941 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),std1
);
1942 pvr2_trace(PVR2_TRACE_STD
,
1943 "Initial video standard forced to %.*s",
1945 hdw
->std_mask_cur
= std1
;
1946 hdw
->std_dirty
= !0;
1947 pvr2_hdw_internal_find_stdenum(hdw
);
1951 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),std3
);
1952 pvr2_trace(PVR2_TRACE_STD
,
1953 "Initial video standard"
1954 " (determined by device type): %.*s",bcnt
,buf
);
1955 hdw
->std_mask_cur
= std3
;
1956 hdw
->std_dirty
= !0;
1957 pvr2_hdw_internal_find_stdenum(hdw
);
1963 for (idx
= 0; idx
< ARRAY_SIZE(std_eeprom_maps
); idx
++) {
1964 if (std_eeprom_maps
[idx
].msk
?
1965 ((std_eeprom_maps
[idx
].pat
^
1966 hdw
->std_mask_eeprom
) &
1967 std_eeprom_maps
[idx
].msk
) :
1968 (std_eeprom_maps
[idx
].pat
!=
1969 hdw
->std_mask_eeprom
)) continue;
1970 bcnt
= pvr2_std_id_to_str(buf
,sizeof(buf
),
1971 std_eeprom_maps
[idx
].std
);
1972 pvr2_trace(PVR2_TRACE_STD
,
1973 "Initial video standard guessed as %.*s",
1975 hdw
->std_mask_cur
= std_eeprom_maps
[idx
].std
;
1976 hdw
->std_dirty
= !0;
1977 pvr2_hdw_internal_find_stdenum(hdw
);
1982 if (hdw
->std_enum_cnt
> 1) {
1983 // Autoselect the first listed standard
1984 hdw
->std_enum_cur
= 1;
1985 hdw
->std_mask_cur
= hdw
->std_defs
[hdw
->std_enum_cur
-1].id
;
1986 hdw
->std_dirty
= !0;
1987 pvr2_trace(PVR2_TRACE_STD
,
1988 "Initial video standard auto-selected to %s",
1989 hdw
->std_defs
[hdw
->std_enum_cur
-1].name
);
1993 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
1994 "Unable to select a viable initial video standard");
1998 static unsigned int pvr2_copy_i2c_addr_list(
1999 unsigned short *dst
, const unsigned char *src
,
2000 unsigned int dst_max
)
2002 unsigned int cnt
= 0;
2004 while (src
[cnt
] && (cnt
+ 1) < dst_max
) {
2005 dst
[cnt
] = src
[cnt
];
2008 dst
[cnt
] = I2C_CLIENT_END
;
2013 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw
*hdw
)
2016 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
2017 for cx25840 causes that module to correctly set up its video
2018 scaling. This is really a problem in the cx25840 module itself,
2019 but we work around it here. The problem has not been seen in
2020 ivtv because there VBI is supported and set up. We don't do VBI
2021 here (at least not yet) and thus we never attempted to even set
2024 struct v4l2_format fmt
;
2025 if (hdw
->decoder_client_id
!= PVR2_CLIENT_ID_CX25840
) {
2026 /* We're not using a cx25840 so don't enable the hack */
2030 pvr2_trace(PVR2_TRACE_INIT
,
2032 " Executing cx25840 VBI hack",
2033 hdw
->decoder_client_id
);
2034 memset(&fmt
, 0, sizeof(fmt
));
2035 fmt
.type
= V4L2_BUF_TYPE_SLICED_VBI_CAPTURE
;
2036 fmt
.fmt
.sliced
.service_lines
[0][21] = V4L2_SLICED_CAPTION_525
;
2037 fmt
.fmt
.sliced
.service_lines
[1][21] = V4L2_SLICED_CAPTION_525
;
2038 v4l2_device_call_all(&hdw
->v4l2_dev
, hdw
->decoder_client_id
,
2039 vbi
, s_sliced_fmt
, &fmt
.fmt
.sliced
);
2043 static int pvr2_hdw_load_subdev(struct pvr2_hdw
*hdw
,
2044 const struct pvr2_device_client_desc
*cd
)
2048 struct v4l2_subdev
*sd
;
2049 unsigned int i2ccnt
;
2050 const unsigned char *p
;
2051 /* Arbitrary count - max # i2c addresses we will probe */
2052 unsigned short i2caddr
[25];
2054 mid
= cd
->module_id
;
2055 fname
= (mid
< ARRAY_SIZE(module_names
)) ? module_names
[mid
] : NULL
;
2057 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2058 "Module ID %u for device %s has no name?"
2059 " The driver might have a configuration problem.",
2061 hdw
->hdw_desc
->description
);
2064 pvr2_trace(PVR2_TRACE_INIT
,
2065 "Module ID %u (%s) for device %s being loaded...",
2067 hdw
->hdw_desc
->description
);
2069 i2ccnt
= pvr2_copy_i2c_addr_list(i2caddr
, cd
->i2c_address_list
,
2070 ARRAY_SIZE(i2caddr
));
2071 if (!i2ccnt
&& ((p
= (mid
< ARRAY_SIZE(module_i2c_addresses
)) ?
2072 module_i2c_addresses
[mid
] : NULL
) != NULL
)) {
2073 /* Second chance: Try default i2c address list */
2074 i2ccnt
= pvr2_copy_i2c_addr_list(i2caddr
, p
,
2075 ARRAY_SIZE(i2caddr
));
2077 pvr2_trace(PVR2_TRACE_INIT
,
2079 " Using default i2c address list",
2085 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2086 "Module ID %u (%s) for device %s:"
2087 " No i2c addresses."
2088 " The driver might have a configuration problem.",
2089 mid
, fname
, hdw
->hdw_desc
->description
);
2094 pvr2_trace(PVR2_TRACE_INIT
,
2096 " Setting up with specified i2c address 0x%x",
2098 sd
= v4l2_i2c_new_subdev(&hdw
->v4l2_dev
, &hdw
->i2c_adap
,
2099 fname
, i2caddr
[0], NULL
);
2101 pvr2_trace(PVR2_TRACE_INIT
,
2103 " Setting up with address probe list",
2105 sd
= v4l2_i2c_new_subdev(&hdw
->v4l2_dev
, &hdw
->i2c_adap
,
2110 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2111 "Module ID %u (%s) for device %s failed to load."
2112 " Possible missing sub-device kernel module or"
2113 " initialization failure within module.",
2114 mid
, fname
, hdw
->hdw_desc
->description
);
2118 /* Tag this sub-device instance with the module ID we know about.
2119 In other places we'll use that tag to determine if the instance
2120 requires special handling. */
2123 pvr2_trace(PVR2_TRACE_INFO
, "Attached sub-driver %s", fname
);
2126 /* client-specific setup... */
2128 case PVR2_CLIENT_ID_CX25840
:
2129 case PVR2_CLIENT_ID_SAA7115
:
2130 hdw
->decoder_client_id
= mid
;
2139 static void pvr2_hdw_load_modules(struct pvr2_hdw
*hdw
)
2142 const struct pvr2_string_table
*cm
;
2143 const struct pvr2_device_client_table
*ct
;
2146 cm
= &hdw
->hdw_desc
->client_modules
;
2147 for (idx
= 0; idx
< cm
->cnt
; idx
++) {
2148 request_module(cm
->lst
[idx
]);
2151 ct
= &hdw
->hdw_desc
->client_table
;
2152 for (idx
= 0; idx
< ct
->cnt
; idx
++) {
2153 if (pvr2_hdw_load_subdev(hdw
, &ct
->lst
[idx
]) < 0) okFl
= 0;
2156 hdw
->flag_modulefail
= !0;
2157 pvr2_hdw_render_useless(hdw
);
2162 static void pvr2_hdw_setup_low(struct pvr2_hdw
*hdw
)
2166 struct pvr2_ctrl
*cptr
;
2168 if (hdw
->hdw_desc
->fx2_firmware
.cnt
) {
2171 (hdw
->usb_intf
->cur_altsetting
->desc
.bNumEndpoints
2174 pvr2_trace(PVR2_TRACE_INIT
,
2175 "USB endpoint config looks strange"
2176 "; possibly firmware needs to be"
2181 reloadFl
= !pvr2_hdw_check_firmware(hdw
);
2183 pvr2_trace(PVR2_TRACE_INIT
,
2184 "Check for FX2 firmware failed"
2185 "; possibly firmware needs to be"
2190 if (pvr2_upload_firmware1(hdw
) != 0) {
2191 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2192 "Failure uploading firmware1");
2197 hdw
->fw1_state
= FW1_STATE_OK
;
2199 if (!pvr2_hdw_dev_ok(hdw
)) return;
2201 hdw
->force_dirty
= !0;
2203 if (!hdw
->hdw_desc
->flag_no_powerup
) {
2204 pvr2_hdw_cmd_powerup(hdw
);
2205 if (!pvr2_hdw_dev_ok(hdw
)) return;
2208 /* Take the IR chip out of reset, if appropriate */
2209 if (hdw
->ir_scheme_active
== PVR2_IR_SCHEME_ZILOG
) {
2210 pvr2_issue_simple_cmd(hdw
,
2211 FX2CMD_HCW_ZILOG_RESET
|
2216 // This step MUST happen after the earlier powerup step.
2217 pvr2_i2c_core_init(hdw
);
2218 if (!pvr2_hdw_dev_ok(hdw
)) return;
2220 pvr2_hdw_load_modules(hdw
);
2221 if (!pvr2_hdw_dev_ok(hdw
)) return;
2223 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, load_fw
);
2225 for (idx
= 0; idx
< CTRLDEF_COUNT
; idx
++) {
2226 cptr
= hdw
->controls
+ idx
;
2227 if (cptr
->info
->skip_init
) continue;
2228 if (!cptr
->info
->set_value
) continue;
2229 cptr
->info
->set_value(cptr
,~0,cptr
->info
->default_value
);
2232 pvr2_hdw_cx25840_vbi_hack(hdw
);
2234 /* Set up special default values for the television and radio
2235 frequencies here. It's not really important what these defaults
2236 are, but I set them to something usable in the Chicago area just
2237 to make driver testing a little easier. */
2239 hdw
->freqValTelevision
= default_tv_freq
;
2240 hdw
->freqValRadio
= default_radio_freq
;
2242 // Do not use pvr2_reset_ctl_endpoints() here. It is not
2243 // thread-safe against the normal pvr2_send_request() mechanism.
2244 // (We should make it thread safe).
2246 if (hdw
->hdw_desc
->flag_has_hauppauge_rom
) {
2247 ret
= pvr2_hdw_get_eeprom_addr(hdw
);
2248 if (!pvr2_hdw_dev_ok(hdw
)) return;
2250 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2251 "Unable to determine location of eeprom,"
2254 hdw
->eeprom_addr
= ret
;
2255 pvr2_eeprom_analyze(hdw
);
2256 if (!pvr2_hdw_dev_ok(hdw
)) return;
2259 hdw
->tuner_type
= hdw
->hdw_desc
->default_tuner_type
;
2260 hdw
->tuner_updated
= !0;
2261 hdw
->std_mask_eeprom
= V4L2_STD_ALL
;
2264 if (hdw
->serial_number
) {
2265 idx
= scnprintf(hdw
->identifier
, sizeof(hdw
->identifier
) - 1,
2266 "sn-%lu", hdw
->serial_number
);
2267 } else if (hdw
->unit_number
>= 0) {
2268 idx
= scnprintf(hdw
->identifier
, sizeof(hdw
->identifier
) - 1,
2270 hdw
->unit_number
+ 'a');
2272 idx
= scnprintf(hdw
->identifier
, sizeof(hdw
->identifier
) - 1,
2275 hdw
->identifier
[idx
] = 0;
2277 pvr2_hdw_setup_std(hdw
);
2279 if (!get_default_tuner_type(hdw
)) {
2280 pvr2_trace(PVR2_TRACE_INIT
,
2281 "pvr2_hdw_setup: Tuner type overridden to %d",
2286 if (!pvr2_hdw_dev_ok(hdw
)) return;
2288 if (hdw
->hdw_desc
->signal_routing_scheme
==
2289 PVR2_ROUTING_SCHEME_GOTVIEW
) {
2290 /* Ensure that GPIO 11 is set to output for GOTVIEW
2292 pvr2_hdw_gpio_chg_dir(hdw
,(1 << 11),~0);
2295 pvr2_hdw_commit_setup(hdw
);
2297 hdw
->vid_stream
= pvr2_stream_create();
2298 if (!pvr2_hdw_dev_ok(hdw
)) return;
2299 pvr2_trace(PVR2_TRACE_INIT
,
2300 "pvr2_hdw_setup: video stream is %p",hdw
->vid_stream
);
2301 if (hdw
->vid_stream
) {
2302 idx
= get_default_error_tolerance(hdw
);
2304 pvr2_trace(PVR2_TRACE_INIT
,
2305 "pvr2_hdw_setup: video stream %p"
2306 " setting tolerance %u",
2307 hdw
->vid_stream
,idx
);
2309 pvr2_stream_setup(hdw
->vid_stream
,hdw
->usb_dev
,
2310 PVR2_VID_ENDPOINT
,idx
);
2313 if (!pvr2_hdw_dev_ok(hdw
)) return;
2315 hdw
->flag_init_ok
= !0;
2317 pvr2_hdw_state_sched(hdw
);
2321 /* Set up the structure and attempt to put the device into a usable state.
2322 This can be a time-consuming operation, which is why it is not done
2323 internally as part of the create() step. */
2324 static void pvr2_hdw_setup(struct pvr2_hdw
*hdw
)
2326 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_setup(hdw=%p) begin",hdw
);
2328 pvr2_hdw_setup_low(hdw
);
2329 pvr2_trace(PVR2_TRACE_INIT
,
2330 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
2331 hdw
,pvr2_hdw_dev_ok(hdw
),hdw
->flag_init_ok
);
2332 if (pvr2_hdw_dev_ok(hdw
)) {
2333 if (hdw
->flag_init_ok
) {
2336 "Device initialization"
2337 " completed successfully.");
2340 if (hdw
->fw1_state
== FW1_STATE_RELOAD
) {
2343 "Device microcontroller firmware"
2344 " (re)loaded; it should now reset"
2349 PVR2_TRACE_ERROR_LEGS
,
2350 "Device initialization was not successful.");
2351 if (hdw
->fw1_state
== FW1_STATE_MISSING
) {
2353 PVR2_TRACE_ERROR_LEGS
,
2354 "Giving up since device"
2355 " microcontroller firmware"
2356 " appears to be missing.");
2360 if (hdw
->flag_modulefail
) {
2362 PVR2_TRACE_ERROR_LEGS
,
2363 "***WARNING*** pvrusb2 driver initialization"
2364 " failed due to the failure of one or more"
2365 " sub-device kernel modules.");
2367 PVR2_TRACE_ERROR_LEGS
,
2368 "You need to resolve the failing condition"
2369 " before this driver can function. There"
2370 " should be some earlier messages giving more"
2371 " information about the problem.");
2376 PVR2_TRACE_ERROR_LEGS
,
2377 "Attempting pvrusb2 recovery by reloading"
2378 " primary firmware.");
2380 PVR2_TRACE_ERROR_LEGS
,
2381 "If this works, device should disconnect"
2382 " and reconnect in a sane state.");
2383 hdw
->fw1_state
= FW1_STATE_UNKNOWN
;
2384 pvr2_upload_firmware1(hdw
);
2387 PVR2_TRACE_ERROR_LEGS
,
2388 "***WARNING*** pvrusb2 device hardware"
2389 " appears to be jammed"
2390 " and I can't clear it.");
2392 PVR2_TRACE_ERROR_LEGS
,
2393 "You might need to power cycle"
2394 " the pvrusb2 device"
2395 " in order to recover.");
2398 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_setup(hdw=%p) end",hdw
);
2402 /* Perform second stage initialization. Set callback pointer first so that
2403 we can avoid a possible initialization race (if the kernel thread runs
2404 before the callback has been set). */
2405 int pvr2_hdw_initialize(struct pvr2_hdw
*hdw
,
2406 void (*callback_func
)(void *),
2407 void *callback_data
)
2409 LOCK_TAKE(hdw
->big_lock
); do {
2410 if (hdw
->flag_disconnected
) {
2411 /* Handle a race here: If we're already
2412 disconnected by this point, then give up. If we
2413 get past this then we'll remain connected for
2414 the duration of initialization since the entire
2415 initialization sequence is now protected by the
2419 hdw
->state_data
= callback_data
;
2420 hdw
->state_func
= callback_func
;
2421 pvr2_hdw_setup(hdw
);
2422 } while (0); LOCK_GIVE(hdw
->big_lock
);
2423 return hdw
->flag_init_ok
;
2427 /* Create, set up, and return a structure for interacting with the
2428 underlying hardware. */
2429 struct pvr2_hdw
*pvr2_hdw_create(struct usb_interface
*intf
,
2430 const struct usb_device_id
*devid
)
2432 unsigned int idx
,cnt1
,cnt2
,m
;
2433 struct pvr2_hdw
*hdw
= NULL
;
2435 struct pvr2_ctrl
*cptr
;
2436 struct usb_device
*usb_dev
;
2437 const struct pvr2_device_desc
*hdw_desc
;
2439 struct v4l2_queryctrl qctrl
;
2440 struct pvr2_ctl_info
*ciptr
;
2442 usb_dev
= interface_to_usbdev(intf
);
2444 hdw_desc
= (const struct pvr2_device_desc
*)(devid
->driver_info
);
2446 if (hdw_desc
== NULL
) {
2447 pvr2_trace(PVR2_TRACE_INIT
, "pvr2_hdw_create:"
2448 " No device description pointer,"
2449 " unable to continue.");
2450 pvr2_trace(PVR2_TRACE_INIT
, "If you have a new device type,"
2451 " please contact Mike Isely <isely@pobox.com>"
2452 " to get it included in the driver\n");
2456 hdw
= kzalloc(sizeof(*hdw
),GFP_KERNEL
);
2457 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_create: hdw=%p, type \"%s\"",
2458 hdw
,hdw_desc
->description
);
2459 pvr2_trace(PVR2_TRACE_INFO
, "Hardware description: %s",
2460 hdw_desc
->description
);
2461 if (hdw_desc
->flag_is_experimental
) {
2462 pvr2_trace(PVR2_TRACE_INFO
, "**********");
2463 pvr2_trace(PVR2_TRACE_INFO
,
2464 "WARNING: Support for this device (%s) is"
2465 " experimental.", hdw_desc
->description
);
2466 pvr2_trace(PVR2_TRACE_INFO
,
2467 "Important functionality might not be"
2468 " entirely working.");
2469 pvr2_trace(PVR2_TRACE_INFO
,
2470 "Please consider contacting the driver author to"
2471 " help with further stabilization of the driver.");
2472 pvr2_trace(PVR2_TRACE_INFO
, "**********");
2474 if (!hdw
) goto fail
;
2476 init_timer(&hdw
->quiescent_timer
);
2477 hdw
->quiescent_timer
.data
= (unsigned long)hdw
;
2478 hdw
->quiescent_timer
.function
= pvr2_hdw_quiescent_timeout
;
2480 init_timer(&hdw
->decoder_stabilization_timer
);
2481 hdw
->decoder_stabilization_timer
.data
= (unsigned long)hdw
;
2482 hdw
->decoder_stabilization_timer
.function
=
2483 pvr2_hdw_decoder_stabilization_timeout
;
2485 init_timer(&hdw
->encoder_wait_timer
);
2486 hdw
->encoder_wait_timer
.data
= (unsigned long)hdw
;
2487 hdw
->encoder_wait_timer
.function
= pvr2_hdw_encoder_wait_timeout
;
2489 init_timer(&hdw
->encoder_run_timer
);
2490 hdw
->encoder_run_timer
.data
= (unsigned long)hdw
;
2491 hdw
->encoder_run_timer
.function
= pvr2_hdw_encoder_run_timeout
;
2493 hdw
->master_state
= PVR2_STATE_DEAD
;
2495 init_waitqueue_head(&hdw
->state_wait_data
);
2497 hdw
->tuner_signal_stale
= !0;
2498 cx2341x_fill_defaults(&hdw
->enc_ctl_state
);
2500 /* Calculate which inputs are OK */
2502 if (hdw_desc
->flag_has_analogtuner
) m
|= 1 << PVR2_CVAL_INPUT_TV
;
2503 if (hdw_desc
->digital_control_scheme
!= PVR2_DIGITAL_SCHEME_NONE
) {
2504 m
|= 1 << PVR2_CVAL_INPUT_DTV
;
2506 if (hdw_desc
->flag_has_svideo
) m
|= 1 << PVR2_CVAL_INPUT_SVIDEO
;
2507 if (hdw_desc
->flag_has_composite
) m
|= 1 << PVR2_CVAL_INPUT_COMPOSITE
;
2508 if (hdw_desc
->flag_has_fmradio
) m
|= 1 << PVR2_CVAL_INPUT_RADIO
;
2509 hdw
->input_avail_mask
= m
;
2510 hdw
->input_allowed_mask
= hdw
->input_avail_mask
;
2512 /* If not a hybrid device, pathway_state never changes. So
2513 initialize it here to what it should forever be. */
2514 if (!(hdw
->input_avail_mask
& (1 << PVR2_CVAL_INPUT_DTV
))) {
2515 hdw
->pathway_state
= PVR2_PATHWAY_ANALOG
;
2516 } else if (!(hdw
->input_avail_mask
& (1 << PVR2_CVAL_INPUT_TV
))) {
2517 hdw
->pathway_state
= PVR2_PATHWAY_DIGITAL
;
2520 hdw
->control_cnt
= CTRLDEF_COUNT
;
2521 hdw
->control_cnt
+= MPEGDEF_COUNT
;
2522 hdw
->controls
= kzalloc(sizeof(struct pvr2_ctrl
) * hdw
->control_cnt
,
2524 if (!hdw
->controls
) goto fail
;
2525 hdw
->hdw_desc
= hdw_desc
;
2526 hdw
->ir_scheme_active
= hdw
->hdw_desc
->ir_scheme
;
2527 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2528 cptr
= hdw
->controls
+ idx
;
2531 for (idx
= 0; idx
< 32; idx
++) {
2532 hdw
->std_mask_ptrs
[idx
] = hdw
->std_mask_names
[idx
];
2534 for (idx
= 0; idx
< CTRLDEF_COUNT
; idx
++) {
2535 cptr
= hdw
->controls
+ idx
;
2536 cptr
->info
= control_defs
+idx
;
2539 /* Ensure that default input choice is a valid one. */
2540 m
= hdw
->input_avail_mask
;
2541 if (m
) for (idx
= 0; idx
< (sizeof(m
) << 3); idx
++) {
2542 if (!((1 << idx
) & m
)) continue;
2543 hdw
->input_val
= idx
;
2547 /* Define and configure additional controls from cx2341x module. */
2548 hdw
->mpeg_ctrl_info
= kzalloc(
2549 sizeof(*(hdw
->mpeg_ctrl_info
)) * MPEGDEF_COUNT
, GFP_KERNEL
);
2550 if (!hdw
->mpeg_ctrl_info
) goto fail
;
2551 for (idx
= 0; idx
< MPEGDEF_COUNT
; idx
++) {
2552 cptr
= hdw
->controls
+ idx
+ CTRLDEF_COUNT
;
2553 ciptr
= &(hdw
->mpeg_ctrl_info
[idx
].info
);
2554 ciptr
->desc
= hdw
->mpeg_ctrl_info
[idx
].desc
;
2555 ciptr
->name
= mpeg_ids
[idx
].strid
;
2556 ciptr
->v4l_id
= mpeg_ids
[idx
].id
;
2557 ciptr
->skip_init
= !0;
2558 ciptr
->get_value
= ctrl_cx2341x_get
;
2559 ciptr
->get_v4lflags
= ctrl_cx2341x_getv4lflags
;
2560 ciptr
->is_dirty
= ctrl_cx2341x_is_dirty
;
2561 if (!idx
) ciptr
->clear_dirty
= ctrl_cx2341x_clear_dirty
;
2562 qctrl
.id
= ciptr
->v4l_id
;
2563 cx2341x_ctrl_query(&hdw
->enc_ctl_state
,&qctrl
);
2564 if (!(qctrl
.flags
& V4L2_CTRL_FLAG_READ_ONLY
)) {
2565 ciptr
->set_value
= ctrl_cx2341x_set
;
2567 strncpy(hdw
->mpeg_ctrl_info
[idx
].desc
,qctrl
.name
,
2568 PVR2_CTLD_INFO_DESC_SIZE
);
2569 hdw
->mpeg_ctrl_info
[idx
].desc
[PVR2_CTLD_INFO_DESC_SIZE
-1] = 0;
2570 ciptr
->default_value
= qctrl
.default_value
;
2571 switch (qctrl
.type
) {
2573 case V4L2_CTRL_TYPE_INTEGER
:
2574 ciptr
->type
= pvr2_ctl_int
;
2575 ciptr
->def
.type_int
.min_value
= qctrl
.minimum
;
2576 ciptr
->def
.type_int
.max_value
= qctrl
.maximum
;
2578 case V4L2_CTRL_TYPE_BOOLEAN
:
2579 ciptr
->type
= pvr2_ctl_bool
;
2581 case V4L2_CTRL_TYPE_MENU
:
2582 ciptr
->type
= pvr2_ctl_enum
;
2583 ciptr
->def
.type_enum
.value_names
=
2584 cx2341x_ctrl_get_menu(&hdw
->enc_ctl_state
,
2587 ciptr
->def
.type_enum
.value_names
[cnt1
] != NULL
;
2589 ciptr
->def
.type_enum
.count
= cnt1
;
2595 // Initialize video standard enum dynamic control
2596 cptr
= pvr2_hdw_get_ctrl_by_id(hdw
,PVR2_CID_STDENUM
);
2598 memcpy(&hdw
->std_info_enum
,cptr
->info
,
2599 sizeof(hdw
->std_info_enum
));
2600 cptr
->info
= &hdw
->std_info_enum
;
2603 // Initialize control data regarding video standard masks
2604 valid_std_mask
= pvr2_std_get_usable();
2605 for (idx
= 0; idx
< 32; idx
++) {
2606 if (!(valid_std_mask
& (1 << idx
))) continue;
2607 cnt1
= pvr2_std_id_to_str(
2608 hdw
->std_mask_names
[idx
],
2609 sizeof(hdw
->std_mask_names
[idx
])-1,
2611 hdw
->std_mask_names
[idx
][cnt1
] = 0;
2613 cptr
= pvr2_hdw_get_ctrl_by_id(hdw
,PVR2_CID_STDAVAIL
);
2615 memcpy(&hdw
->std_info_avail
,cptr
->info
,
2616 sizeof(hdw
->std_info_avail
));
2617 cptr
->info
= &hdw
->std_info_avail
;
2618 hdw
->std_info_avail
.def
.type_bitmask
.bit_names
=
2620 hdw
->std_info_avail
.def
.type_bitmask
.valid_bits
=
2623 cptr
= pvr2_hdw_get_ctrl_by_id(hdw
,PVR2_CID_STDCUR
);
2625 memcpy(&hdw
->std_info_cur
,cptr
->info
,
2626 sizeof(hdw
->std_info_cur
));
2627 cptr
->info
= &hdw
->std_info_cur
;
2628 hdw
->std_info_cur
.def
.type_bitmask
.bit_names
=
2630 hdw
->std_info_avail
.def
.type_bitmask
.valid_bits
=
2634 hdw
->cropcap_stale
= !0;
2635 hdw
->eeprom_addr
= -1;
2636 hdw
->unit_number
= -1;
2637 hdw
->v4l_minor_number_video
= -1;
2638 hdw
->v4l_minor_number_vbi
= -1;
2639 hdw
->v4l_minor_number_radio
= -1;
2640 hdw
->ctl_write_buffer
= kmalloc(PVR2_CTL_BUFFSIZE
,GFP_KERNEL
);
2641 if (!hdw
->ctl_write_buffer
) goto fail
;
2642 hdw
->ctl_read_buffer
= kmalloc(PVR2_CTL_BUFFSIZE
,GFP_KERNEL
);
2643 if (!hdw
->ctl_read_buffer
) goto fail
;
2644 hdw
->ctl_write_urb
= usb_alloc_urb(0,GFP_KERNEL
);
2645 if (!hdw
->ctl_write_urb
) goto fail
;
2646 hdw
->ctl_read_urb
= usb_alloc_urb(0,GFP_KERNEL
);
2647 if (!hdw
->ctl_read_urb
) goto fail
;
2649 if (v4l2_device_register(&intf
->dev
, &hdw
->v4l2_dev
) != 0) {
2650 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
2651 "Error registering with v4l core, giving up");
2654 mutex_lock(&pvr2_unit_mtx
); do {
2655 for (idx
= 0; idx
< PVR_NUM
; idx
++) {
2656 if (unit_pointers
[idx
]) continue;
2657 hdw
->unit_number
= idx
;
2658 unit_pointers
[idx
] = hdw
;
2661 } while (0); mutex_unlock(&pvr2_unit_mtx
);
2664 cnt2
= scnprintf(hdw
->name
+cnt1
,sizeof(hdw
->name
)-cnt1
,"pvrusb2");
2666 if (hdw
->unit_number
>= 0) {
2667 cnt2
= scnprintf(hdw
->name
+cnt1
,sizeof(hdw
->name
)-cnt1
,"_%c",
2668 ('a' + hdw
->unit_number
));
2671 if (cnt1
>= sizeof(hdw
->name
)) cnt1
= sizeof(hdw
->name
)-1;
2672 hdw
->name
[cnt1
] = 0;
2674 hdw
->workqueue
= create_singlethread_workqueue(hdw
->name
);
2675 INIT_WORK(&hdw
->workpoll
,pvr2_hdw_worker_poll
);
2677 pvr2_trace(PVR2_TRACE_INIT
,"Driver unit number is %d, name is %s",
2678 hdw
->unit_number
,hdw
->name
);
2680 hdw
->tuner_type
= -1;
2683 hdw
->usb_intf
= intf
;
2684 hdw
->usb_dev
= usb_dev
;
2686 usb_make_path(hdw
->usb_dev
, hdw
->bus_info
, sizeof(hdw
->bus_info
));
2688 ifnum
= hdw
->usb_intf
->cur_altsetting
->desc
.bInterfaceNumber
;
2689 usb_set_interface(hdw
->usb_dev
,ifnum
,0);
2691 mutex_init(&hdw
->ctl_lock_mutex
);
2692 mutex_init(&hdw
->big_lock_mutex
);
2697 del_timer_sync(&hdw
->quiescent_timer
);
2698 del_timer_sync(&hdw
->decoder_stabilization_timer
);
2699 del_timer_sync(&hdw
->encoder_run_timer
);
2700 del_timer_sync(&hdw
->encoder_wait_timer
);
2701 if (hdw
->workqueue
) {
2702 flush_workqueue(hdw
->workqueue
);
2703 destroy_workqueue(hdw
->workqueue
);
2704 hdw
->workqueue
= NULL
;
2706 usb_free_urb(hdw
->ctl_read_urb
);
2707 usb_free_urb(hdw
->ctl_write_urb
);
2708 kfree(hdw
->ctl_read_buffer
);
2709 kfree(hdw
->ctl_write_buffer
);
2710 kfree(hdw
->controls
);
2711 kfree(hdw
->mpeg_ctrl_info
);
2712 kfree(hdw
->std_defs
);
2713 kfree(hdw
->std_enum_names
);
2720 /* Remove _all_ associations between this driver and the underlying USB
2722 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw
*hdw
)
2724 if (hdw
->flag_disconnected
) return;
2725 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw
);
2726 if (hdw
->ctl_read_urb
) {
2727 usb_kill_urb(hdw
->ctl_read_urb
);
2728 usb_free_urb(hdw
->ctl_read_urb
);
2729 hdw
->ctl_read_urb
= NULL
;
2731 if (hdw
->ctl_write_urb
) {
2732 usb_kill_urb(hdw
->ctl_write_urb
);
2733 usb_free_urb(hdw
->ctl_write_urb
);
2734 hdw
->ctl_write_urb
= NULL
;
2736 if (hdw
->ctl_read_buffer
) {
2737 kfree(hdw
->ctl_read_buffer
);
2738 hdw
->ctl_read_buffer
= NULL
;
2740 if (hdw
->ctl_write_buffer
) {
2741 kfree(hdw
->ctl_write_buffer
);
2742 hdw
->ctl_write_buffer
= NULL
;
2744 hdw
->flag_disconnected
= !0;
2745 /* If we don't do this, then there will be a dangling struct device
2746 reference to our disappearing device persisting inside the V4L
2748 v4l2_device_disconnect(&hdw
->v4l2_dev
);
2749 hdw
->usb_dev
= NULL
;
2750 hdw
->usb_intf
= NULL
;
2751 pvr2_hdw_render_useless(hdw
);
2755 /* Destroy hardware interaction structure */
2756 void pvr2_hdw_destroy(struct pvr2_hdw
*hdw
)
2759 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_destroy: hdw=%p",hdw
);
2760 if (hdw
->workqueue
) {
2761 flush_workqueue(hdw
->workqueue
);
2762 destroy_workqueue(hdw
->workqueue
);
2763 hdw
->workqueue
= NULL
;
2765 del_timer_sync(&hdw
->quiescent_timer
);
2766 del_timer_sync(&hdw
->decoder_stabilization_timer
);
2767 del_timer_sync(&hdw
->encoder_run_timer
);
2768 del_timer_sync(&hdw
->encoder_wait_timer
);
2769 if (hdw
->fw_buffer
) {
2770 kfree(hdw
->fw_buffer
);
2771 hdw
->fw_buffer
= NULL
;
2773 if (hdw
->vid_stream
) {
2774 pvr2_stream_destroy(hdw
->vid_stream
);
2775 hdw
->vid_stream
= NULL
;
2777 pvr2_i2c_core_done(hdw
);
2778 v4l2_device_unregister(&hdw
->v4l2_dev
);
2779 pvr2_hdw_remove_usb_stuff(hdw
);
2780 mutex_lock(&pvr2_unit_mtx
); do {
2781 if ((hdw
->unit_number
>= 0) &&
2782 (hdw
->unit_number
< PVR_NUM
) &&
2783 (unit_pointers
[hdw
->unit_number
] == hdw
)) {
2784 unit_pointers
[hdw
->unit_number
] = NULL
;
2786 } while (0); mutex_unlock(&pvr2_unit_mtx
);
2787 kfree(hdw
->controls
);
2788 kfree(hdw
->mpeg_ctrl_info
);
2789 kfree(hdw
->std_defs
);
2790 kfree(hdw
->std_enum_names
);
2795 int pvr2_hdw_dev_ok(struct pvr2_hdw
*hdw
)
2797 return (hdw
&& hdw
->flag_ok
);
2801 /* Called when hardware has been unplugged */
2802 void pvr2_hdw_disconnect(struct pvr2_hdw
*hdw
)
2804 pvr2_trace(PVR2_TRACE_INIT
,"pvr2_hdw_disconnect(hdw=%p)",hdw
);
2805 LOCK_TAKE(hdw
->big_lock
);
2806 LOCK_TAKE(hdw
->ctl_lock
);
2807 pvr2_hdw_remove_usb_stuff(hdw
);
2808 LOCK_GIVE(hdw
->ctl_lock
);
2809 LOCK_GIVE(hdw
->big_lock
);
2813 // Attempt to autoselect an appropriate value for std_enum_cur given
2814 // whatever is currently in std_mask_cur
2815 static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw
*hdw
)
2818 for (idx
= 1; idx
< hdw
->std_enum_cnt
; idx
++) {
2819 if (hdw
->std_defs
[idx
-1].id
== hdw
->std_mask_cur
) {
2820 hdw
->std_enum_cur
= idx
;
2824 hdw
->std_enum_cur
= 0;
2828 // Calculate correct set of enumerated standards based on currently known
2829 // set of available standards bits.
2830 static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw
*hdw
)
2832 struct v4l2_standard
*newstd
;
2833 unsigned int std_cnt
;
2836 newstd
= pvr2_std_create_enum(&std_cnt
,hdw
->std_mask_avail
);
2838 if (hdw
->std_defs
) {
2839 kfree(hdw
->std_defs
);
2840 hdw
->std_defs
= NULL
;
2842 hdw
->std_enum_cnt
= 0;
2843 if (hdw
->std_enum_names
) {
2844 kfree(hdw
->std_enum_names
);
2845 hdw
->std_enum_names
= NULL
;
2850 PVR2_TRACE_ERROR_LEGS
,
2851 "WARNING: Failed to identify any viable standards");
2854 /* Set up the dynamic control for this standard */
2855 hdw
->std_enum_names
= kmalloc(sizeof(char *)*(std_cnt
+1),GFP_KERNEL
);
2856 if (hdw
->std_enum_names
) {
2857 hdw
->std_enum_names
[0] = "none";
2858 for (idx
= 0; idx
< std_cnt
; idx
++)
2859 hdw
->std_enum_names
[idx
+1] = newstd
[idx
].name
;
2860 hdw
->std_info_enum
.def
.type_enum
.value_names
=
2861 hdw
->std_enum_names
;
2862 hdw
->std_info_enum
.def
.type_enum
.count
= std_cnt
+1;
2865 PVR2_TRACE_ERROR_LEGS
,
2866 "WARNING: Failed to alloc memory for names");
2867 hdw
->std_info_enum
.def
.type_enum
.value_names
= NULL
;
2868 hdw
->std_info_enum
.def
.type_enum
.count
= 0;
2870 hdw
->std_defs
= newstd
;
2871 hdw
->std_enum_cnt
= std_cnt
+1;
2872 hdw
->std_enum_cur
= 0;
2873 hdw
->std_info_cur
.def
.type_bitmask
.valid_bits
= hdw
->std_mask_avail
;
2877 int pvr2_hdw_get_stdenum_value(struct pvr2_hdw
*hdw
,
2878 struct v4l2_standard
*std
,
2882 if (!idx
) return ret
;
2883 LOCK_TAKE(hdw
->big_lock
); do {
2884 if (idx
>= hdw
->std_enum_cnt
) break;
2886 memcpy(std
,hdw
->std_defs
+idx
,sizeof(*std
));
2888 } while (0); LOCK_GIVE(hdw
->big_lock
);
2893 /* Get the number of defined controls */
2894 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw
*hdw
)
2896 return hdw
->control_cnt
;
2900 /* Retrieve a control handle given its index (0..count-1) */
2901 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw
*hdw
,
2904 if (idx
>= hdw
->control_cnt
) return NULL
;
2905 return hdw
->controls
+ idx
;
2909 /* Retrieve a control handle given its index (0..count-1) */
2910 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw
*hdw
,
2911 unsigned int ctl_id
)
2913 struct pvr2_ctrl
*cptr
;
2917 /* This could be made a lot more efficient, but for now... */
2918 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2919 cptr
= hdw
->controls
+ idx
;
2920 i
= cptr
->info
->internal_id
;
2921 if (i
&& (i
== ctl_id
)) return cptr
;
2927 /* Given a V4L ID, retrieve the control structure associated with it. */
2928 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw
*hdw
,unsigned int ctl_id
)
2930 struct pvr2_ctrl
*cptr
;
2934 /* This could be made a lot more efficient, but for now... */
2935 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2936 cptr
= hdw
->controls
+ idx
;
2937 i
= cptr
->info
->v4l_id
;
2938 if (i
&& (i
== ctl_id
)) return cptr
;
2944 /* Given a V4L ID for its immediate predecessor, retrieve the control
2945 structure associated with it. */
2946 struct pvr2_ctrl
*pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw
*hdw
,
2947 unsigned int ctl_id
)
2949 struct pvr2_ctrl
*cptr
,*cp2
;
2953 /* This could be made a lot more efficient, but for now... */
2955 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
2956 cptr
= hdw
->controls
+ idx
;
2957 i
= cptr
->info
->v4l_id
;
2959 if (i
<= ctl_id
) continue;
2960 if (cp2
&& (cp2
->info
->v4l_id
< i
)) continue;
2968 static const char *get_ctrl_typename(enum pvr2_ctl_type tp
)
2971 case pvr2_ctl_int
: return "integer";
2972 case pvr2_ctl_enum
: return "enum";
2973 case pvr2_ctl_bool
: return "boolean";
2974 case pvr2_ctl_bitmask
: return "bitmask";
2980 static void pvr2_subdev_set_control(struct pvr2_hdw
*hdw
, int id
,
2981 const char *name
, int val
)
2983 struct v4l2_control ctrl
;
2984 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 %s=%d", name
, val
);
2985 memset(&ctrl
, 0, sizeof(ctrl
));
2988 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, s_ctrl
, &ctrl
);
2991 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
2992 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \
2993 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
2996 /* Execute whatever commands are required to update the state of all the
2997 sub-devices so that they match our current control values. */
2998 static void pvr2_subdev_update(struct pvr2_hdw
*hdw
)
3000 struct v4l2_subdev
*sd
;
3002 pvr2_subdev_update_func fp
;
3004 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev update...");
3006 if (hdw
->tuner_updated
|| hdw
->force_dirty
) {
3007 struct tuner_setup setup
;
3008 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev tuner set_type(%d)",
3010 if (((int)(hdw
->tuner_type
)) >= 0) {
3011 memset(&setup
, 0, sizeof(setup
));
3012 setup
.addr
= ADDR_UNSET
;
3013 setup
.type
= hdw
->tuner_type
;
3014 setup
.mode_mask
= T_RADIO
| T_ANALOG_TV
;
3015 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3016 tuner
, s_type_addr
, &setup
);
3020 if (hdw
->input_dirty
|| hdw
->std_dirty
|| hdw
->force_dirty
) {
3021 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_standard");
3022 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
3023 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3027 vs
= hdw
->std_mask_cur
;
3028 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3030 pvr2_hdw_cx25840_vbi_hack(hdw
);
3032 hdw
->tuner_signal_stale
= !0;
3033 hdw
->cropcap_stale
= !0;
3036 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_BRIGHTNESS
, brightness
);
3037 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_CONTRAST
, contrast
);
3038 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_SATURATION
, saturation
);
3039 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_HUE
, hue
);
3040 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_MUTE
, mute
);
3041 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_VOLUME
, volume
);
3042 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_BALANCE
, balance
);
3043 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_BASS
, bass
);
3044 PVR2_SUBDEV_SET_CONTROL(hdw
, V4L2_CID_AUDIO_TREBLE
, treble
);
3046 if (hdw
->input_dirty
|| hdw
->audiomode_dirty
|| hdw
->force_dirty
) {
3047 struct v4l2_tuner vt
;
3048 memset(&vt
, 0, sizeof(vt
));
3049 vt
.audmode
= hdw
->audiomode_val
;
3050 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, tuner
, s_tuner
, &vt
);
3053 if (hdw
->freqDirty
|| hdw
->force_dirty
) {
3055 struct v4l2_frequency freq
;
3056 fv
= pvr2_hdw_get_cur_freq(hdw
);
3057 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_freq(%lu)", fv
);
3058 if (hdw
->tuner_signal_stale
) pvr2_hdw_status_poll(hdw
);
3059 memset(&freq
, 0, sizeof(freq
));
3060 if (hdw
->tuner_signal_info
.capability
& V4L2_TUNER_CAP_LOW
) {
3061 /* ((fv * 1000) / 62500) */
3062 freq
.frequency
= (fv
* 2) / 125;
3064 freq
.frequency
= fv
/ 62500;
3066 /* tuner-core currently doesn't seem to care about this, but
3067 let's set it anyway for completeness. */
3068 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
3069 freq
.type
= V4L2_TUNER_RADIO
;
3071 freq
.type
= V4L2_TUNER_ANALOG_TV
;
3074 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, tuner
,
3075 s_frequency
, &freq
);
3078 if (hdw
->res_hor_dirty
|| hdw
->res_ver_dirty
|| hdw
->force_dirty
) {
3079 struct v4l2_mbus_framefmt fmt
;
3080 memset(&fmt
, 0, sizeof(fmt
));
3081 fmt
.width
= hdw
->res_hor_val
;
3082 fmt
.height
= hdw
->res_ver_val
;
3083 fmt
.code
= V4L2_MBUS_FMT_FIXED
;
3084 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_size(%dx%d)",
3085 fmt
.width
, fmt
.height
);
3086 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, video
, s_mbus_fmt
, &fmt
);
3089 if (hdw
->srate_dirty
|| hdw
->force_dirty
) {
3091 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev v4l2 set_audio %d",
3093 switch (hdw
->srate_val
) {
3095 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000
:
3098 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100
:
3101 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000
:
3105 v4l2_device_call_all(&hdw
->v4l2_dev
, 0,
3106 audio
, s_clock_freq
, val
);
3109 /* Unable to set crop parameters; there is apparently no equivalent
3110 for VIDIOC_S_CROP */
3112 v4l2_device_for_each_subdev(sd
, &hdw
->v4l2_dev
) {
3114 if (id
>= ARRAY_SIZE(pvr2_module_update_functions
)) continue;
3115 fp
= pvr2_module_update_functions
[id
];
3120 if (hdw
->tuner_signal_stale
|| hdw
->cropcap_stale
) {
3121 pvr2_hdw_status_poll(hdw
);
3126 /* Figure out if we need to commit control changes. If so, mark internal
3127 state flags to indicate this fact and return true. Otherwise do nothing
3128 else and return false. */
3129 static int pvr2_hdw_commit_setup(struct pvr2_hdw
*hdw
)
3132 struct pvr2_ctrl
*cptr
;
3134 int commit_flag
= hdw
->force_dirty
;
3136 unsigned int bcnt
,ccnt
;
3138 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
3139 cptr
= hdw
->controls
+ idx
;
3140 if (!cptr
->info
->is_dirty
) continue;
3141 if (!cptr
->info
->is_dirty(cptr
)) continue;
3144 if (!(pvrusb2_debug
& PVR2_TRACE_CTL
)) continue;
3145 bcnt
= scnprintf(buf
,sizeof(buf
),"\"%s\" <-- ",
3148 cptr
->info
->get_value(cptr
,&value
);
3149 pvr2_ctrl_value_to_sym_internal(cptr
,~0,value
,
3151 sizeof(buf
)-bcnt
,&ccnt
);
3153 bcnt
+= scnprintf(buf
+bcnt
,sizeof(buf
)-bcnt
," <%s>",
3154 get_ctrl_typename(cptr
->info
->type
));
3155 pvr2_trace(PVR2_TRACE_CTL
,
3156 "/*--TRACE_COMMIT--*/ %.*s",
3161 /* Nothing has changed */
3165 hdw
->state_pipeline_config
= 0;
3166 trace_stbit("state_pipeline_config",hdw
->state_pipeline_config
);
3167 pvr2_hdw_state_sched(hdw
);
3173 /* Perform all operations needed to commit all control changes. This must
3174 be performed in synchronization with the pipeline state and is thus
3175 expected to be called as part of the driver's worker thread. Return
3176 true if commit successful, otherwise return false to indicate that
3177 commit isn't possible at this time. */
3178 static int pvr2_hdw_commit_execute(struct pvr2_hdw
*hdw
)
3181 struct pvr2_ctrl
*cptr
;
3182 int disruptive_change
;
3184 if (hdw
->input_dirty
&& hdw
->state_pathway_ok
&&
3185 (((hdw
->input_val
== PVR2_CVAL_INPUT_DTV
) ?
3186 PVR2_PATHWAY_DIGITAL
: PVR2_PATHWAY_ANALOG
) !=
3187 hdw
->pathway_state
)) {
3188 /* Change of mode being asked for... */
3189 hdw
->state_pathway_ok
= 0;
3190 trace_stbit("state_pathway_ok", hdw
->state_pathway_ok
);
3192 if (!hdw
->state_pathway_ok
) {
3193 /* Can't commit anything until pathway is ok. */
3197 /* Handle some required side effects when the video standard is
3199 if (hdw
->std_dirty
) {
3202 if (hdw
->std_mask_cur
& V4L2_STD_525_60
) {
3209 /* Rewrite the vertical resolution to be appropriate to the
3210 video standard that has been selected. */
3211 if (nvres
!= hdw
->res_ver_val
) {
3212 hdw
->res_ver_val
= nvres
;
3213 hdw
->res_ver_dirty
= !0;
3215 /* Rewrite the GOP size to be appropriate to the video
3216 standard that has been selected. */
3217 if (gop_size
!= hdw
->enc_ctl_state
.video_gop_size
) {
3218 struct v4l2_ext_controls cs
;
3219 struct v4l2_ext_control c1
;
3220 memset(&cs
, 0, sizeof(cs
));
3221 memset(&c1
, 0, sizeof(c1
));
3224 c1
.id
= V4L2_CID_MPEG_VIDEO_GOP_SIZE
;
3225 c1
.value
= gop_size
;
3226 cx2341x_ext_ctrls(&hdw
->enc_ctl_state
, 0, &cs
,
3227 VIDIOC_S_EXT_CTRLS
);
3231 /* The broadcast decoder can only scale down, so if
3232 * res_*_dirty && crop window < output format ==> enlarge crop.
3234 * The mpeg encoder receives fields of res_hor_val dots and
3235 * res_ver_val halflines. Limits: hor<=720, ver<=576.
3237 if (hdw
->res_hor_dirty
&& hdw
->cropw_val
< hdw
->res_hor_val
) {
3238 hdw
->cropw_val
= hdw
->res_hor_val
;
3239 hdw
->cropw_dirty
= !0;
3240 } else if (hdw
->cropw_dirty
) {
3241 hdw
->res_hor_dirty
= !0; /* must rescale */
3242 hdw
->res_hor_val
= min(720, hdw
->cropw_val
);
3244 if (hdw
->res_ver_dirty
&& hdw
->croph_val
< hdw
->res_ver_val
) {
3245 hdw
->croph_val
= hdw
->res_ver_val
;
3246 hdw
->croph_dirty
= !0;
3247 } else if (hdw
->croph_dirty
) {
3248 int nvres
= hdw
->std_mask_cur
& V4L2_STD_525_60
? 480 : 576;
3249 hdw
->res_ver_dirty
= !0;
3250 hdw
->res_ver_val
= min(nvres
, hdw
->croph_val
);
3253 /* If any of the below has changed, then we can't do the update
3254 while the pipeline is running. Pipeline must be paused first
3255 and decoder -> encoder connection be made quiescent before we
3259 hdw
->enc_unsafe_stale
||
3261 hdw
->res_ver_dirty
||
3262 hdw
->res_hor_dirty
||
3266 (hdw
->active_stream_type
!= hdw
->desired_stream_type
));
3267 if (disruptive_change
&& !hdw
->state_pipeline_idle
) {
3268 /* Pipeline is not idle; we can't proceed. Arrange to
3269 cause pipeline to stop so that we can try this again
3271 hdw
->state_pipeline_pause
= !0;
3275 if (hdw
->srate_dirty
) {
3276 /* Write new sample rate into control structure since
3277 * the master copy is stale. We must track srate
3278 * separate from the mpeg control structure because
3279 * other logic also uses this value. */
3280 struct v4l2_ext_controls cs
;
3281 struct v4l2_ext_control c1
;
3282 memset(&cs
,0,sizeof(cs
));
3283 memset(&c1
,0,sizeof(c1
));
3286 c1
.id
= V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ
;
3287 c1
.value
= hdw
->srate_val
;
3288 cx2341x_ext_ctrls(&hdw
->enc_ctl_state
, 0, &cs
,VIDIOC_S_EXT_CTRLS
);
3291 if (hdw
->active_stream_type
!= hdw
->desired_stream_type
) {
3292 /* Handle any side effects of stream config here */
3293 hdw
->active_stream_type
= hdw
->desired_stream_type
;
3296 if (hdw
->hdw_desc
->signal_routing_scheme
==
3297 PVR2_ROUTING_SCHEME_GOTVIEW
) {
3299 /* Handle GOTVIEW audio switching */
3300 pvr2_hdw_gpio_get_out(hdw
,&b
);
3301 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
3303 pvr2_hdw_gpio_chg_out(hdw
,(1 << 11),~0);
3306 pvr2_hdw_gpio_chg_out(hdw
,(1 << 11),0);
3310 /* Check and update state for all sub-devices. */
3311 pvr2_subdev_update(hdw
);
3313 hdw
->tuner_updated
= 0;
3314 hdw
->force_dirty
= 0;
3315 for (idx
= 0; idx
< hdw
->control_cnt
; idx
++) {
3316 cptr
= hdw
->controls
+ idx
;
3317 if (!cptr
->info
->clear_dirty
) continue;
3318 cptr
->info
->clear_dirty(cptr
);
3321 if ((hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) &&
3322 hdw
->state_encoder_run
) {
3323 /* If encoder isn't running or it can't be touched, then
3324 this will get worked out later when we start the
3326 if (pvr2_encoder_adjust(hdw
) < 0) return !0;
3329 hdw
->state_pipeline_config
= !0;
3330 /* Hardware state may have changed in a way to cause the cropping
3331 capabilities to have changed. So mark it stale, which will
3332 cause a later re-fetch. */
3333 trace_stbit("state_pipeline_config",hdw
->state_pipeline_config
);
3338 int pvr2_hdw_commit_ctl(struct pvr2_hdw
*hdw
)
3341 LOCK_TAKE(hdw
->big_lock
);
3342 fl
= pvr2_hdw_commit_setup(hdw
);
3343 LOCK_GIVE(hdw
->big_lock
);
3345 return pvr2_hdw_wait(hdw
,0);
3349 static void pvr2_hdw_worker_poll(struct work_struct
*work
)
3352 struct pvr2_hdw
*hdw
= container_of(work
,struct pvr2_hdw
,workpoll
);
3353 LOCK_TAKE(hdw
->big_lock
); do {
3354 fl
= pvr2_hdw_state_eval(hdw
);
3355 } while (0); LOCK_GIVE(hdw
->big_lock
);
3356 if (fl
&& hdw
->state_func
) {
3357 hdw
->state_func(hdw
->state_data
);
3362 static int pvr2_hdw_wait(struct pvr2_hdw
*hdw
,int state
)
3364 return wait_event_interruptible(
3365 hdw
->state_wait_data
,
3366 (hdw
->state_stale
== 0) &&
3367 (!state
|| (hdw
->master_state
!= state
)));
3371 /* Return name for this driver instance */
3372 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw
*hdw
)
3378 const char *pvr2_hdw_get_desc(struct pvr2_hdw
*hdw
)
3380 return hdw
->hdw_desc
->description
;
3384 const char *pvr2_hdw_get_type(struct pvr2_hdw
*hdw
)
3386 return hdw
->hdw_desc
->shortname
;
3390 int pvr2_hdw_is_hsm(struct pvr2_hdw
*hdw
)
3393 LOCK_TAKE(hdw
->ctl_lock
); do {
3394 hdw
->cmd_buffer
[0] = FX2CMD_GET_USB_SPEED
;
3395 result
= pvr2_send_request(hdw
,
3398 if (result
< 0) break;
3399 result
= (hdw
->cmd_buffer
[0] != 0);
3400 } while(0); LOCK_GIVE(hdw
->ctl_lock
);
3405 /* Execute poll of tuner status */
3406 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw
*hdw
)
3408 LOCK_TAKE(hdw
->big_lock
); do {
3409 pvr2_hdw_status_poll(hdw
);
3410 } while (0); LOCK_GIVE(hdw
->big_lock
);
3414 static int pvr2_hdw_check_cropcap(struct pvr2_hdw
*hdw
)
3416 if (!hdw
->cropcap_stale
) {
3419 pvr2_hdw_status_poll(hdw
);
3420 if (hdw
->cropcap_stale
) {
3427 /* Return information about cropping capabilities */
3428 int pvr2_hdw_get_cropcap(struct pvr2_hdw
*hdw
, struct v4l2_cropcap
*pp
)
3431 LOCK_TAKE(hdw
->big_lock
);
3432 stat
= pvr2_hdw_check_cropcap(hdw
);
3434 memcpy(pp
, &hdw
->cropcap_info
, sizeof(hdw
->cropcap_info
));
3436 LOCK_GIVE(hdw
->big_lock
);
3441 /* Return information about the tuner */
3442 int pvr2_hdw_get_tuner_status(struct pvr2_hdw
*hdw
,struct v4l2_tuner
*vtp
)
3444 LOCK_TAKE(hdw
->big_lock
); do {
3445 if (hdw
->tuner_signal_stale
) {
3446 pvr2_hdw_status_poll(hdw
);
3448 memcpy(vtp
,&hdw
->tuner_signal_info
,sizeof(struct v4l2_tuner
));
3449 } while (0); LOCK_GIVE(hdw
->big_lock
);
3454 /* Get handle to video output stream */
3455 struct pvr2_stream
*pvr2_hdw_get_video_stream(struct pvr2_hdw
*hp
)
3457 return hp
->vid_stream
;
3461 void pvr2_hdw_trigger_module_log(struct pvr2_hdw
*hdw
)
3463 int nr
= pvr2_hdw_get_unit_number(hdw
);
3464 LOCK_TAKE(hdw
->big_lock
); do {
3465 printk(KERN_INFO
"pvrusb2: ================= START STATUS CARD #%d =================\n", nr
);
3466 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, log_status
);
3467 pvr2_trace(PVR2_TRACE_INFO
,"cx2341x config:");
3468 cx2341x_log_status(&hdw
->enc_ctl_state
, "pvrusb2");
3469 pvr2_hdw_state_log_state(hdw
);
3470 printk(KERN_INFO
"pvrusb2: ================== END STATUS CARD #%d ==================\n", nr
);
3471 } while (0); LOCK_GIVE(hdw
->big_lock
);
3475 /* Grab EEPROM contents, needed for direct method. */
3476 #define EEPROM_SIZE 8192
3477 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
3478 static u8
*pvr2_full_eeprom_fetch(struct pvr2_hdw
*hdw
)
3480 struct i2c_msg msg
[2];
3489 eeprom
= kmalloc(EEPROM_SIZE
,GFP_KERNEL
);
3491 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3492 "Failed to allocate memory"
3493 " required to read eeprom");
3497 trace_eeprom("Value for eeprom addr from controller was 0x%x",
3499 addr
= hdw
->eeprom_addr
;
3500 /* Seems that if the high bit is set, then the *real* eeprom
3501 address is shifted right now bit position (noticed this in
3502 newer PVR USB2 hardware) */
3503 if (addr
& 0x80) addr
>>= 1;
3505 /* FX2 documentation states that a 16bit-addressed eeprom is
3506 expected if the I2C address is an odd number (yeah, this is
3507 strange but it's what they do) */
3508 mode16
= (addr
& 1);
3509 eepromSize
= (mode16
? EEPROM_SIZE
: 256);
3510 trace_eeprom("Examining %d byte eeprom at location 0x%x"
3511 " using %d bit addressing",eepromSize
,addr
,
3516 msg
[0].len
= mode16
? 2 : 1;
3519 msg
[1].flags
= I2C_M_RD
;
3521 /* We have to do the actual eeprom data fetch ourselves, because
3522 (1) we're only fetching part of the eeprom, and (2) if we were
3523 getting the whole thing our I2C driver can't grab it in one
3524 pass - which is what tveeprom is otherwise going to attempt */
3525 memset(eeprom
,0,EEPROM_SIZE
);
3526 for (tcnt
= 0; tcnt
< EEPROM_SIZE
; tcnt
+= pcnt
) {
3528 if (pcnt
+ tcnt
> EEPROM_SIZE
) pcnt
= EEPROM_SIZE
-tcnt
;
3529 offs
= tcnt
+ (eepromSize
- EEPROM_SIZE
);
3531 iadd
[0] = offs
>> 8;
3537 msg
[1].buf
= eeprom
+tcnt
;
3538 if ((ret
= i2c_transfer(&hdw
->i2c_adap
,
3539 msg
,ARRAY_SIZE(msg
))) != 2) {
3540 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3541 "eeprom fetch set offs err=%d",ret
);
3550 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw
*hdw
,
3557 LOCK_TAKE(hdw
->big_lock
); do {
3558 if ((hdw
->fw_buffer
== NULL
) == !enable_flag
) break;
3561 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3562 "Cleaning up after CPU firmware fetch");
3563 kfree(hdw
->fw_buffer
);
3564 hdw
->fw_buffer
= NULL
;
3566 if (hdw
->fw_cpu_flag
) {
3567 /* Now release the CPU. It will disconnect
3568 and reconnect later. */
3569 pvr2_hdw_cpureset_assert(hdw
,0);
3574 hdw
->fw_cpu_flag
= (mode
!= 2);
3575 if (hdw
->fw_cpu_flag
) {
3576 hdw
->fw_size
= (mode
== 1) ? 0x4000 : 0x2000;
3577 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3578 "Preparing to suck out CPU firmware"
3579 " (size=%u)", hdw
->fw_size
);
3580 hdw
->fw_buffer
= kzalloc(hdw
->fw_size
,GFP_KERNEL
);
3581 if (!hdw
->fw_buffer
) {
3586 /* We have to hold the CPU during firmware upload. */
3587 pvr2_hdw_cpureset_assert(hdw
,1);
3589 /* download the firmware from address 0000-1fff in 2048
3590 (=0x800) bytes chunk. */
3592 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3593 "Grabbing CPU firmware");
3594 pipe
= usb_rcvctrlpipe(hdw
->usb_dev
, 0);
3595 for(address
= 0; address
< hdw
->fw_size
;
3597 ret
= usb_control_msg(hdw
->usb_dev
,pipe
,
3600 hdw
->fw_buffer
+address
,
3605 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3606 "Done grabbing CPU firmware");
3608 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3609 "Sucking down EEPROM contents");
3610 hdw
->fw_buffer
= pvr2_full_eeprom_fetch(hdw
);
3611 if (!hdw
->fw_buffer
) {
3612 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3613 "EEPROM content suck failed.");
3616 hdw
->fw_size
= EEPROM_SIZE
;
3617 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3618 "Done sucking down EEPROM contents");
3621 } while (0); LOCK_GIVE(hdw
->big_lock
);
3625 /* Return true if we're in a mode for retrieval CPU firmware */
3626 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw
*hdw
)
3628 return hdw
->fw_buffer
!= NULL
;
3632 int pvr2_hdw_cpufw_get(struct pvr2_hdw
*hdw
,unsigned int offs
,
3633 char *buf
,unsigned int cnt
)
3636 LOCK_TAKE(hdw
->big_lock
); do {
3640 if (!hdw
->fw_buffer
) {
3645 if (offs
>= hdw
->fw_size
) {
3646 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3647 "Read firmware data offs=%d EOF",
3653 if (offs
+ cnt
> hdw
->fw_size
) cnt
= hdw
->fw_size
- offs
;
3655 memcpy(buf
,hdw
->fw_buffer
+offs
,cnt
);
3657 pvr2_trace(PVR2_TRACE_FIRMWARE
,
3658 "Read firmware data offs=%d cnt=%d",
3661 } while (0); LOCK_GIVE(hdw
->big_lock
);
3667 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw
*hdw
,
3668 enum pvr2_v4l_type index
)
3671 case pvr2_v4l_type_video
: return hdw
->v4l_minor_number_video
;
3672 case pvr2_v4l_type_vbi
: return hdw
->v4l_minor_number_vbi
;
3673 case pvr2_v4l_type_radio
: return hdw
->v4l_minor_number_radio
;
3679 /* Store a v4l minor device number */
3680 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw
*hdw
,
3681 enum pvr2_v4l_type index
,int v
)
3684 case pvr2_v4l_type_video
: hdw
->v4l_minor_number_video
= v
;
3685 case pvr2_v4l_type_vbi
: hdw
->v4l_minor_number_vbi
= v
;
3686 case pvr2_v4l_type_radio
: hdw
->v4l_minor_number_radio
= v
;
3692 static void pvr2_ctl_write_complete(struct urb
*urb
)
3694 struct pvr2_hdw
*hdw
= urb
->context
;
3695 hdw
->ctl_write_pend_flag
= 0;
3696 if (hdw
->ctl_read_pend_flag
) return;
3697 complete(&hdw
->ctl_done
);
3701 static void pvr2_ctl_read_complete(struct urb
*urb
)
3703 struct pvr2_hdw
*hdw
= urb
->context
;
3704 hdw
->ctl_read_pend_flag
= 0;
3705 if (hdw
->ctl_write_pend_flag
) return;
3706 complete(&hdw
->ctl_done
);
3710 static void pvr2_ctl_timeout(unsigned long data
)
3712 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
3713 if (hdw
->ctl_write_pend_flag
|| hdw
->ctl_read_pend_flag
) {
3714 hdw
->ctl_timeout_flag
= !0;
3715 if (hdw
->ctl_write_pend_flag
)
3716 usb_unlink_urb(hdw
->ctl_write_urb
);
3717 if (hdw
->ctl_read_pend_flag
)
3718 usb_unlink_urb(hdw
->ctl_read_urb
);
3723 /* Issue a command and get a response from the device. This extended
3724 version includes a probe flag (which if set means that device errors
3725 should not be logged or treated as fatal) and a timeout in jiffies.
3726 This can be used to non-lethally probe the health of endpoint 1. */
3727 static int pvr2_send_request_ex(struct pvr2_hdw
*hdw
,
3728 unsigned int timeout
,int probe_fl
,
3729 void *write_data
,unsigned int write_len
,
3730 void *read_data
,unsigned int read_len
)
3734 struct timer_list timer
;
3735 if (!hdw
->ctl_lock_held
) {
3736 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3737 "Attempted to execute control transfer"
3741 if (!hdw
->flag_ok
&& !probe_fl
) {
3742 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3743 "Attempted to execute control transfer"
3744 " when device not ok");
3747 if (!(hdw
->ctl_read_urb
&& hdw
->ctl_write_urb
)) {
3749 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3750 "Attempted to execute control transfer"
3751 " when USB is disconnected");
3756 /* Ensure that we have sane parameters */
3757 if (!write_data
) write_len
= 0;
3758 if (!read_data
) read_len
= 0;
3759 if (write_len
> PVR2_CTL_BUFFSIZE
) {
3761 PVR2_TRACE_ERROR_LEGS
,
3762 "Attempted to execute %d byte"
3763 " control-write transfer (limit=%d)",
3764 write_len
,PVR2_CTL_BUFFSIZE
);
3767 if (read_len
> PVR2_CTL_BUFFSIZE
) {
3769 PVR2_TRACE_ERROR_LEGS
,
3770 "Attempted to execute %d byte"
3771 " control-read transfer (limit=%d)",
3772 write_len
,PVR2_CTL_BUFFSIZE
);
3775 if ((!write_len
) && (!read_len
)) {
3777 PVR2_TRACE_ERROR_LEGS
,
3778 "Attempted to execute null control transfer?");
3783 hdw
->cmd_debug_state
= 1;
3785 hdw
->cmd_debug_code
= ((unsigned char *)write_data
)[0];
3787 hdw
->cmd_debug_code
= 0;
3789 hdw
->cmd_debug_write_len
= write_len
;
3790 hdw
->cmd_debug_read_len
= read_len
;
3792 /* Initialize common stuff */
3793 init_completion(&hdw
->ctl_done
);
3794 hdw
->ctl_timeout_flag
= 0;
3795 hdw
->ctl_write_pend_flag
= 0;
3796 hdw
->ctl_read_pend_flag
= 0;
3798 timer
.expires
= jiffies
+ timeout
;
3799 timer
.data
= (unsigned long)hdw
;
3800 timer
.function
= pvr2_ctl_timeout
;
3803 hdw
->cmd_debug_state
= 2;
3804 /* Transfer write data to internal buffer */
3805 for (idx
= 0; idx
< write_len
; idx
++) {
3806 hdw
->ctl_write_buffer
[idx
] =
3807 ((unsigned char *)write_data
)[idx
];
3809 /* Initiate a write request */
3810 usb_fill_bulk_urb(hdw
->ctl_write_urb
,
3812 usb_sndbulkpipe(hdw
->usb_dev
,
3813 PVR2_CTL_WRITE_ENDPOINT
),
3814 hdw
->ctl_write_buffer
,
3816 pvr2_ctl_write_complete
,
3818 hdw
->ctl_write_urb
->actual_length
= 0;
3819 hdw
->ctl_write_pend_flag
= !0;
3820 status
= usb_submit_urb(hdw
->ctl_write_urb
,GFP_KERNEL
);
3822 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3823 "Failed to submit write-control"
3824 " URB status=%d",status
);
3825 hdw
->ctl_write_pend_flag
= 0;
3831 hdw
->cmd_debug_state
= 3;
3832 memset(hdw
->ctl_read_buffer
,0x43,read_len
);
3833 /* Initiate a read request */
3834 usb_fill_bulk_urb(hdw
->ctl_read_urb
,
3836 usb_rcvbulkpipe(hdw
->usb_dev
,
3837 PVR2_CTL_READ_ENDPOINT
),
3838 hdw
->ctl_read_buffer
,
3840 pvr2_ctl_read_complete
,
3842 hdw
->ctl_read_urb
->actual_length
= 0;
3843 hdw
->ctl_read_pend_flag
= !0;
3844 status
= usb_submit_urb(hdw
->ctl_read_urb
,GFP_KERNEL
);
3846 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3847 "Failed to submit read-control"
3848 " URB status=%d",status
);
3849 hdw
->ctl_read_pend_flag
= 0;
3857 /* Now wait for all I/O to complete */
3858 hdw
->cmd_debug_state
= 4;
3859 while (hdw
->ctl_write_pend_flag
|| hdw
->ctl_read_pend_flag
) {
3860 wait_for_completion(&hdw
->ctl_done
);
3862 hdw
->cmd_debug_state
= 5;
3865 del_timer_sync(&timer
);
3867 hdw
->cmd_debug_state
= 6;
3870 if (hdw
->ctl_timeout_flag
) {
3871 status
= -ETIMEDOUT
;
3873 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3874 "Timed out control-write");
3880 /* Validate results of write request */
3881 if ((hdw
->ctl_write_urb
->status
!= 0) &&
3882 (hdw
->ctl_write_urb
->status
!= -ENOENT
) &&
3883 (hdw
->ctl_write_urb
->status
!= -ESHUTDOWN
) &&
3884 (hdw
->ctl_write_urb
->status
!= -ECONNRESET
)) {
3885 /* USB subsystem is reporting some kind of failure
3887 status
= hdw
->ctl_write_urb
->status
;
3889 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3890 "control-write URB failure,"
3896 if (hdw
->ctl_write_urb
->actual_length
< write_len
) {
3897 /* Failed to write enough data */
3900 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3901 "control-write URB short,"
3902 " expected=%d got=%d",
3904 hdw
->ctl_write_urb
->actual_length
);
3910 /* Validate results of read request */
3911 if ((hdw
->ctl_read_urb
->status
!= 0) &&
3912 (hdw
->ctl_read_urb
->status
!= -ENOENT
) &&
3913 (hdw
->ctl_read_urb
->status
!= -ESHUTDOWN
) &&
3914 (hdw
->ctl_read_urb
->status
!= -ECONNRESET
)) {
3915 /* USB subsystem is reporting some kind of failure
3917 status
= hdw
->ctl_read_urb
->status
;
3919 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3920 "control-read URB failure,"
3926 if (hdw
->ctl_read_urb
->actual_length
< read_len
) {
3927 /* Failed to read enough data */
3930 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
3931 "control-read URB short,"
3932 " expected=%d got=%d",
3934 hdw
->ctl_read_urb
->actual_length
);
3938 /* Transfer retrieved data out from internal buffer */
3939 for (idx
= 0; idx
< read_len
; idx
++) {
3940 ((unsigned char *)read_data
)[idx
] =
3941 hdw
->ctl_read_buffer
[idx
];
3947 hdw
->cmd_debug_state
= 0;
3948 if ((status
< 0) && (!probe_fl
)) {
3949 pvr2_hdw_render_useless(hdw
);
3955 int pvr2_send_request(struct pvr2_hdw
*hdw
,
3956 void *write_data
,unsigned int write_len
,
3957 void *read_data
,unsigned int read_len
)
3959 return pvr2_send_request_ex(hdw
,HZ
*4,0,
3960 write_data
,write_len
,
3961 read_data
,read_len
);
3965 static int pvr2_issue_simple_cmd(struct pvr2_hdw
*hdw
,u32 cmdcode
)
3968 unsigned int cnt
= 1;
3969 unsigned int args
= 0;
3970 LOCK_TAKE(hdw
->ctl_lock
);
3971 hdw
->cmd_buffer
[0] = cmdcode
& 0xffu
;
3972 args
= (cmdcode
>> 8) & 0xffu
;
3973 args
= (args
> 2) ? 2 : args
;
3976 hdw
->cmd_buffer
[1] = (cmdcode
>> 16) & 0xffu
;
3978 hdw
->cmd_buffer
[2] = (cmdcode
>> 24) & 0xffu
;
3981 if (pvrusb2_debug
& PVR2_TRACE_INIT
) {
3983 unsigned int ccnt
,bcnt
;
3987 ccnt
= scnprintf(tbuf
+bcnt
,
3989 "Sending FX2 command 0x%x",cmdcode
);
3991 for (idx
= 0; idx
< ARRAY_SIZE(pvr2_fx2cmd_desc
); idx
++) {
3992 if (pvr2_fx2cmd_desc
[idx
].id
== cmdcode
) {
3993 ccnt
= scnprintf(tbuf
+bcnt
,
3996 pvr2_fx2cmd_desc
[idx
].desc
);
4002 ccnt
= scnprintf(tbuf
+bcnt
,
4004 " (%u",hdw
->cmd_buffer
[1]);
4007 ccnt
= scnprintf(tbuf
+bcnt
,
4009 ",%u",hdw
->cmd_buffer
[2]);
4012 ccnt
= scnprintf(tbuf
+bcnt
,
4017 pvr2_trace(PVR2_TRACE_INIT
,"%.*s",bcnt
,tbuf
);
4019 ret
= pvr2_send_request(hdw
,hdw
->cmd_buffer
,cnt
,NULL
,0);
4020 LOCK_GIVE(hdw
->ctl_lock
);
4025 int pvr2_write_register(struct pvr2_hdw
*hdw
, u16 reg
, u32 data
)
4029 LOCK_TAKE(hdw
->ctl_lock
);
4031 hdw
->cmd_buffer
[0] = FX2CMD_REG_WRITE
; /* write register prefix */
4032 PVR2_DECOMPOSE_LE(hdw
->cmd_buffer
,1,data
);
4033 hdw
->cmd_buffer
[5] = 0;
4034 hdw
->cmd_buffer
[6] = (reg
>> 8) & 0xff;
4035 hdw
->cmd_buffer
[7] = reg
& 0xff;
4038 ret
= pvr2_send_request(hdw
, hdw
->cmd_buffer
, 8, hdw
->cmd_buffer
, 0);
4040 LOCK_GIVE(hdw
->ctl_lock
);
4046 static int pvr2_read_register(struct pvr2_hdw
*hdw
, u16 reg
, u32
*data
)
4050 LOCK_TAKE(hdw
->ctl_lock
);
4052 hdw
->cmd_buffer
[0] = FX2CMD_REG_READ
; /* read register prefix */
4053 hdw
->cmd_buffer
[1] = 0;
4054 hdw
->cmd_buffer
[2] = 0;
4055 hdw
->cmd_buffer
[3] = 0;
4056 hdw
->cmd_buffer
[4] = 0;
4057 hdw
->cmd_buffer
[5] = 0;
4058 hdw
->cmd_buffer
[6] = (reg
>> 8) & 0xff;
4059 hdw
->cmd_buffer
[7] = reg
& 0xff;
4061 ret
|= pvr2_send_request(hdw
, hdw
->cmd_buffer
, 8, hdw
->cmd_buffer
, 4);
4062 *data
= PVR2_COMPOSE_LE(hdw
->cmd_buffer
,0);
4064 LOCK_GIVE(hdw
->ctl_lock
);
4070 void pvr2_hdw_render_useless(struct pvr2_hdw
*hdw
)
4072 if (!hdw
->flag_ok
) return;
4073 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4074 "Device being rendered inoperable");
4075 if (hdw
->vid_stream
) {
4076 pvr2_stream_setup(hdw
->vid_stream
,NULL
,0,0);
4079 trace_stbit("flag_ok",hdw
->flag_ok
);
4080 pvr2_hdw_state_sched(hdw
);
4084 void pvr2_hdw_device_reset(struct pvr2_hdw
*hdw
)
4087 pvr2_trace(PVR2_TRACE_INIT
,"Performing a device reset...");
4088 ret
= usb_lock_device_for_reset(hdw
->usb_dev
,NULL
);
4090 ret
= usb_reset_device(hdw
->usb_dev
);
4091 usb_unlock_device(hdw
->usb_dev
);
4093 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4094 "Failed to lock USB device ret=%d",ret
);
4096 if (init_pause_msec
) {
4097 pvr2_trace(PVR2_TRACE_INFO
,
4098 "Waiting %u msec for hardware to settle",
4100 msleep(init_pause_msec
);
4106 void pvr2_hdw_cpureset_assert(struct pvr2_hdw
*hdw
,int val
)
4112 if (!hdw
->usb_dev
) return;
4114 da
= kmalloc(16, GFP_KERNEL
);
4117 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4118 "Unable to allocate memory to control CPU reset");
4122 pvr2_trace(PVR2_TRACE_INIT
,"cpureset_assert(%d)",val
);
4124 da
[0] = val
? 0x01 : 0x00;
4126 /* Write the CPUCS register on the 8051. The lsb of the register
4127 is the reset bit; a 1 asserts reset while a 0 clears it. */
4128 pipe
= usb_sndctrlpipe(hdw
->usb_dev
, 0);
4129 ret
= usb_control_msg(hdw
->usb_dev
,pipe
,0xa0,0x40,0xe600,0,da
,1,HZ
);
4131 pvr2_trace(PVR2_TRACE_ERROR_LEGS
,
4132 "cpureset_assert(%d) error=%d",val
,ret
);
4133 pvr2_hdw_render_useless(hdw
);
4140 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw
*hdw
)
4142 return pvr2_issue_simple_cmd(hdw
,FX2CMD_DEEP_RESET
);
4146 int pvr2_hdw_cmd_powerup(struct pvr2_hdw
*hdw
)
4148 return pvr2_issue_simple_cmd(hdw
,FX2CMD_POWER_ON
);
4152 int pvr2_hdw_cmd_powerdown(struct pvr2_hdw
*hdw
)
4154 return pvr2_issue_simple_cmd(hdw
,FX2CMD_POWER_OFF
);
4158 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw
*hdw
)
4160 pvr2_trace(PVR2_TRACE_INIT
,
4161 "Requesting decoder reset");
4162 if (hdw
->decoder_client_id
) {
4163 v4l2_device_call_all(&hdw
->v4l2_dev
, hdw
->decoder_client_id
,
4165 pvr2_hdw_cx25840_vbi_hack(hdw
);
4168 pvr2_trace(PVR2_TRACE_INIT
,
4169 "Unable to reset decoder: nothing attached");
4174 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw
*hdw
, int onoff
)
4177 return pvr2_issue_simple_cmd(hdw
,
4178 FX2CMD_HCW_DEMOD_RESETIN
|
4180 ((onoff
? 1 : 0) << 16));
4184 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw
*hdw
, int onoff
)
4187 return pvr2_issue_simple_cmd(hdw
,(onoff
?
4188 FX2CMD_ONAIR_DTV_POWER_ON
:
4189 FX2CMD_ONAIR_DTV_POWER_OFF
));
4193 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw
*hdw
,
4196 return pvr2_issue_simple_cmd(hdw
,(onoff
?
4197 FX2CMD_ONAIR_DTV_STREAMING_ON
:
4198 FX2CMD_ONAIR_DTV_STREAMING_OFF
));
4202 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw
*hdw
,int digitalFl
)
4205 /* Compare digital/analog desired setting with current setting. If
4206 they don't match, fix it... */
4207 cmode
= (digitalFl
? PVR2_PATHWAY_DIGITAL
: PVR2_PATHWAY_ANALOG
);
4208 if (cmode
== hdw
->pathway_state
) {
4209 /* They match; nothing to do */
4213 switch (hdw
->hdw_desc
->digital_control_scheme
) {
4214 case PVR2_DIGITAL_SCHEME_HAUPPAUGE
:
4215 pvr2_hdw_cmd_hcw_demod_reset(hdw
,digitalFl
);
4216 if (cmode
== PVR2_PATHWAY_ANALOG
) {
4217 /* If moving to analog mode, also force the decoder
4218 to reset. If no decoder is attached, then it's
4219 ok to ignore this because if/when the decoder
4220 attaches, it will reset itself at that time. */
4221 pvr2_hdw_cmd_decoder_reset(hdw
);
4224 case PVR2_DIGITAL_SCHEME_ONAIR
:
4225 /* Supposedly we should always have the power on whether in
4226 digital or analog mode. But for now do what appears to
4228 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw
,digitalFl
);
4233 pvr2_hdw_untrip_unlocked(hdw
);
4234 hdw
->pathway_state
= cmode
;
4238 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw
*hdw
, int onoff
)
4240 /* change some GPIO data
4242 * note: bit d7 of dir appears to control the LED,
4243 * so we shut it off here.
4247 pvr2_hdw_gpio_chg_dir(hdw
, 0xffffffff, 0x00000481);
4249 pvr2_hdw_gpio_chg_dir(hdw
, 0xffffffff, 0x00000401);
4251 pvr2_hdw_gpio_chg_out(hdw
, 0xffffffff, 0x00000000);
4255 typedef void (*led_method_func
)(struct pvr2_hdw
*,int);
4257 static led_method_func led_methods
[] = {
4258 [PVR2_LED_SCHEME_HAUPPAUGE
] = pvr2_led_ctrl_hauppauge
,
4263 static void pvr2_led_ctrl(struct pvr2_hdw
*hdw
,int onoff
)
4265 unsigned int scheme_id
;
4268 if ((!onoff
) == (!hdw
->led_on
)) return;
4270 hdw
->led_on
= onoff
!= 0;
4272 scheme_id
= hdw
->hdw_desc
->led_scheme
;
4273 if (scheme_id
< ARRAY_SIZE(led_methods
)) {
4274 fp
= led_methods
[scheme_id
];
4279 if (fp
) (*fp
)(hdw
,onoff
);
4283 /* Stop / start video stream transport */
4284 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw
*hdw
,int runFl
)
4288 /* If we're in analog mode, then just issue the usual analog
4290 if (hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) {
4291 return pvr2_issue_simple_cmd(hdw
,
4293 FX2CMD_STREAMING_ON
:
4294 FX2CMD_STREAMING_OFF
));
4295 /*Note: Not reached */
4298 if (hdw
->pathway_state
!= PVR2_PATHWAY_DIGITAL
) {
4299 /* Whoops, we don't know what mode we're in... */
4303 /* To get here we have to be in digital mode. The mechanism here
4304 is unfortunately different for different vendors. So we switch
4305 on the device's digital scheme attribute in order to figure out
4307 switch (hdw
->hdw_desc
->digital_control_scheme
) {
4308 case PVR2_DIGITAL_SCHEME_HAUPPAUGE
:
4309 return pvr2_issue_simple_cmd(hdw
,
4311 FX2CMD_HCW_DTV_STREAMING_ON
:
4312 FX2CMD_HCW_DTV_STREAMING_OFF
));
4313 case PVR2_DIGITAL_SCHEME_ONAIR
:
4314 ret
= pvr2_issue_simple_cmd(hdw
,
4316 FX2CMD_STREAMING_ON
:
4317 FX2CMD_STREAMING_OFF
));
4318 if (ret
) return ret
;
4319 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw
,runFl
);
4326 /* Evaluate whether or not state_pathway_ok can change */
4327 static int state_eval_pathway_ok(struct pvr2_hdw
*hdw
)
4329 if (hdw
->state_pathway_ok
) {
4330 /* Nothing to do if pathway is already ok */
4333 if (!hdw
->state_pipeline_idle
) {
4334 /* Not allowed to change anything if pipeline is not idle */
4337 pvr2_hdw_cmd_modeswitch(hdw
,hdw
->input_val
== PVR2_CVAL_INPUT_DTV
);
4338 hdw
->state_pathway_ok
= !0;
4339 trace_stbit("state_pathway_ok",hdw
->state_pathway_ok
);
4344 /* Evaluate whether or not state_encoder_ok can change */
4345 static int state_eval_encoder_ok(struct pvr2_hdw
*hdw
)
4347 if (hdw
->state_encoder_ok
) return 0;
4348 if (hdw
->flag_tripped
) return 0;
4349 if (hdw
->state_encoder_run
) return 0;
4350 if (hdw
->state_encoder_config
) return 0;
4351 if (hdw
->state_decoder_run
) return 0;
4352 if (hdw
->state_usbstream_run
) return 0;
4353 if (hdw
->pathway_state
== PVR2_PATHWAY_DIGITAL
) {
4354 if (!hdw
->hdw_desc
->flag_digital_requires_cx23416
) return 0;
4355 } else if (hdw
->pathway_state
!= PVR2_PATHWAY_ANALOG
) {
4359 if (pvr2_upload_firmware2(hdw
) < 0) {
4360 hdw
->flag_tripped
= !0;
4361 trace_stbit("flag_tripped",hdw
->flag_tripped
);
4364 hdw
->state_encoder_ok
= !0;
4365 trace_stbit("state_encoder_ok",hdw
->state_encoder_ok
);
4370 /* Evaluate whether or not state_encoder_config can change */
4371 static int state_eval_encoder_config(struct pvr2_hdw
*hdw
)
4373 if (hdw
->state_encoder_config
) {
4374 if (hdw
->state_encoder_ok
) {
4375 if (hdw
->state_pipeline_req
&&
4376 !hdw
->state_pipeline_pause
) return 0;
4378 hdw
->state_encoder_config
= 0;
4379 hdw
->state_encoder_waitok
= 0;
4380 trace_stbit("state_encoder_waitok",hdw
->state_encoder_waitok
);
4381 /* paranoia - solve race if timer just completed */
4382 del_timer_sync(&hdw
->encoder_wait_timer
);
4384 if (!hdw
->state_pathway_ok
||
4385 (hdw
->pathway_state
!= PVR2_PATHWAY_ANALOG
) ||
4386 !hdw
->state_encoder_ok
||
4387 !hdw
->state_pipeline_idle
||
4388 hdw
->state_pipeline_pause
||
4389 !hdw
->state_pipeline_req
||
4390 !hdw
->state_pipeline_config
) {
4391 /* We must reset the enforced wait interval if
4392 anything has happened that might have disturbed
4393 the encoder. This should be a rare case. */
4394 if (timer_pending(&hdw
->encoder_wait_timer
)) {
4395 del_timer_sync(&hdw
->encoder_wait_timer
);
4397 if (hdw
->state_encoder_waitok
) {
4398 /* Must clear the state - therefore we did
4399 something to a state bit and must also
4401 hdw
->state_encoder_waitok
= 0;
4402 trace_stbit("state_encoder_waitok",
4403 hdw
->state_encoder_waitok
);
4408 if (!hdw
->state_encoder_waitok
) {
4409 if (!timer_pending(&hdw
->encoder_wait_timer
)) {
4410 /* waitok flag wasn't set and timer isn't
4411 running. Check flag once more to avoid
4412 a race then start the timer. This is
4413 the point when we measure out a minimal
4414 quiet interval before doing something to
4416 if (!hdw
->state_encoder_waitok
) {
4417 hdw
->encoder_wait_timer
.expires
=
4419 (HZ
* TIME_MSEC_ENCODER_WAIT
4421 add_timer(&hdw
->encoder_wait_timer
);
4424 /* We can't continue until we know we have been
4425 quiet for the interval measured by this
4429 pvr2_encoder_configure(hdw
);
4430 if (hdw
->state_encoder_ok
) hdw
->state_encoder_config
= !0;
4432 trace_stbit("state_encoder_config",hdw
->state_encoder_config
);
4437 /* Return true if the encoder should not be running. */
4438 static int state_check_disable_encoder_run(struct pvr2_hdw
*hdw
)
4440 if (!hdw
->state_encoder_ok
) {
4441 /* Encoder isn't healthy at the moment, so stop it. */
4444 if (!hdw
->state_pathway_ok
) {
4445 /* Mode is not understood at the moment (i.e. it wants to
4446 change), so encoder must be stopped. */
4450 switch (hdw
->pathway_state
) {
4451 case PVR2_PATHWAY_ANALOG
:
4452 if (!hdw
->state_decoder_run
) {
4453 /* We're in analog mode and the decoder is not
4454 running; thus the encoder should be stopped as
4459 case PVR2_PATHWAY_DIGITAL
:
4460 if (hdw
->state_encoder_runok
) {
4461 /* This is a funny case. We're in digital mode so
4462 really the encoder should be stopped. However
4463 if it really is running, only kill it after
4464 runok has been set. This gives a chance for the
4465 onair quirk to function (encoder must run
4466 briefly first, at least once, before onair
4467 digital streaming can work). */
4472 /* Unknown mode; so encoder should be stopped. */
4476 /* If we get here, we haven't found a reason to stop the
4482 /* Return true if the encoder should be running. */
4483 static int state_check_enable_encoder_run(struct pvr2_hdw
*hdw
)
4485 if (!hdw
->state_encoder_ok
) {
4486 /* Don't run the encoder if it isn't healthy... */
4489 if (!hdw
->state_pathway_ok
) {
4490 /* Don't run the encoder if we don't (yet) know what mode
4491 we need to be in... */
4495 switch (hdw
->pathway_state
) {
4496 case PVR2_PATHWAY_ANALOG
:
4497 if (hdw
->state_decoder_run
&& hdw
->state_decoder_ready
) {
4498 /* In analog mode, if the decoder is running, then
4503 case PVR2_PATHWAY_DIGITAL
:
4504 if ((hdw
->hdw_desc
->digital_control_scheme
==
4505 PVR2_DIGITAL_SCHEME_ONAIR
) &&
4506 !hdw
->state_encoder_runok
) {
4507 /* This is a quirk. OnAir hardware won't stream
4508 digital until the encoder has been run at least
4509 once, for a minimal period of time (empiricially
4510 measured to be 1/4 second). So if we're on
4511 OnAir hardware and the encoder has never been
4512 run at all, then start the encoder. Normal
4513 state machine logic in the driver will
4514 automatically handle the remaining bits. */
4519 /* For completeness (unknown mode; encoder won't run ever) */
4522 /* If we get here, then we haven't found any reason to run the
4523 encoder, so don't run it. */
4528 /* Evaluate whether or not state_encoder_run can change */
4529 static int state_eval_encoder_run(struct pvr2_hdw
*hdw
)
4531 if (hdw
->state_encoder_run
) {
4532 if (!state_check_disable_encoder_run(hdw
)) return 0;
4533 if (hdw
->state_encoder_ok
) {
4534 del_timer_sync(&hdw
->encoder_run_timer
);
4535 if (pvr2_encoder_stop(hdw
) < 0) return !0;
4537 hdw
->state_encoder_run
= 0;
4539 if (!state_check_enable_encoder_run(hdw
)) return 0;
4540 if (pvr2_encoder_start(hdw
) < 0) return !0;
4541 hdw
->state_encoder_run
= !0;
4542 if (!hdw
->state_encoder_runok
) {
4543 hdw
->encoder_run_timer
.expires
=
4544 jiffies
+ (HZ
* TIME_MSEC_ENCODER_OK
/ 1000);
4545 add_timer(&hdw
->encoder_run_timer
);
4548 trace_stbit("state_encoder_run",hdw
->state_encoder_run
);
4553 /* Timeout function for quiescent timer. */
4554 static void pvr2_hdw_quiescent_timeout(unsigned long data
)
4556 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4557 hdw
->state_decoder_quiescent
= !0;
4558 trace_stbit("state_decoder_quiescent",hdw
->state_decoder_quiescent
);
4559 hdw
->state_stale
= !0;
4560 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
4564 /* Timeout function for decoder stabilization timer. */
4565 static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data
)
4567 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4568 hdw
->state_decoder_ready
= !0;
4569 trace_stbit("state_decoder_ready", hdw
->state_decoder_ready
);
4570 hdw
->state_stale
= !0;
4571 queue_work(hdw
->workqueue
, &hdw
->workpoll
);
4575 /* Timeout function for encoder wait timer. */
4576 static void pvr2_hdw_encoder_wait_timeout(unsigned long data
)
4578 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4579 hdw
->state_encoder_waitok
= !0;
4580 trace_stbit("state_encoder_waitok",hdw
->state_encoder_waitok
);
4581 hdw
->state_stale
= !0;
4582 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
4586 /* Timeout function for encoder run timer. */
4587 static void pvr2_hdw_encoder_run_timeout(unsigned long data
)
4589 struct pvr2_hdw
*hdw
= (struct pvr2_hdw
*)data
;
4590 if (!hdw
->state_encoder_runok
) {
4591 hdw
->state_encoder_runok
= !0;
4592 trace_stbit("state_encoder_runok",hdw
->state_encoder_runok
);
4593 hdw
->state_stale
= !0;
4594 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
4599 /* Evaluate whether or not state_decoder_run can change */
4600 static int state_eval_decoder_run(struct pvr2_hdw
*hdw
)
4602 if (hdw
->state_decoder_run
) {
4603 if (hdw
->state_encoder_ok
) {
4604 if (hdw
->state_pipeline_req
&&
4605 !hdw
->state_pipeline_pause
&&
4606 hdw
->state_pathway_ok
) return 0;
4608 if (!hdw
->flag_decoder_missed
) {
4609 pvr2_decoder_enable(hdw
,0);
4611 hdw
->state_decoder_quiescent
= 0;
4612 hdw
->state_decoder_run
= 0;
4613 /* paranoia - solve race if timer(s) just completed */
4614 del_timer_sync(&hdw
->quiescent_timer
);
4615 /* Kill the stabilization timer, in case we're killing the
4616 encoder before the previous stabilization interval has
4617 been properly timed. */
4618 del_timer_sync(&hdw
->decoder_stabilization_timer
);
4619 hdw
->state_decoder_ready
= 0;
4621 if (!hdw
->state_decoder_quiescent
) {
4622 if (!timer_pending(&hdw
->quiescent_timer
)) {
4623 /* We don't do something about the
4624 quiescent timer until right here because
4625 we also want to catch cases where the
4626 decoder was already not running (like
4627 after initialization) as opposed to
4628 knowing that we had just stopped it.
4629 The second flag check is here to cover a
4630 race - the timer could have run and set
4631 this flag just after the previous check
4632 but before we did the pending check. */
4633 if (!hdw
->state_decoder_quiescent
) {
4634 hdw
->quiescent_timer
.expires
=
4636 (HZ
* TIME_MSEC_DECODER_WAIT
4638 add_timer(&hdw
->quiescent_timer
);
4641 /* Don't allow decoder to start again until it has
4642 been quiesced first. This little detail should
4643 hopefully further stabilize the encoder. */
4646 if (!hdw
->state_pathway_ok
||
4647 (hdw
->pathway_state
!= PVR2_PATHWAY_ANALOG
) ||
4648 !hdw
->state_pipeline_req
||
4649 hdw
->state_pipeline_pause
||
4650 !hdw
->state_pipeline_config
||
4651 !hdw
->state_encoder_config
||
4652 !hdw
->state_encoder_ok
) return 0;
4653 del_timer_sync(&hdw
->quiescent_timer
);
4654 if (hdw
->flag_decoder_missed
) return 0;
4655 if (pvr2_decoder_enable(hdw
,!0) < 0) return 0;
4656 hdw
->state_decoder_quiescent
= 0;
4657 hdw
->state_decoder_ready
= 0;
4658 hdw
->state_decoder_run
= !0;
4659 if (hdw
->decoder_client_id
== PVR2_CLIENT_ID_SAA7115
) {
4660 hdw
->decoder_stabilization_timer
.expires
=
4662 (HZ
* TIME_MSEC_DECODER_STABILIZATION_WAIT
/
4664 add_timer(&hdw
->decoder_stabilization_timer
);
4666 hdw
->state_decoder_ready
= !0;
4669 trace_stbit("state_decoder_quiescent",hdw
->state_decoder_quiescent
);
4670 trace_stbit("state_decoder_run",hdw
->state_decoder_run
);
4671 trace_stbit("state_decoder_ready", hdw
->state_decoder_ready
);
4676 /* Evaluate whether or not state_usbstream_run can change */
4677 static int state_eval_usbstream_run(struct pvr2_hdw
*hdw
)
4679 if (hdw
->state_usbstream_run
) {
4681 if (hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) {
4682 fl
= (hdw
->state_encoder_ok
&&
4683 hdw
->state_encoder_run
);
4684 } else if ((hdw
->pathway_state
== PVR2_PATHWAY_DIGITAL
) &&
4685 (hdw
->hdw_desc
->flag_digital_requires_cx23416
)) {
4686 fl
= hdw
->state_encoder_ok
;
4689 hdw
->state_pipeline_req
&&
4690 !hdw
->state_pipeline_pause
&&
4691 hdw
->state_pathway_ok
) {
4694 pvr2_hdw_cmd_usbstream(hdw
,0);
4695 hdw
->state_usbstream_run
= 0;
4697 if (!hdw
->state_pipeline_req
||
4698 hdw
->state_pipeline_pause
||
4699 !hdw
->state_pathway_ok
) return 0;
4700 if (hdw
->pathway_state
== PVR2_PATHWAY_ANALOG
) {
4701 if (!hdw
->state_encoder_ok
||
4702 !hdw
->state_encoder_run
) return 0;
4703 } else if ((hdw
->pathway_state
== PVR2_PATHWAY_DIGITAL
) &&
4704 (hdw
->hdw_desc
->flag_digital_requires_cx23416
)) {
4705 if (!hdw
->state_encoder_ok
) return 0;
4706 if (hdw
->state_encoder_run
) return 0;
4707 if (hdw
->hdw_desc
->digital_control_scheme
==
4708 PVR2_DIGITAL_SCHEME_ONAIR
) {
4709 /* OnAir digital receivers won't stream
4710 unless the analog encoder has run first.
4711 Why? I have no idea. But don't even
4712 try until we know the analog side is
4713 known to have run. */
4714 if (!hdw
->state_encoder_runok
) return 0;
4717 if (pvr2_hdw_cmd_usbstream(hdw
,!0) < 0) return 0;
4718 hdw
->state_usbstream_run
= !0;
4720 trace_stbit("state_usbstream_run",hdw
->state_usbstream_run
);
4725 /* Attempt to configure pipeline, if needed */
4726 static int state_eval_pipeline_config(struct pvr2_hdw
*hdw
)
4728 if (hdw
->state_pipeline_config
||
4729 hdw
->state_pipeline_pause
) return 0;
4730 pvr2_hdw_commit_execute(hdw
);
4735 /* Update pipeline idle and pipeline pause tracking states based on other
4736 inputs. This must be called whenever the other relevant inputs have
4738 static int state_update_pipeline_state(struct pvr2_hdw
*hdw
)
4742 /* Update pipeline state */
4743 st
= !(hdw
->state_encoder_run
||
4744 hdw
->state_decoder_run
||
4745 hdw
->state_usbstream_run
||
4746 (!hdw
->state_decoder_quiescent
));
4747 if (!st
!= !hdw
->state_pipeline_idle
) {
4748 hdw
->state_pipeline_idle
= st
;
4751 if (hdw
->state_pipeline_idle
&& hdw
->state_pipeline_pause
) {
4752 hdw
->state_pipeline_pause
= 0;
4759 typedef int (*state_eval_func
)(struct pvr2_hdw
*);
4761 /* Set of functions to be run to evaluate various states in the driver. */
4762 static const state_eval_func eval_funcs
[] = {
4763 state_eval_pathway_ok
,
4764 state_eval_pipeline_config
,
4765 state_eval_encoder_ok
,
4766 state_eval_encoder_config
,
4767 state_eval_decoder_run
,
4768 state_eval_encoder_run
,
4769 state_eval_usbstream_run
,
4773 /* Process various states and return true if we did anything interesting. */
4774 static int pvr2_hdw_state_update(struct pvr2_hdw
*hdw
)
4777 int state_updated
= 0;
4780 if (!hdw
->state_stale
) return 0;
4781 if ((hdw
->fw1_state
!= FW1_STATE_OK
) ||
4783 hdw
->state_stale
= 0;
4786 /* This loop is the heart of the entire driver. It keeps trying to
4787 evaluate various bits of driver state until nothing changes for
4788 one full iteration. Each "bit of state" tracks some global
4789 aspect of the driver, e.g. whether decoder should run, if
4790 pipeline is configured, usb streaming is on, etc. We separately
4791 evaluate each of those questions based on other driver state to
4792 arrive at the correct running configuration. */
4795 state_update_pipeline_state(hdw
);
4796 /* Iterate over each bit of state */
4797 for (i
= 0; (i
<ARRAY_SIZE(eval_funcs
)) && hdw
->flag_ok
; i
++) {
4798 if ((*eval_funcs
[i
])(hdw
)) {
4801 state_update_pipeline_state(hdw
);
4804 } while (check_flag
&& hdw
->flag_ok
);
4805 hdw
->state_stale
= 0;
4806 trace_stbit("state_stale",hdw
->state_stale
);
4807 return state_updated
;
4811 static unsigned int print_input_mask(unsigned int msk
,
4812 char *buf
,unsigned int acnt
)
4814 unsigned int idx
,ccnt
;
4815 unsigned int tcnt
= 0;
4816 for (idx
= 0; idx
< ARRAY_SIZE(control_values_input
); idx
++) {
4817 if (!((1 << idx
) & msk
)) continue;
4818 ccnt
= scnprintf(buf
+tcnt
,
4822 control_values_input
[idx
]);
4829 static const char *pvr2_pathway_state_name(int id
)
4832 case PVR2_PATHWAY_ANALOG
: return "analog";
4833 case PVR2_PATHWAY_DIGITAL
: return "digital";
4834 default: return "unknown";
4839 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw
*hdw
,int which
,
4840 char *buf
,unsigned int acnt
)
4846 "driver:%s%s%s%s%s <mode=%s>",
4847 (hdw
->flag_ok
? " <ok>" : " <fail>"),
4848 (hdw
->flag_init_ok
? " <init>" : " <uninitialized>"),
4849 (hdw
->flag_disconnected
? " <disconnected>" :
4851 (hdw
->flag_tripped
? " <tripped>" : ""),
4852 (hdw
->flag_decoder_missed
? " <no decoder>" : ""),
4853 pvr2_pathway_state_name(hdw
->pathway_state
));
4858 "pipeline:%s%s%s%s",
4859 (hdw
->state_pipeline_idle
? " <idle>" : ""),
4860 (hdw
->state_pipeline_config
?
4861 " <configok>" : " <stale>"),
4862 (hdw
->state_pipeline_req
? " <req>" : ""),
4863 (hdw
->state_pipeline_pause
? " <pause>" : ""));
4867 "worker:%s%s%s%s%s%s%s",
4868 (hdw
->state_decoder_run
?
4869 (hdw
->state_decoder_ready
?
4870 "<decode:run>" : " <decode:start>") :
4871 (hdw
->state_decoder_quiescent
?
4872 "" : " <decode:stop>")),
4873 (hdw
->state_decoder_quiescent
?
4874 " <decode:quiescent>" : ""),
4875 (hdw
->state_encoder_ok
?
4876 "" : " <encode:init>"),
4877 (hdw
->state_encoder_run
?
4878 (hdw
->state_encoder_runok
?
4880 " <encode:firstrun>") :
4881 (hdw
->state_encoder_runok
?
4883 " <encode:virgin>")),
4884 (hdw
->state_encoder_config
?
4885 " <encode:configok>" :
4886 (hdw
->state_encoder_waitok
?
4887 "" : " <encode:waitok>")),
4888 (hdw
->state_usbstream_run
?
4889 " <usb:run>" : " <usb:stop>"),
4890 (hdw
->state_pathway_ok
?
4891 " <pathway:ok>" : ""));
4896 pvr2_get_state_name(hdw
->master_state
));
4898 unsigned int tcnt
= 0;
4901 ccnt
= scnprintf(buf
,
4903 "Hardware supported inputs: ");
4905 tcnt
+= print_input_mask(hdw
->input_avail_mask
,
4908 if (hdw
->input_avail_mask
!= hdw
->input_allowed_mask
) {
4909 ccnt
= scnprintf(buf
+tcnt
,
4911 "; allowed inputs: ");
4913 tcnt
+= print_input_mask(hdw
->input_allowed_mask
,
4920 struct pvr2_stream_stats stats
;
4921 if (!hdw
->vid_stream
) break;
4922 pvr2_stream_get_stats(hdw
->vid_stream
,
4928 " URBs: queued=%u idle=%u ready=%u"
4929 " processed=%u failed=%u",
4930 stats
.bytes_processed
,
4931 stats
.buffers_in_queue
,
4932 stats
.buffers_in_idle
,
4933 stats
.buffers_in_ready
,
4934 stats
.buffers_processed
,
4935 stats
.buffers_failed
);
4938 unsigned int id
= hdw
->ir_scheme_active
;
4939 return scnprintf(buf
, acnt
, "ir scheme: id=%d %s", id
,
4940 (id
>= ARRAY_SIZE(ir_scheme_names
) ?
4941 "?" : ir_scheme_names
[id
]));
4949 /* Generate report containing info about attached sub-devices and attached
4950 i2c clients, including an indication of which attached i2c clients are
4951 actually sub-devices. */
4952 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw
*hdw
,
4953 char *buf
, unsigned int acnt
)
4955 struct v4l2_subdev
*sd
;
4956 unsigned int tcnt
= 0;
4958 struct i2c_client
*client
;
4962 ccnt
= scnprintf(buf
, acnt
, "Associated v4l2-subdev drivers and I2C clients:\n");
4964 v4l2_device_for_each_subdev(sd
, &hdw
->v4l2_dev
) {
4967 if (id
< ARRAY_SIZE(module_names
)) p
= module_names
[id
];
4969 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
, " %s:", p
);
4972 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
,
4973 " (unknown id=%u):", id
);
4976 client
= v4l2_get_subdevdata(sd
);
4978 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
,
4979 " %s @ %02x\n", client
->name
,
4983 ccnt
= scnprintf(buf
+ tcnt
, acnt
- tcnt
,
4984 " no i2c client\n");
4992 unsigned int pvr2_hdw_state_report(struct pvr2_hdw
*hdw
,
4993 char *buf
,unsigned int acnt
)
4995 unsigned int bcnt
,ccnt
,idx
;
4997 LOCK_TAKE(hdw
->big_lock
);
4998 for (idx
= 0; ; idx
++) {
4999 ccnt
= pvr2_hdw_report_unlocked(hdw
,idx
,buf
,acnt
);
5001 bcnt
+= ccnt
; acnt
-= ccnt
; buf
+= ccnt
;
5003 buf
[0] = '\n'; ccnt
= 1;
5004 bcnt
+= ccnt
; acnt
-= ccnt
; buf
+= ccnt
;
5006 ccnt
= pvr2_hdw_report_clients(hdw
, buf
, acnt
);
5007 bcnt
+= ccnt
; acnt
-= ccnt
; buf
+= ccnt
;
5008 LOCK_GIVE(hdw
->big_lock
);
5013 static void pvr2_hdw_state_log_state(struct pvr2_hdw
*hdw
)
5016 unsigned int idx
, ccnt
;
5017 unsigned int lcnt
, ucnt
;
5019 for (idx
= 0; ; idx
++) {
5020 ccnt
= pvr2_hdw_report_unlocked(hdw
,idx
,buf
,sizeof(buf
));
5022 printk(KERN_INFO
"%s %.*s\n",hdw
->name
,ccnt
,buf
);
5024 ccnt
= pvr2_hdw_report_clients(hdw
, buf
, sizeof(buf
));
5026 while (ucnt
< ccnt
) {
5028 while ((lcnt
+ ucnt
< ccnt
) && (buf
[lcnt
+ ucnt
] != '\n')) {
5031 printk(KERN_INFO
"%s %.*s\n", hdw
->name
, lcnt
, buf
+ ucnt
);
5037 /* Evaluate and update the driver's current state, taking various actions
5038 as appropriate for the update. */
5039 static int pvr2_hdw_state_eval(struct pvr2_hdw
*hdw
)
5042 int state_updated
= 0;
5043 int callback_flag
= 0;
5046 pvr2_trace(PVR2_TRACE_STBITS
,
5047 "Drive state check START");
5048 if (pvrusb2_debug
& PVR2_TRACE_STBITS
) {
5049 pvr2_hdw_state_log_state(hdw
);
5052 /* Process all state and get back over disposition */
5053 state_updated
= pvr2_hdw_state_update(hdw
);
5055 analog_mode
= (hdw
->pathway_state
!= PVR2_PATHWAY_DIGITAL
);
5057 /* Update master state based upon all other states. */
5058 if (!hdw
->flag_ok
) {
5059 st
= PVR2_STATE_DEAD
;
5060 } else if (hdw
->fw1_state
!= FW1_STATE_OK
) {
5061 st
= PVR2_STATE_COLD
;
5062 } else if ((analog_mode
||
5063 hdw
->hdw_desc
->flag_digital_requires_cx23416
) &&
5064 !hdw
->state_encoder_ok
) {
5065 st
= PVR2_STATE_WARM
;
5066 } else if (hdw
->flag_tripped
||
5067 (analog_mode
&& hdw
->flag_decoder_missed
)) {
5068 st
= PVR2_STATE_ERROR
;
5069 } else if (hdw
->state_usbstream_run
&&
5071 (hdw
->state_encoder_run
&& hdw
->state_decoder_run
))) {
5072 st
= PVR2_STATE_RUN
;
5074 st
= PVR2_STATE_READY
;
5076 if (hdw
->master_state
!= st
) {
5077 pvr2_trace(PVR2_TRACE_STATE
,
5078 "Device state change from %s to %s",
5079 pvr2_get_state_name(hdw
->master_state
),
5080 pvr2_get_state_name(st
));
5081 pvr2_led_ctrl(hdw
,st
== PVR2_STATE_RUN
);
5082 hdw
->master_state
= st
;
5086 if (state_updated
) {
5087 /* Trigger anyone waiting on any state changes here. */
5088 wake_up(&hdw
->state_wait_data
);
5091 if (pvrusb2_debug
& PVR2_TRACE_STBITS
) {
5092 pvr2_hdw_state_log_state(hdw
);
5094 pvr2_trace(PVR2_TRACE_STBITS
,
5095 "Drive state check DONE callback=%d",callback_flag
);
5097 return callback_flag
;
5101 /* Cause kernel thread to check / update driver state */
5102 static void pvr2_hdw_state_sched(struct pvr2_hdw
*hdw
)
5104 if (hdw
->state_stale
) return;
5105 hdw
->state_stale
= !0;
5106 trace_stbit("state_stale",hdw
->state_stale
);
5107 queue_work(hdw
->workqueue
,&hdw
->workpoll
);
5111 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw
*hdw
,u32
*dp
)
5113 return pvr2_read_register(hdw
,PVR2_GPIO_DIR
,dp
);
5117 int pvr2_hdw_gpio_get_out(struct pvr2_hdw
*hdw
,u32
*dp
)
5119 return pvr2_read_register(hdw
,PVR2_GPIO_OUT
,dp
);
5123 int pvr2_hdw_gpio_get_in(struct pvr2_hdw
*hdw
,u32
*dp
)
5125 return pvr2_read_register(hdw
,PVR2_GPIO_IN
,dp
);
5129 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw
*hdw
,u32 msk
,u32 val
)
5134 ret
= pvr2_read_register(hdw
,PVR2_GPIO_DIR
,&cval
);
5135 if (ret
) return ret
;
5136 nval
= (cval
& ~msk
) | (val
& msk
);
5137 pvr2_trace(PVR2_TRACE_GPIO
,
5138 "GPIO direction changing 0x%x:0x%x"
5139 " from 0x%x to 0x%x",
5143 pvr2_trace(PVR2_TRACE_GPIO
,
5144 "GPIO direction changing to 0x%x",nval
);
5146 return pvr2_write_register(hdw
,PVR2_GPIO_DIR
,nval
);
5150 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw
*hdw
,u32 msk
,u32 val
)
5155 ret
= pvr2_read_register(hdw
,PVR2_GPIO_OUT
,&cval
);
5156 if (ret
) return ret
;
5157 nval
= (cval
& ~msk
) | (val
& msk
);
5158 pvr2_trace(PVR2_TRACE_GPIO
,
5159 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
5163 pvr2_trace(PVR2_TRACE_GPIO
,
5164 "GPIO output changing to 0x%x",nval
);
5166 return pvr2_write_register(hdw
,PVR2_GPIO_OUT
,nval
);
5170 void pvr2_hdw_status_poll(struct pvr2_hdw
*hdw
)
5172 struct v4l2_tuner
*vtp
= &hdw
->tuner_signal_info
;
5173 memset(vtp
, 0, sizeof(*vtp
));
5174 hdw
->tuner_signal_stale
= 0;
5175 /* Note: There apparently is no replacement for VIDIOC_CROPCAP
5176 using v4l2-subdev - therefore we can't support that AT ALL right
5177 now. (Of course, no sub-drivers seem to implement it either.
5178 But now it's a a chicken and egg problem...) */
5179 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, tuner
, g_tuner
, vtp
);
5180 pvr2_trace(PVR2_TRACE_CHIPS
, "subdev status poll"
5181 " type=%u strength=%u audio=0x%x cap=0x%x"
5184 vtp
->signal
, vtp
->rxsubchans
, vtp
->capability
,
5185 vtp
->rangelow
, vtp
->rangehigh
);
5187 /* We have to do this to avoid getting into constant polling if
5188 there's nobody to answer a poll of cropcap info. */
5189 hdw
->cropcap_stale
= 0;
5193 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw
*hdw
)
5195 return hdw
->input_avail_mask
;
5199 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw
*hdw
)
5201 return hdw
->input_allowed_mask
;
5205 static int pvr2_hdw_set_input(struct pvr2_hdw
*hdw
,int v
)
5207 if (hdw
->input_val
!= v
) {
5209 hdw
->input_dirty
= !0;
5212 /* Handle side effects - if we switch to a mode that needs the RF
5213 tuner, then select the right frequency choice as well and mark
5215 if (hdw
->input_val
== PVR2_CVAL_INPUT_RADIO
) {
5216 hdw
->freqSelector
= 0;
5217 hdw
->freqDirty
= !0;
5218 } else if ((hdw
->input_val
== PVR2_CVAL_INPUT_TV
) ||
5219 (hdw
->input_val
== PVR2_CVAL_INPUT_DTV
)) {
5220 hdw
->freqSelector
= 1;
5221 hdw
->freqDirty
= !0;
5227 int pvr2_hdw_set_input_allowed(struct pvr2_hdw
*hdw
,
5228 unsigned int change_mask
,
5229 unsigned int change_val
)
5232 unsigned int nv
,m
,idx
;
5233 LOCK_TAKE(hdw
->big_lock
);
5235 nv
= hdw
->input_allowed_mask
& ~change_mask
;
5236 nv
|= (change_val
& change_mask
);
5237 nv
&= hdw
->input_avail_mask
;
5239 /* No legal modes left; return error instead. */
5243 hdw
->input_allowed_mask
= nv
;
5244 if ((1 << hdw
->input_val
) & hdw
->input_allowed_mask
) {
5245 /* Current mode is still in the allowed mask, so
5249 /* Select and switch to a mode that is still in the allowed
5251 if (!hdw
->input_allowed_mask
) {
5252 /* Nothing legal; give up */
5255 m
= hdw
->input_allowed_mask
;
5256 for (idx
= 0; idx
< (sizeof(m
) << 3); idx
++) {
5257 if (!((1 << idx
) & m
)) continue;
5258 pvr2_hdw_set_input(hdw
,idx
);
5262 LOCK_GIVE(hdw
->big_lock
);
5267 /* Find I2C address of eeprom */
5268 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw
*hdw
)
5271 LOCK_TAKE(hdw
->ctl_lock
); do {
5272 hdw
->cmd_buffer
[0] = FX2CMD_GET_EEPROM_ADDR
;
5273 result
= pvr2_send_request(hdw
,
5276 if (result
< 0) break;
5277 result
= hdw
->cmd_buffer
[0];
5278 } while(0); LOCK_GIVE(hdw
->ctl_lock
);
5283 int pvr2_hdw_register_access(struct pvr2_hdw
*hdw
,
5284 struct v4l2_dbg_match
*match
, u64 reg_id
,
5285 int setFl
, u64
*val_ptr
)
5287 #ifdef CONFIG_VIDEO_ADV_DEBUG
5288 struct v4l2_dbg_register req
;
5292 if (!capable(CAP_SYS_ADMIN
)) return -EPERM
;
5296 if (setFl
) req
.val
= *val_ptr
;
5297 /* It would be nice to know if a sub-device answered the request */
5298 v4l2_device_call_all(&hdw
->v4l2_dev
, 0, core
, g_register
, &req
);
5299 if (!setFl
) *val_ptr
= req
.val
;
5311 Stuff for Emacs to see, in order to encourage consistent editing style:
5312 *** Local Variables: ***
5314 *** fill-column: 75 ***
5315 *** tab-width: 8 ***
5316 *** c-basic-offset: 8 ***