summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134/saa7134-alsa.c
diff options
context:
space:
mode:
authorRafaƂ Bilski <rafalbilski@interia.pl>2007-06-20 05:36:26 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-07-18 14:24:13 -0300
commitaac0ca6a8b84541b28af9d18d8b84f90653ce0d0 (patch)
tree2b4c935aefdf0148665e2a92fbfcc85b16ba3fd8 /drivers/media/video/saa7134/saa7134-alsa.c
parent6d7930e0cde1b27c3beca399e233be058ac0b93f (diff)
downloadkernel-crypto-aac0ca6a8b84541b28af9d18d8b84f90653ce0d0.tar.gz
kernel-crypto-aac0ca6a8b84541b28af9d18d8b84f90653ce0d0.tar.xz
kernel-crypto-aac0ca6a8b84541b28af9d18d8b84f90653ce0d0.zip
V4L/DVB (5775): Alsa fix for SAA7134 based "KNC One TV-Station DVR" card
Sound recording doesn't work for this card because ACNI and ACPF are not set before snd_card_saa7134_capture_prepare(). As a result timeout occurs. These registers aren't poked because thread never gets wake up signal. ACNI initialization is done in the thread. Sound is muted when capture stops. Shouldn't be because it may be used during TV playback. Signed-off-by: Rafal Bilski <rafalbilski@interia.pl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-alsa.c')
-rw-r--r--drivers/media/video/saa7134/saa7134-alsa.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/media/video/saa7134/saa7134-alsa.c b/drivers/media/video/saa7134/saa7134-alsa.c
index ffb0f647a86..3c0fc9027ad 100644
--- a/drivers/media/video/saa7134/saa7134-alsa.c
+++ b/drivers/media/video/saa7134/saa7134-alsa.c
@@ -75,7 +75,8 @@ typedef struct snd_card_saa7134 {
struct saa7134_dev *dev;
unsigned long iobase;
- int irq;
+ s16 irq;
+ u16 mute_was_on;
spinlock_t lock;
} snd_card_saa7134_t;
@@ -589,8 +590,10 @@ static int snd_card_saa7134_capture_close(struct snd_pcm_substream * substream)
snd_card_saa7134_t *saa7134 = snd_pcm_substream_chip(substream);
struct saa7134_dev *dev = saa7134->dev;
- dev->ctl_mute = 1;
- saa7134_tvaudio_setmute(dev);
+ if (saa7134->mute_was_on) {
+ dev->ctl_mute = 1;
+ saa7134_tvaudio_setmute(dev);
+ }
return 0;
}
@@ -637,8 +640,11 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)
runtime->private_free = snd_card_saa7134_runtime_free;
runtime->hw = snd_card_saa7134_capture;
- dev->ctl_mute = 0;
- saa7134_tvaudio_setmute(dev);
+ if (dev->ctl_mute != 0) {
+ saa7134->mute_was_on = 1;
+ dev->ctl_mute = 0;
+ saa7134_tvaudio_setmute(dev);
+ }
if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
return err;