diff options
author | Istvan Varga <istvan_v@mailbox.hu> | 2010-03-27 08:47:45 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-05-19 11:58:27 -0400 |
commit | d922b8ea33afad725920375b2d3bd65218cdb133 (patch) | |
tree | f919215f4ed586647798e945e19e4906cd9b4307 /drivers/media/video/cx88 | |
parent | db190fc13af8e2e5e9d717c16b07342ea8bf9174 (diff) |
V4L/DVB: cx88: fix setting input when using DVB
In cx88-mpeg.c, there is code that sets core->input to CX88_VMUX_DVB.
However, this may be incorrect, since core->input is actually an
index to core->board.input[], which has not enough elements to be
indexed by the value of CX88_VMUX_DVB. So, the modified code searches
core->board.input[] for an input with a type of CX88_VMUX_DVB, and if
it does not find one, the index is simply set to zero.
The change may not have much effect, though, since it appears the only
case when core->input is actually used is when the current input is
being queried.
Signed-off-by: Istvan Varga <istvanv@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx88')
-rw-r--r-- | drivers/media/video/cx88/cx88-mpeg.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/media/video/cx88/cx88-mpeg.c b/drivers/media/video/cx88/cx88-mpeg.c index 6aba7af9160a..499f8d512ad6 100644 --- a/drivers/media/video/cx88/cx88-mpeg.c +++ b/drivers/media/video/cx88/cx88-mpeg.c | |||
@@ -599,13 +599,22 @@ struct cx8802_driver * cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board | |||
599 | static int cx8802_request_acquire(struct cx8802_driver *drv) | 599 | static int cx8802_request_acquire(struct cx8802_driver *drv) |
600 | { | 600 | { |
601 | struct cx88_core *core = drv->core; | 601 | struct cx88_core *core = drv->core; |
602 | unsigned int i; | ||
602 | 603 | ||
603 | /* Fail a request for hardware if the device is busy. */ | 604 | /* Fail a request for hardware if the device is busy. */ |
604 | if (core->active_type_id != CX88_BOARD_NONE && | 605 | if (core->active_type_id != CX88_BOARD_NONE && |
605 | core->active_type_id != drv->type_id) | 606 | core->active_type_id != drv->type_id) |
606 | return -EBUSY; | 607 | return -EBUSY; |
607 | 608 | ||
608 | core->input = CX88_VMUX_DVB; | 609 | core->input = 0; |
610 | for (i = 0; | ||
611 | i < (sizeof(core->board.input) / sizeof(struct cx88_input)); | ||
612 | i++) { | ||
613 | if (core->board.input[i].type == CX88_VMUX_DVB) { | ||
614 | core->input = i; | ||
615 | break; | ||
616 | } | ||
617 | } | ||
609 | 618 | ||
610 | if (drv->advise_acquire) | 619 | if (drv->advise_acquire) |
611 | { | 620 | { |