aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/tea575x-tuner.h1
-rw-r--r--sound/i2c/other/tea575x-tuner.c8
-rw-r--r--sound/pci/fm801.c22
3 files changed, 31 insertions, 0 deletions
diff --git a/include/sound/tea575x-tuner.h b/include/sound/tea575x-tuner.h
index e8eeb3a1ed29..b62ce3e077f9 100644
--- a/include/sound/tea575x-tuner.h
+++ b/include/sound/tea575x-tuner.h
@@ -30,6 +30,7 @@ struct snd_tea575x;
30struct snd_tea575x_ops { 30struct snd_tea575x_ops {
31 void (*write)(struct snd_tea575x *tea, unsigned int val); 31 void (*write)(struct snd_tea575x *tea, unsigned int val);
32 unsigned int (*read)(struct snd_tea575x *tea); 32 unsigned int (*read)(struct snd_tea575x *tea);
33 void (*mute)(struct snd_tea575x *tea, unsigned int mute);
33}; 34};
34 35
35struct snd_tea575x { 36struct snd_tea575x {
diff --git a/sound/i2c/other/tea575x-tuner.c b/sound/i2c/other/tea575x-tuner.c
index 28a4af782f5e..87e3aefeddc3 100644
--- a/sound/i2c/other/tea575x-tuner.c
+++ b/sound/i2c/other/tea575x-tuner.c
@@ -158,6 +158,10 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
158 struct video_audio v; 158 struct video_audio v;
159 if(copy_from_user(&v, arg, sizeof(v))) 159 if(copy_from_user(&v, arg, sizeof(v)))
160 return -EFAULT; 160 return -EFAULT;
161 if (tea->ops->mute)
162 tea->ops->mute(tea,
163 (v.flags &
164 VIDEO_AUDIO_MUTE) ? 1 : 0);
161 if(v.audio) 165 if(v.audio)
162 return -EINVAL; 166 return -EINVAL;
163 return 0; 167 return 0;
@@ -205,6 +209,10 @@ void snd_tea575x_init(struct snd_tea575x *tea)
205 tea->freq = 90500 * 16; /* 90.5Mhz default */ 209 tea->freq = 90500 * 16; /* 90.5Mhz default */
206 210
207 snd_tea575x_set_freq(tea); 211 snd_tea575x_set_freq(tea);
212
213 /* mute on init */
214 if (tea->ops->mute)
215 tea->ops->mute(tea, 1);
208} 216}
209 217
210void snd_tea575x_exit(struct snd_tea575x *tea) 218void snd_tea575x_exit(struct snd_tea575x *tea)
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
index 25c1087d2c00..4c300e6149fc 100644
--- a/sound/pci/fm801.c
+++ b/sound/pci/fm801.c
@@ -978,6 +978,27 @@ static unsigned int snd_fm801_tea575x_64pcr_read(struct snd_tea575x *tea)
978 return val; 978 return val;
979} 979}
980 980
981static void snd_fm801_tea575x_64pcr_mute(struct snd_tea575x *tea,
982 unsigned int mute)
983{
984 struct fm801 *chip = tea->private_data;
985 unsigned short reg;
986
987 spin_lock_irq(&chip->reg_lock);
988
989 reg = inw(FM801_REG(chip, GPIO_CTRL));
990 if (mute)
991 /* 0xf800 (mute) */
992 reg &= ~FM801_GPIO_GP(TEA_64PCR_WRITE_ENABLE);
993 else
994 /* 0xf802 (unmute) */
995 reg |= FM801_GPIO_GP(TEA_64PCR_WRITE_ENABLE);
996 outw(reg, FM801_REG(chip, GPIO_CTRL));
997 udelay(1);
998
999 spin_unlock_irq(&chip->reg_lock);
1000}
1001
981static struct snd_tea575x_ops snd_fm801_tea_ops[3] = { 1002static struct snd_tea575x_ops snd_fm801_tea_ops[3] = {
982 { 1003 {
983 /* 1 = MediaForte 256-PCS */ 1004 /* 1 = MediaForte 256-PCS */
@@ -993,6 +1014,7 @@ static struct snd_tea575x_ops snd_fm801_tea_ops[3] = {
993 /* 3 = MediaForte 64-PCR */ 1014 /* 3 = MediaForte 64-PCR */
994 .write = snd_fm801_tea575x_64pcr_write, 1015 .write = snd_fm801_tea575x_64pcr_write,
995 .read = snd_fm801_tea575x_64pcr_read, 1016 .read = snd_fm801_tea575x_64pcr_read,
1017 .mute = snd_fm801_tea575x_64pcr_mute,
996 } 1018 }
997}; 1019};
998#endif 1020#endif