diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-21 19:50:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-21 19:50:31 -0500 |
commit | 13a3cec8443290b082af2a5254562aca247fe591 (patch) | |
tree | 5c873a2c9333be348266234ac5d7101caa1b6d7d /drivers/media/dvb | |
parent | 973c9f4f49ca96a53bcf6384c4c59ccd26c33906 (diff) | |
parent | 88914bdf8c677ebd7e797adac05e47303fd6ac77 (diff) |
Merge branch 'media_fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'media_fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (101 commits)
[media] staging/lirc: fix mem leaks and ptr err usage
[media] hdpvr: reduce latency of i2c read/write w/recycled buffer
[media] hdpvr: enable IR part
[media] rc/mceusb: timeout should be in ns, not us
[media] v4l2-device: fix 'use-after-freed' oops
[media] v4l2-dev: don't memset video_device.dev
[media] zoran: use video_device_alloc instead of kmalloc
[media] w9966: zero device state after a detach
[media] v4l: Fix a use-before-set in the control framework
[media] v4l: Include linux/videodev2.h in media/v4l2-ctrls.h
[media] DocBook/v4l: update V4L2 revision and update copyright years
[media] DocBook/v4l: fix validation error in dev-rds.xml
[media] v4l2-ctrls: queryctrl shouldn't attempt to replace V4L2_CID_PRIVATE_BASE IDs
[media] v4l2-ctrls: fix missing 'read-only' check
[media] pvrusb2: Provide more information about IR units to lirc_zilog and ir-kbd-i2c
[media] ir-kbd-i2c: Add back defaults setting for Zilog Z8's at addr 0x71
[media] lirc_zilog: Update TODO.lirc_zilog
[media] lirc_zilog: Add Andy Walls to copyright notice and authors list
[media] lirc_zilog: Remove useless struct i2c_driver.command function
[media] lirc_zilog: Remove unneeded tests for existence of the IR Tx function
...
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r-- | drivers/media/dvb/dvb-usb/dib0700_core.c | 6 | ||||
-rw-r--r-- | drivers/media/dvb/firewire/firedtv-rc.c | 9 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/af9013.c | 4 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/ix2505v.c | 2 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/mb86a20s.c | 36 | ||||
-rw-r--r-- | drivers/media/dvb/ttpci/av7110_ca.c | 2 |
6 files changed, 43 insertions, 16 deletions
diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c index 8ca48f76dfa9..98ffb40728e3 100644 --- a/drivers/media/dvb/dvb-usb/dib0700_core.c +++ b/drivers/media/dvb/dvb-usb/dib0700_core.c | |||
@@ -514,8 +514,8 @@ struct dib0700_rc_response { | |||
514 | union { | 514 | union { |
515 | u16 system16; | 515 | u16 system16; |
516 | struct { | 516 | struct { |
517 | u8 system; | ||
518 | u8 not_system; | 517 | u8 not_system; |
518 | u8 system; | ||
519 | }; | 519 | }; |
520 | }; | 520 | }; |
521 | u8 data; | 521 | u8 data; |
@@ -575,7 +575,7 @@ static void dib0700_rc_urb_completion(struct urb *purb) | |||
575 | if ((poll_reply->system ^ poll_reply->not_system) != 0xff) { | 575 | if ((poll_reply->system ^ poll_reply->not_system) != 0xff) { |
576 | deb_data("NEC extended protocol\n"); | 576 | deb_data("NEC extended protocol\n"); |
577 | /* NEC extended code - 24 bits */ | 577 | /* NEC extended code - 24 bits */ |
578 | keycode = poll_reply->system16 << 8 | poll_reply->data; | 578 | keycode = be16_to_cpu(poll_reply->system16) << 8 | poll_reply->data; |
579 | } else { | 579 | } else { |
580 | deb_data("NEC normal protocol\n"); | 580 | deb_data("NEC normal protocol\n"); |
581 | /* normal NEC code - 16 bits */ | 581 | /* normal NEC code - 16 bits */ |
@@ -587,7 +587,7 @@ static void dib0700_rc_urb_completion(struct urb *purb) | |||
587 | deb_data("RC5 protocol\n"); | 587 | deb_data("RC5 protocol\n"); |
588 | /* RC5 Protocol */ | 588 | /* RC5 Protocol */ |
589 | toggle = poll_reply->report_id; | 589 | toggle = poll_reply->report_id; |
590 | keycode = poll_reply->system16 << 8 | poll_reply->data; | 590 | keycode = poll_reply->system << 8 | poll_reply->data; |
591 | 591 | ||
592 | break; | 592 | break; |
593 | } | 593 | } |
diff --git a/drivers/media/dvb/firewire/firedtv-rc.c b/drivers/media/dvb/firewire/firedtv-rc.c index fcf3828472b8..f82d4a93feb3 100644 --- a/drivers/media/dvb/firewire/firedtv-rc.c +++ b/drivers/media/dvb/firewire/firedtv-rc.c | |||
@@ -172,7 +172,8 @@ void fdtv_unregister_rc(struct firedtv *fdtv) | |||
172 | 172 | ||
173 | void fdtv_handle_rc(struct firedtv *fdtv, unsigned int code) | 173 | void fdtv_handle_rc(struct firedtv *fdtv, unsigned int code) |
174 | { | 174 | { |
175 | u16 *keycode = fdtv->remote_ctrl_dev->keycode; | 175 | struct input_dev *idev = fdtv->remote_ctrl_dev; |
176 | u16 *keycode = idev->keycode; | ||
176 | 177 | ||
177 | if (code >= 0x0300 && code <= 0x031f) | 178 | if (code >= 0x0300 && code <= 0x031f) |
178 | code = keycode[code - 0x0300]; | 179 | code = keycode[code - 0x0300]; |
@@ -188,6 +189,8 @@ void fdtv_handle_rc(struct firedtv *fdtv, unsigned int code) | |||
188 | return; | 189 | return; |
189 | } | 190 | } |
190 | 191 | ||
191 | input_report_key(fdtv->remote_ctrl_dev, code, 1); | 192 | input_report_key(idev, code, 1); |
192 | input_report_key(fdtv->remote_ctrl_dev, code, 0); | 193 | input_sync(idev); |
194 | input_report_key(idev, code, 0); | ||
195 | input_sync(idev); | ||
193 | } | 196 | } |
diff --git a/drivers/media/dvb/frontends/af9013.c b/drivers/media/dvb/frontends/af9013.c index ce222055526d..ba25fa0b0fc2 100644 --- a/drivers/media/dvb/frontends/af9013.c +++ b/drivers/media/dvb/frontends/af9013.c | |||
@@ -334,11 +334,11 @@ static int af9013_set_freq_ctrl(struct af9013_state *state, fe_bandwidth_t bw) | |||
334 | if_sample_freq = 3300000; /* 3.3 MHz */ | 334 | if_sample_freq = 3300000; /* 3.3 MHz */ |
335 | break; | 335 | break; |
336 | case BANDWIDTH_7_MHZ: | 336 | case BANDWIDTH_7_MHZ: |
337 | if_sample_freq = 3800000; /* 3.8 MHz */ | 337 | if_sample_freq = 3500000; /* 3.5 MHz */ |
338 | break; | 338 | break; |
339 | case BANDWIDTH_8_MHZ: | 339 | case BANDWIDTH_8_MHZ: |
340 | default: | 340 | default: |
341 | if_sample_freq = 4300000; /* 4.3 MHz */ | 341 | if_sample_freq = 4000000; /* 4.0 MHz */ |
342 | break; | 342 | break; |
343 | } | 343 | } |
344 | } else if (state->config.tuner == AF9013_TUNER_TDA18218) { | 344 | } else if (state->config.tuner == AF9013_TUNER_TDA18218) { |
diff --git a/drivers/media/dvb/frontends/ix2505v.c b/drivers/media/dvb/frontends/ix2505v.c index 6360c681ded9..6c2e929bd79f 100644 --- a/drivers/media/dvb/frontends/ix2505v.c +++ b/drivers/media/dvb/frontends/ix2505v.c | |||
@@ -311,7 +311,7 @@ struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe, | |||
311 | return fe; | 311 | return fe; |
312 | 312 | ||
313 | error: | 313 | error: |
314 | ix2505v_release(fe); | 314 | kfree(state); |
315 | return NULL; | 315 | return NULL; |
316 | } | 316 | } |
317 | EXPORT_SYMBOL(ix2505v_attach); | 317 | EXPORT_SYMBOL(ix2505v_attach); |
diff --git a/drivers/media/dvb/frontends/mb86a20s.c b/drivers/media/dvb/frontends/mb86a20s.c index d3ad3e75a35a..cc4acd2f920d 100644 --- a/drivers/media/dvb/frontends/mb86a20s.c +++ b/drivers/media/dvb/frontends/mb86a20s.c | |||
@@ -43,6 +43,8 @@ struct mb86a20s_state { | |||
43 | const struct mb86a20s_config *config; | 43 | const struct mb86a20s_config *config; |
44 | 44 | ||
45 | struct dvb_frontend frontend; | 45 | struct dvb_frontend frontend; |
46 | |||
47 | bool need_init; | ||
46 | }; | 48 | }; |
47 | 49 | ||
48 | struct regdata { | 50 | struct regdata { |
@@ -318,7 +320,7 @@ static int mb86a20s_i2c_writereg(struct mb86a20s_state *state, | |||
318 | 320 | ||
319 | rc = i2c_transfer(state->i2c, &msg, 1); | 321 | rc = i2c_transfer(state->i2c, &msg, 1); |
320 | if (rc != 1) { | 322 | if (rc != 1) { |
321 | printk("%s: writereg rcor(rc == %i, reg == 0x%02x," | 323 | printk("%s: writereg error (rc == %i, reg == 0x%02x," |
322 | " data == 0x%02x)\n", __func__, rc, reg, data); | 324 | " data == 0x%02x)\n", __func__, rc, reg, data); |
323 | return rc; | 325 | return rc; |
324 | } | 326 | } |
@@ -353,7 +355,7 @@ static int mb86a20s_i2c_readreg(struct mb86a20s_state *state, | |||
353 | rc = i2c_transfer(state->i2c, msg, 2); | 355 | rc = i2c_transfer(state->i2c, msg, 2); |
354 | 356 | ||
355 | if (rc != 2) { | 357 | if (rc != 2) { |
356 | rc("%s: reg=0x%x (rcor=%d)\n", __func__, reg, rc); | 358 | rc("%s: reg=0x%x (error=%d)\n", __func__, reg, rc); |
357 | return rc; | 359 | return rc; |
358 | } | 360 | } |
359 | 361 | ||
@@ -382,23 +384,31 @@ static int mb86a20s_initfe(struct dvb_frontend *fe) | |||
382 | /* Initialize the frontend */ | 384 | /* Initialize the frontend */ |
383 | rc = mb86a20s_writeregdata(state, mb86a20s_init); | 385 | rc = mb86a20s_writeregdata(state, mb86a20s_init); |
384 | if (rc < 0) | 386 | if (rc < 0) |
385 | return rc; | 387 | goto err; |
386 | 388 | ||
387 | if (!state->config->is_serial) { | 389 | if (!state->config->is_serial) { |
388 | regD5 &= ~1; | 390 | regD5 &= ~1; |
389 | 391 | ||
390 | rc = mb86a20s_writereg(state, 0x50, 0xd5); | 392 | rc = mb86a20s_writereg(state, 0x50, 0xd5); |
391 | if (rc < 0) | 393 | if (rc < 0) |
392 | return rc; | 394 | goto err; |
393 | rc = mb86a20s_writereg(state, 0x51, regD5); | 395 | rc = mb86a20s_writereg(state, 0x51, regD5); |
394 | if (rc < 0) | 396 | if (rc < 0) |
395 | return rc; | 397 | goto err; |
396 | } | 398 | } |
397 | 399 | ||
398 | if (fe->ops.i2c_gate_ctrl) | 400 | if (fe->ops.i2c_gate_ctrl) |
399 | fe->ops.i2c_gate_ctrl(fe, 1); | 401 | fe->ops.i2c_gate_ctrl(fe, 1); |
400 | 402 | ||
401 | return 0; | 403 | err: |
404 | if (rc < 0) { | ||
405 | state->need_init = true; | ||
406 | printk(KERN_INFO "mb86a20s: Init failed. Will try again later\n"); | ||
407 | } else { | ||
408 | state->need_init = false; | ||
409 | dprintk("Initialization succeded.\n"); | ||
410 | } | ||
411 | return rc; | ||
402 | } | 412 | } |
403 | 413 | ||
404 | static int mb86a20s_read_signal_strength(struct dvb_frontend *fe, u16 *strength) | 414 | static int mb86a20s_read_signal_strength(struct dvb_frontend *fe, u16 *strength) |
@@ -485,8 +495,22 @@ static int mb86a20s_set_frontend(struct dvb_frontend *fe, | |||
485 | 495 | ||
486 | if (fe->ops.i2c_gate_ctrl) | 496 | if (fe->ops.i2c_gate_ctrl) |
487 | fe->ops.i2c_gate_ctrl(fe, 1); | 497 | fe->ops.i2c_gate_ctrl(fe, 1); |
498 | dprintk("Calling tuner set parameters\n"); | ||
488 | fe->ops.tuner_ops.set_params(fe, p); | 499 | fe->ops.tuner_ops.set_params(fe, p); |
489 | 500 | ||
501 | /* | ||
502 | * Make it more reliable: if, for some reason, the initial | ||
503 | * device initialization doesn't happen, initialize it when | ||
504 | * a SBTVD parameters are adjusted. | ||
505 | * | ||
506 | * Unfortunately, due to a hard to track bug at tda829x/tda18271, | ||
507 | * the agc callback logic is not called during DVB attach time, | ||
508 | * causing mb86a20s to not be initialized with Kworld SBTVD. | ||
509 | * So, this hack is needed, in order to make Kworld SBTVD to work. | ||
510 | */ | ||
511 | if (state->need_init) | ||
512 | mb86a20s_initfe(fe); | ||
513 | |||
490 | if (fe->ops.i2c_gate_ctrl) | 514 | if (fe->ops.i2c_gate_ctrl) |
491 | fe->ops.i2c_gate_ctrl(fe, 0); | 515 | fe->ops.i2c_gate_ctrl(fe, 0); |
492 | rc = mb86a20s_writeregdata(state, mb86a20s_reset_reception); | 516 | rc = mb86a20s_writeregdata(state, mb86a20s_reset_reception); |
diff --git a/drivers/media/dvb/ttpci/av7110_ca.c b/drivers/media/dvb/ttpci/av7110_ca.c index 122c72806916..9fc1dd0ba4c3 100644 --- a/drivers/media/dvb/ttpci/av7110_ca.c +++ b/drivers/media/dvb/ttpci/av7110_ca.c | |||
@@ -277,7 +277,7 @@ static int dvb_ca_ioctl(struct file *file, unsigned int cmd, void *parg) | |||
277 | { | 277 | { |
278 | ca_slot_info_t *info=(ca_slot_info_t *)parg; | 278 | ca_slot_info_t *info=(ca_slot_info_t *)parg; |
279 | 279 | ||
280 | if (info->num > 1) | 280 | if (info->num < 0 || info->num > 1) |
281 | return -EINVAL; | 281 | return -EINVAL; |
282 | av7110->ci_slot[info->num].num = info->num; | 282 | av7110->ci_slot[info->num].num = info->num; |
283 | av7110->ci_slot[info->num].type = FW_CI_LL_SUPPORT(av7110->arm_app) ? | 283 | av7110->ci_slot[info->num].type = FW_CI_LL_SUPPORT(av7110->arm_app) ? |