diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-04-21 15:43:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-04-21 15:43:23 -0400 |
commit | 8898159650093e9eee8829e30a9139b4273a0ac4 (patch) | |
tree | 46c5d9660416d790951153ffd8ca1446a53e96dd /drivers/media/dvb | |
parent | 9f24ff6f4236f117729bdb2fe8b0c202ce86098f (diff) | |
parent | e631f578048e2afd8bfede2e9dc86aa4592def3a (diff) |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab:
- Fixes a regression at DVB core when switching from DVB-S2 to DVB-S on
Kaffeine (Fedora 16 Bugzilla #812895);
- Fixes a mutex unlock at an error condition at drx-k;
- Fix winbond-cir set mode;
- mt9m032: Fix a compilation breakage with some random Kconfig;
- mt9m032: fix two dead locks;
- xc5000: don't require an special firmware (that won't be provided by
the vendor) just because the xtal frequency is different;
- V4L DocBook: fix some typos at multi-plane formats description.
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
[media] xc5000: support 32MHz & 31.875MHz xtal using the 41.024.5 firmware
[media] V4L: mt9m032: fix compilation breakage
[media] V4L: DocBook: Fix typos in the multi-plane formats description
[media] V4L: mt9m032: fix two dead-locks
[media] rc-core: set mode for winbond-cir
[media] drxk: Does not unlock mutex if sanity check failed in scu_command()
[media] dvb_frontend: Fix a regression when switching back to DVB-S
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.c | 25 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/drxk_hard.c | 6 |
2 files changed, 28 insertions, 3 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 39696c6a4ed7..0f64d7182657 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -1446,6 +1446,28 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system) | |||
1446 | __func__); | 1446 | __func__); |
1447 | return -EINVAL; | 1447 | return -EINVAL; |
1448 | } | 1448 | } |
1449 | /* | ||
1450 | * Get a delivery system that is compatible with DVBv3 | ||
1451 | * NOTE: in order for this to work with softwares like Kaffeine that | ||
1452 | * uses a DVBv5 call for DVB-S2 and a DVBv3 call to go back to | ||
1453 | * DVB-S, drivers that support both should put the SYS_DVBS entry | ||
1454 | * before the SYS_DVBS2, otherwise it won't switch back to DVB-S. | ||
1455 | * The real fix is that userspace applications should not use DVBv3 | ||
1456 | * and not trust on calling FE_SET_FRONTEND to switch the delivery | ||
1457 | * system. | ||
1458 | */ | ||
1459 | ncaps = 0; | ||
1460 | while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) { | ||
1461 | if (fe->ops.delsys[ncaps] == desired_system) { | ||
1462 | delsys = desired_system; | ||
1463 | break; | ||
1464 | } | ||
1465 | ncaps++; | ||
1466 | } | ||
1467 | if (delsys == SYS_UNDEFINED) { | ||
1468 | dprintk("%s() Couldn't find a delivery system that matches %d\n", | ||
1469 | __func__, desired_system); | ||
1470 | } | ||
1449 | } else { | 1471 | } else { |
1450 | /* | 1472 | /* |
1451 | * This is a DVBv5 call. So, it likely knows the supported | 1473 | * This is a DVBv5 call. So, it likely knows the supported |
@@ -1494,9 +1516,10 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system) | |||
1494 | __func__); | 1516 | __func__); |
1495 | return -EINVAL; | 1517 | return -EINVAL; |
1496 | } | 1518 | } |
1497 | c->delivery_system = delsys; | ||
1498 | } | 1519 | } |
1499 | 1520 | ||
1521 | c->delivery_system = delsys; | ||
1522 | |||
1500 | /* | 1523 | /* |
1501 | * The DVBv3 or DVBv5 call is requesting a different system. So, | 1524 | * The DVBv3 or DVBv5 call is requesting a different system. So, |
1502 | * emulation is needed. | 1525 | * emulation is needed. |
diff --git a/drivers/media/dvb/frontends/drxk_hard.c b/drivers/media/dvb/frontends/drxk_hard.c index 36d11756492f..a414b1f2b6a5 100644 --- a/drivers/media/dvb/frontends/drxk_hard.c +++ b/drivers/media/dvb/frontends/drxk_hard.c | |||
@@ -1520,8 +1520,10 @@ static int scu_command(struct drxk_state *state, | |||
1520 | dprintk(1, "\n"); | 1520 | dprintk(1, "\n"); |
1521 | 1521 | ||
1522 | if ((cmd == 0) || ((parameterLen > 0) && (parameter == NULL)) || | 1522 | if ((cmd == 0) || ((parameterLen > 0) && (parameter == NULL)) || |
1523 | ((resultLen > 0) && (result == NULL))) | 1523 | ((resultLen > 0) && (result == NULL))) { |
1524 | goto error; | 1524 | printk(KERN_ERR "drxk: Error %d on %s\n", status, __func__); |
1525 | return status; | ||
1526 | } | ||
1525 | 1527 | ||
1526 | mutex_lock(&state->mutex); | 1528 | mutex_lock(&state->mutex); |
1527 | 1529 | ||