Commit 31b32073 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] cx25821: the audio channel was registered as a video node

Skip the audio channel when registering the video nodes. This fixes a bug
where that incorrectly registered 'video' node was never unregistered.
Note: this bug only surfaces if the video output nodes are enabled again
after the previous patch disabled them.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a877e277
...@@ -1051,11 +1051,9 @@ void cx25821_dev_unregister(struct cx25821_dev *dev) ...@@ -1051,11 +1051,9 @@ void cx25821_dev_unregister(struct cx25821_dev *dev)
if (!atomic_dec_and_test(&dev->refcount)) if (!atomic_dec_and_test(&dev->refcount))
return; return;
for (i = 0; i < VID_CHANNEL_NUM; i++) for (i = 0; i < MAX_VID_CHANNEL_NUM - 1; i++) {
cx25821_video_unregister(dev, i); if (i == SRAM_CH08) /* audio channel */
continue;
for (i = VID_UPSTREAM_SRAM_CHANNEL_I;
i <= AUDIO_UPSTREAM_SRAM_CHANNEL_B; i++) {
cx25821_video_unregister(dev, i); cx25821_video_unregister(dev, i);
} }
......
...@@ -462,6 +462,9 @@ int cx25821_video_register(struct cx25821_dev *dev) ...@@ -462,6 +462,9 @@ int cx25821_video_register(struct cx25821_dev *dev)
spin_lock_init(&dev->slock); spin_lock_init(&dev->slock);
for (i = 0; i < VID_CHANNEL_NUM; ++i) { for (i = 0; i < VID_CHANNEL_NUM; ++i) {
if (i == SRAM_CH08) /* audio channel */
continue;
cx25821_init_controls(dev, i); cx25821_init_controls(dev, i);
cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper, cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper,
...@@ -788,7 +791,7 @@ static int video_open(struct file *file) ...@@ -788,7 +791,7 @@ static int video_open(struct file *file)
{ {
h = list_entry(list, struct cx25821_dev, devlist); h = list_entry(list, struct cx25821_dev, devlist);
for (i = 0; i < MAX_VID_CHANNEL_NUM; i++) { for (i = 0; i < MAX_VID_CHANNEL_NUM - 1; i++) {
if (h->channels[i].video_dev && if (h->channels[i].video_dev &&
h->channels[i].video_dev->minor == minor) { h->channels[i].video_dev->minor == minor) {
dev = h; dev = h;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment