Commit 4b5c15f7 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Takashi Iwai

ALSA: fm801: convert rest outw() / inw() to use helpers

The patch introduces two new helpers fm801_iowrite16() and fm801_ioread16() to
write and read the registers by offset. Previously similar was done to access
the hardware registers by their names.
Signed-off-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent e97e98c6
...@@ -212,6 +212,20 @@ struct fm801 { ...@@ -212,6 +212,20 @@ struct fm801 {
#endif #endif
}; };
/*
* IO accessors
*/
static inline void fm801_iowrite16(struct fm801 *chip, unsigned short offset, u16 value)
{
outw(value, chip->port + offset);
}
static inline u16 fm801_ioread16(struct fm801 *chip, unsigned short offset)
{
return inw(chip->port + offset);
}
static const struct pci_device_id snd_fm801_ids[] = { static const struct pci_device_id snd_fm801_ids[] = {
{ 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* FM801 */ { 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* FM801 */
{ 0x5213, 0x0510, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* Gallant Odyssey Sound 4 */ { 0x5213, 0x0510, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* Gallant Odyssey Sound 4 */
...@@ -256,11 +270,11 @@ static int snd_fm801_update_bits(struct fm801 *chip, unsigned short reg, ...@@ -256,11 +270,11 @@ static int snd_fm801_update_bits(struct fm801 *chip, unsigned short reg,
unsigned short old, new; unsigned short old, new;
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
old = inw(chip->port + reg); old = fm801_ioread16(chip, reg);
new = (old & ~mask) | value; new = (old & ~mask) | value;
change = old != new; change = old != new;
if (change) if (change)
outw(new, chip->port + reg); fm801_iowrite16(chip, reg, new);
spin_unlock_irqrestore(&chip->reg_lock, flags); spin_unlock_irqrestore(&chip->reg_lock, flags);
return change; return change;
} }
...@@ -851,10 +865,11 @@ static int snd_fm801_get_single(struct snd_kcontrol *kcontrol, ...@@ -851,10 +865,11 @@ static int snd_fm801_get_single(struct snd_kcontrol *kcontrol,
int shift = (kcontrol->private_value >> 8) & 0xff; int shift = (kcontrol->private_value >> 8) & 0xff;
int mask = (kcontrol->private_value >> 16) & 0xff; int mask = (kcontrol->private_value >> 16) & 0xff;
int invert = (kcontrol->private_value >> 24) & 0xff; int invert = (kcontrol->private_value >> 24) & 0xff;
long *value = ucontrol->value.integer.value;
ucontrol->value.integer.value[0] = (inw(chip->port + reg) >> shift) & mask; value[0] = (fm801_ioread16(chip, reg) >> shift) & mask;
if (invert) if (invert)
ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; value[0] = mask - value[0];
return 0; return 0;
} }
...@@ -907,14 +922,15 @@ static int snd_fm801_get_double(struct snd_kcontrol *kcontrol, ...@@ -907,14 +922,15 @@ static int snd_fm801_get_double(struct snd_kcontrol *kcontrol,
int shift_right = (kcontrol->private_value >> 12) & 0x0f; int shift_right = (kcontrol->private_value >> 12) & 0x0f;
int mask = (kcontrol->private_value >> 16) & 0xff; int mask = (kcontrol->private_value >> 16) & 0xff;
int invert = (kcontrol->private_value >> 24) & 0xff; int invert = (kcontrol->private_value >> 24) & 0xff;
long *value = ucontrol->value.integer.value;
spin_lock_irq(&chip->reg_lock); spin_lock_irq(&chip->reg_lock);
ucontrol->value.integer.value[0] = (inw(chip->port + reg) >> shift_left) & mask; value[0] = (fm801_ioread16(chip, reg) >> shift_left) & mask;
ucontrol->value.integer.value[1] = (inw(chip->port + reg) >> shift_right) & mask; value[1] = (fm801_ioread16(chip, reg) >> shift_right) & mask;
spin_unlock_irq(&chip->reg_lock); spin_unlock_irq(&chip->reg_lock);
if (invert) { if (invert) {
ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; value[0] = mask - value[0];
ucontrol->value.integer.value[1] = mask - ucontrol->value.integer.value[1]; value[1] = mask - value[1];
} }
return 0; return 0;
} }
...@@ -1372,7 +1388,7 @@ static int snd_fm801_suspend(struct device *dev) ...@@ -1372,7 +1388,7 @@ static int snd_fm801_suspend(struct device *dev)
snd_ac97_suspend(chip->ac97); snd_ac97_suspend(chip->ac97);
snd_ac97_suspend(chip->ac97_sec); snd_ac97_suspend(chip->ac97_sec);
for (i = 0; i < ARRAY_SIZE(saved_regs); i++) for (i = 0; i < ARRAY_SIZE(saved_regs); i++)
chip->saved_regs[i] = inw(chip->port + saved_regs[i]); chip->saved_regs[i] = fm801_ioread16(chip, saved_regs[i]);
/* FIXME: tea575x suspend */ /* FIXME: tea575x suspend */
return 0; return 0;
} }
...@@ -1387,7 +1403,7 @@ static int snd_fm801_resume(struct device *dev) ...@@ -1387,7 +1403,7 @@ static int snd_fm801_resume(struct device *dev)
snd_ac97_resume(chip->ac97); snd_ac97_resume(chip->ac97);
snd_ac97_resume(chip->ac97_sec); snd_ac97_resume(chip->ac97_sec);
for (i = 0; i < ARRAY_SIZE(saved_regs); i++) for (i = 0; i < ARRAY_SIZE(saved_regs); i++)
outw(chip->saved_regs[i], chip->port + saved_regs[i]); fm801_iowrite16(chip, saved_regs[i], chip->saved_regs[i]);
snd_power_change_state(card, SNDRV_CTL_POWER_D0); snd_power_change_state(card, SNDRV_CTL_POWER_D0);
return 0; return 0;
......
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