Skip to content

Commit

Permalink
[ALSA] fm801 - Add mute support for FM-only card with FM801 PCI to tu…
Browse files Browse the repository at this point in the history
…ner bridge

This is improvement of the early support of the FM-only cards where the
fm801 chip represents the PCI to tuner bridge.
The tuner initialization isn't included the mute on as well as mute support
via V4L request. Proposed patch should fix this at least for 64-PCR model.

Signed-off-by: Andy Shevchenko <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
Signed-off-by: Jaroslav Kysela <[email protected]>
  • Loading branch information
Andy Shevchenko authored and perexg committed Jan 31, 2008
1 parent 29a52c2 commit 6925212
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/sound/tea575x-tuner.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ struct snd_tea575x;
struct snd_tea575x_ops {
void (*write)(struct snd_tea575x *tea, unsigned int val);
unsigned int (*read)(struct snd_tea575x *tea);
void (*mute)(struct snd_tea575x *tea, unsigned int mute);
};

struct snd_tea575x {
Expand Down
8 changes: 8 additions & 0 deletions sound/i2c/other/tea575x-tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,10 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
struct video_audio v;
if(copy_from_user(&v, arg, sizeof(v)))
return -EFAULT;
if (tea->ops->mute)
tea->ops->mute(tea,
(v.flags &
VIDEO_AUDIO_MUTE) ? 1 : 0);
if(v.audio)
return -EINVAL;
return 0;
Expand Down Expand Up @@ -205,6 +209,10 @@ void snd_tea575x_init(struct snd_tea575x *tea)
tea->freq = 90500 * 16; /* 90.5Mhz default */

snd_tea575x_set_freq(tea);

/* mute on init */
if (tea->ops->mute)
tea->ops->mute(tea, 1);
}

void snd_tea575x_exit(struct snd_tea575x *tea)
Expand Down
22 changes: 22 additions & 0 deletions sound/pci/fm801.c
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,27 @@ static unsigned int snd_fm801_tea575x_64pcr_read(struct snd_tea575x *tea)
return val;
}

static void snd_fm801_tea575x_64pcr_mute(struct snd_tea575x *tea,
unsigned int mute)
{
struct fm801 *chip = tea->private_data;
unsigned short reg;

spin_lock_irq(&chip->reg_lock);

reg = inw(FM801_REG(chip, GPIO_CTRL));
if (mute)
/* 0xf800 (mute) */
reg &= ~FM801_GPIO_GP(TEA_64PCR_WRITE_ENABLE);
else
/* 0xf802 (unmute) */
reg |= FM801_GPIO_GP(TEA_64PCR_WRITE_ENABLE);
outw(reg, FM801_REG(chip, GPIO_CTRL));
udelay(1);

spin_unlock_irq(&chip->reg_lock);
}

static struct snd_tea575x_ops snd_fm801_tea_ops[3] = {
{
/* 1 = MediaForte 256-PCS */
Expand All @@ -993,6 +1014,7 @@ static struct snd_tea575x_ops snd_fm801_tea_ops[3] = {
/* 3 = MediaForte 64-PCR */
.write = snd_fm801_tea575x_64pcr_write,
.read = snd_fm801_tea575x_64pcr_read,
.mute = snd_fm801_tea575x_64pcr_mute,
}
};
#endif
Expand Down

0 comments on commit 6925212

Please sign in to comment.