1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * 4 * Copyright (C) 2005 Mike Isely <isely@pobox.com> 5 */ 6 7 #include <linux/errno.h> 8 #include <linux/string.h> 9 #include <linux/slab.h> 10 #include <linux/module.h> 11 #include <linux/firmware.h> 12 #include <linux/videodev2.h> 13 #include <media/v4l2-common.h> 14 #include <media/tuner.h> 15 #include "pvrusb2.h" 16 #include "pvrusb2-std.h" 17 #include "pvrusb2-util.h" 18 #include "pvrusb2-hdw.h" 19 #include "pvrusb2-i2c-core.h" 20 #include "pvrusb2-eeprom.h" 21 #include "pvrusb2-hdw-internal.h" 22 #include "pvrusb2-encoder.h" 23 #include "pvrusb2-debug.h" 24 #include "pvrusb2-fx2-cmd.h" 25 #include "pvrusb2-wm8775.h" 26 #include "pvrusb2-video-v4l.h" 27 #include "pvrusb2-cx2584x-v4l.h" 28 #include "pvrusb2-cs53l32a.h" 29 #include "pvrusb2-audio.h" 30 31 #define TV_MIN_FREQ 55250000L 32 #define TV_MAX_FREQ 850000000L 33 34 /* This defines a minimum interval that the decoder must remain quiet 35 before we are allowed to start it running. */ 36 #define TIME_MSEC_DECODER_WAIT 50 37 38 /* This defines a minimum interval that the decoder must be allowed to run 39 before we can safely begin using its streaming output. */ 40 #define TIME_MSEC_DECODER_STABILIZATION_WAIT 300 41 42 /* This defines a minimum interval that the encoder must remain quiet 43 before we are allowed to configure it. */ 44 #define TIME_MSEC_ENCODER_WAIT 50 45 46 /* This defines the minimum interval that the encoder must successfully run 47 before we consider that the encoder has run at least once since its 48 firmware has been loaded. This measurement is in important for cases 49 where we can't do something until we know that the encoder has been run 50 at least once. */ 51 #define TIME_MSEC_ENCODER_OK 250 52 53 static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL}; 54 static DEFINE_MUTEX(pvr2_unit_mtx); 55 56 static int ctlchg; 57 static int procreload; 58 static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 }; 59 static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 }; 60 static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 }; 61 static int init_pause_msec; 62 63 module_param(ctlchg, int, S_IRUGO|S_IWUSR); 64 MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value"); 65 module_param(init_pause_msec, int, S_IRUGO|S_IWUSR); 66 MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay"); 67 module_param(procreload, int, S_IRUGO|S_IWUSR); 68 MODULE_PARM_DESC(procreload, 69 "Attempt init failure recovery with firmware reload"); 70 module_param_array(tuner, int, NULL, 0444); 71 MODULE_PARM_DESC(tuner,"specify installed tuner type"); 72 module_param_array(video_std, int, NULL, 0444); 73 MODULE_PARM_DESC(video_std,"specify initial video standard"); 74 module_param_array(tolerance, int, NULL, 0444); 75 MODULE_PARM_DESC(tolerance,"specify stream error tolerance"); 76 77 /* US Broadcast channel 3 (61.25 MHz), to help with testing */ 78 static int default_tv_freq = 61250000L; 79 /* 104.3 MHz, a usable FM station for my area */ 80 static int default_radio_freq = 104300000L; 81 82 module_param_named(tv_freq, default_tv_freq, int, 0444); 83 MODULE_PARM_DESC(tv_freq, "specify initial television frequency"); 84 module_param_named(radio_freq, default_radio_freq, int, 0444); 85 MODULE_PARM_DESC(radio_freq, "specify initial radio frequency"); 86 87 #define PVR2_CTL_WRITE_ENDPOINT 0x01 88 #define PVR2_CTL_READ_ENDPOINT 0x81 89 90 #define PVR2_GPIO_IN 0x9008 91 #define PVR2_GPIO_OUT 0x900c 92 #define PVR2_GPIO_DIR 0x9020 93 94 #define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__) 95 96 #define PVR2_FIRMWARE_ENDPOINT 0x02 97 98 /* size of a firmware chunk */ 99 #define FIRMWARE_CHUNK_SIZE 0x2000 100 101 typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *, 102 struct v4l2_subdev *); 103 104 static const pvr2_subdev_update_func pvr2_module_update_functions[] = { 105 [PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update, 106 [PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update, 107 [PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update, 108 [PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update, 109 [PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update, 110 }; 111 112 static const char *module_names[] = { 113 [PVR2_CLIENT_ID_MSP3400] = "msp3400", 114 [PVR2_CLIENT_ID_CX25840] = "cx25840", 115 [PVR2_CLIENT_ID_SAA7115] = "saa7115", 116 [PVR2_CLIENT_ID_TUNER] = "tuner", 117 [PVR2_CLIENT_ID_DEMOD] = "tuner", 118 [PVR2_CLIENT_ID_CS53L32A] = "cs53l32a", 119 [PVR2_CLIENT_ID_WM8775] = "wm8775", 120 }; 121 122 123 static const unsigned char *module_i2c_addresses[] = { 124 [PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63", 125 [PVR2_CLIENT_ID_DEMOD] = "\x43", 126 [PVR2_CLIENT_ID_MSP3400] = "\x40", 127 [PVR2_CLIENT_ID_SAA7115] = "\x21", 128 [PVR2_CLIENT_ID_WM8775] = "\x1b", 129 [PVR2_CLIENT_ID_CX25840] = "\x44", 130 [PVR2_CLIENT_ID_CS53L32A] = "\x11", 131 }; 132 133 134 static const char *ir_scheme_names[] = { 135 [PVR2_IR_SCHEME_NONE] = "none", 136 [PVR2_IR_SCHEME_29XXX] = "29xxx", 137 [PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)", 138 [PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)", 139 [PVR2_IR_SCHEME_ZILOG] = "Zilog", 140 }; 141 142 143 /* Define the list of additional controls we'll dynamically construct based 144 on query of the cx2341x module. */ 145 struct pvr2_mpeg_ids { 146 const char *strid; 147 int id; 148 }; 149 static const struct pvr2_mpeg_ids mpeg_ids[] = { 150 { 151 .strid = "audio_layer", 152 .id = V4L2_CID_MPEG_AUDIO_ENCODING, 153 },{ 154 .strid = "audio_bitrate", 155 .id = V4L2_CID_MPEG_AUDIO_L2_BITRATE, 156 },{ 157 /* Already using audio_mode elsewhere :-( */ 158 .strid = "mpeg_audio_mode", 159 .id = V4L2_CID_MPEG_AUDIO_MODE, 160 },{ 161 .strid = "mpeg_audio_mode_extension", 162 .id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION, 163 },{ 164 .strid = "audio_emphasis", 165 .id = V4L2_CID_MPEG_AUDIO_EMPHASIS, 166 },{ 167 .strid = "audio_crc", 168 .id = V4L2_CID_MPEG_AUDIO_CRC, 169 },{ 170 .strid = "video_aspect", 171 .id = V4L2_CID_MPEG_VIDEO_ASPECT, 172 },{ 173 .strid = "video_b_frames", 174 .id = V4L2_CID_MPEG_VIDEO_B_FRAMES, 175 },{ 176 .strid = "video_gop_size", 177 .id = V4L2_CID_MPEG_VIDEO_GOP_SIZE, 178 },{ 179 .strid = "video_gop_closure", 180 .id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE, 181 },{ 182 .strid = "video_bitrate_mode", 183 .id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE, 184 },{ 185 .strid = "video_bitrate", 186 .id = V4L2_CID_MPEG_VIDEO_BITRATE, 187 },{ 188 .strid = "video_bitrate_peak", 189 .id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, 190 },{ 191 .strid = "video_temporal_decimation", 192 .id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION, 193 },{ 194 .strid = "stream_type", 195 .id = V4L2_CID_MPEG_STREAM_TYPE, 196 },{ 197 .strid = "video_spatial_filter_mode", 198 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE, 199 },{ 200 .strid = "video_spatial_filter", 201 .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, 202 },{ 203 .strid = "video_luma_spatial_filter_type", 204 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE, 205 },{ 206 .strid = "video_chroma_spatial_filter_type", 207 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE, 208 },{ 209 .strid = "video_temporal_filter_mode", 210 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE, 211 },{ 212 .strid = "video_temporal_filter", 213 .id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER, 214 },{ 215 .strid = "video_median_filter_type", 216 .id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE, 217 },{ 218 .strid = "video_luma_median_filter_top", 219 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP, 220 },{ 221 .strid = "video_luma_median_filter_bottom", 222 .id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM, 223 },{ 224 .strid = "video_chroma_median_filter_top", 225 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP, 226 },{ 227 .strid = "video_chroma_median_filter_bottom", 228 .id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM, 229 } 230 }; 231 #define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids) 232 233 234 static const char *control_values_srate[] = { 235 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100] = "44.1 kHz", 236 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000] = "48 kHz", 237 [V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000] = "32 kHz", 238 }; 239 240 241 242 static const char *control_values_input[] = { 243 [PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/ 244 [PVR2_CVAL_INPUT_DTV] = "dtv", 245 [PVR2_CVAL_INPUT_RADIO] = "radio", 246 [PVR2_CVAL_INPUT_SVIDEO] = "s-video", 247 [PVR2_CVAL_INPUT_COMPOSITE] = "composite", 248 }; 249 250 251 static const char *control_values_audiomode[] = { 252 [V4L2_TUNER_MODE_MONO] = "Mono", 253 [V4L2_TUNER_MODE_STEREO] = "Stereo", 254 [V4L2_TUNER_MODE_LANG1] = "Lang1", 255 [V4L2_TUNER_MODE_LANG2] = "Lang2", 256 [V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2", 257 }; 258 259 260 static const char *control_values_hsm[] = { 261 [PVR2_CVAL_HSM_FAIL] = "Fail", 262 [PVR2_CVAL_HSM_HIGH] = "High", 263 [PVR2_CVAL_HSM_FULL] = "Full", 264 }; 265 266 267 static const char *pvr2_state_names[] = { 268 [PVR2_STATE_NONE] = "none", 269 [PVR2_STATE_DEAD] = "dead", 270 [PVR2_STATE_COLD] = "cold", 271 [PVR2_STATE_WARM] = "warm", 272 [PVR2_STATE_ERROR] = "error", 273 [PVR2_STATE_READY] = "ready", 274 [PVR2_STATE_RUN] = "run", 275 }; 276 277 278 struct pvr2_fx2cmd_descdef { 279 unsigned char id; 280 unsigned char *desc; 281 }; 282 283 static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = { 284 {FX2CMD_MEM_WRITE_DWORD, "write encoder dword"}, 285 {FX2CMD_MEM_READ_DWORD, "read encoder dword"}, 286 {FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"}, 287 {FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"}, 288 {FX2CMD_REG_WRITE, "write encoder register"}, 289 {FX2CMD_REG_READ, "read encoder register"}, 290 {FX2CMD_MEMSEL, "encoder memsel"}, 291 {FX2CMD_I2C_WRITE, "i2c write"}, 292 {FX2CMD_I2C_READ, "i2c read"}, 293 {FX2CMD_GET_USB_SPEED, "get USB speed"}, 294 {FX2CMD_STREAMING_ON, "stream on"}, 295 {FX2CMD_STREAMING_OFF, "stream off"}, 296 {FX2CMD_FWPOST1, "fwpost1"}, 297 {FX2CMD_POWER_OFF, "power off"}, 298 {FX2CMD_POWER_ON, "power on"}, 299 {FX2CMD_DEEP_RESET, "deep reset"}, 300 {FX2CMD_GET_EEPROM_ADDR, "get rom addr"}, 301 {FX2CMD_GET_IR_CODE, "get IR code"}, 302 {FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"}, 303 {FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"}, 304 {FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"}, 305 {FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"}, 306 {FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"}, 307 {FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"}, 308 {FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"}, 309 }; 310 311 312 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v); 313 static void pvr2_hdw_state_sched(struct pvr2_hdw *); 314 static int pvr2_hdw_state_eval(struct pvr2_hdw *); 315 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long); 316 static void pvr2_hdw_worker_poll(struct work_struct *work); 317 static int pvr2_hdw_wait(struct pvr2_hdw *,int state); 318 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *); 319 static void pvr2_hdw_state_log_state(struct pvr2_hdw *); 320 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl); 321 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw); 322 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw); 323 static void pvr2_hdw_quiescent_timeout(struct timer_list *); 324 static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *); 325 static void pvr2_hdw_encoder_wait_timeout(struct timer_list *); 326 static void pvr2_hdw_encoder_run_timeout(struct timer_list *); 327 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32); 328 static int pvr2_send_request_ex(struct pvr2_hdw *hdw, 329 unsigned int timeout,int probe_fl, 330 void *write_data,unsigned int write_len, 331 void *read_data,unsigned int read_len); 332 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw); 333 static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw); 334 335 static void trace_stbit(const char *name,int val) 336 { 337 pvr2_trace(PVR2_TRACE_STBITS, 338 "State bit %s <-- %s", 339 name,(val ? "true" : "false")); 340 } 341 342 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp) 343 { 344 struct pvr2_hdw *hdw = cptr->hdw; 345 if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) { 346 *vp = hdw->freqTable[hdw->freqProgSlot-1]; 347 } else { 348 *vp = 0; 349 } 350 return 0; 351 } 352 353 static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v) 354 { 355 struct pvr2_hdw *hdw = cptr->hdw; 356 unsigned int slotId = hdw->freqProgSlot; 357 if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) { 358 hdw->freqTable[slotId-1] = v; 359 /* Handle side effects correctly - if we're tuned to this 360 slot, then forgot the slot id relation since the stored 361 frequency has been changed. */ 362 if (hdw->freqSelector) { 363 if (hdw->freqSlotRadio == slotId) { 364 hdw->freqSlotRadio = 0; 365 } 366 } else { 367 if (hdw->freqSlotTelevision == slotId) { 368 hdw->freqSlotTelevision = 0; 369 } 370 } 371 } 372 return 0; 373 } 374 375 static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp) 376 { 377 *vp = cptr->hdw->freqProgSlot; 378 return 0; 379 } 380 381 static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v) 382 { 383 struct pvr2_hdw *hdw = cptr->hdw; 384 if ((v >= 0) && (v <= FREQTABLE_SIZE)) { 385 hdw->freqProgSlot = v; 386 } 387 return 0; 388 } 389 390 static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp) 391 { 392 struct pvr2_hdw *hdw = cptr->hdw; 393 *vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision; 394 return 0; 395 } 396 397 static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId) 398 { 399 unsigned freq = 0; 400 struct pvr2_hdw *hdw = cptr->hdw; 401 if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0; 402 if (slotId > 0) { 403 freq = hdw->freqTable[slotId-1]; 404 if (!freq) return 0; 405 pvr2_hdw_set_cur_freq(hdw,freq); 406 } 407 if (hdw->freqSelector) { 408 hdw->freqSlotRadio = slotId; 409 } else { 410 hdw->freqSlotTelevision = slotId; 411 } 412 return 0; 413 } 414 415 static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp) 416 { 417 *vp = pvr2_hdw_get_cur_freq(cptr->hdw); 418 return 0; 419 } 420 421 static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr) 422 { 423 return cptr->hdw->freqDirty != 0; 424 } 425 426 static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr) 427 { 428 cptr->hdw->freqDirty = 0; 429 } 430 431 static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v) 432 { 433 pvr2_hdw_set_cur_freq(cptr->hdw,v); 434 return 0; 435 } 436 437 static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left) 438 { 439 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 440 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 441 if (stat != 0) { 442 return stat; 443 } 444 *left = cap->bounds.left; 445 return 0; 446 } 447 448 static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left) 449 { 450 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 451 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 452 if (stat != 0) { 453 return stat; 454 } 455 *left = cap->bounds.left; 456 if (cap->bounds.width > cptr->hdw->cropw_val) { 457 *left += cap->bounds.width - cptr->hdw->cropw_val; 458 } 459 return 0; 460 } 461 462 static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top) 463 { 464 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 465 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 466 if (stat != 0) { 467 return stat; 468 } 469 *top = cap->bounds.top; 470 return 0; 471 } 472 473 static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top) 474 { 475 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 476 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 477 if (stat != 0) { 478 return stat; 479 } 480 *top = cap->bounds.top; 481 if (cap->bounds.height > cptr->hdw->croph_val) { 482 *top += cap->bounds.height - cptr->hdw->croph_val; 483 } 484 return 0; 485 } 486 487 static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *width) 488 { 489 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 490 int stat, bleftend, cleft; 491 492 stat = pvr2_hdw_check_cropcap(cptr->hdw); 493 if (stat != 0) { 494 return stat; 495 } 496 bleftend = cap->bounds.left+cap->bounds.width; 497 cleft = cptr->hdw->cropl_val; 498 499 *width = cleft < bleftend ? bleftend-cleft : 0; 500 return 0; 501 } 502 503 static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *height) 504 { 505 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 506 int stat, btopend, ctop; 507 508 stat = pvr2_hdw_check_cropcap(cptr->hdw); 509 if (stat != 0) { 510 return stat; 511 } 512 btopend = cap->bounds.top+cap->bounds.height; 513 ctop = cptr->hdw->cropt_val; 514 515 *height = ctop < btopend ? btopend-ctop : 0; 516 return 0; 517 } 518 519 static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val) 520 { 521 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 522 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 523 if (stat != 0) { 524 return stat; 525 } 526 *val = cap->bounds.left; 527 return 0; 528 } 529 530 static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val) 531 { 532 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 533 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 534 if (stat != 0) { 535 return stat; 536 } 537 *val = cap->bounds.top; 538 return 0; 539 } 540 541 static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val) 542 { 543 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 544 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 545 if (stat != 0) { 546 return stat; 547 } 548 *val = cap->bounds.width; 549 return 0; 550 } 551 552 static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val) 553 { 554 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 555 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 556 if (stat != 0) { 557 return stat; 558 } 559 *val = cap->bounds.height; 560 return 0; 561 } 562 563 static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val) 564 { 565 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 566 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 567 if (stat != 0) { 568 return stat; 569 } 570 *val = cap->defrect.left; 571 return 0; 572 } 573 574 static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val) 575 { 576 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 577 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 578 if (stat != 0) { 579 return stat; 580 } 581 *val = cap->defrect.top; 582 return 0; 583 } 584 585 static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val) 586 { 587 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 588 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 589 if (stat != 0) { 590 return stat; 591 } 592 *val = cap->defrect.width; 593 return 0; 594 } 595 596 static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val) 597 { 598 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 599 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 600 if (stat != 0) { 601 return stat; 602 } 603 *val = cap->defrect.height; 604 return 0; 605 } 606 607 static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val) 608 { 609 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 610 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 611 if (stat != 0) { 612 return stat; 613 } 614 *val = cap->pixelaspect.numerator; 615 return 0; 616 } 617 618 static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val) 619 { 620 struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info; 621 int stat = pvr2_hdw_check_cropcap(cptr->hdw); 622 if (stat != 0) { 623 return stat; 624 } 625 *val = cap->pixelaspect.denominator; 626 return 0; 627 } 628 629 static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp) 630 { 631 /* Actual maximum depends on the video standard in effect. */ 632 if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) { 633 *vp = 480; 634 } else { 635 *vp = 576; 636 } 637 return 0; 638 } 639 640 static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp) 641 { 642 /* Actual minimum depends on device digitizer type. */ 643 if (cptr->hdw->hdw_desc->flag_has_cx25840) { 644 *vp = 75; 645 } else { 646 *vp = 17; 647 } 648 return 0; 649 } 650 651 static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp) 652 { 653 *vp = cptr->hdw->input_val; 654 return 0; 655 } 656 657 static int ctrl_check_input(struct pvr2_ctrl *cptr,int v) 658 { 659 if (v < 0 || v > PVR2_CVAL_INPUT_MAX) 660 return 0; 661 return ((1 << v) & cptr->hdw->input_allowed_mask) != 0; 662 } 663 664 static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v) 665 { 666 return pvr2_hdw_set_input(cptr->hdw,v); 667 } 668 669 static int ctrl_isdirty_input(struct pvr2_ctrl *cptr) 670 { 671 return cptr->hdw->input_dirty != 0; 672 } 673 674 static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr) 675 { 676 cptr->hdw->input_dirty = 0; 677 } 678 679 680 static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp) 681 { 682 unsigned long fv; 683 struct pvr2_hdw *hdw = cptr->hdw; 684 if (hdw->tuner_signal_stale) { 685 pvr2_hdw_status_poll(hdw); 686 } 687 fv = hdw->tuner_signal_info.rangehigh; 688 if (!fv) { 689 /* Safety fallback */ 690 *vp = TV_MAX_FREQ; 691 return 0; 692 } 693 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) { 694 fv = (fv * 125) / 2; 695 } else { 696 fv = fv * 62500; 697 } 698 *vp = fv; 699 return 0; 700 } 701 702 static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp) 703 { 704 unsigned long fv; 705 struct pvr2_hdw *hdw = cptr->hdw; 706 if (hdw->tuner_signal_stale) { 707 pvr2_hdw_status_poll(hdw); 708 } 709 fv = hdw->tuner_signal_info.rangelow; 710 if (!fv) { 711 /* Safety fallback */ 712 *vp = TV_MIN_FREQ; 713 return 0; 714 } 715 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) { 716 fv = (fv * 125) / 2; 717 } else { 718 fv = fv * 62500; 719 } 720 *vp = fv; 721 return 0; 722 } 723 724 static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr) 725 { 726 return cptr->hdw->enc_stale != 0; 727 } 728 729 static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr) 730 { 731 cptr->hdw->enc_stale = 0; 732 cptr->hdw->enc_unsafe_stale = 0; 733 } 734 735 static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp) 736 { 737 int ret; 738 struct v4l2_ext_controls cs; 739 struct v4l2_ext_control c1; 740 memset(&cs,0,sizeof(cs)); 741 memset(&c1,0,sizeof(c1)); 742 cs.controls = &c1; 743 cs.count = 1; 744 c1.id = cptr->info->v4l_id; 745 ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs, 746 VIDIOC_G_EXT_CTRLS); 747 if (ret) return ret; 748 *vp = c1.value; 749 return 0; 750 } 751 752 static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v) 753 { 754 int ret; 755 struct pvr2_hdw *hdw = cptr->hdw; 756 struct v4l2_ext_controls cs; 757 struct v4l2_ext_control c1; 758 memset(&cs,0,sizeof(cs)); 759 memset(&c1,0,sizeof(c1)); 760 cs.controls = &c1; 761 cs.count = 1; 762 c1.id = cptr->info->v4l_id; 763 c1.value = v; 764 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state, 765 hdw->state_encoder_run, &cs, 766 VIDIOC_S_EXT_CTRLS); 767 if (ret == -EBUSY) { 768 /* Oops. cx2341x is telling us it's not safe to change 769 this control while we're capturing. Make a note of this 770 fact so that the pipeline will be stopped the next time 771 controls are committed. Then go on ahead and store this 772 change anyway. */ 773 ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state, 774 0, &cs, 775 VIDIOC_S_EXT_CTRLS); 776 if (!ret) hdw->enc_unsafe_stale = !0; 777 } 778 if (ret) return ret; 779 hdw->enc_stale = !0; 780 return 0; 781 } 782 783 static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr) 784 { 785 struct v4l2_queryctrl qctrl; 786 struct pvr2_ctl_info *info; 787 qctrl.id = cptr->info->v4l_id; 788 cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl); 789 /* Strip out the const so we can adjust a function pointer. It's 790 OK to do this here because we know this is a dynamically created 791 control, so the underlying storage for the info pointer is (a) 792 private to us, and (b) not in read-only storage. Either we do 793 this or we significantly complicate the underlying control 794 implementation. */ 795 info = (struct pvr2_ctl_info *)(cptr->info); 796 if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) { 797 if (info->set_value) { 798 info->set_value = NULL; 799 } 800 } else { 801 if (!(info->set_value)) { 802 info->set_value = ctrl_cx2341x_set; 803 } 804 } 805 return qctrl.flags; 806 } 807 808 static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp) 809 { 810 *vp = cptr->hdw->state_pipeline_req; 811 return 0; 812 } 813 814 static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp) 815 { 816 *vp = cptr->hdw->master_state; 817 return 0; 818 } 819 820 static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp) 821 { 822 int result = pvr2_hdw_is_hsm(cptr->hdw); 823 *vp = PVR2_CVAL_HSM_FULL; 824 if (result < 0) *vp = PVR2_CVAL_HSM_FAIL; 825 if (result) *vp = PVR2_CVAL_HSM_HIGH; 826 return 0; 827 } 828 829 static int ctrl_stddetect_get(struct pvr2_ctrl *cptr, int *vp) 830 { 831 *vp = pvr2_hdw_get_detected_std(cptr->hdw); 832 return 0; 833 } 834 835 static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp) 836 { 837 *vp = cptr->hdw->std_mask_avail; 838 return 0; 839 } 840 841 static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v) 842 { 843 struct pvr2_hdw *hdw = cptr->hdw; 844 v4l2_std_id ns; 845 ns = hdw->std_mask_avail; 846 ns = (ns & ~m) | (v & m); 847 if (ns == hdw->std_mask_avail) return 0; 848 hdw->std_mask_avail = ns; 849 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail; 850 return 0; 851 } 852 853 static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val, 854 char *bufPtr,unsigned int bufSize, 855 unsigned int *len) 856 { 857 *len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val); 858 return 0; 859 } 860 861 static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr, 862 const char *bufPtr,unsigned int bufSize, 863 int *mskp,int *valp) 864 { 865 int ret; 866 v4l2_std_id id; 867 ret = pvr2_std_str_to_id(&id,bufPtr,bufSize); 868 if (ret < 0) return ret; 869 if (mskp) *mskp = id; 870 if (valp) *valp = id; 871 return 0; 872 } 873 874 static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp) 875 { 876 *vp = cptr->hdw->std_mask_cur; 877 return 0; 878 } 879 880 static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v) 881 { 882 struct pvr2_hdw *hdw = cptr->hdw; 883 v4l2_std_id ns; 884 ns = hdw->std_mask_cur; 885 ns = (ns & ~m) | (v & m); 886 if (ns == hdw->std_mask_cur) return 0; 887 hdw->std_mask_cur = ns; 888 hdw->std_dirty = !0; 889 return 0; 890 } 891 892 static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr) 893 { 894 return cptr->hdw->std_dirty != 0; 895 } 896 897 static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr) 898 { 899 cptr->hdw->std_dirty = 0; 900 } 901 902 static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp) 903 { 904 struct pvr2_hdw *hdw = cptr->hdw; 905 pvr2_hdw_status_poll(hdw); 906 *vp = hdw->tuner_signal_info.signal; 907 return 0; 908 } 909 910 static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp) 911 { 912 int val = 0; 913 unsigned int subchan; 914 struct pvr2_hdw *hdw = cptr->hdw; 915 pvr2_hdw_status_poll(hdw); 916 subchan = hdw->tuner_signal_info.rxsubchans; 917 if (subchan & V4L2_TUNER_SUB_MONO) { 918 val |= (1 << V4L2_TUNER_MODE_MONO); 919 } 920 if (subchan & V4L2_TUNER_SUB_STEREO) { 921 val |= (1 << V4L2_TUNER_MODE_STEREO); 922 } 923 if (subchan & V4L2_TUNER_SUB_LANG1) { 924 val |= (1 << V4L2_TUNER_MODE_LANG1); 925 } 926 if (subchan & V4L2_TUNER_SUB_LANG2) { 927 val |= (1 << V4L2_TUNER_MODE_LANG2); 928 } 929 *vp = val; 930 return 0; 931 } 932 933 934 #define DEFINT(vmin,vmax) \ 935 .type = pvr2_ctl_int, \ 936 .def.type_int.min_value = vmin, \ 937 .def.type_int.max_value = vmax 938 939 #define DEFENUM(tab) \ 940 .type = pvr2_ctl_enum, \ 941 .def.type_enum.count = ARRAY_SIZE(tab), \ 942 .def.type_enum.value_names = tab 943 944 #define DEFBOOL \ 945 .type = pvr2_ctl_bool 946 947 #define DEFMASK(msk,tab) \ 948 .type = pvr2_ctl_bitmask, \ 949 .def.type_bitmask.valid_bits = msk, \ 950 .def.type_bitmask.bit_names = tab 951 952 #define DEFREF(vname) \ 953 .set_value = ctrl_set_##vname, \ 954 .get_value = ctrl_get_##vname, \ 955 .is_dirty = ctrl_isdirty_##vname, \ 956 .clear_dirty = ctrl_cleardirty_##vname 957 958 959 #define VCREATE_FUNCS(vname) \ 960 static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \ 961 {*vp = cptr->hdw->vname##_val; return 0;} \ 962 static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \ 963 {cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \ 964 static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \ 965 {return cptr->hdw->vname##_dirty != 0;} \ 966 static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \ 967 {cptr->hdw->vname##_dirty = 0;} 968 969 VCREATE_FUNCS(brightness) 970 VCREATE_FUNCS(contrast) 971 VCREATE_FUNCS(saturation) 972 VCREATE_FUNCS(hue) 973 VCREATE_FUNCS(volume) 974 VCREATE_FUNCS(balance) 975 VCREATE_FUNCS(bass) 976 VCREATE_FUNCS(treble) 977 VCREATE_FUNCS(mute) 978 VCREATE_FUNCS(cropl) 979 VCREATE_FUNCS(cropt) 980 VCREATE_FUNCS(cropw) 981 VCREATE_FUNCS(croph) 982 VCREATE_FUNCS(audiomode) 983 VCREATE_FUNCS(res_hor) 984 VCREATE_FUNCS(res_ver) 985 VCREATE_FUNCS(srate) 986 987 /* Table definition of all controls which can be manipulated */ 988 static const struct pvr2_ctl_info control_defs[] = { 989 { 990 .v4l_id = V4L2_CID_BRIGHTNESS, 991 .desc = "Brightness", 992 .name = "brightness", 993 .default_value = 128, 994 DEFREF(brightness), 995 DEFINT(0,255), 996 },{ 997 .v4l_id = V4L2_CID_CONTRAST, 998 .desc = "Contrast", 999 .name = "contrast", 1000 .default_value = 68, 1001 DEFREF(contrast), 1002 DEFINT(0,127), 1003 },{ 1004 .v4l_id = V4L2_CID_SATURATION, 1005 .desc = "Saturation", 1006 .name = "saturation", 1007 .default_value = 64, 1008 DEFREF(saturation), 1009 DEFINT(0,127), 1010 },{ 1011 .v4l_id = V4L2_CID_HUE, 1012 .desc = "Hue", 1013 .name = "hue", 1014 .default_value = 0, 1015 DEFREF(hue), 1016 DEFINT(-128,127), 1017 },{ 1018 .v4l_id = V4L2_CID_AUDIO_VOLUME, 1019 .desc = "Volume", 1020 .name = "volume", 1021 .default_value = 62000, 1022 DEFREF(volume), 1023 DEFINT(0,65535), 1024 },{ 1025 .v4l_id = V4L2_CID_AUDIO_BALANCE, 1026 .desc = "Balance", 1027 .name = "balance", 1028 .default_value = 0, 1029 DEFREF(balance), 1030 DEFINT(-32768,32767), 1031 },{ 1032 .v4l_id = V4L2_CID_AUDIO_BASS, 1033 .desc = "Bass", 1034 .name = "bass", 1035 .default_value = 0, 1036 DEFREF(bass), 1037 DEFINT(-32768,32767), 1038 },{ 1039 .v4l_id = V4L2_CID_AUDIO_TREBLE, 1040 .desc = "Treble", 1041 .name = "treble", 1042 .default_value = 0, 1043 DEFREF(treble), 1044 DEFINT(-32768,32767), 1045 },{ 1046 .v4l_id = V4L2_CID_AUDIO_MUTE, 1047 .desc = "Mute", 1048 .name = "mute", 1049 .default_value = 0, 1050 DEFREF(mute), 1051 DEFBOOL, 1052 }, { 1053 .desc = "Capture crop left margin", 1054 .name = "crop_left", 1055 .internal_id = PVR2_CID_CROPL, 1056 .default_value = 0, 1057 DEFREF(cropl), 1058 DEFINT(-129, 340), 1059 .get_min_value = ctrl_cropl_min_get, 1060 .get_max_value = ctrl_cropl_max_get, 1061 .get_def_value = ctrl_get_cropcapdl, 1062 }, { 1063 .desc = "Capture crop top margin", 1064 .name = "crop_top", 1065 .internal_id = PVR2_CID_CROPT, 1066 .default_value = 0, 1067 DEFREF(cropt), 1068 DEFINT(-35, 544), 1069 .get_min_value = ctrl_cropt_min_get, 1070 .get_max_value = ctrl_cropt_max_get, 1071 .get_def_value = ctrl_get_cropcapdt, 1072 }, { 1073 .desc = "Capture crop width", 1074 .name = "crop_width", 1075 .internal_id = PVR2_CID_CROPW, 1076 .default_value = 720, 1077 DEFREF(cropw), 1078 DEFINT(0, 864), 1079 .get_max_value = ctrl_cropw_max_get, 1080 .get_def_value = ctrl_get_cropcapdw, 1081 }, { 1082 .desc = "Capture crop height", 1083 .name = "crop_height", 1084 .internal_id = PVR2_CID_CROPH, 1085 .default_value = 480, 1086 DEFREF(croph), 1087 DEFINT(0, 576), 1088 .get_max_value = ctrl_croph_max_get, 1089 .get_def_value = ctrl_get_cropcapdh, 1090 }, { 1091 .desc = "Capture capability pixel aspect numerator", 1092 .name = "cropcap_pixel_numerator", 1093 .internal_id = PVR2_CID_CROPCAPPAN, 1094 .get_value = ctrl_get_cropcappan, 1095 }, { 1096 .desc = "Capture capability pixel aspect denominator", 1097 .name = "cropcap_pixel_denominator", 1098 .internal_id = PVR2_CID_CROPCAPPAD, 1099 .get_value = ctrl_get_cropcappad, 1100 }, { 1101 .desc = "Capture capability bounds top", 1102 .name = "cropcap_bounds_top", 1103 .internal_id = PVR2_CID_CROPCAPBT, 1104 .get_value = ctrl_get_cropcapbt, 1105 }, { 1106 .desc = "Capture capability bounds left", 1107 .name = "cropcap_bounds_left", 1108 .internal_id = PVR2_CID_CROPCAPBL, 1109 .get_value = ctrl_get_cropcapbl, 1110 }, { 1111 .desc = "Capture capability bounds width", 1112 .name = "cropcap_bounds_width", 1113 .internal_id = PVR2_CID_CROPCAPBW, 1114 .get_value = ctrl_get_cropcapbw, 1115 }, { 1116 .desc = "Capture capability bounds height", 1117 .name = "cropcap_bounds_height", 1118 .internal_id = PVR2_CID_CROPCAPBH, 1119 .get_value = ctrl_get_cropcapbh, 1120 },{ 1121 .desc = "Video Source", 1122 .name = "input", 1123 .internal_id = PVR2_CID_INPUT, 1124 .default_value = PVR2_CVAL_INPUT_TV, 1125 .check_value = ctrl_check_input, 1126 DEFREF(input), 1127 DEFENUM(control_values_input), 1128 },{ 1129 .desc = "Audio Mode", 1130 .name = "audio_mode", 1131 .internal_id = PVR2_CID_AUDIOMODE, 1132 .default_value = V4L2_TUNER_MODE_STEREO, 1133 DEFREF(audiomode), 1134 DEFENUM(control_values_audiomode), 1135 },{ 1136 .desc = "Horizontal capture resolution", 1137 .name = "resolution_hor", 1138 .internal_id = PVR2_CID_HRES, 1139 .default_value = 720, 1140 DEFREF(res_hor), 1141 DEFINT(19,720), 1142 },{ 1143 .desc = "Vertical capture resolution", 1144 .name = "resolution_ver", 1145 .internal_id = PVR2_CID_VRES, 1146 .default_value = 480, 1147 DEFREF(res_ver), 1148 DEFINT(17,576), 1149 /* Hook in check for video standard and adjust maximum 1150 depending on the standard. */ 1151 .get_max_value = ctrl_vres_max_get, 1152 .get_min_value = ctrl_vres_min_get, 1153 },{ 1154 .v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ, 1155 .default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000, 1156 .desc = "Audio Sampling Frequency", 1157 .name = "srate", 1158 DEFREF(srate), 1159 DEFENUM(control_values_srate), 1160 },{ 1161 .desc = "Tuner Frequency (Hz)", 1162 .name = "frequency", 1163 .internal_id = PVR2_CID_FREQUENCY, 1164 .default_value = 0, 1165 .set_value = ctrl_freq_set, 1166 .get_value = ctrl_freq_get, 1167 .is_dirty = ctrl_freq_is_dirty, 1168 .clear_dirty = ctrl_freq_clear_dirty, 1169 DEFINT(0,0), 1170 /* Hook in check for input value (tv/radio) and adjust 1171 max/min values accordingly */ 1172 .get_max_value = ctrl_freq_max_get, 1173 .get_min_value = ctrl_freq_min_get, 1174 },{ 1175 .desc = "Channel", 1176 .name = "channel", 1177 .set_value = ctrl_channel_set, 1178 .get_value = ctrl_channel_get, 1179 DEFINT(0,FREQTABLE_SIZE), 1180 },{ 1181 .desc = "Channel Program Frequency", 1182 .name = "freq_table_value", 1183 .set_value = ctrl_channelfreq_set, 1184 .get_value = ctrl_channelfreq_get, 1185 DEFINT(0,0), 1186 /* Hook in check for input value (tv/radio) and adjust 1187 max/min values accordingly */ 1188 .get_max_value = ctrl_freq_max_get, 1189 .get_min_value = ctrl_freq_min_get, 1190 },{ 1191 .desc = "Channel Program ID", 1192 .name = "freq_table_channel", 1193 .set_value = ctrl_channelprog_set, 1194 .get_value = ctrl_channelprog_get, 1195 DEFINT(0,FREQTABLE_SIZE), 1196 },{ 1197 .desc = "Streaming Enabled", 1198 .name = "streaming_enabled", 1199 .get_value = ctrl_streamingenabled_get, 1200 DEFBOOL, 1201 },{ 1202 .desc = "USB Speed", 1203 .name = "usb_speed", 1204 .get_value = ctrl_hsm_get, 1205 DEFENUM(control_values_hsm), 1206 },{ 1207 .desc = "Master State", 1208 .name = "master_state", 1209 .get_value = ctrl_masterstate_get, 1210 DEFENUM(pvr2_state_names), 1211 },{ 1212 .desc = "Signal Present", 1213 .name = "signal_present", 1214 .get_value = ctrl_signal_get, 1215 DEFINT(0,65535), 1216 },{ 1217 .desc = "Audio Modes Present", 1218 .name = "audio_modes_present", 1219 .get_value = ctrl_audio_modes_present_get, 1220 /* For this type we "borrow" the V4L2_TUNER_MODE enum from 1221 v4l. Nothing outside of this module cares about this, 1222 but I reuse it in order to also reuse the 1223 control_values_audiomode string table. */ 1224 DEFMASK(((1 << V4L2_TUNER_MODE_MONO)| 1225 (1 << V4L2_TUNER_MODE_STEREO)| 1226 (1 << V4L2_TUNER_MODE_LANG1)| 1227 (1 << V4L2_TUNER_MODE_LANG2)), 1228 control_values_audiomode), 1229 },{ 1230 .desc = "Video Standards Available Mask", 1231 .name = "video_standard_mask_available", 1232 .internal_id = PVR2_CID_STDAVAIL, 1233 .skip_init = !0, 1234 .get_value = ctrl_stdavail_get, 1235 .set_value = ctrl_stdavail_set, 1236 .val_to_sym = ctrl_std_val_to_sym, 1237 .sym_to_val = ctrl_std_sym_to_val, 1238 .type = pvr2_ctl_bitmask, 1239 },{ 1240 .desc = "Video Standards In Use Mask", 1241 .name = "video_standard_mask_active", 1242 .internal_id = PVR2_CID_STDCUR, 1243 .skip_init = !0, 1244 .get_value = ctrl_stdcur_get, 1245 .set_value = ctrl_stdcur_set, 1246 .is_dirty = ctrl_stdcur_is_dirty, 1247 .clear_dirty = ctrl_stdcur_clear_dirty, 1248 .val_to_sym = ctrl_std_val_to_sym, 1249 .sym_to_val = ctrl_std_sym_to_val, 1250 .type = pvr2_ctl_bitmask, 1251 },{ 1252 .desc = "Video Standards Detected Mask", 1253 .name = "video_standard_mask_detected", 1254 .internal_id = PVR2_CID_STDDETECT, 1255 .skip_init = !0, 1256 .get_value = ctrl_stddetect_get, 1257 .val_to_sym = ctrl_std_val_to_sym, 1258 .sym_to_val = ctrl_std_sym_to_val, 1259 .type = pvr2_ctl_bitmask, 1260 } 1261 }; 1262 1263 #define CTRLDEF_COUNT ARRAY_SIZE(control_defs) 1264 1265 1266 const char *pvr2_config_get_name(enum pvr2_config cfg) 1267 { 1268 switch (cfg) { 1269 case pvr2_config_empty: return "empty"; 1270 case pvr2_config_mpeg: return "mpeg"; 1271 case pvr2_config_vbi: return "vbi"; 1272 case pvr2_config_pcm: return "pcm"; 1273 case pvr2_config_rawvideo: return "raw video"; 1274 } 1275 return "<unknown>"; 1276 } 1277 1278 1279 struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw) 1280 { 1281 return hdw->usb_dev; 1282 } 1283 1284 1285 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw) 1286 { 1287 return hdw->serial_number; 1288 } 1289 1290 1291 const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw) 1292 { 1293 return hdw->bus_info; 1294 } 1295 1296 1297 const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw) 1298 { 1299 return hdw->identifier; 1300 } 1301 1302 1303 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw) 1304 { 1305 return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio; 1306 } 1307 1308 /* Set the currently tuned frequency and account for all possible 1309 driver-core side effects of this action. */ 1310 static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val) 1311 { 1312 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { 1313 if (hdw->freqSelector) { 1314 /* Swing over to radio frequency selection */ 1315 hdw->freqSelector = 0; 1316 hdw->freqDirty = !0; 1317 } 1318 if (hdw->freqValRadio != val) { 1319 hdw->freqValRadio = val; 1320 hdw->freqSlotRadio = 0; 1321 hdw->freqDirty = !0; 1322 } 1323 } else { 1324 if (!(hdw->freqSelector)) { 1325 /* Swing over to television frequency selection */ 1326 hdw->freqSelector = 1; 1327 hdw->freqDirty = !0; 1328 } 1329 if (hdw->freqValTelevision != val) { 1330 hdw->freqValTelevision = val; 1331 hdw->freqSlotTelevision = 0; 1332 hdw->freqDirty = !0; 1333 } 1334 } 1335 } 1336 1337 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw) 1338 { 1339 return hdw->unit_number; 1340 } 1341 1342 1343 /* Attempt to locate one of the given set of files. Messages are logged 1344 appropriate to what has been found. The return value will be 0 or 1345 greater on success (it will be the index of the file name found) and 1346 fw_entry will be filled in. Otherwise a negative error is returned on 1347 failure. If the return value is -ENOENT then no viable firmware file 1348 could be located. */ 1349 static int pvr2_locate_firmware(struct pvr2_hdw *hdw, 1350 const struct firmware **fw_entry, 1351 const char *fwtypename, 1352 unsigned int fwcount, 1353 const char *fwnames[]) 1354 { 1355 unsigned int idx; 1356 int ret = -EINVAL; 1357 for (idx = 0; idx < fwcount; idx++) { 1358 ret = request_firmware(fw_entry, 1359 fwnames[idx], 1360 &hdw->usb_dev->dev); 1361 if (!ret) { 1362 trace_firmware("Located %s firmware: %s; uploading...", 1363 fwtypename, 1364 fwnames[idx]); 1365 return idx; 1366 } 1367 if (ret == -ENOENT) continue; 1368 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1369 "request_firmware fatal error with code=%d",ret); 1370 return ret; 1371 } 1372 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1373 "***WARNING*** Device %s firmware seems to be missing.", 1374 fwtypename); 1375 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1376 "Did you install the pvrusb2 firmware files in their proper location?"); 1377 if (fwcount == 1) { 1378 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1379 "request_firmware unable to locate %s file %s", 1380 fwtypename,fwnames[0]); 1381 } else { 1382 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1383 "request_firmware unable to locate one of the following %s files:", 1384 fwtypename); 1385 for (idx = 0; idx < fwcount; idx++) { 1386 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1387 "request_firmware: Failed to find %s", 1388 fwnames[idx]); 1389 } 1390 } 1391 return ret; 1392 } 1393 1394 1395 /* 1396 * pvr2_upload_firmware1(). 1397 * 1398 * Send the 8051 firmware to the device. After the upload, arrange for 1399 * device to re-enumerate. 1400 * 1401 * NOTE : the pointer to the firmware data given by request_firmware() 1402 * is not suitable for an usb transaction. 1403 * 1404 */ 1405 static int pvr2_upload_firmware1(struct pvr2_hdw *hdw) 1406 { 1407 const struct firmware *fw_entry = NULL; 1408 void *fw_ptr; 1409 unsigned int pipe; 1410 unsigned int fwsize; 1411 int ret; 1412 u16 address; 1413 1414 if (!hdw->hdw_desc->fx2_firmware.cnt) { 1415 hdw->fw1_state = FW1_STATE_OK; 1416 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1417 "Connected device type defines no firmware to upload; ignoring firmware"); 1418 return -ENOTTY; 1419 } 1420 1421 hdw->fw1_state = FW1_STATE_FAILED; // default result 1422 1423 trace_firmware("pvr2_upload_firmware1"); 1424 1425 ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller", 1426 hdw->hdw_desc->fx2_firmware.cnt, 1427 hdw->hdw_desc->fx2_firmware.lst); 1428 if (ret < 0) { 1429 if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING; 1430 return ret; 1431 } 1432 1433 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f)); 1434 1435 pipe = usb_sndctrlpipe(hdw->usb_dev, 0); 1436 fwsize = fw_entry->size; 1437 1438 if ((fwsize != 0x2000) && 1439 (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) { 1440 if (hdw->hdw_desc->flag_fx2_16kb) { 1441 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1442 "Wrong fx2 firmware size (expected 8192 or 16384, got %u)", 1443 fwsize); 1444 } else { 1445 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1446 "Wrong fx2 firmware size (expected 8192, got %u)", 1447 fwsize); 1448 } 1449 release_firmware(fw_entry); 1450 return -ENOMEM; 1451 } 1452 1453 fw_ptr = kmalloc(0x800, GFP_KERNEL); 1454 if (fw_ptr == NULL){ 1455 release_firmware(fw_entry); 1456 return -ENOMEM; 1457 } 1458 1459 /* We have to hold the CPU during firmware upload. */ 1460 pvr2_hdw_cpureset_assert(hdw,1); 1461 1462 /* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes 1463 chunk. */ 1464 1465 ret = 0; 1466 for (address = 0; address < fwsize; address += 0x800) { 1467 memcpy(fw_ptr, fw_entry->data + address, 0x800); 1468 ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address, 1469 0, fw_ptr, 0x800, HZ); 1470 } 1471 1472 trace_firmware("Upload done, releasing device's CPU"); 1473 1474 /* Now release the CPU. It will disconnect and reconnect later. */ 1475 pvr2_hdw_cpureset_assert(hdw,0); 1476 1477 kfree(fw_ptr); 1478 release_firmware(fw_entry); 1479 1480 trace_firmware("Upload done (%d bytes sent)",ret); 1481 1482 /* We should have written fwsize bytes */ 1483 if (ret == fwsize) { 1484 hdw->fw1_state = FW1_STATE_RELOAD; 1485 return 0; 1486 } 1487 1488 return -EIO; 1489 } 1490 1491 1492 /* 1493 * pvr2_upload_firmware2() 1494 * 1495 * This uploads encoder firmware on endpoint 2. 1496 * 1497 */ 1498 1499 int pvr2_upload_firmware2(struct pvr2_hdw *hdw) 1500 { 1501 const struct firmware *fw_entry = NULL; 1502 void *fw_ptr; 1503 unsigned int pipe, fw_len, fw_done, bcnt, icnt; 1504 int actual_length; 1505 int ret = 0; 1506 int fwidx; 1507 static const char *fw_files[] = { 1508 CX2341X_FIRM_ENC_FILENAME, 1509 }; 1510 1511 if (hdw->hdw_desc->flag_skip_cx23416_firmware) { 1512 return 0; 1513 } 1514 1515 trace_firmware("pvr2_upload_firmware2"); 1516 1517 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder", 1518 ARRAY_SIZE(fw_files), fw_files); 1519 if (ret < 0) return ret; 1520 fwidx = ret; 1521 ret = 0; 1522 /* Since we're about to completely reinitialize the encoder, 1523 invalidate our cached copy of its configuration state. Next 1524 time we configure the encoder, then we'll fully configure it. */ 1525 hdw->enc_cur_valid = 0; 1526 1527 /* Encoder is about to be reset so note that as far as we're 1528 concerned now, the encoder has never been run. */ 1529 del_timer_sync(&hdw->encoder_run_timer); 1530 if (hdw->state_encoder_runok) { 1531 hdw->state_encoder_runok = 0; 1532 trace_stbit("state_encoder_runok",hdw->state_encoder_runok); 1533 } 1534 1535 /* First prepare firmware loading */ 1536 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/ 1537 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/ 1538 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/ 1539 ret |= pvr2_hdw_cmd_deep_reset(hdw); 1540 ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/ 1541 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/ 1542 ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/ 1543 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/ 1544 ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/ 1545 ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/ 1546 ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/ 1547 ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/ 1548 ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/ 1549 ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/ 1550 ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/ 1551 ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/ 1552 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1); 1553 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16)); 1554 1555 if (ret) { 1556 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1557 "firmware2 upload prep failed, ret=%d",ret); 1558 release_firmware(fw_entry); 1559 goto done; 1560 } 1561 1562 /* Now send firmware */ 1563 1564 fw_len = fw_entry->size; 1565 1566 if (fw_len % sizeof(u32)) { 1567 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1568 "size of %s firmware must be a multiple of %zu bytes", 1569 fw_files[fwidx],sizeof(u32)); 1570 release_firmware(fw_entry); 1571 ret = -EINVAL; 1572 goto done; 1573 } 1574 1575 fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL); 1576 if (fw_ptr == NULL){ 1577 release_firmware(fw_entry); 1578 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1579 "failed to allocate memory for firmware2 upload"); 1580 ret = -ENOMEM; 1581 goto done; 1582 } 1583 1584 pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT); 1585 1586 fw_done = 0; 1587 for (fw_done = 0; fw_done < fw_len;) { 1588 bcnt = fw_len - fw_done; 1589 if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE; 1590 memcpy(fw_ptr, fw_entry->data + fw_done, bcnt); 1591 /* Usbsnoop log shows that we must swap bytes... */ 1592 /* Some background info: The data being swapped here is a 1593 firmware image destined for the mpeg encoder chip that 1594 lives at the other end of a USB endpoint. The encoder 1595 chip always talks in 32 bit chunks and its storage is 1596 organized into 32 bit words. However from the file 1597 system to the encoder chip everything is purely a byte 1598 stream. The firmware file's contents are always 32 bit 1599 swapped from what the encoder expects. Thus the need 1600 always exists to swap the bytes regardless of the endian 1601 type of the host processor and therefore swab32() makes 1602 the most sense. */ 1603 for (icnt = 0; icnt < bcnt/4 ; icnt++) 1604 ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]); 1605 1606 ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt, 1607 &actual_length, HZ); 1608 ret |= (actual_length != bcnt); 1609 if (ret) break; 1610 fw_done += bcnt; 1611 } 1612 1613 trace_firmware("upload of %s : %i / %i ", 1614 fw_files[fwidx],fw_done,fw_len); 1615 1616 kfree(fw_ptr); 1617 release_firmware(fw_entry); 1618 1619 if (ret) { 1620 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1621 "firmware2 upload transfer failure"); 1622 goto done; 1623 } 1624 1625 /* Finish upload */ 1626 1627 ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/ 1628 ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/ 1629 ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16)); 1630 1631 if (ret) { 1632 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1633 "firmware2 upload post-proc failure"); 1634 } 1635 1636 done: 1637 if (hdw->hdw_desc->signal_routing_scheme == 1638 PVR2_ROUTING_SCHEME_GOTVIEW) { 1639 /* Ensure that GPIO 11 is set to output for GOTVIEW 1640 hardware. */ 1641 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0); 1642 } 1643 return ret; 1644 } 1645 1646 1647 static const char *pvr2_get_state_name(unsigned int st) 1648 { 1649 if (st < ARRAY_SIZE(pvr2_state_names)) { 1650 return pvr2_state_names[st]; 1651 } 1652 return "???"; 1653 } 1654 1655 static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl) 1656 { 1657 /* Even though we really only care about the video decoder chip at 1658 this point, we'll broadcast stream on/off to all sub-devices 1659 anyway, just in case somebody else wants to hear the 1660 command... */ 1661 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s", 1662 (enablefl ? "on" : "off")); 1663 v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl); 1664 v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl); 1665 if (hdw->decoder_client_id) { 1666 /* We get here if the encoder has been noticed. Otherwise 1667 we'll issue a warning to the user (which should 1668 normally never happen). */ 1669 return 0; 1670 } 1671 if (!hdw->flag_decoder_missed) { 1672 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1673 "WARNING: No decoder present"); 1674 hdw->flag_decoder_missed = !0; 1675 trace_stbit("flag_decoder_missed", 1676 hdw->flag_decoder_missed); 1677 } 1678 return -EIO; 1679 } 1680 1681 1682 int pvr2_hdw_get_state(struct pvr2_hdw *hdw) 1683 { 1684 return hdw->master_state; 1685 } 1686 1687 1688 static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw) 1689 { 1690 if (!hdw->flag_tripped) return 0; 1691 hdw->flag_tripped = 0; 1692 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1693 "Clearing driver error status"); 1694 return !0; 1695 } 1696 1697 1698 int pvr2_hdw_untrip(struct pvr2_hdw *hdw) 1699 { 1700 int fl; 1701 LOCK_TAKE(hdw->big_lock); do { 1702 fl = pvr2_hdw_untrip_unlocked(hdw); 1703 } while (0); LOCK_GIVE(hdw->big_lock); 1704 if (fl) pvr2_hdw_state_sched(hdw); 1705 return 0; 1706 } 1707 1708 1709 1710 1711 int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw) 1712 { 1713 return hdw->state_pipeline_req != 0; 1714 } 1715 1716 1717 int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag) 1718 { 1719 int ret,st; 1720 LOCK_TAKE(hdw->big_lock); do { 1721 pvr2_hdw_untrip_unlocked(hdw); 1722 if ((!enable_flag) != !(hdw->state_pipeline_req)) { 1723 hdw->state_pipeline_req = enable_flag != 0; 1724 pvr2_trace(PVR2_TRACE_START_STOP, 1725 "/*--TRACE_STREAM--*/ %s", 1726 enable_flag ? "enable" : "disable"); 1727 } 1728 pvr2_hdw_state_sched(hdw); 1729 } while (0); LOCK_GIVE(hdw->big_lock); 1730 if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret; 1731 if (enable_flag) { 1732 while ((st = hdw->master_state) != PVR2_STATE_RUN) { 1733 if (st != PVR2_STATE_READY) return -EIO; 1734 if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret; 1735 } 1736 } 1737 return 0; 1738 } 1739 1740 1741 int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config) 1742 { 1743 int fl; 1744 LOCK_TAKE(hdw->big_lock); 1745 if ((fl = (hdw->desired_stream_type != config)) != 0) { 1746 hdw->desired_stream_type = config; 1747 hdw->state_pipeline_config = 0; 1748 trace_stbit("state_pipeline_config", 1749 hdw->state_pipeline_config); 1750 pvr2_hdw_state_sched(hdw); 1751 } 1752 LOCK_GIVE(hdw->big_lock); 1753 if (fl) return 0; 1754 return pvr2_hdw_wait(hdw,0); 1755 } 1756 1757 1758 static int get_default_tuner_type(struct pvr2_hdw *hdw) 1759 { 1760 int unit_number = hdw->unit_number; 1761 int tp = -1; 1762 if ((unit_number >= 0) && (unit_number < PVR_NUM)) { 1763 tp = tuner[unit_number]; 1764 } 1765 if (tp < 0) return -EINVAL; 1766 hdw->tuner_type = tp; 1767 hdw->tuner_updated = !0; 1768 return 0; 1769 } 1770 1771 1772 static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw) 1773 { 1774 int unit_number = hdw->unit_number; 1775 int tp = 0; 1776 if ((unit_number >= 0) && (unit_number < PVR_NUM)) { 1777 tp = video_std[unit_number]; 1778 if (tp) return tp; 1779 } 1780 return 0; 1781 } 1782 1783 1784 static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw) 1785 { 1786 int unit_number = hdw->unit_number; 1787 int tp = 0; 1788 if ((unit_number >= 0) && (unit_number < PVR_NUM)) { 1789 tp = tolerance[unit_number]; 1790 } 1791 return tp; 1792 } 1793 1794 1795 static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw) 1796 { 1797 /* Try a harmless request to fetch the eeprom's address over 1798 endpoint 1. See what happens. Only the full FX2 image can 1799 respond to this. If this probe fails then likely the FX2 1800 firmware needs be loaded. */ 1801 int result; 1802 LOCK_TAKE(hdw->ctl_lock); do { 1803 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR; 1804 result = pvr2_send_request_ex(hdw,HZ*1,!0, 1805 hdw->cmd_buffer,1, 1806 hdw->cmd_buffer,1); 1807 if (result < 0) break; 1808 } while(0); LOCK_GIVE(hdw->ctl_lock); 1809 if (result) { 1810 pvr2_trace(PVR2_TRACE_INIT, 1811 "Probe of device endpoint 1 result status %d", 1812 result); 1813 } else { 1814 pvr2_trace(PVR2_TRACE_INIT, 1815 "Probe of device endpoint 1 succeeded"); 1816 } 1817 return result == 0; 1818 } 1819 1820 struct pvr2_std_hack { 1821 v4l2_std_id pat; /* Pattern to match */ 1822 v4l2_std_id msk; /* Which bits we care about */ 1823 v4l2_std_id std; /* What additional standards or default to set */ 1824 }; 1825 1826 /* This data structure labels specific combinations of standards from 1827 tveeprom that we'll try to recognize. If we recognize one, then assume 1828 a specified default standard to use. This is here because tveeprom only 1829 tells us about available standards not the intended default standard (if 1830 any) for the device in question. We guess the default based on what has 1831 been reported as available. Note that this is only for guessing a 1832 default - which can always be overridden explicitly - and if the user 1833 has otherwise named a default then that default will always be used in 1834 place of this table. */ 1835 static const struct pvr2_std_hack std_eeprom_maps[] = { 1836 { /* PAL(B/G) */ 1837 .pat = V4L2_STD_B|V4L2_STD_GH, 1838 .std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G, 1839 }, 1840 { /* NTSC(M) */ 1841 .pat = V4L2_STD_MN, 1842 .std = V4L2_STD_NTSC_M, 1843 }, 1844 { /* PAL(I) */ 1845 .pat = V4L2_STD_PAL_I, 1846 .std = V4L2_STD_PAL_I, 1847 }, 1848 { /* SECAM(L/L') */ 1849 .pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC, 1850 .std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC, 1851 }, 1852 { /* PAL(D/D1/K) */ 1853 .pat = V4L2_STD_DK, 1854 .std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K, 1855 }, 1856 }; 1857 1858 static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw) 1859 { 1860 char buf[40]; 1861 unsigned int bcnt; 1862 v4l2_std_id std1,std2,std3; 1863 1864 std1 = get_default_standard(hdw); 1865 std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask; 1866 1867 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom); 1868 pvr2_trace(PVR2_TRACE_STD, 1869 "Supported video standard(s) reported available in hardware: %.*s", 1870 bcnt,buf); 1871 1872 hdw->std_mask_avail = hdw->std_mask_eeprom; 1873 1874 std2 = (std1|std3) & ~hdw->std_mask_avail; 1875 if (std2) { 1876 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2); 1877 pvr2_trace(PVR2_TRACE_STD, 1878 "Expanding supported video standards to include: %.*s", 1879 bcnt,buf); 1880 hdw->std_mask_avail |= std2; 1881 } 1882 1883 hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail; 1884 1885 if (std1) { 1886 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1); 1887 pvr2_trace(PVR2_TRACE_STD, 1888 "Initial video standard forced to %.*s", 1889 bcnt,buf); 1890 hdw->std_mask_cur = std1; 1891 hdw->std_dirty = !0; 1892 return; 1893 } 1894 if (std3) { 1895 bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3); 1896 pvr2_trace(PVR2_TRACE_STD, 1897 "Initial video standard (determined by device type): %.*s", 1898 bcnt, buf); 1899 hdw->std_mask_cur = std3; 1900 hdw->std_dirty = !0; 1901 return; 1902 } 1903 1904 { 1905 unsigned int idx; 1906 for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) { 1907 if (std_eeprom_maps[idx].msk ? 1908 ((std_eeprom_maps[idx].pat ^ 1909 hdw->std_mask_eeprom) & 1910 std_eeprom_maps[idx].msk) : 1911 (std_eeprom_maps[idx].pat != 1912 hdw->std_mask_eeprom)) continue; 1913 bcnt = pvr2_std_id_to_str(buf,sizeof(buf), 1914 std_eeprom_maps[idx].std); 1915 pvr2_trace(PVR2_TRACE_STD, 1916 "Initial video standard guessed as %.*s", 1917 bcnt,buf); 1918 hdw->std_mask_cur = std_eeprom_maps[idx].std; 1919 hdw->std_dirty = !0; 1920 return; 1921 } 1922 } 1923 1924 } 1925 1926 1927 static unsigned int pvr2_copy_i2c_addr_list( 1928 unsigned short *dst, const unsigned char *src, 1929 unsigned int dst_max) 1930 { 1931 unsigned int cnt = 0; 1932 if (!src) return 0; 1933 while (src[cnt] && (cnt + 1) < dst_max) { 1934 dst[cnt] = src[cnt]; 1935 cnt++; 1936 } 1937 dst[cnt] = I2C_CLIENT_END; 1938 return cnt; 1939 } 1940 1941 1942 static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw) 1943 { 1944 /* 1945 Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness 1946 for cx25840 causes that module to correctly set up its video 1947 scaling. This is really a problem in the cx25840 module itself, 1948 but we work around it here. The problem has not been seen in 1949 ivtv because there VBI is supported and set up. We don't do VBI 1950 here (at least not yet) and thus we never attempted to even set 1951 it up. 1952 */ 1953 struct v4l2_format fmt; 1954 if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) { 1955 /* We're not using a cx25840 so don't enable the hack */ 1956 return; 1957 } 1958 1959 pvr2_trace(PVR2_TRACE_INIT, 1960 "Module ID %u: Executing cx25840 VBI hack", 1961 hdw->decoder_client_id); 1962 memset(&fmt, 0, sizeof(fmt)); 1963 fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE; 1964 fmt.fmt.sliced.service_lines[0][21] = V4L2_SLICED_CAPTION_525; 1965 fmt.fmt.sliced.service_lines[1][21] = V4L2_SLICED_CAPTION_525; 1966 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id, 1967 vbi, s_sliced_fmt, &fmt.fmt.sliced); 1968 } 1969 1970 1971 static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw, 1972 const struct pvr2_device_client_desc *cd) 1973 { 1974 const char *fname; 1975 unsigned char mid; 1976 struct v4l2_subdev *sd; 1977 unsigned int i2ccnt; 1978 const unsigned char *p; 1979 /* Arbitrary count - max # i2c addresses we will probe */ 1980 unsigned short i2caddr[25]; 1981 1982 mid = cd->module_id; 1983 fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL; 1984 if (!fname) { 1985 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1986 "Module ID %u for device %s has no name? The driver might have a configuration problem.", 1987 mid, 1988 hdw->hdw_desc->description); 1989 return -EINVAL; 1990 } 1991 pvr2_trace(PVR2_TRACE_INIT, 1992 "Module ID %u (%s) for device %s being loaded...", 1993 mid, fname, 1994 hdw->hdw_desc->description); 1995 1996 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list, 1997 ARRAY_SIZE(i2caddr)); 1998 if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ? 1999 module_i2c_addresses[mid] : NULL) != NULL)) { 2000 /* Second chance: Try default i2c address list */ 2001 i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p, 2002 ARRAY_SIZE(i2caddr)); 2003 if (i2ccnt) { 2004 pvr2_trace(PVR2_TRACE_INIT, 2005 "Module ID %u: Using default i2c address list", 2006 mid); 2007 } 2008 } 2009 2010 if (!i2ccnt) { 2011 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 2012 "Module ID %u (%s) for device %s: No i2c addresses. The driver might have a configuration problem.", 2013 mid, fname, hdw->hdw_desc->description); 2014 return -EINVAL; 2015 } 2016 2017 if (i2ccnt == 1) { 2018 pvr2_trace(PVR2_TRACE_INIT, 2019 "Module ID %u: Setting up with specified i2c address 0x%x", 2020 mid, i2caddr[0]); 2021 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap, 2022 fname, i2caddr[0], NULL); 2023 } else { 2024 pvr2_trace(PVR2_TRACE_INIT, 2025 "Module ID %u: Setting up with address probe list", 2026 mid); 2027 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap, 2028 fname, 0, i2caddr); 2029 } 2030 2031 if (!sd) { 2032 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 2033 "Module ID %u (%s) for device %s failed to load. Possible missing sub-device kernel module or initialization failure within module.", 2034 mid, fname, hdw->hdw_desc->description); 2035 return -EIO; 2036 } 2037 2038 /* Tag this sub-device instance with the module ID we know about. 2039 In other places we'll use that tag to determine if the instance 2040 requires special handling. */ 2041 sd->grp_id = mid; 2042 2043 pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname); 2044 2045 2046 /* client-specific setup... */ 2047 switch (mid) { 2048 case PVR2_CLIENT_ID_CX25840: 2049 case PVR2_CLIENT_ID_SAA7115: 2050 hdw->decoder_client_id = mid; 2051 break; 2052 default: break; 2053 } 2054 2055 return 0; 2056 } 2057 2058 2059 static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw) 2060 { 2061 unsigned int idx; 2062 const struct pvr2_string_table *cm; 2063 const struct pvr2_device_client_table *ct; 2064 int okFl = !0; 2065 2066 cm = &hdw->hdw_desc->client_modules; 2067 for (idx = 0; idx < cm->cnt; idx++) { 2068 request_module(cm->lst[idx]); 2069 } 2070 2071 ct = &hdw->hdw_desc->client_table; 2072 for (idx = 0; idx < ct->cnt; idx++) { 2073 if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0; 2074 } 2075 if (!okFl) { 2076 hdw->flag_modulefail = !0; 2077 pvr2_hdw_render_useless(hdw); 2078 } 2079 } 2080 2081 2082 static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw) 2083 { 2084 int ret; 2085 unsigned int idx; 2086 struct pvr2_ctrl *cptr; 2087 int reloadFl = 0; 2088 if (hdw->hdw_desc->fx2_firmware.cnt) { 2089 if (!reloadFl) { 2090 reloadFl = 2091 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints 2092 == 0); 2093 if (reloadFl) { 2094 pvr2_trace(PVR2_TRACE_INIT, 2095 "USB endpoint config looks strange; possibly firmware needs to be loaded"); 2096 } 2097 } 2098 if (!reloadFl) { 2099 reloadFl = !pvr2_hdw_check_firmware(hdw); 2100 if (reloadFl) { 2101 pvr2_trace(PVR2_TRACE_INIT, 2102 "Check for FX2 firmware failed; possibly firmware needs to be loaded"); 2103 } 2104 } 2105 if (reloadFl) { 2106 if (pvr2_upload_firmware1(hdw) != 0) { 2107 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 2108 "Failure uploading firmware1"); 2109 } 2110 return; 2111 } 2112 } 2113 hdw->fw1_state = FW1_STATE_OK; 2114 2115 if (!pvr2_hdw_dev_ok(hdw)) return; 2116 2117 hdw->force_dirty = !0; 2118 2119 if (!hdw->hdw_desc->flag_no_powerup) { 2120 pvr2_hdw_cmd_powerup(hdw); 2121 if (!pvr2_hdw_dev_ok(hdw)) return; 2122 } 2123 2124 /* Take the IR chip out of reset, if appropriate */ 2125 if (hdw->ir_scheme_active == PVR2_IR_SCHEME_ZILOG) { 2126 pvr2_issue_simple_cmd(hdw, 2127 FX2CMD_HCW_ZILOG_RESET | 2128 (1 << 8) | 2129 ((0) << 16)); 2130 } 2131 2132 // This step MUST happen after the earlier powerup step. 2133 pvr2_i2c_core_init(hdw); 2134 if (!pvr2_hdw_dev_ok(hdw)) return; 2135 2136 pvr2_hdw_load_modules(hdw); 2137 if (!pvr2_hdw_dev_ok(hdw)) return; 2138 2139 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw); 2140 2141 for (idx = 0; idx < CTRLDEF_COUNT; idx++) { 2142 cptr = hdw->controls + idx; 2143 if (cptr->info->skip_init) continue; 2144 if (!cptr->info->set_value) continue; 2145 cptr->info->set_value(cptr,~0,cptr->info->default_value); 2146 } 2147 2148 pvr2_hdw_cx25840_vbi_hack(hdw); 2149 2150 /* Set up special default values for the television and radio 2151 frequencies here. It's not really important what these defaults 2152 are, but I set them to something usable in the Chicago area just 2153 to make driver testing a little easier. */ 2154 2155 hdw->freqValTelevision = default_tv_freq; 2156 hdw->freqValRadio = default_radio_freq; 2157 2158 // Do not use pvr2_reset_ctl_endpoints() here. It is not 2159 // thread-safe against the normal pvr2_send_request() mechanism. 2160 // (We should make it thread safe). 2161 2162 if (hdw->hdw_desc->flag_has_hauppauge_rom) { 2163 ret = pvr2_hdw_get_eeprom_addr(hdw); 2164 if (!pvr2_hdw_dev_ok(hdw)) return; 2165 if (ret < 0) { 2166 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 2167 "Unable to determine location of eeprom, skipping"); 2168 } else { 2169 hdw->eeprom_addr = ret; 2170 pvr2_eeprom_analyze(hdw); 2171 if (!pvr2_hdw_dev_ok(hdw)) return; 2172 } 2173 } else { 2174 hdw->tuner_type = hdw->hdw_desc->default_tuner_type; 2175 hdw->tuner_updated = !0; 2176 hdw->std_mask_eeprom = V4L2_STD_ALL; 2177 } 2178 2179 if (hdw->serial_number) { 2180 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1, 2181 "sn-%lu", hdw->serial_number); 2182 } else if (hdw->unit_number >= 0) { 2183 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1, 2184 "unit-%c", 2185 hdw->unit_number + 'a'); 2186 } else { 2187 idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1, 2188 "unit-??"); 2189 } 2190 hdw->identifier[idx] = 0; 2191 2192 pvr2_hdw_setup_std(hdw); 2193 2194 if (!get_default_tuner_type(hdw)) { 2195 pvr2_trace(PVR2_TRACE_INIT, 2196 "pvr2_hdw_setup: Tuner type overridden to %d", 2197 hdw->tuner_type); 2198 } 2199 2200 2201 if (!pvr2_hdw_dev_ok(hdw)) return; 2202 2203 if (hdw->hdw_desc->signal_routing_scheme == 2204 PVR2_ROUTING_SCHEME_GOTVIEW) { 2205 /* Ensure that GPIO 11 is set to output for GOTVIEW 2206 hardware. */ 2207 pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0); 2208 } 2209 2210 pvr2_hdw_commit_setup(hdw); 2211 2212 hdw->vid_stream = pvr2_stream_create(); 2213 if (!pvr2_hdw_dev_ok(hdw)) return; 2214 pvr2_trace(PVR2_TRACE_INIT, 2215 "pvr2_hdw_setup: video stream is %p",hdw->vid_stream); 2216 if (hdw->vid_stream) { 2217 idx = get_default_error_tolerance(hdw); 2218 if (idx) { 2219 pvr2_trace(PVR2_TRACE_INIT, 2220 "pvr2_hdw_setup: video stream %p setting tolerance %u", 2221 hdw->vid_stream,idx); 2222 } 2223 pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev, 2224 PVR2_VID_ENDPOINT,idx); 2225 } 2226 2227 if (!pvr2_hdw_dev_ok(hdw)) return; 2228 2229 hdw->flag_init_ok = !0; 2230 2231 pvr2_hdw_state_sched(hdw); 2232 } 2233 2234 2235 /* Set up the structure and attempt to put the device into a usable state. 2236 This can be a time-consuming operation, which is why it is not done 2237 internally as part of the create() step. */ 2238 static void pvr2_hdw_setup(struct pvr2_hdw *hdw) 2239 { 2240 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw); 2241 do { 2242 pvr2_hdw_setup_low(hdw); 2243 pvr2_trace(PVR2_TRACE_INIT, 2244 "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d", 2245 hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok); 2246 if (pvr2_hdw_dev_ok(hdw)) { 2247 if (hdw->flag_init_ok) { 2248 pvr2_trace( 2249 PVR2_TRACE_INFO, 2250 "Device initialization completed successfully."); 2251 break; 2252 } 2253 if (hdw->fw1_state == FW1_STATE_RELOAD) { 2254 pvr2_trace( 2255 PVR2_TRACE_INFO, 2256 "Device microcontroller firmware (re)loaded; it should now reset and reconnect."); 2257 break; 2258 } 2259 pvr2_trace( 2260 PVR2_TRACE_ERROR_LEGS, 2261 "Device initialization was not successful."); 2262 if (hdw->fw1_state == FW1_STATE_MISSING) { 2263 pvr2_trace( 2264 PVR2_TRACE_ERROR_LEGS, 2265 "Giving up since device microcontroller firmware appears to be missing."); 2266 break; 2267 } 2268 } 2269 if (hdw->flag_modulefail) { 2270 pvr2_trace( 2271 PVR2_TRACE_ERROR_LEGS, 2272 "***WARNING*** pvrusb2 driver initialization failed due to the failure of one or more sub-device kernel modules."); 2273 pvr2_trace( 2274 PVR2_TRACE_ERROR_LEGS, 2275 "You need to resolve the failing condition before this driver can function. There should be some earlier messages giving more information about the problem."); 2276 break; 2277 } 2278 if (procreload) { 2279 pvr2_trace( 2280 PVR2_TRACE_ERROR_LEGS, 2281 "Attempting pvrusb2 recovery by reloading primary firmware."); 2282 pvr2_trace( 2283 PVR2_TRACE_ERROR_LEGS, 2284 "If this works, device should disconnect and reconnect in a sane state."); 2285 hdw->fw1_state = FW1_STATE_UNKNOWN; 2286 pvr2_upload_firmware1(hdw); 2287 } else { 2288 pvr2_trace( 2289 PVR2_TRACE_ERROR_LEGS, 2290 "***WARNING*** pvrusb2 device hardware appears to be jammed and I can't clear it."); 2291 pvr2_trace( 2292 PVR2_TRACE_ERROR_LEGS, 2293 "You might need to power cycle the pvrusb2 device in order to recover."); 2294 } 2295 } while (0); 2296 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw); 2297 } 2298 2299 2300 /* Perform second stage initialization. Set callback pointer first so that 2301 we can avoid a possible initialization race (if the kernel thread runs 2302 before the callback has been set). */ 2303 int pvr2_hdw_initialize(struct pvr2_hdw *hdw, 2304 void (*callback_func)(void *), 2305 void *callback_data) 2306 { 2307 LOCK_TAKE(hdw->big_lock); do { 2308 if (hdw->flag_disconnected) { 2309 /* Handle a race here: If we're already 2310 disconnected by this point, then give up. If we 2311 get past this then we'll remain connected for 2312 the duration of initialization since the entire 2313 initialization sequence is now protected by the 2314 big_lock. */ 2315 break; 2316 } 2317 hdw->state_data = callback_data; 2318 hdw->state_func = callback_func; 2319 pvr2_hdw_setup(hdw); 2320 } while (0); LOCK_GIVE(hdw->big_lock); 2321 return hdw->flag_init_ok; 2322 } 2323 2324 2325 /* Create, set up, and return a structure for interacting with the 2326 underlying hardware. */ 2327 struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf, 2328 const struct usb_device_id *devid) 2329 { 2330 unsigned int idx,cnt1,cnt2,m; 2331 struct pvr2_hdw *hdw = NULL; 2332 int valid_std_mask; 2333 struct pvr2_ctrl *cptr; 2334 struct usb_device *usb_dev; 2335 const struct pvr2_device_desc *hdw_desc; 2336 __u8 ifnum; 2337 struct v4l2_queryctrl qctrl; 2338 struct pvr2_ctl_info *ciptr; 2339 2340 usb_dev = interface_to_usbdev(intf); 2341 2342 hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info); 2343 2344 if (hdw_desc == NULL) { 2345 pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create: No device description pointer, unable to continue."); 2346 pvr2_trace(PVR2_TRACE_INIT, 2347 "If you have a new device type, please contact Mike Isely <isely@pobox.com> to get it included in the driver"); 2348 goto fail; 2349 } 2350 2351 hdw = kzalloc(sizeof(*hdw),GFP_KERNEL); 2352 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"", 2353 hdw,hdw_desc->description); 2354 pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s", 2355 hdw_desc->description); 2356 if (hdw_desc->flag_is_experimental) { 2357 pvr2_trace(PVR2_TRACE_INFO, "**********"); 2358 pvr2_trace(PVR2_TRACE_INFO, 2359 "WARNING: Support for this device (%s) is experimental.", 2360 hdw_desc->description); 2361 pvr2_trace(PVR2_TRACE_INFO, 2362 "Important functionality might not be entirely working."); 2363 pvr2_trace(PVR2_TRACE_INFO, 2364 "Please consider contacting the driver author to help with further stabilization of the driver."); 2365 pvr2_trace(PVR2_TRACE_INFO, "**********"); 2366 } 2367 if (!hdw) goto fail; 2368 2369 timer_setup(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout, 0); 2370 2371 timer_setup(&hdw->decoder_stabilization_timer, 2372 pvr2_hdw_decoder_stabilization_timeout, 0); 2373 2374 timer_setup(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout, 2375 0); 2376 2377 timer_setup(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout, 0); 2378 2379 hdw->master_state = PVR2_STATE_DEAD; 2380 2381 init_waitqueue_head(&hdw->state_wait_data); 2382 2383 hdw->tuner_signal_stale = !0; 2384 cx2341x_fill_defaults(&hdw->enc_ctl_state); 2385 2386 /* Calculate which inputs are OK */ 2387 m = 0; 2388 if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV; 2389 if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) { 2390 m |= 1 << PVR2_CVAL_INPUT_DTV; 2391 } 2392 if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO; 2393 if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE; 2394 if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO; 2395 hdw->input_avail_mask = m; 2396 hdw->input_allowed_mask = hdw->input_avail_mask; 2397 2398 /* If not a hybrid device, pathway_state never changes. So 2399 initialize it here to what it should forever be. */ 2400 if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) { 2401 hdw->pathway_state = PVR2_PATHWAY_ANALOG; 2402 } else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) { 2403 hdw->pathway_state = PVR2_PATHWAY_DIGITAL; 2404 } 2405 2406 hdw->control_cnt = CTRLDEF_COUNT; 2407 hdw->control_cnt += MPEGDEF_COUNT; 2408 hdw->controls = kcalloc(hdw->control_cnt, sizeof(struct pvr2_ctrl), 2409 GFP_KERNEL); 2410 if (!hdw->controls) goto fail; 2411 hdw->hdw_desc = hdw_desc; 2412 hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme; 2413 for (idx = 0; idx < hdw->control_cnt; idx++) { 2414 cptr = hdw->controls + idx; 2415 cptr->hdw = hdw; 2416 } 2417 for (idx = 0; idx < 32; idx++) { 2418 hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx]; 2419 } 2420 for (idx = 0; idx < CTRLDEF_COUNT; idx++) { 2421 cptr = hdw->controls + idx; 2422 cptr->info = control_defs+idx; 2423 } 2424 2425 /* Ensure that default input choice is a valid one. */ 2426 m = hdw->input_avail_mask; 2427 if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) { 2428 if (!((1 << idx) & m)) continue; 2429 hdw->input_val = idx; 2430 break; 2431 } 2432 2433 /* Define and configure additional controls from cx2341x module. */ 2434 hdw->mpeg_ctrl_info = kcalloc(MPEGDEF_COUNT, 2435 sizeof(*(hdw->mpeg_ctrl_info)), 2436 GFP_KERNEL); 2437 if (!hdw->mpeg_ctrl_info) goto fail; 2438 for (idx = 0; idx < MPEGDEF_COUNT; idx++) { 2439 cptr = hdw->controls + idx + CTRLDEF_COUNT; 2440 ciptr = &(hdw->mpeg_ctrl_info[idx].info); 2441 ciptr->desc = hdw->mpeg_ctrl_info[idx].desc; 2442 ciptr->name = mpeg_ids[idx].strid; 2443 ciptr->v4l_id = mpeg_ids[idx].id; 2444 ciptr->skip_init = !0; 2445 ciptr->get_value = ctrl_cx2341x_get; 2446 ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags; 2447 ciptr->is_dirty = ctrl_cx2341x_is_dirty; 2448 if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty; 2449 qctrl.id = ciptr->v4l_id; 2450 cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl); 2451 if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) { 2452 ciptr->set_value = ctrl_cx2341x_set; 2453 } 2454 strscpy(hdw->mpeg_ctrl_info[idx].desc, qctrl.name, 2455 sizeof(hdw->mpeg_ctrl_info[idx].desc)); 2456 ciptr->default_value = qctrl.default_value; 2457 switch (qctrl.type) { 2458 default: 2459 case V4L2_CTRL_TYPE_INTEGER: 2460 ciptr->type = pvr2_ctl_int; 2461 ciptr->def.type_int.min_value = qctrl.minimum; 2462 ciptr->def.type_int.max_value = qctrl.maximum; 2463 break; 2464 case V4L2_CTRL_TYPE_BOOLEAN: 2465 ciptr->type = pvr2_ctl_bool; 2466 break; 2467 case V4L2_CTRL_TYPE_MENU: 2468 ciptr->type = pvr2_ctl_enum; 2469 ciptr->def.type_enum.value_names = 2470 cx2341x_ctrl_get_menu(&hdw->enc_ctl_state, 2471 ciptr->v4l_id); 2472 for (cnt1 = 0; 2473 ciptr->def.type_enum.value_names[cnt1] != NULL; 2474 cnt1++) { } 2475 ciptr->def.type_enum.count = cnt1; 2476 break; 2477 } 2478 cptr->info = ciptr; 2479 } 2480 2481 // Initialize control data regarding video standard masks 2482 valid_std_mask = pvr2_std_get_usable(); 2483 for (idx = 0; idx < 32; idx++) { 2484 if (!(valid_std_mask & (1 << idx))) continue; 2485 cnt1 = pvr2_std_id_to_str( 2486 hdw->std_mask_names[idx], 2487 sizeof(hdw->std_mask_names[idx])-1, 2488 1 << idx); 2489 hdw->std_mask_names[idx][cnt1] = 0; 2490 } 2491 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL); 2492 if (cptr) { 2493 memcpy(&hdw->std_info_avail,cptr->info, 2494 sizeof(hdw->std_info_avail)); 2495 cptr->info = &hdw->std_info_avail; 2496 hdw->std_info_avail.def.type_bitmask.bit_names = 2497 hdw->std_mask_ptrs; 2498 hdw->std_info_avail.def.type_bitmask.valid_bits = 2499 valid_std_mask; 2500 } 2501 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR); 2502 if (cptr) { 2503 memcpy(&hdw->std_info_cur,cptr->info, 2504 sizeof(hdw->std_info_cur)); 2505 cptr->info = &hdw->std_info_cur; 2506 hdw->std_info_cur.def.type_bitmask.bit_names = 2507 hdw->std_mask_ptrs; 2508 hdw->std_info_cur.def.type_bitmask.valid_bits = 2509 valid_std_mask; 2510 } 2511 cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDDETECT); 2512 if (cptr) { 2513 memcpy(&hdw->std_info_detect,cptr->info, 2514 sizeof(hdw->std_info_detect)); 2515 cptr->info = &hdw->std_info_detect; 2516 hdw->std_info_detect.def.type_bitmask.bit_names = 2517 hdw->std_mask_ptrs; 2518 hdw->std_info_detect.def.type_bitmask.valid_bits = 2519 valid_std_mask; 2520 } 2521 2522 hdw->cropcap_stale = !0; 2523 hdw->eeprom_addr = -1; 2524 hdw->unit_number = -1; 2525 hdw->v4l_minor_number_video = -1; 2526 hdw->v4l_minor_number_vbi = -1; 2527 hdw->v4l_minor_number_radio = -1; 2528 hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL); 2529 if (!hdw->ctl_write_buffer) goto fail; 2530 hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL); 2531 if (!hdw->ctl_read_buffer) goto fail; 2532 hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL); 2533 if (!hdw->ctl_write_urb) goto fail; 2534 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL); 2535 if (!hdw->ctl_read_urb) goto fail; 2536 2537 if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) { 2538 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 2539 "Error registering with v4l core, giving up"); 2540 goto fail; 2541 } 2542 mutex_lock(&pvr2_unit_mtx); 2543 do { 2544 for (idx = 0; idx < PVR_NUM; idx++) { 2545 if (unit_pointers[idx]) continue; 2546 hdw->unit_number = idx; 2547 unit_pointers[idx] = hdw; 2548 break; 2549 } 2550 } while (0); 2551 mutex_unlock(&pvr2_unit_mtx); 2552 2553 cnt1 = 0; 2554 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2"); 2555 cnt1 += cnt2; 2556 if (hdw->unit_number >= 0) { 2557 cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c", 2558 ('a' + hdw->unit_number)); 2559 cnt1 += cnt2; 2560 } 2561 if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1; 2562 hdw->name[cnt1] = 0; 2563 2564 INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll); 2565 2566 pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s", 2567 hdw->unit_number,hdw->name); 2568 2569 hdw->tuner_type = -1; 2570 hdw->flag_ok = !0; 2571 2572 hdw->usb_intf = intf; 2573 hdw->usb_dev = usb_dev; 2574 2575 usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info)); 2576 2577 ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber; 2578 usb_set_interface(hdw->usb_dev,ifnum,0); 2579 2580 mutex_init(&hdw->ctl_lock_mutex); 2581 mutex_init(&hdw->big_lock_mutex); 2582 2583 return hdw; 2584 fail: 2585 if (hdw) { 2586 del_timer_sync(&hdw->quiescent_timer); 2587 del_timer_sync(&hdw->decoder_stabilization_timer); 2588 del_timer_sync(&hdw->encoder_run_timer); 2589 del_timer_sync(&hdw->encoder_wait_timer); 2590 flush_work(&hdw->workpoll); 2591 usb_free_urb(hdw->ctl_read_urb); 2592 usb_free_urb(hdw->ctl_write_urb); 2593 kfree(hdw->ctl_read_buffer); 2594 kfree(hdw->ctl_write_buffer); 2595 kfree(hdw->controls); 2596 kfree(hdw->mpeg_ctrl_info); 2597 kfree(hdw); 2598 } 2599 return NULL; 2600 } 2601 2602 2603 /* Remove _all_ associations between this driver and the underlying USB 2604 layer. */ 2605 static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw) 2606 { 2607 if (hdw->flag_disconnected) return; 2608 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw); 2609 if (hdw->ctl_read_urb) { 2610 usb_kill_urb(hdw->ctl_read_urb); 2611 usb_free_urb(hdw->ctl_read_urb); 2612 hdw->ctl_read_urb = NULL; 2613 } 2614 if (hdw->ctl_write_urb) { 2615 usb_kill_urb(hdw->ctl_write_urb); 2616 usb_free_urb(hdw->ctl_write_urb); 2617 hdw->ctl_write_urb = NULL; 2618 } 2619 if (hdw->ctl_read_buffer) { 2620 kfree(hdw->ctl_read_buffer); 2621 hdw->ctl_read_buffer = NULL; 2622 } 2623 if (hdw->ctl_write_buffer) { 2624 kfree(hdw->ctl_write_buffer); 2625 hdw->ctl_write_buffer = NULL; 2626 } 2627 hdw->flag_disconnected = !0; 2628 /* If we don't do this, then there will be a dangling struct device 2629 reference to our disappearing device persisting inside the V4L 2630 core... */ 2631 v4l2_device_disconnect(&hdw->v4l2_dev); 2632 hdw->usb_dev = NULL; 2633 hdw->usb_intf = NULL; 2634 pvr2_hdw_render_useless(hdw); 2635 } 2636 2637 void pvr2_hdw_set_v4l2_dev(struct pvr2_hdw *hdw, struct video_device *vdev) 2638 { 2639 vdev->v4l2_dev = &hdw->v4l2_dev; 2640 } 2641 2642 /* Destroy hardware interaction structure */ 2643 void pvr2_hdw_destroy(struct pvr2_hdw *hdw) 2644 { 2645 if (!hdw) return; 2646 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw); 2647 flush_work(&hdw->workpoll); 2648 del_timer_sync(&hdw->quiescent_timer); 2649 del_timer_sync(&hdw->decoder_stabilization_timer); 2650 del_timer_sync(&hdw->encoder_run_timer); 2651 del_timer_sync(&hdw->encoder_wait_timer); 2652 if (hdw->fw_buffer) { 2653 kfree(hdw->fw_buffer); 2654 hdw->fw_buffer = NULL; 2655 } 2656 if (hdw->vid_stream) { 2657 pvr2_stream_destroy(hdw->vid_stream); 2658 hdw->vid_stream = NULL; 2659 } 2660 pvr2_i2c_core_done(hdw); 2661 v4l2_device_unregister(&hdw->v4l2_dev); 2662 pvr2_hdw_remove_usb_stuff(hdw); 2663 mutex_lock(&pvr2_unit_mtx); 2664 do { 2665 if ((hdw->unit_number >= 0) && 2666 (hdw->unit_number < PVR_NUM) && 2667 (unit_pointers[hdw->unit_number] == hdw)) { 2668 unit_pointers[hdw->unit_number] = NULL; 2669 } 2670 } while (0); 2671 mutex_unlock(&pvr2_unit_mtx); 2672 kfree(hdw->controls); 2673 kfree(hdw->mpeg_ctrl_info); 2674 kfree(hdw); 2675 } 2676 2677 2678 int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw) 2679 { 2680 return (hdw && hdw->flag_ok); 2681 } 2682 2683 2684 /* Called when hardware has been unplugged */ 2685 void pvr2_hdw_disconnect(struct pvr2_hdw *hdw) 2686 { 2687 pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw); 2688 LOCK_TAKE(hdw->big_lock); 2689 LOCK_TAKE(hdw->ctl_lock); 2690 pvr2_hdw_remove_usb_stuff(hdw); 2691 LOCK_GIVE(hdw->ctl_lock); 2692 LOCK_GIVE(hdw->big_lock); 2693 } 2694 2695 2696 /* Get the number of defined controls */ 2697 unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw) 2698 { 2699 return hdw->control_cnt; 2700 } 2701 2702 2703 /* Retrieve a control handle given its index (0..count-1) */ 2704 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw, 2705 unsigned int idx) 2706 { 2707 if (idx >= hdw->control_cnt) return NULL; 2708 return hdw->controls + idx; 2709 } 2710 2711 2712 /* Retrieve a control handle given its index (0..count-1) */ 2713 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw, 2714 unsigned int ctl_id) 2715 { 2716 struct pvr2_ctrl *cptr; 2717 unsigned int idx; 2718 int i; 2719 2720 /* This could be made a lot more efficient, but for now... */ 2721 for (idx = 0; idx < hdw->control_cnt; idx++) { 2722 cptr = hdw->controls + idx; 2723 i = cptr->info->internal_id; 2724 if (i && (i == ctl_id)) return cptr; 2725 } 2726 return NULL; 2727 } 2728 2729 2730 /* Given a V4L ID, retrieve the control structure associated with it. */ 2731 struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id) 2732 { 2733 struct pvr2_ctrl *cptr; 2734 unsigned int idx; 2735 int i; 2736 2737 /* This could be made a lot more efficient, but for now... */ 2738 for (idx = 0; idx < hdw->control_cnt; idx++) { 2739 cptr = hdw->controls + idx; 2740 i = cptr->info->v4l_id; 2741 if (i && (i == ctl_id)) return cptr; 2742 } 2743 return NULL; 2744 } 2745 2746 2747 /* Given a V4L ID for its immediate predecessor, retrieve the control 2748 structure associated with it. */ 2749 struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw, 2750 unsigned int ctl_id) 2751 { 2752 struct pvr2_ctrl *cptr,*cp2; 2753 unsigned int idx; 2754 int i; 2755 2756 /* This could be made a lot more efficient, but for now... */ 2757 cp2 = NULL; 2758 for (idx = 0; idx < hdw->control_cnt; idx++) { 2759 cptr = hdw->controls + idx; 2760 i = cptr->info->v4l_id; 2761 if (!i) continue; 2762 if (i <= ctl_id) continue; 2763 if (cp2 && (cp2->info->v4l_id < i)) continue; 2764 cp2 = cptr; 2765 } 2766 return cp2; 2767 return NULL; 2768 } 2769 2770 2771 static const char *get_ctrl_typename(enum pvr2_ctl_type tp) 2772 { 2773 switch (tp) { 2774 case pvr2_ctl_int: return "integer"; 2775 case pvr2_ctl_enum: return "enum"; 2776 case pvr2_ctl_bool: return "boolean"; 2777 case pvr2_ctl_bitmask: return "bitmask"; 2778 } 2779 return ""; 2780 } 2781 2782 2783 static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id, 2784 const char *name, int val) 2785 { 2786 struct v4l2_control ctrl; 2787 struct v4l2_subdev *sd; 2788 2789 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val); 2790 memset(&ctrl, 0, sizeof(ctrl)); 2791 ctrl.id = id; 2792 ctrl.value = val; 2793 2794 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) 2795 v4l2_s_ctrl(NULL, sd->ctrl_handler, &ctrl); 2796 } 2797 2798 #define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \ 2799 if ((hdw)->lab##_dirty || (hdw)->force_dirty) { \ 2800 pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \ 2801 } 2802 2803 static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw) 2804 { 2805 v4l2_std_id std; 2806 std = (v4l2_std_id)hdw->std_mask_avail; 2807 v4l2_device_call_all(&hdw->v4l2_dev, 0, 2808 video, querystd, &std); 2809 return std; 2810 } 2811 2812 /* Execute whatever commands are required to update the state of all the 2813 sub-devices so that they match our current control values. */ 2814 static void pvr2_subdev_update(struct pvr2_hdw *hdw) 2815 { 2816 struct v4l2_subdev *sd; 2817 unsigned int id; 2818 pvr2_subdev_update_func fp; 2819 2820 pvr2_trace(PVR2_TRACE_CHIPS, "subdev update..."); 2821 2822 if (hdw->tuner_updated || hdw->force_dirty) { 2823 struct tuner_setup setup; 2824 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)", 2825 hdw->tuner_type); 2826 if (((int)(hdw->tuner_type)) >= 0) { 2827 memset(&setup, 0, sizeof(setup)); 2828 setup.addr = ADDR_UNSET; 2829 setup.type = hdw->tuner_type; 2830 setup.mode_mask = T_RADIO | T_ANALOG_TV; 2831 v4l2_device_call_all(&hdw->v4l2_dev, 0, 2832 tuner, s_type_addr, &setup); 2833 } 2834 } 2835 2836 if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) { 2837 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard"); 2838 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { 2839 v4l2_device_call_all(&hdw->v4l2_dev, 0, 2840 tuner, s_radio); 2841 } else { 2842 v4l2_std_id vs; 2843 vs = hdw->std_mask_cur; 2844 v4l2_device_call_all(&hdw->v4l2_dev, 0, 2845 video, s_std, vs); 2846 pvr2_hdw_cx25840_vbi_hack(hdw); 2847 } 2848 hdw->tuner_signal_stale = !0; 2849 hdw->cropcap_stale = !0; 2850 } 2851 2852 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness); 2853 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast); 2854 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation); 2855 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue); 2856 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute); 2857 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume); 2858 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance); 2859 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass); 2860 PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble); 2861 2862 if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) { 2863 struct v4l2_tuner vt; 2864 memset(&vt, 0, sizeof(vt)); 2865 vt.type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ? 2866 V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; 2867 vt.audmode = hdw->audiomode_val; 2868 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt); 2869 } 2870 2871 if (hdw->freqDirty || hdw->force_dirty) { 2872 unsigned long fv; 2873 struct v4l2_frequency freq; 2874 fv = pvr2_hdw_get_cur_freq(hdw); 2875 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv); 2876 if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw); 2877 memset(&freq, 0, sizeof(freq)); 2878 if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) { 2879 /* ((fv * 1000) / 62500) */ 2880 freq.frequency = (fv * 2) / 125; 2881 } else { 2882 freq.frequency = fv / 62500; 2883 } 2884 /* tuner-core currently doesn't seem to care about this, but 2885 let's set it anyway for completeness. */ 2886 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { 2887 freq.type = V4L2_TUNER_RADIO; 2888 } else { 2889 freq.type = V4L2_TUNER_ANALOG_TV; 2890 } 2891 freq.tuner = 0; 2892 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, 2893 s_frequency, &freq); 2894 } 2895 2896 if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) { 2897 struct v4l2_subdev_format format = { 2898 .which = V4L2_SUBDEV_FORMAT_ACTIVE, 2899 }; 2900 2901 format.format.width = hdw->res_hor_val; 2902 format.format.height = hdw->res_ver_val; 2903 format.format.code = MEDIA_BUS_FMT_FIXED; 2904 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)", 2905 format.format.width, format.format.height); 2906 v4l2_device_call_all(&hdw->v4l2_dev, 0, pad, set_fmt, 2907 NULL, &format); 2908 } 2909 2910 if (hdw->srate_dirty || hdw->force_dirty) { 2911 u32 val; 2912 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d", 2913 hdw->srate_val); 2914 switch (hdw->srate_val) { 2915 default: 2916 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000: 2917 val = 48000; 2918 break; 2919 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100: 2920 val = 44100; 2921 break; 2922 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000: 2923 val = 32000; 2924 break; 2925 } 2926 v4l2_device_call_all(&hdw->v4l2_dev, 0, 2927 audio, s_clock_freq, val); 2928 } 2929 2930 /* Unable to set crop parameters; there is apparently no equivalent 2931 for VIDIOC_S_CROP */ 2932 2933 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) { 2934 id = sd->grp_id; 2935 if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue; 2936 fp = pvr2_module_update_functions[id]; 2937 if (!fp) continue; 2938 (*fp)(hdw, sd); 2939 } 2940 2941 if (hdw->tuner_signal_stale || hdw->cropcap_stale) { 2942 pvr2_hdw_status_poll(hdw); 2943 } 2944 } 2945 2946 2947 /* Figure out if we need to commit control changes. If so, mark internal 2948 state flags to indicate this fact and return true. Otherwise do nothing 2949 else and return false. */ 2950 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw) 2951 { 2952 unsigned int idx; 2953 struct pvr2_ctrl *cptr; 2954 int value; 2955 int commit_flag = hdw->force_dirty; 2956 char buf[100]; 2957 unsigned int bcnt,ccnt; 2958 2959 for (idx = 0; idx < hdw->control_cnt; idx++) { 2960 cptr = hdw->controls + idx; 2961 if (!cptr->info->is_dirty) continue; 2962 if (!cptr->info->is_dirty(cptr)) continue; 2963 commit_flag = !0; 2964 2965 if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue; 2966 bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ", 2967 cptr->info->name); 2968 value = 0; 2969 cptr->info->get_value(cptr,&value); 2970 pvr2_ctrl_value_to_sym_internal(cptr,~0,value, 2971 buf+bcnt, 2972 sizeof(buf)-bcnt,&ccnt); 2973 bcnt += ccnt; 2974 bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>", 2975 get_ctrl_typename(cptr->info->type)); 2976 pvr2_trace(PVR2_TRACE_CTL, 2977 "/*--TRACE_COMMIT--*/ %.*s", 2978 bcnt,buf); 2979 } 2980 2981 if (!commit_flag) { 2982 /* Nothing has changed */ 2983 return 0; 2984 } 2985 2986 hdw->state_pipeline_config = 0; 2987 trace_stbit("state_pipeline_config",hdw->state_pipeline_config); 2988 pvr2_hdw_state_sched(hdw); 2989 2990 return !0; 2991 } 2992 2993 2994 /* Perform all operations needed to commit all control changes. This must 2995 be performed in synchronization with the pipeline state and is thus 2996 expected to be called as part of the driver's worker thread. Return 2997 true if commit successful, otherwise return false to indicate that 2998 commit isn't possible at this time. */ 2999 static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw) 3000 { 3001 unsigned int idx; 3002 struct pvr2_ctrl *cptr; 3003 int disruptive_change; 3004 3005 if (hdw->input_dirty && hdw->state_pathway_ok && 3006 (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ? 3007 PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) != 3008 hdw->pathway_state)) { 3009 /* Change of mode being asked for... */ 3010 hdw->state_pathway_ok = 0; 3011 trace_stbit("state_pathway_ok", hdw->state_pathway_ok); 3012 } 3013 if (!hdw->state_pathway_ok) { 3014 /* Can't commit anything until pathway is ok. */ 3015 return 0; 3016 } 3017 3018 /* Handle some required side effects when the video standard is 3019 changed.... */ 3020 if (hdw->std_dirty) { 3021 int nvres; 3022 int gop_size; 3023 if (hdw->std_mask_cur & V4L2_STD_525_60) { 3024 nvres = 480; 3025 gop_size = 15; 3026 } else { 3027 nvres = 576; 3028 gop_size = 12; 3029 } 3030 /* Rewrite the vertical resolution to be appropriate to the 3031 video standard that has been selected. */ 3032 if (nvres != hdw->res_ver_val) { 3033 hdw->res_ver_val = nvres; 3034 hdw->res_ver_dirty = !0; 3035 } 3036 /* Rewrite the GOP size to be appropriate to the video 3037 standard that has been selected. */ 3038 if (gop_size != hdw->enc_ctl_state.video_gop_size) { 3039 struct v4l2_ext_controls cs; 3040 struct v4l2_ext_control c1; 3041 memset(&cs, 0, sizeof(cs)); 3042 memset(&c1, 0, sizeof(c1)); 3043 cs.controls = &c1; 3044 cs.count = 1; 3045 c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE; 3046 c1.value = gop_size; 3047 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs, 3048 VIDIOC_S_EXT_CTRLS); 3049 } 3050 } 3051 3052 /* The broadcast decoder can only scale down, so if 3053 * res_*_dirty && crop window < output format ==> enlarge crop. 3054 * 3055 * The mpeg encoder receives fields of res_hor_val dots and 3056 * res_ver_val halflines. Limits: hor<=720, ver<=576. 3057 */ 3058 if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) { 3059 hdw->cropw_val = hdw->res_hor_val; 3060 hdw->cropw_dirty = !0; 3061 } else if (hdw->cropw_dirty) { 3062 hdw->res_hor_dirty = !0; /* must rescale */ 3063 hdw->res_hor_val = min(720, hdw->cropw_val); 3064 } 3065 if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) { 3066 hdw->croph_val = hdw->res_ver_val; 3067 hdw->croph_dirty = !0; 3068 } else if (hdw->croph_dirty) { 3069 int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576; 3070 hdw->res_ver_dirty = !0; 3071 hdw->res_ver_val = min(nvres, hdw->croph_val); 3072 } 3073 3074 /* If any of the below has changed, then we can't do the update 3075 while the pipeline is running. Pipeline must be paused first 3076 and decoder -> encoder connection be made quiescent before we 3077 can proceed. */ 3078 disruptive_change = 3079 (hdw->std_dirty || 3080 hdw->enc_unsafe_stale || 3081 hdw->srate_dirty || 3082 hdw->res_ver_dirty || 3083 hdw->res_hor_dirty || 3084 hdw->cropw_dirty || 3085 hdw->croph_dirty || 3086 hdw->input_dirty || 3087 (hdw->active_stream_type != hdw->desired_stream_type)); 3088 if (disruptive_change && !hdw->state_pipeline_idle) { 3089 /* Pipeline is not idle; we can't proceed. Arrange to 3090 cause pipeline to stop so that we can try this again 3091 later.... */ 3092 hdw->state_pipeline_pause = !0; 3093 return 0; 3094 } 3095 3096 if (hdw->srate_dirty) { 3097 /* Write new sample rate into control structure since 3098 * the master copy is stale. We must track srate 3099 * separate from the mpeg control structure because 3100 * other logic also uses this value. */ 3101 struct v4l2_ext_controls cs; 3102 struct v4l2_ext_control c1; 3103 memset(&cs,0,sizeof(cs)); 3104 memset(&c1,0,sizeof(c1)); 3105 cs.controls = &c1; 3106 cs.count = 1; 3107 c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ; 3108 c1.value = hdw->srate_val; 3109 cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS); 3110 } 3111 3112 if (hdw->active_stream_type != hdw->desired_stream_type) { 3113 /* Handle any side effects of stream config here */ 3114 hdw->active_stream_type = hdw->desired_stream_type; 3115 } 3116 3117 if (hdw->hdw_desc->signal_routing_scheme == 3118 PVR2_ROUTING_SCHEME_GOTVIEW) { 3119 u32 b; 3120 /* Handle GOTVIEW audio switching */ 3121 pvr2_hdw_gpio_get_out(hdw,&b); 3122 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { 3123 /* Set GPIO 11 */ 3124 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0); 3125 } else { 3126 /* Clear GPIO 11 */ 3127 pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0); 3128 } 3129 } 3130 3131 /* Check and update state for all sub-devices. */ 3132 pvr2_subdev_update(hdw); 3133 3134 hdw->tuner_updated = 0; 3135 hdw->force_dirty = 0; 3136 for (idx = 0; idx < hdw->control_cnt; idx++) { 3137 cptr = hdw->controls + idx; 3138 if (!cptr->info->clear_dirty) continue; 3139 cptr->info->clear_dirty(cptr); 3140 } 3141 3142 if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) && 3143 hdw->state_encoder_run) { 3144 /* If encoder isn't running or it can't be touched, then 3145 this will get worked out later when we start the 3146 encoder. */ 3147 if (pvr2_encoder_adjust(hdw) < 0) return !0; 3148 } 3149 3150 hdw->state_pipeline_config = !0; 3151 /* Hardware state may have changed in a way to cause the cropping 3152 capabilities to have changed. So mark it stale, which will 3153 cause a later re-fetch. */ 3154 trace_stbit("state_pipeline_config",hdw->state_pipeline_config); 3155 return !0; 3156 } 3157 3158 3159 int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw) 3160 { 3161 int fl; 3162 LOCK_TAKE(hdw->big_lock); 3163 fl = pvr2_hdw_commit_setup(hdw); 3164 LOCK_GIVE(hdw->big_lock); 3165 if (!fl) return 0; 3166 return pvr2_hdw_wait(hdw,0); 3167 } 3168 3169 3170 static void pvr2_hdw_worker_poll(struct work_struct *work) 3171 { 3172 int fl = 0; 3173 struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll); 3174 LOCK_TAKE(hdw->big_lock); do { 3175 fl = pvr2_hdw_state_eval(hdw); 3176 } while (0); LOCK_GIVE(hdw->big_lock); 3177 if (fl && hdw->state_func) { 3178 hdw->state_func(hdw->state_data); 3179 } 3180 } 3181 3182 3183 static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state) 3184 { 3185 return wait_event_interruptible( 3186 hdw->state_wait_data, 3187 (hdw->state_stale == 0) && 3188 (!state || (hdw->master_state != state))); 3189 } 3190 3191 3192 /* Return name for this driver instance */ 3193 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw) 3194 { 3195 return hdw->name; 3196 } 3197 3198 3199 const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw) 3200 { 3201 return hdw->hdw_desc->description; 3202 } 3203 3204 3205 const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw) 3206 { 3207 return hdw->hdw_desc->shortname; 3208 } 3209 3210 3211 int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw) 3212 { 3213 int result; 3214 LOCK_TAKE(hdw->ctl_lock); do { 3215 hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED; 3216 result = pvr2_send_request(hdw, 3217 hdw->cmd_buffer,1, 3218 hdw->cmd_buffer,1); 3219 if (result < 0) break; 3220 result = (hdw->cmd_buffer[0] != 0); 3221 } while(0); LOCK_GIVE(hdw->ctl_lock); 3222 return result; 3223 } 3224 3225 3226 /* Execute poll of tuner status */ 3227 void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw) 3228 { 3229 LOCK_TAKE(hdw->big_lock); do { 3230 pvr2_hdw_status_poll(hdw); 3231 } while (0); LOCK_GIVE(hdw->big_lock); 3232 } 3233 3234 3235 static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw) 3236 { 3237 if (!hdw->cropcap_stale) { 3238 return 0; 3239 } 3240 pvr2_hdw_status_poll(hdw); 3241 if (hdw->cropcap_stale) { 3242 return -EIO; 3243 } 3244 return 0; 3245 } 3246 3247 3248 /* Return information about cropping capabilities */ 3249 int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp) 3250 { 3251 int stat = 0; 3252 LOCK_TAKE(hdw->big_lock); 3253 stat = pvr2_hdw_check_cropcap(hdw); 3254 if (!stat) { 3255 memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info)); 3256 } 3257 LOCK_GIVE(hdw->big_lock); 3258 return stat; 3259 } 3260 3261 3262 /* Return information about the tuner */ 3263 int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp) 3264 { 3265 LOCK_TAKE(hdw->big_lock); do { 3266 if (hdw->tuner_signal_stale) { 3267 pvr2_hdw_status_poll(hdw); 3268 } 3269 memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner)); 3270 } while (0); LOCK_GIVE(hdw->big_lock); 3271 return 0; 3272 } 3273 3274 3275 /* Get handle to video output stream */ 3276 struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp) 3277 { 3278 return hp->vid_stream; 3279 } 3280 3281 3282 void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw) 3283 { 3284 int nr = pvr2_hdw_get_unit_number(hdw); 3285 LOCK_TAKE(hdw->big_lock); 3286 do { 3287 pr_info("pvrusb2: ================= START STATUS CARD #%d =================\n", nr); 3288 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status); 3289 pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:"); 3290 cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2"); 3291 pvr2_hdw_state_log_state(hdw); 3292 pr_info("pvrusb2: ================== END STATUS CARD #%d ==================\n", nr); 3293 } while (0); 3294 LOCK_GIVE(hdw->big_lock); 3295 } 3296 3297 3298 /* Grab EEPROM contents, needed for direct method. */ 3299 #define EEPROM_SIZE 8192 3300 #define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__) 3301 static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw) 3302 { 3303 struct i2c_msg msg[2]; 3304 u8 *eeprom; 3305 u8 iadd[2]; 3306 u8 addr; 3307 u16 eepromSize; 3308 unsigned int offs; 3309 int ret; 3310 int mode16 = 0; 3311 unsigned pcnt,tcnt; 3312 eeprom = kmalloc(EEPROM_SIZE,GFP_KERNEL); 3313 if (!eeprom) { 3314 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3315 "Failed to allocate memory required to read eeprom"); 3316 return NULL; 3317 } 3318 3319 trace_eeprom("Value for eeprom addr from controller was 0x%x", 3320 hdw->eeprom_addr); 3321 addr = hdw->eeprom_addr; 3322 /* Seems that if the high bit is set, then the *real* eeprom 3323 address is shifted right now bit position (noticed this in 3324 newer PVR USB2 hardware) */ 3325 if (addr & 0x80) addr >>= 1; 3326 3327 /* FX2 documentation states that a 16bit-addressed eeprom is 3328 expected if the I2C address is an odd number (yeah, this is 3329 strange but it's what they do) */ 3330 mode16 = (addr & 1); 3331 eepromSize = (mode16 ? EEPROM_SIZE : 256); 3332 trace_eeprom("Examining %d byte eeprom at location 0x%x using %d bit addressing", 3333 eepromSize, addr, 3334 mode16 ? 16 : 8); 3335 3336 msg[0].addr = addr; 3337 msg[0].flags = 0; 3338 msg[0].len = mode16 ? 2 : 1; 3339 msg[0].buf = iadd; 3340 msg[1].addr = addr; 3341 msg[1].flags = I2C_M_RD; 3342 3343 /* We have to do the actual eeprom data fetch ourselves, because 3344 (1) we're only fetching part of the eeprom, and (2) if we were 3345 getting the whole thing our I2C driver can't grab it in one 3346 pass - which is what tveeprom is otherwise going to attempt */ 3347 memset(eeprom,0,EEPROM_SIZE); 3348 for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) { 3349 pcnt = 16; 3350 if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt; 3351 offs = tcnt + (eepromSize - EEPROM_SIZE); 3352 if (mode16) { 3353 iadd[0] = offs >> 8; 3354 iadd[1] = offs; 3355 } else { 3356 iadd[0] = offs; 3357 } 3358 msg[1].len = pcnt; 3359 msg[1].buf = eeprom+tcnt; 3360 if ((ret = i2c_transfer(&hdw->i2c_adap, 3361 msg,ARRAY_SIZE(msg))) != 2) { 3362 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3363 "eeprom fetch set offs err=%d",ret); 3364 kfree(eeprom); 3365 return NULL; 3366 } 3367 } 3368 return eeprom; 3369 } 3370 3371 3372 void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw, 3373 int mode, 3374 int enable_flag) 3375 { 3376 int ret; 3377 u16 address; 3378 unsigned int pipe; 3379 LOCK_TAKE(hdw->big_lock); do { 3380 if ((hdw->fw_buffer == NULL) == !enable_flag) break; 3381 3382 if (!enable_flag) { 3383 pvr2_trace(PVR2_TRACE_FIRMWARE, 3384 "Cleaning up after CPU firmware fetch"); 3385 kfree(hdw->fw_buffer); 3386 hdw->fw_buffer = NULL; 3387 hdw->fw_size = 0; 3388 if (hdw->fw_cpu_flag) { 3389 /* Now release the CPU. It will disconnect 3390 and reconnect later. */ 3391 pvr2_hdw_cpureset_assert(hdw,0); 3392 } 3393 break; 3394 } 3395 3396 hdw->fw_cpu_flag = (mode != 2); 3397 if (hdw->fw_cpu_flag) { 3398 hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000; 3399 pvr2_trace(PVR2_TRACE_FIRMWARE, 3400 "Preparing to suck out CPU firmware (size=%u)", 3401 hdw->fw_size); 3402 hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL); 3403 if (!hdw->fw_buffer) { 3404 hdw->fw_size = 0; 3405 break; 3406 } 3407 3408 /* We have to hold the CPU during firmware upload. */ 3409 pvr2_hdw_cpureset_assert(hdw,1); 3410 3411 /* download the firmware from address 0000-1fff in 2048 3412 (=0x800) bytes chunk. */ 3413 3414 pvr2_trace(PVR2_TRACE_FIRMWARE, 3415 "Grabbing CPU firmware"); 3416 pipe = usb_rcvctrlpipe(hdw->usb_dev, 0); 3417 for(address = 0; address < hdw->fw_size; 3418 address += 0x800) { 3419 ret = usb_control_msg(hdw->usb_dev,pipe, 3420 0xa0,0xc0, 3421 address,0, 3422 hdw->fw_buffer+address, 3423 0x800,HZ); 3424 if (ret < 0) break; 3425 } 3426 3427 pvr2_trace(PVR2_TRACE_FIRMWARE, 3428 "Done grabbing CPU firmware"); 3429 } else { 3430 pvr2_trace(PVR2_TRACE_FIRMWARE, 3431 "Sucking down EEPROM contents"); 3432 hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw); 3433 if (!hdw->fw_buffer) { 3434 pvr2_trace(PVR2_TRACE_FIRMWARE, 3435 "EEPROM content suck failed."); 3436 break; 3437 } 3438 hdw->fw_size = EEPROM_SIZE; 3439 pvr2_trace(PVR2_TRACE_FIRMWARE, 3440 "Done sucking down EEPROM contents"); 3441 } 3442 3443 } while (0); LOCK_GIVE(hdw->big_lock); 3444 } 3445 3446 3447 /* Return true if we're in a mode for retrieval CPU firmware */ 3448 int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw) 3449 { 3450 return hdw->fw_buffer != NULL; 3451 } 3452 3453 3454 int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs, 3455 char *buf,unsigned int cnt) 3456 { 3457 int ret = -EINVAL; 3458 LOCK_TAKE(hdw->big_lock); do { 3459 if (!buf) break; 3460 if (!cnt) break; 3461 3462 if (!hdw->fw_buffer) { 3463 ret = -EIO; 3464 break; 3465 } 3466 3467 if (offs >= hdw->fw_size) { 3468 pvr2_trace(PVR2_TRACE_FIRMWARE, 3469 "Read firmware data offs=%d EOF", 3470 offs); 3471 ret = 0; 3472 break; 3473 } 3474 3475 if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs; 3476 3477 memcpy(buf,hdw->fw_buffer+offs,cnt); 3478 3479 pvr2_trace(PVR2_TRACE_FIRMWARE, 3480 "Read firmware data offs=%d cnt=%d", 3481 offs,cnt); 3482 ret = cnt; 3483 } while (0); LOCK_GIVE(hdw->big_lock); 3484 3485 return ret; 3486 } 3487 3488 3489 int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw, 3490 enum pvr2_v4l_type index) 3491 { 3492 switch (index) { 3493 case pvr2_v4l_type_video: return hdw->v4l_minor_number_video; 3494 case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi; 3495 case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio; 3496 default: return -1; 3497 } 3498 } 3499 3500 3501 /* Store a v4l minor device number */ 3502 void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw, 3503 enum pvr2_v4l_type index,int v) 3504 { 3505 switch (index) { 3506 case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;break; 3507 case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;break; 3508 case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;break; 3509 default: break; 3510 } 3511 } 3512 3513 3514 static void pvr2_ctl_write_complete(struct urb *urb) 3515 { 3516 struct pvr2_hdw *hdw = urb->context; 3517 hdw->ctl_write_pend_flag = 0; 3518 if (hdw->ctl_read_pend_flag) return; 3519 complete(&hdw->ctl_done); 3520 } 3521 3522 3523 static void pvr2_ctl_read_complete(struct urb *urb) 3524 { 3525 struct pvr2_hdw *hdw = urb->context; 3526 hdw->ctl_read_pend_flag = 0; 3527 if (hdw->ctl_write_pend_flag) return; 3528 complete(&hdw->ctl_done); 3529 } 3530 3531 struct hdw_timer { 3532 struct timer_list timer; 3533 struct pvr2_hdw *hdw; 3534 }; 3535 3536 static void pvr2_ctl_timeout(struct timer_list *t) 3537 { 3538 struct hdw_timer *timer = from_timer(timer, t, timer); 3539 struct pvr2_hdw *hdw = timer->hdw; 3540 3541 if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) { 3542 hdw->ctl_timeout_flag = !0; 3543 if (hdw->ctl_write_pend_flag) 3544 usb_unlink_urb(hdw->ctl_write_urb); 3545 if (hdw->ctl_read_pend_flag) 3546 usb_unlink_urb(hdw->ctl_read_urb); 3547 } 3548 } 3549 3550 3551 /* Issue a command and get a response from the device. This extended 3552 version includes a probe flag (which if set means that device errors 3553 should not be logged or treated as fatal) and a timeout in jiffies. 3554 This can be used to non-lethally probe the health of endpoint 1. */ 3555 static int pvr2_send_request_ex(struct pvr2_hdw *hdw, 3556 unsigned int timeout,int probe_fl, 3557 void *write_data,unsigned int write_len, 3558 void *read_data,unsigned int read_len) 3559 { 3560 unsigned int idx; 3561 int status = 0; 3562 struct hdw_timer timer = { 3563 .hdw = hdw, 3564 }; 3565 3566 if (!hdw->ctl_lock_held) { 3567 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3568 "Attempted to execute control transfer without lock!!"); 3569 return -EDEADLK; 3570 } 3571 if (!hdw->flag_ok && !probe_fl) { 3572 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3573 "Attempted to execute control transfer when device not ok"); 3574 return -EIO; 3575 } 3576 if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) { 3577 if (!probe_fl) { 3578 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3579 "Attempted to execute control transfer when USB is disconnected"); 3580 } 3581 return -ENOTTY; 3582 } 3583 3584 /* Ensure that we have sane parameters */ 3585 if (!write_data) write_len = 0; 3586 if (!read_data) read_len = 0; 3587 if (write_len > PVR2_CTL_BUFFSIZE) { 3588 pvr2_trace( 3589 PVR2_TRACE_ERROR_LEGS, 3590 "Attempted to execute %d byte control-write transfer (limit=%d)", 3591 write_len,PVR2_CTL_BUFFSIZE); 3592 return -EINVAL; 3593 } 3594 if (read_len > PVR2_CTL_BUFFSIZE) { 3595 pvr2_trace( 3596 PVR2_TRACE_ERROR_LEGS, 3597 "Attempted to execute %d byte control-read transfer (limit=%d)", 3598 write_len,PVR2_CTL_BUFFSIZE); 3599 return -EINVAL; 3600 } 3601 if ((!write_len) && (!read_len)) { 3602 pvr2_trace( 3603 PVR2_TRACE_ERROR_LEGS, 3604 "Attempted to execute null control transfer?"); 3605 return -EINVAL; 3606 } 3607 3608 3609 hdw->cmd_debug_state = 1; 3610 if (write_len && write_data) 3611 hdw->cmd_debug_code = ((unsigned char *)write_data)[0]; 3612 else 3613 hdw->cmd_debug_code = 0; 3614 hdw->cmd_debug_write_len = write_len; 3615 hdw->cmd_debug_read_len = read_len; 3616 3617 /* Initialize common stuff */ 3618 init_completion(&hdw->ctl_done); 3619 hdw->ctl_timeout_flag = 0; 3620 hdw->ctl_write_pend_flag = 0; 3621 hdw->ctl_read_pend_flag = 0; 3622 timer_setup_on_stack(&timer.timer, pvr2_ctl_timeout, 0); 3623 timer.timer.expires = jiffies + timeout; 3624 3625 if (write_len && write_data) { 3626 hdw->cmd_debug_state = 2; 3627 /* Transfer write data to internal buffer */ 3628 for (idx = 0; idx < write_len; idx++) { 3629 hdw->ctl_write_buffer[idx] = 3630 ((unsigned char *)write_data)[idx]; 3631 } 3632 /* Initiate a write request */ 3633 usb_fill_bulk_urb(hdw->ctl_write_urb, 3634 hdw->usb_dev, 3635 usb_sndbulkpipe(hdw->usb_dev, 3636 PVR2_CTL_WRITE_ENDPOINT), 3637 hdw->ctl_write_buffer, 3638 write_len, 3639 pvr2_ctl_write_complete, 3640 hdw); 3641 hdw->ctl_write_urb->actual_length = 0; 3642 hdw->ctl_write_pend_flag = !0; 3643 if (usb_urb_ep_type_check(hdw->ctl_write_urb)) { 3644 pvr2_trace( 3645 PVR2_TRACE_ERROR_LEGS, 3646 "Invalid write control endpoint"); 3647 return -EINVAL; 3648 } 3649 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL); 3650 if (status < 0) { 3651 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3652 "Failed to submit write-control URB status=%d", 3653 status); 3654 hdw->ctl_write_pend_flag = 0; 3655 goto done; 3656 } 3657 } 3658 3659 if (read_len) { 3660 hdw->cmd_debug_state = 3; 3661 memset(hdw->ctl_read_buffer,0x43,read_len); 3662 /* Initiate a read request */ 3663 usb_fill_bulk_urb(hdw->ctl_read_urb, 3664 hdw->usb_dev, 3665 usb_rcvbulkpipe(hdw->usb_dev, 3666 PVR2_CTL_READ_ENDPOINT), 3667 hdw->ctl_read_buffer, 3668 read_len, 3669 pvr2_ctl_read_complete, 3670 hdw); 3671 hdw->ctl_read_urb->actual_length = 0; 3672 hdw->ctl_read_pend_flag = !0; 3673 if (usb_urb_ep_type_check(hdw->ctl_read_urb)) { 3674 pvr2_trace( 3675 PVR2_TRACE_ERROR_LEGS, 3676 "Invalid read control endpoint"); 3677 return -EINVAL; 3678 } 3679 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL); 3680 if (status < 0) { 3681 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3682 "Failed to submit read-control URB status=%d", 3683 status); 3684 hdw->ctl_read_pend_flag = 0; 3685 goto done; 3686 } 3687 } 3688 3689 /* Start timer */ 3690 add_timer(&timer.timer); 3691 3692 /* Now wait for all I/O to complete */ 3693 hdw->cmd_debug_state = 4; 3694 while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) { 3695 wait_for_completion(&hdw->ctl_done); 3696 } 3697 hdw->cmd_debug_state = 5; 3698 3699 /* Stop timer */ 3700 del_timer_sync(&timer.timer); 3701 3702 hdw->cmd_debug_state = 6; 3703 status = 0; 3704 3705 if (hdw->ctl_timeout_flag) { 3706 status = -ETIMEDOUT; 3707 if (!probe_fl) { 3708 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3709 "Timed out control-write"); 3710 } 3711 goto done; 3712 } 3713 3714 if (write_len) { 3715 /* Validate results of write request */ 3716 if ((hdw->ctl_write_urb->status != 0) && 3717 (hdw->ctl_write_urb->status != -ENOENT) && 3718 (hdw->ctl_write_urb->status != -ESHUTDOWN) && 3719 (hdw->ctl_write_urb->status != -ECONNRESET)) { 3720 /* USB subsystem is reporting some kind of failure 3721 on the write */ 3722 status = hdw->ctl_write_urb->status; 3723 if (!probe_fl) { 3724 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3725 "control-write URB failure, status=%d", 3726 status); 3727 } 3728 goto done; 3729 } 3730 if (hdw->ctl_write_urb->actual_length < write_len) { 3731 /* Failed to write enough data */ 3732 status = -EIO; 3733 if (!probe_fl) { 3734 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3735 "control-write URB short, expected=%d got=%d", 3736 write_len, 3737 hdw->ctl_write_urb->actual_length); 3738 } 3739 goto done; 3740 } 3741 } 3742 if (read_len && read_data) { 3743 /* Validate results of read request */ 3744 if ((hdw->ctl_read_urb->status != 0) && 3745 (hdw->ctl_read_urb->status != -ENOENT) && 3746 (hdw->ctl_read_urb->status != -ESHUTDOWN) && 3747 (hdw->ctl_read_urb->status != -ECONNRESET)) { 3748 /* USB subsystem is reporting some kind of failure 3749 on the read */ 3750 status = hdw->ctl_read_urb->status; 3751 if (!probe_fl) { 3752 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3753 "control-read URB failure, status=%d", 3754 status); 3755 } 3756 goto done; 3757 } 3758 if (hdw->ctl_read_urb->actual_length < read_len) { 3759 /* Failed to read enough data */ 3760 status = -EIO; 3761 if (!probe_fl) { 3762 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3763 "control-read URB short, expected=%d got=%d", 3764 read_len, 3765 hdw->ctl_read_urb->actual_length); 3766 } 3767 goto done; 3768 } 3769 /* Transfer retrieved data out from internal buffer */ 3770 for (idx = 0; idx < read_len; idx++) { 3771 ((unsigned char *)read_data)[idx] = 3772 hdw->ctl_read_buffer[idx]; 3773 } 3774 } 3775 3776 done: 3777 3778 hdw->cmd_debug_state = 0; 3779 if ((status < 0) && (!probe_fl)) { 3780 pvr2_hdw_render_useless(hdw); 3781 } 3782 destroy_timer_on_stack(&timer.timer); 3783 3784 return status; 3785 } 3786 3787 3788 int pvr2_send_request(struct pvr2_hdw *hdw, 3789 void *write_data,unsigned int write_len, 3790 void *read_data,unsigned int read_len) 3791 { 3792 return pvr2_send_request_ex(hdw,HZ*4,0, 3793 write_data,write_len, 3794 read_data,read_len); 3795 } 3796 3797 3798 static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode) 3799 { 3800 int ret; 3801 unsigned int cnt = 1; 3802 unsigned int args = 0; 3803 LOCK_TAKE(hdw->ctl_lock); 3804 hdw->cmd_buffer[0] = cmdcode & 0xffu; 3805 args = (cmdcode >> 8) & 0xffu; 3806 args = (args > 2) ? 2 : args; 3807 if (args) { 3808 cnt += args; 3809 hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu; 3810 if (args > 1) { 3811 hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu; 3812 } 3813 } 3814 if (pvrusb2_debug & PVR2_TRACE_INIT) { 3815 unsigned int idx; 3816 unsigned int ccnt,bcnt; 3817 char tbuf[50]; 3818 cmdcode &= 0xffu; 3819 bcnt = 0; 3820 ccnt = scnprintf(tbuf+bcnt, 3821 sizeof(tbuf)-bcnt, 3822 "Sending FX2 command 0x%x",cmdcode); 3823 bcnt += ccnt; 3824 for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) { 3825 if (pvr2_fx2cmd_desc[idx].id == cmdcode) { 3826 ccnt = scnprintf(tbuf+bcnt, 3827 sizeof(tbuf)-bcnt, 3828 " \"%s\"", 3829 pvr2_fx2cmd_desc[idx].desc); 3830 bcnt += ccnt; 3831 break; 3832 } 3833 } 3834 if (args) { 3835 ccnt = scnprintf(tbuf+bcnt, 3836 sizeof(tbuf)-bcnt, 3837 " (%u",hdw->cmd_buffer[1]); 3838 bcnt += ccnt; 3839 if (args > 1) { 3840 ccnt = scnprintf(tbuf+bcnt, 3841 sizeof(tbuf)-bcnt, 3842 ",%u",hdw->cmd_buffer[2]); 3843 bcnt += ccnt; 3844 } 3845 ccnt = scnprintf(tbuf+bcnt, 3846 sizeof(tbuf)-bcnt, 3847 ")"); 3848 bcnt += ccnt; 3849 } 3850 pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf); 3851 } 3852 ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0); 3853 LOCK_GIVE(hdw->ctl_lock); 3854 return ret; 3855 } 3856 3857 3858 int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data) 3859 { 3860 int ret; 3861 3862 LOCK_TAKE(hdw->ctl_lock); 3863 3864 hdw->cmd_buffer[0] = FX2CMD_REG_WRITE; /* write register prefix */ 3865 PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data); 3866 hdw->cmd_buffer[5] = 0; 3867 hdw->cmd_buffer[6] = (reg >> 8) & 0xff; 3868 hdw->cmd_buffer[7] = reg & 0xff; 3869 3870 3871 ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0); 3872 3873 LOCK_GIVE(hdw->ctl_lock); 3874 3875 return ret; 3876 } 3877 3878 3879 static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data) 3880 { 3881 int ret = 0; 3882 3883 LOCK_TAKE(hdw->ctl_lock); 3884 3885 hdw->cmd_buffer[0] = FX2CMD_REG_READ; /* read register prefix */ 3886 hdw->cmd_buffer[1] = 0; 3887 hdw->cmd_buffer[2] = 0; 3888 hdw->cmd_buffer[3] = 0; 3889 hdw->cmd_buffer[4] = 0; 3890 hdw->cmd_buffer[5] = 0; 3891 hdw->cmd_buffer[6] = (reg >> 8) & 0xff; 3892 hdw->cmd_buffer[7] = reg & 0xff; 3893 3894 ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4); 3895 *data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0); 3896 3897 LOCK_GIVE(hdw->ctl_lock); 3898 3899 return ret; 3900 } 3901 3902 3903 void pvr2_hdw_render_useless(struct pvr2_hdw *hdw) 3904 { 3905 if (!hdw->flag_ok) return; 3906 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3907 "Device being rendered inoperable"); 3908 if (hdw->vid_stream) { 3909 pvr2_stream_setup(hdw->vid_stream,NULL,0,0); 3910 } 3911 hdw->flag_ok = 0; 3912 trace_stbit("flag_ok",hdw->flag_ok); 3913 pvr2_hdw_state_sched(hdw); 3914 } 3915 3916 3917 void pvr2_hdw_device_reset(struct pvr2_hdw *hdw) 3918 { 3919 int ret; 3920 pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset..."); 3921 ret = usb_lock_device_for_reset(hdw->usb_dev,NULL); 3922 if (ret == 0) { 3923 ret = usb_reset_device(hdw->usb_dev); 3924 usb_unlock_device(hdw->usb_dev); 3925 } else { 3926 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3927 "Failed to lock USB device ret=%d",ret); 3928 } 3929 if (init_pause_msec) { 3930 pvr2_trace(PVR2_TRACE_INFO, 3931 "Waiting %u msec for hardware to settle", 3932 init_pause_msec); 3933 msleep(init_pause_msec); 3934 } 3935 3936 } 3937 3938 3939 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val) 3940 { 3941 char *da; 3942 unsigned int pipe; 3943 int ret; 3944 3945 if (!hdw->usb_dev) return; 3946 3947 da = kmalloc(16, GFP_KERNEL); 3948 3949 if (da == NULL) { 3950 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3951 "Unable to allocate memory to control CPU reset"); 3952 return; 3953 } 3954 3955 pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val); 3956 3957 da[0] = val ? 0x01 : 0x00; 3958 3959 /* Write the CPUCS register on the 8051. The lsb of the register 3960 is the reset bit; a 1 asserts reset while a 0 clears it. */ 3961 pipe = usb_sndctrlpipe(hdw->usb_dev, 0); 3962 ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,HZ); 3963 if (ret < 0) { 3964 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 3965 "cpureset_assert(%d) error=%d",val,ret); 3966 pvr2_hdw_render_useless(hdw); 3967 } 3968 3969 kfree(da); 3970 } 3971 3972 3973 int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw) 3974 { 3975 return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET); 3976 } 3977 3978 3979 int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw) 3980 { 3981 return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON); 3982 } 3983 3984 3985 3986 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw) 3987 { 3988 pvr2_trace(PVR2_TRACE_INIT, 3989 "Requesting decoder reset"); 3990 if (hdw->decoder_client_id) { 3991 v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id, 3992 core, reset, 0); 3993 pvr2_hdw_cx25840_vbi_hack(hdw); 3994 return 0; 3995 } 3996 pvr2_trace(PVR2_TRACE_INIT, 3997 "Unable to reset decoder: nothing attached"); 3998 return -ENOTTY; 3999 } 4000 4001 4002 static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff) 4003 { 4004 hdw->flag_ok = !0; 4005 return pvr2_issue_simple_cmd(hdw, 4006 FX2CMD_HCW_DEMOD_RESETIN | 4007 (1 << 8) | 4008 ((onoff ? 1 : 0) << 16)); 4009 } 4010 4011 4012 static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff) 4013 { 4014 hdw->flag_ok = !0; 4015 return pvr2_issue_simple_cmd(hdw,(onoff ? 4016 FX2CMD_ONAIR_DTV_POWER_ON : 4017 FX2CMD_ONAIR_DTV_POWER_OFF)); 4018 } 4019 4020 4021 static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw, 4022 int onoff) 4023 { 4024 return pvr2_issue_simple_cmd(hdw,(onoff ? 4025 FX2CMD_ONAIR_DTV_STREAMING_ON : 4026 FX2CMD_ONAIR_DTV_STREAMING_OFF)); 4027 } 4028 4029 4030 static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl) 4031 { 4032 int cmode; 4033 /* Compare digital/analog desired setting with current setting. If 4034 they don't match, fix it... */ 4035 cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG); 4036 if (cmode == hdw->pathway_state) { 4037 /* They match; nothing to do */ 4038 return; 4039 } 4040 4041 switch (hdw->hdw_desc->digital_control_scheme) { 4042 case PVR2_DIGITAL_SCHEME_HAUPPAUGE: 4043 pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl); 4044 if (cmode == PVR2_PATHWAY_ANALOG) { 4045 /* If moving to analog mode, also force the decoder 4046 to reset. If no decoder is attached, then it's 4047 ok to ignore this because if/when the decoder 4048 attaches, it will reset itself at that time. */ 4049 pvr2_hdw_cmd_decoder_reset(hdw); 4050 } 4051 break; 4052 case PVR2_DIGITAL_SCHEME_ONAIR: 4053 /* Supposedly we should always have the power on whether in 4054 digital or analog mode. But for now do what appears to 4055 work... */ 4056 pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl); 4057 break; 4058 default: break; 4059 } 4060 4061 pvr2_hdw_untrip_unlocked(hdw); 4062 hdw->pathway_state = cmode; 4063 } 4064 4065 4066 static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff) 4067 { 4068 /* change some GPIO data 4069 * 4070 * note: bit d7 of dir appears to control the LED, 4071 * so we shut it off here. 4072 * 4073 */ 4074 if (onoff) { 4075 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481); 4076 } else { 4077 pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401); 4078 } 4079 pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000); 4080 } 4081 4082 4083 typedef void (*led_method_func)(struct pvr2_hdw *,int); 4084 4085 static led_method_func led_methods[] = { 4086 [PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge, 4087 }; 4088 4089 4090 /* Toggle LED */ 4091 static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff) 4092 { 4093 unsigned int scheme_id; 4094 led_method_func fp; 4095 4096 if ((!onoff) == (!hdw->led_on)) return; 4097 4098 hdw->led_on = onoff != 0; 4099 4100 scheme_id = hdw->hdw_desc->led_scheme; 4101 if (scheme_id < ARRAY_SIZE(led_methods)) { 4102 fp = led_methods[scheme_id]; 4103 } else { 4104 fp = NULL; 4105 } 4106 4107 if (fp) (*fp)(hdw,onoff); 4108 } 4109 4110 4111 /* Stop / start video stream transport */ 4112 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl) 4113 { 4114 int ret; 4115 4116 /* If we're in analog mode, then just issue the usual analog 4117 command. */ 4118 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) { 4119 return pvr2_issue_simple_cmd(hdw, 4120 (runFl ? 4121 FX2CMD_STREAMING_ON : 4122 FX2CMD_STREAMING_OFF)); 4123 /*Note: Not reached */ 4124 } 4125 4126 if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) { 4127 /* Whoops, we don't know what mode we're in... */ 4128 return -EINVAL; 4129 } 4130 4131 /* To get here we have to be in digital mode. The mechanism here 4132 is unfortunately different for different vendors. So we switch 4133 on the device's digital scheme attribute in order to figure out 4134 what to do. */ 4135 switch (hdw->hdw_desc->digital_control_scheme) { 4136 case PVR2_DIGITAL_SCHEME_HAUPPAUGE: 4137 return pvr2_issue_simple_cmd(hdw, 4138 (runFl ? 4139 FX2CMD_HCW_DTV_STREAMING_ON : 4140 FX2CMD_HCW_DTV_STREAMING_OFF)); 4141 case PVR2_DIGITAL_SCHEME_ONAIR: 4142 ret = pvr2_issue_simple_cmd(hdw, 4143 (runFl ? 4144 FX2CMD_STREAMING_ON : 4145 FX2CMD_STREAMING_OFF)); 4146 if (ret) return ret; 4147 return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl); 4148 default: 4149 return -EINVAL; 4150 } 4151 } 4152 4153 4154 /* Evaluate whether or not state_pathway_ok can change */ 4155 static int state_eval_pathway_ok(struct pvr2_hdw *hdw) 4156 { 4157 if (hdw->state_pathway_ok) { 4158 /* Nothing to do if pathway is already ok */ 4159 return 0; 4160 } 4161 if (!hdw->state_pipeline_idle) { 4162 /* Not allowed to change anything if pipeline is not idle */ 4163 return 0; 4164 } 4165 pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV); 4166 hdw->state_pathway_ok = !0; 4167 trace_stbit("state_pathway_ok",hdw->state_pathway_ok); 4168 return !0; 4169 } 4170 4171 4172 /* Evaluate whether or not state_encoder_ok can change */ 4173 static int state_eval_encoder_ok(struct pvr2_hdw *hdw) 4174 { 4175 if (hdw->state_encoder_ok) return 0; 4176 if (hdw->flag_tripped) return 0; 4177 if (hdw->state_encoder_run) return 0; 4178 if (hdw->state_encoder_config) return 0; 4179 if (hdw->state_decoder_run) return 0; 4180 if (hdw->state_usbstream_run) return 0; 4181 if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) { 4182 if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0; 4183 } else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) { 4184 return 0; 4185 } 4186 4187 if (pvr2_upload_firmware2(hdw) < 0) { 4188 hdw->flag_tripped = !0; 4189 trace_stbit("flag_tripped",hdw->flag_tripped); 4190 return !0; 4191 } 4192 hdw->state_encoder_ok = !0; 4193 trace_stbit("state_encoder_ok",hdw->state_encoder_ok); 4194 return !0; 4195 } 4196 4197 4198 /* Evaluate whether or not state_encoder_config can change */ 4199 static int state_eval_encoder_config(struct pvr2_hdw *hdw) 4200 { 4201 if (hdw->state_encoder_config) { 4202 if (hdw->state_encoder_ok) { 4203 if (hdw->state_pipeline_req && 4204 !hdw->state_pipeline_pause) return 0; 4205 } 4206 hdw->state_encoder_config = 0; 4207 hdw->state_encoder_waitok = 0; 4208 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok); 4209 /* paranoia - solve race if timer just completed */ 4210 del_timer_sync(&hdw->encoder_wait_timer); 4211 } else { 4212 if (!hdw->state_pathway_ok || 4213 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) || 4214 !hdw->state_encoder_ok || 4215 !hdw->state_pipeline_idle || 4216 hdw->state_pipeline_pause || 4217 !hdw->state_pipeline_req || 4218 !hdw->state_pipeline_config) { 4219 /* We must reset the enforced wait interval if 4220 anything has happened that might have disturbed 4221 the encoder. This should be a rare case. */ 4222 if (timer_pending(&hdw->encoder_wait_timer)) { 4223 del_timer_sync(&hdw->encoder_wait_timer); 4224 } 4225 if (hdw->state_encoder_waitok) { 4226 /* Must clear the state - therefore we did 4227 something to a state bit and must also 4228 return true. */ 4229 hdw->state_encoder_waitok = 0; 4230 trace_stbit("state_encoder_waitok", 4231 hdw->state_encoder_waitok); 4232 return !0; 4233 } 4234 return 0; 4235 } 4236 if (!hdw->state_encoder_waitok) { 4237 if (!timer_pending(&hdw->encoder_wait_timer)) { 4238 /* waitok flag wasn't set and timer isn't 4239 running. Check flag once more to avoid 4240 a race then start the timer. This is 4241 the point when we measure out a minimal 4242 quiet interval before doing something to 4243 the encoder. */ 4244 if (!hdw->state_encoder_waitok) { 4245 hdw->encoder_wait_timer.expires = 4246 jiffies + msecs_to_jiffies( 4247 TIME_MSEC_ENCODER_WAIT); 4248 add_timer(&hdw->encoder_wait_timer); 4249 } 4250 } 4251 /* We can't continue until we know we have been 4252 quiet for the interval measured by this 4253 timer. */ 4254 return 0; 4255 } 4256 pvr2_encoder_configure(hdw); 4257 if (hdw->state_encoder_ok) hdw->state_encoder_config = !0; 4258 } 4259 trace_stbit("state_encoder_config",hdw->state_encoder_config); 4260 return !0; 4261 } 4262 4263 4264 /* Return true if the encoder should not be running. */ 4265 static int state_check_disable_encoder_run(struct pvr2_hdw *hdw) 4266 { 4267 if (!hdw->state_encoder_ok) { 4268 /* Encoder isn't healthy at the moment, so stop it. */ 4269 return !0; 4270 } 4271 if (!hdw->state_pathway_ok) { 4272 /* Mode is not understood at the moment (i.e. it wants to 4273 change), so encoder must be stopped. */ 4274 return !0; 4275 } 4276 4277 switch (hdw->pathway_state) { 4278 case PVR2_PATHWAY_ANALOG: 4279 if (!hdw->state_decoder_run) { 4280 /* We're in analog mode and the decoder is not 4281 running; thus the encoder should be stopped as 4282 well. */ 4283 return !0; 4284 } 4285 break; 4286 case PVR2_PATHWAY_DIGITAL: 4287 if (hdw->state_encoder_runok) { 4288 /* This is a funny case. We're in digital mode so 4289 really the encoder should be stopped. However 4290 if it really is running, only kill it after 4291 runok has been set. This gives a chance for the 4292 onair quirk to function (encoder must run 4293 briefly first, at least once, before onair 4294 digital streaming can work). */ 4295 return !0; 4296 } 4297 break; 4298 default: 4299 /* Unknown mode; so encoder should be stopped. */ 4300 return !0; 4301 } 4302 4303 /* If we get here, we haven't found a reason to stop the 4304 encoder. */ 4305 return 0; 4306 } 4307 4308 4309 /* Return true if the encoder should be running. */ 4310 static int state_check_enable_encoder_run(struct pvr2_hdw *hdw) 4311 { 4312 if (!hdw->state_encoder_ok) { 4313 /* Don't run the encoder if it isn't healthy... */ 4314 return 0; 4315 } 4316 if (!hdw->state_pathway_ok) { 4317 /* Don't run the encoder if we don't (yet) know what mode 4318 we need to be in... */ 4319 return 0; 4320 } 4321 4322 switch (hdw->pathway_state) { 4323 case PVR2_PATHWAY_ANALOG: 4324 if (hdw->state_decoder_run && hdw->state_decoder_ready) { 4325 /* In analog mode, if the decoder is running, then 4326 run the encoder. */ 4327 return !0; 4328 } 4329 break; 4330 case PVR2_PATHWAY_DIGITAL: 4331 if ((hdw->hdw_desc->digital_control_scheme == 4332 PVR2_DIGITAL_SCHEME_ONAIR) && 4333 !hdw->state_encoder_runok) { 4334 /* This is a quirk. OnAir hardware won't stream 4335 digital until the encoder has been run at least 4336 once, for a minimal period of time (empiricially 4337 measured to be 1/4 second). So if we're on 4338 OnAir hardware and the encoder has never been 4339 run at all, then start the encoder. Normal 4340 state machine logic in the driver will 4341 automatically handle the remaining bits. */ 4342 return !0; 4343 } 4344 break; 4345 default: 4346 /* For completeness (unknown mode; encoder won't run ever) */ 4347 break; 4348 } 4349 /* If we get here, then we haven't found any reason to run the 4350 encoder, so don't run it. */ 4351 return 0; 4352 } 4353 4354 4355 /* Evaluate whether or not state_encoder_run can change */ 4356 static int state_eval_encoder_run(struct pvr2_hdw *hdw) 4357 { 4358 if (hdw->state_encoder_run) { 4359 if (!state_check_disable_encoder_run(hdw)) return 0; 4360 if (hdw->state_encoder_ok) { 4361 del_timer_sync(&hdw->encoder_run_timer); 4362 if (pvr2_encoder_stop(hdw) < 0) return !0; 4363 } 4364 hdw->state_encoder_run = 0; 4365 } else { 4366 if (!state_check_enable_encoder_run(hdw)) return 0; 4367 if (pvr2_encoder_start(hdw) < 0) return !0; 4368 hdw->state_encoder_run = !0; 4369 if (!hdw->state_encoder_runok) { 4370 hdw->encoder_run_timer.expires = jiffies + 4371 msecs_to_jiffies(TIME_MSEC_ENCODER_OK); 4372 add_timer(&hdw->encoder_run_timer); 4373 } 4374 } 4375 trace_stbit("state_encoder_run",hdw->state_encoder_run); 4376 return !0; 4377 } 4378 4379 4380 /* Timeout function for quiescent timer. */ 4381 static void pvr2_hdw_quiescent_timeout(struct timer_list *t) 4382 { 4383 struct pvr2_hdw *hdw = from_timer(hdw, t, quiescent_timer); 4384 hdw->state_decoder_quiescent = !0; 4385 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent); 4386 hdw->state_stale = !0; 4387 schedule_work(&hdw->workpoll); 4388 } 4389 4390 4391 /* Timeout function for decoder stabilization timer. */ 4392 static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *t) 4393 { 4394 struct pvr2_hdw *hdw = from_timer(hdw, t, decoder_stabilization_timer); 4395 hdw->state_decoder_ready = !0; 4396 trace_stbit("state_decoder_ready", hdw->state_decoder_ready); 4397 hdw->state_stale = !0; 4398 schedule_work(&hdw->workpoll); 4399 } 4400 4401 4402 /* Timeout function for encoder wait timer. */ 4403 static void pvr2_hdw_encoder_wait_timeout(struct timer_list *t) 4404 { 4405 struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_wait_timer); 4406 hdw->state_encoder_waitok = !0; 4407 trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok); 4408 hdw->state_stale = !0; 4409 schedule_work(&hdw->workpoll); 4410 } 4411 4412 4413 /* Timeout function for encoder run timer. */ 4414 static void pvr2_hdw_encoder_run_timeout(struct timer_list *t) 4415 { 4416 struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_run_timer); 4417 if (!hdw->state_encoder_runok) { 4418 hdw->state_encoder_runok = !0; 4419 trace_stbit("state_encoder_runok",hdw->state_encoder_runok); 4420 hdw->state_stale = !0; 4421 schedule_work(&hdw->workpoll); 4422 } 4423 } 4424 4425 4426 /* Evaluate whether or not state_decoder_run can change */ 4427 static int state_eval_decoder_run(struct pvr2_hdw *hdw) 4428 { 4429 if (hdw->state_decoder_run) { 4430 if (hdw->state_encoder_ok) { 4431 if (hdw->state_pipeline_req && 4432 !hdw->state_pipeline_pause && 4433 hdw->state_pathway_ok) return 0; 4434 } 4435 if (!hdw->flag_decoder_missed) { 4436 pvr2_decoder_enable(hdw,0); 4437 } 4438 hdw->state_decoder_quiescent = 0; 4439 hdw->state_decoder_run = 0; 4440 /* paranoia - solve race if timer(s) just completed */ 4441 del_timer_sync(&hdw->quiescent_timer); 4442 /* Kill the stabilization timer, in case we're killing the 4443 encoder before the previous stabilization interval has 4444 been properly timed. */ 4445 del_timer_sync(&hdw->decoder_stabilization_timer); 4446 hdw->state_decoder_ready = 0; 4447 } else { 4448 if (!hdw->state_decoder_quiescent) { 4449 if (!timer_pending(&hdw->quiescent_timer)) { 4450 /* We don't do something about the 4451 quiescent timer until right here because 4452 we also want to catch cases where the 4453 decoder was already not running (like 4454 after initialization) as opposed to 4455 knowing that we had just stopped it. 4456 The second flag check is here to cover a 4457 race - the timer could have run and set 4458 this flag just after the previous check 4459 but before we did the pending check. */ 4460 if (!hdw->state_decoder_quiescent) { 4461 hdw->quiescent_timer.expires = 4462 jiffies + msecs_to_jiffies( 4463 TIME_MSEC_DECODER_WAIT); 4464 add_timer(&hdw->quiescent_timer); 4465 } 4466 } 4467 /* Don't allow decoder to start again until it has 4468 been quiesced first. This little detail should 4469 hopefully further stabilize the encoder. */ 4470 return 0; 4471 } 4472 if (!hdw->state_pathway_ok || 4473 (hdw->pathway_state != PVR2_PATHWAY_ANALOG) || 4474 !hdw->state_pipeline_req || 4475 hdw->state_pipeline_pause || 4476 !hdw->state_pipeline_config || 4477 !hdw->state_encoder_config || 4478 !hdw->state_encoder_ok) return 0; 4479 del_timer_sync(&hdw->quiescent_timer); 4480 if (hdw->flag_decoder_missed) return 0; 4481 if (pvr2_decoder_enable(hdw,!0) < 0) return 0; 4482 hdw->state_decoder_quiescent = 0; 4483 hdw->state_decoder_ready = 0; 4484 hdw->state_decoder_run = !0; 4485 if (hdw->decoder_client_id == PVR2_CLIENT_ID_SAA7115) { 4486 hdw->decoder_stabilization_timer.expires = 4487 jiffies + msecs_to_jiffies( 4488 TIME_MSEC_DECODER_STABILIZATION_WAIT); 4489 add_timer(&hdw->decoder_stabilization_timer); 4490 } else { 4491 hdw->state_decoder_ready = !0; 4492 } 4493 } 4494 trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent); 4495 trace_stbit("state_decoder_run",hdw->state_decoder_run); 4496 trace_stbit("state_decoder_ready", hdw->state_decoder_ready); 4497 return !0; 4498 } 4499 4500 4501 /* Evaluate whether or not state_usbstream_run can change */ 4502 static int state_eval_usbstream_run(struct pvr2_hdw *hdw) 4503 { 4504 if (hdw->state_usbstream_run) { 4505 int fl = !0; 4506 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) { 4507 fl = (hdw->state_encoder_ok && 4508 hdw->state_encoder_run); 4509 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) && 4510 (hdw->hdw_desc->flag_digital_requires_cx23416)) { 4511 fl = hdw->state_encoder_ok; 4512 } 4513 if (fl && 4514 hdw->state_pipeline_req && 4515 !hdw->state_pipeline_pause && 4516 hdw->state_pathway_ok) { 4517 return 0; 4518 } 4519 pvr2_hdw_cmd_usbstream(hdw,0); 4520 hdw->state_usbstream_run = 0; 4521 } else { 4522 if (!hdw->state_pipeline_req || 4523 hdw->state_pipeline_pause || 4524 !hdw->state_pathway_ok) return 0; 4525 if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) { 4526 if (!hdw->state_encoder_ok || 4527 !hdw->state_encoder_run) return 0; 4528 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) && 4529 (hdw->hdw_desc->flag_digital_requires_cx23416)) { 4530 if (!hdw->state_encoder_ok) return 0; 4531 if (hdw->state_encoder_run) return 0; 4532 if (hdw->hdw_desc->digital_control_scheme == 4533 PVR2_DIGITAL_SCHEME_ONAIR) { 4534 /* OnAir digital receivers won't stream 4535 unless the analog encoder has run first. 4536 Why? I have no idea. But don't even 4537 try until we know the analog side is 4538 known to have run. */ 4539 if (!hdw->state_encoder_runok) return 0; 4540 } 4541 } 4542 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0; 4543 hdw->state_usbstream_run = !0; 4544 } 4545 trace_stbit("state_usbstream_run",hdw->state_usbstream_run); 4546 return !0; 4547 } 4548 4549 4550 /* Attempt to configure pipeline, if needed */ 4551 static int state_eval_pipeline_config(struct pvr2_hdw *hdw) 4552 { 4553 if (hdw->state_pipeline_config || 4554 hdw->state_pipeline_pause) return 0; 4555 pvr2_hdw_commit_execute(hdw); 4556 return !0; 4557 } 4558 4559 4560 /* Update pipeline idle and pipeline pause tracking states based on other 4561 inputs. This must be called whenever the other relevant inputs have 4562 changed. */ 4563 static int state_update_pipeline_state(struct pvr2_hdw *hdw) 4564 { 4565 unsigned int st; 4566 int updatedFl = 0; 4567 /* Update pipeline state */ 4568 st = !(hdw->state_encoder_run || 4569 hdw->state_decoder_run || 4570 hdw->state_usbstream_run || 4571 (!hdw->state_decoder_quiescent)); 4572 if (!st != !hdw->state_pipeline_idle) { 4573 hdw->state_pipeline_idle = st; 4574 updatedFl = !0; 4575 } 4576 if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) { 4577 hdw->state_pipeline_pause = 0; 4578 updatedFl = !0; 4579 } 4580 return updatedFl; 4581 } 4582 4583 4584 typedef int (*state_eval_func)(struct pvr2_hdw *); 4585 4586 /* Set of functions to be run to evaluate various states in the driver. */ 4587 static const state_eval_func eval_funcs[] = { 4588 state_eval_pathway_ok, 4589 state_eval_pipeline_config, 4590 state_eval_encoder_ok, 4591 state_eval_encoder_config, 4592 state_eval_decoder_run, 4593 state_eval_encoder_run, 4594 state_eval_usbstream_run, 4595 }; 4596 4597 4598 /* Process various states and return true if we did anything interesting. */ 4599 static int pvr2_hdw_state_update(struct pvr2_hdw *hdw) 4600 { 4601 unsigned int i; 4602 int state_updated = 0; 4603 int check_flag; 4604 4605 if (!hdw->state_stale) return 0; 4606 if ((hdw->fw1_state != FW1_STATE_OK) || 4607 !hdw->flag_ok) { 4608 hdw->state_stale = 0; 4609 return !0; 4610 } 4611 /* This loop is the heart of the entire driver. It keeps trying to 4612 evaluate various bits of driver state until nothing changes for 4613 one full iteration. Each "bit of state" tracks some global 4614 aspect of the driver, e.g. whether decoder should run, if 4615 pipeline is configured, usb streaming is on, etc. We separately 4616 evaluate each of those questions based on other driver state to 4617 arrive at the correct running configuration. */ 4618 do { 4619 check_flag = 0; 4620 state_update_pipeline_state(hdw); 4621 /* Iterate over each bit of state */ 4622 for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) { 4623 if ((*eval_funcs[i])(hdw)) { 4624 check_flag = !0; 4625 state_updated = !0; 4626 state_update_pipeline_state(hdw); 4627 } 4628 } 4629 } while (check_flag && hdw->flag_ok); 4630 hdw->state_stale = 0; 4631 trace_stbit("state_stale",hdw->state_stale); 4632 return state_updated; 4633 } 4634 4635 4636 static unsigned int print_input_mask(unsigned int msk, 4637 char *buf,unsigned int acnt) 4638 { 4639 unsigned int idx,ccnt; 4640 unsigned int tcnt = 0; 4641 for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) { 4642 if (!((1 << idx) & msk)) continue; 4643 ccnt = scnprintf(buf+tcnt, 4644 acnt-tcnt, 4645 "%s%s", 4646 (tcnt ? ", " : ""), 4647 control_values_input[idx]); 4648 tcnt += ccnt; 4649 } 4650 return tcnt; 4651 } 4652 4653 4654 static const char *pvr2_pathway_state_name(int id) 4655 { 4656 switch (id) { 4657 case PVR2_PATHWAY_ANALOG: return "analog"; 4658 case PVR2_PATHWAY_DIGITAL: return "digital"; 4659 default: return "unknown"; 4660 } 4661 } 4662 4663 4664 static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which, 4665 char *buf,unsigned int acnt) 4666 { 4667 switch (which) { 4668 case 0: 4669 return scnprintf( 4670 buf,acnt, 4671 "driver:%s%s%s%s%s <mode=%s>", 4672 (hdw->flag_ok ? " <ok>" : " <fail>"), 4673 (hdw->flag_init_ok ? " <init>" : " <uninitialized>"), 4674 (hdw->flag_disconnected ? " <disconnected>" : 4675 " <connected>"), 4676 (hdw->flag_tripped ? " <tripped>" : ""), 4677 (hdw->flag_decoder_missed ? " <no decoder>" : ""), 4678 pvr2_pathway_state_name(hdw->pathway_state)); 4679 4680 case 1: 4681 return scnprintf( 4682 buf,acnt, 4683 "pipeline:%s%s%s%s", 4684 (hdw->state_pipeline_idle ? " <idle>" : ""), 4685 (hdw->state_pipeline_config ? 4686 " <configok>" : " <stale>"), 4687 (hdw->state_pipeline_req ? " <req>" : ""), 4688 (hdw->state_pipeline_pause ? " <pause>" : "")); 4689 case 2: 4690 return scnprintf( 4691 buf,acnt, 4692 "worker:%s%s%s%s%s%s%s", 4693 (hdw->state_decoder_run ? 4694 (hdw->state_decoder_ready ? 4695 "<decode:run>" : " <decode:start>") : 4696 (hdw->state_decoder_quiescent ? 4697 "" : " <decode:stop>")), 4698 (hdw->state_decoder_quiescent ? 4699 " <decode:quiescent>" : ""), 4700 (hdw->state_encoder_ok ? 4701 "" : " <encode:init>"), 4702 (hdw->state_encoder_run ? 4703 (hdw->state_encoder_runok ? 4704 " <encode:run>" : 4705 " <encode:firstrun>") : 4706 (hdw->state_encoder_runok ? 4707 " <encode:stop>" : 4708 " <encode:virgin>")), 4709 (hdw->state_encoder_config ? 4710 " <encode:configok>" : 4711 (hdw->state_encoder_waitok ? 4712 "" : " <encode:waitok>")), 4713 (hdw->state_usbstream_run ? 4714 " <usb:run>" : " <usb:stop>"), 4715 (hdw->state_pathway_ok ? 4716 " <pathway:ok>" : "")); 4717 case 3: 4718 return scnprintf( 4719 buf,acnt, 4720 "state: %s", 4721 pvr2_get_state_name(hdw->master_state)); 4722 case 4: { 4723 unsigned int tcnt = 0; 4724 unsigned int ccnt; 4725 4726 ccnt = scnprintf(buf, 4727 acnt, 4728 "Hardware supported inputs: "); 4729 tcnt += ccnt; 4730 tcnt += print_input_mask(hdw->input_avail_mask, 4731 buf+tcnt, 4732 acnt-tcnt); 4733 if (hdw->input_avail_mask != hdw->input_allowed_mask) { 4734 ccnt = scnprintf(buf+tcnt, 4735 acnt-tcnt, 4736 "; allowed inputs: "); 4737 tcnt += ccnt; 4738 tcnt += print_input_mask(hdw->input_allowed_mask, 4739 buf+tcnt, 4740 acnt-tcnt); 4741 } 4742 return tcnt; 4743 } 4744 case 5: { 4745 struct pvr2_stream_stats stats; 4746 if (!hdw->vid_stream) break; 4747 pvr2_stream_get_stats(hdw->vid_stream, 4748 &stats, 4749 0); 4750 return scnprintf( 4751 buf,acnt, 4752 "Bytes streamed=%u URBs: queued=%u idle=%u ready=%u processed=%u failed=%u", 4753 stats.bytes_processed, 4754 stats.buffers_in_queue, 4755 stats.buffers_in_idle, 4756 stats.buffers_in_ready, 4757 stats.buffers_processed, 4758 stats.buffers_failed); 4759 } 4760 case 6: { 4761 unsigned int id = hdw->ir_scheme_active; 4762 return scnprintf(buf, acnt, "ir scheme: id=%d %s", id, 4763 (id >= ARRAY_SIZE(ir_scheme_names) ? 4764 "?" : ir_scheme_names[id])); 4765 } 4766 default: break; 4767 } 4768 return 0; 4769 } 4770 4771 4772 /* Generate report containing info about attached sub-devices and attached 4773 i2c clients, including an indication of which attached i2c clients are 4774 actually sub-devices. */ 4775 static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw, 4776 char *buf, unsigned int acnt) 4777 { 4778 struct v4l2_subdev *sd; 4779 unsigned int tcnt = 0; 4780 unsigned int ccnt; 4781 struct i2c_client *client; 4782 const char *p; 4783 unsigned int id; 4784 4785 ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n"); 4786 tcnt += ccnt; 4787 v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) { 4788 id = sd->grp_id; 4789 p = NULL; 4790 if (id < ARRAY_SIZE(module_names)) p = module_names[id]; 4791 if (p) { 4792 ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s:", p); 4793 tcnt += ccnt; 4794 } else { 4795 ccnt = scnprintf(buf + tcnt, acnt - tcnt, 4796 " (unknown id=%u):", id); 4797 tcnt += ccnt; 4798 } 4799 client = v4l2_get_subdevdata(sd); 4800 if (client) { 4801 ccnt = scnprintf(buf + tcnt, acnt - tcnt, 4802 " %s @ %02x\n", client->name, 4803 client->addr); 4804 tcnt += ccnt; 4805 } else { 4806 ccnt = scnprintf(buf + tcnt, acnt - tcnt, 4807 " no i2c client\n"); 4808 tcnt += ccnt; 4809 } 4810 } 4811 return tcnt; 4812 } 4813 4814 4815 unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw, 4816 char *buf,unsigned int acnt) 4817 { 4818 unsigned int bcnt,ccnt,idx; 4819 bcnt = 0; 4820 LOCK_TAKE(hdw->big_lock); 4821 for (idx = 0; ; idx++) { 4822 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt); 4823 if (!ccnt) break; 4824 bcnt += ccnt; acnt -= ccnt; buf += ccnt; 4825 if (!acnt) break; 4826 buf[0] = '\n'; ccnt = 1; 4827 bcnt += ccnt; acnt -= ccnt; buf += ccnt; 4828 } 4829 ccnt = pvr2_hdw_report_clients(hdw, buf, acnt); 4830 bcnt += ccnt; acnt -= ccnt; buf += ccnt; 4831 LOCK_GIVE(hdw->big_lock); 4832 return bcnt; 4833 } 4834 4835 4836 static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw) 4837 { 4838 char buf[256]; 4839 unsigned int idx, ccnt; 4840 unsigned int lcnt, ucnt; 4841 4842 for (idx = 0; ; idx++) { 4843 ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf)); 4844 if (!ccnt) break; 4845 pr_info("%s %.*s\n", hdw->name, ccnt, buf); 4846 } 4847 ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf)); 4848 if (ccnt >= sizeof(buf)) 4849 ccnt = sizeof(buf); 4850 4851 ucnt = 0; 4852 while (ucnt < ccnt) { 4853 lcnt = 0; 4854 while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) { 4855 lcnt++; 4856 } 4857 pr_info("%s %.*s\n", hdw->name, lcnt, buf + ucnt); 4858 ucnt += lcnt + 1; 4859 } 4860 } 4861 4862 4863 /* Evaluate and update the driver's current state, taking various actions 4864 as appropriate for the update. */ 4865 static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw) 4866 { 4867 unsigned int st; 4868 int state_updated = 0; 4869 int callback_flag = 0; 4870 int analog_mode; 4871 4872 pvr2_trace(PVR2_TRACE_STBITS, 4873 "Drive state check START"); 4874 if (pvrusb2_debug & PVR2_TRACE_STBITS) { 4875 pvr2_hdw_state_log_state(hdw); 4876 } 4877 4878 /* Process all state and get back over disposition */ 4879 state_updated = pvr2_hdw_state_update(hdw); 4880 4881 analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL); 4882 4883 /* Update master state based upon all other states. */ 4884 if (!hdw->flag_ok) { 4885 st = PVR2_STATE_DEAD; 4886 } else if (hdw->fw1_state != FW1_STATE_OK) { 4887 st = PVR2_STATE_COLD; 4888 } else if ((analog_mode || 4889 hdw->hdw_desc->flag_digital_requires_cx23416) && 4890 !hdw->state_encoder_ok) { 4891 st = PVR2_STATE_WARM; 4892 } else if (hdw->flag_tripped || 4893 (analog_mode && hdw->flag_decoder_missed)) { 4894 st = PVR2_STATE_ERROR; 4895 } else if (hdw->state_usbstream_run && 4896 (!analog_mode || 4897 (hdw->state_encoder_run && hdw->state_decoder_run))) { 4898 st = PVR2_STATE_RUN; 4899 } else { 4900 st = PVR2_STATE_READY; 4901 } 4902 if (hdw->master_state != st) { 4903 pvr2_trace(PVR2_TRACE_STATE, 4904 "Device state change from %s to %s", 4905 pvr2_get_state_name(hdw->master_state), 4906 pvr2_get_state_name(st)); 4907 pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN); 4908 hdw->master_state = st; 4909 state_updated = !0; 4910 callback_flag = !0; 4911 } 4912 if (state_updated) { 4913 /* Trigger anyone waiting on any state changes here. */ 4914 wake_up(&hdw->state_wait_data); 4915 } 4916 4917 if (pvrusb2_debug & PVR2_TRACE_STBITS) { 4918 pvr2_hdw_state_log_state(hdw); 4919 } 4920 pvr2_trace(PVR2_TRACE_STBITS, 4921 "Drive state check DONE callback=%d",callback_flag); 4922 4923 return callback_flag; 4924 } 4925 4926 4927 /* Cause kernel thread to check / update driver state */ 4928 static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw) 4929 { 4930 if (hdw->state_stale) return; 4931 hdw->state_stale = !0; 4932 trace_stbit("state_stale",hdw->state_stale); 4933 schedule_work(&hdw->workpoll); 4934 } 4935 4936 4937 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp) 4938 { 4939 return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp); 4940 } 4941 4942 4943 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp) 4944 { 4945 return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp); 4946 } 4947 4948 4949 int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp) 4950 { 4951 return pvr2_read_register(hdw,PVR2_GPIO_IN,dp); 4952 } 4953 4954 4955 int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val) 4956 { 4957 u32 cval,nval; 4958 int ret; 4959 if (~msk) { 4960 ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval); 4961 if (ret) return ret; 4962 nval = (cval & ~msk) | (val & msk); 4963 pvr2_trace(PVR2_TRACE_GPIO, 4964 "GPIO direction changing 0x%x:0x%x from 0x%x to 0x%x", 4965 msk,val,cval,nval); 4966 } else { 4967 nval = val; 4968 pvr2_trace(PVR2_TRACE_GPIO, 4969 "GPIO direction changing to 0x%x",nval); 4970 } 4971 return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval); 4972 } 4973 4974 4975 int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val) 4976 { 4977 u32 cval,nval; 4978 int ret; 4979 if (~msk) { 4980 ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval); 4981 if (ret) return ret; 4982 nval = (cval & ~msk) | (val & msk); 4983 pvr2_trace(PVR2_TRACE_GPIO, 4984 "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x", 4985 msk,val,cval,nval); 4986 } else { 4987 nval = val; 4988 pvr2_trace(PVR2_TRACE_GPIO, 4989 "GPIO output changing to 0x%x",nval); 4990 } 4991 return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval); 4992 } 4993 4994 4995 void pvr2_hdw_status_poll(struct pvr2_hdw *hdw) 4996 { 4997 struct v4l2_tuner *vtp = &hdw->tuner_signal_info; 4998 memset(vtp, 0, sizeof(*vtp)); 4999 vtp->type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ? 5000 V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; 5001 hdw->tuner_signal_stale = 0; 5002 /* Note: There apparently is no replacement for VIDIOC_CROPCAP 5003 using v4l2-subdev - therefore we can't support that AT ALL right 5004 now. (Of course, no sub-drivers seem to implement it either. 5005 But now it's a a chicken and egg problem...) */ 5006 v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner, vtp); 5007 pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll type=%u strength=%u audio=0x%x cap=0x%x low=%u hi=%u", 5008 vtp->type, 5009 vtp->signal, vtp->rxsubchans, vtp->capability, 5010 vtp->rangelow, vtp->rangehigh); 5011 5012 /* We have to do this to avoid getting into constant polling if 5013 there's nobody to answer a poll of cropcap info. */ 5014 hdw->cropcap_stale = 0; 5015 } 5016 5017 5018 unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw) 5019 { 5020 return hdw->input_avail_mask; 5021 } 5022 5023 5024 unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw) 5025 { 5026 return hdw->input_allowed_mask; 5027 } 5028 5029 5030 static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v) 5031 { 5032 if (hdw->input_val != v) { 5033 hdw->input_val = v; 5034 hdw->input_dirty = !0; 5035 } 5036 5037 /* Handle side effects - if we switch to a mode that needs the RF 5038 tuner, then select the right frequency choice as well and mark 5039 it dirty. */ 5040 if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { 5041 hdw->freqSelector = 0; 5042 hdw->freqDirty = !0; 5043 } else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) || 5044 (hdw->input_val == PVR2_CVAL_INPUT_DTV)) { 5045 hdw->freqSelector = 1; 5046 hdw->freqDirty = !0; 5047 } 5048 return 0; 5049 } 5050 5051 5052 int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw, 5053 unsigned int change_mask, 5054 unsigned int change_val) 5055 { 5056 int ret = 0; 5057 unsigned int nv,m,idx; 5058 LOCK_TAKE(hdw->big_lock); 5059 do { 5060 nv = hdw->input_allowed_mask & ~change_mask; 5061 nv |= (change_val & change_mask); 5062 nv &= hdw->input_avail_mask; 5063 if (!nv) { 5064 /* No legal modes left; return error instead. */ 5065 ret = -EPERM; 5066 break; 5067 } 5068 hdw->input_allowed_mask = nv; 5069 if ((1 << hdw->input_val) & hdw->input_allowed_mask) { 5070 /* Current mode is still in the allowed mask, so 5071 we're done. */ 5072 break; 5073 } 5074 /* Select and switch to a mode that is still in the allowed 5075 mask */ 5076 if (!hdw->input_allowed_mask) { 5077 /* Nothing legal; give up */ 5078 break; 5079 } 5080 m = hdw->input_allowed_mask; 5081 for (idx = 0; idx < (sizeof(m) << 3); idx++) { 5082 if (!((1 << idx) & m)) continue; 5083 pvr2_hdw_set_input(hdw,idx); 5084 break; 5085 } 5086 } while (0); 5087 LOCK_GIVE(hdw->big_lock); 5088 return ret; 5089 } 5090 5091 5092 /* Find I2C address of eeprom */ 5093 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw) 5094 { 5095 int result; 5096 LOCK_TAKE(hdw->ctl_lock); do { 5097 hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR; 5098 result = pvr2_send_request(hdw, 5099 hdw->cmd_buffer,1, 5100 hdw->cmd_buffer,1); 5101 if (result < 0) break; 5102 result = hdw->cmd_buffer[0]; 5103 } while(0); LOCK_GIVE(hdw->ctl_lock); 5104 return result; 5105 } 5106