diff options
Diffstat (limited to 'sound/isa')
-rw-r--r-- | sound/isa/es18xx.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c index 0488eba051e9..93335000c51e 100644 --- a/sound/isa/es18xx.c +++ b/sound/isa/es18xx.c | |||
@@ -148,7 +148,7 @@ struct snd_audiodrive { | |||
148 | #define ES18XX_DUPLEX_SAME 0x0010 /* Playback and record must share the same rate */ | 148 | #define ES18XX_DUPLEX_SAME 0x0010 /* Playback and record must share the same rate */ |
149 | #define ES18XX_NEW_RATE 0x0020 /* More precise rate setting */ | 149 | #define ES18XX_NEW_RATE 0x0020 /* More precise rate setting */ |
150 | #define ES18XX_AUXB 0x0040 /* AuxB mixer control */ | 150 | #define ES18XX_AUXB 0x0040 /* AuxB mixer control */ |
151 | #define ES18XX_HWV 0x0080 /* Has hardware volume */ | 151 | #define ES18XX_HWV 0x0080 /* Has seperate hardware volume mixer controls*/ |
152 | #define ES18XX_MONO 0x0100 /* Mono_in mixer control */ | 152 | #define ES18XX_MONO 0x0100 /* Mono_in mixer control */ |
153 | #define ES18XX_I2S 0x0200 /* I2S mixer control */ | 153 | #define ES18XX_I2S 0x0200 /* I2S mixer control */ |
154 | #define ES18XX_MUTEREC 0x0400 /* Record source can be muted */ | 154 | #define ES18XX_MUTEREC 0x0400 /* Record source can be muted */ |
@@ -788,9 +788,12 @@ static irqreturn_t snd_es18xx_interrupt(int irq, void *dev_id, struct pt_regs *r | |||
788 | 788 | ||
789 | /* Hardware volume */ | 789 | /* Hardware volume */ |
790 | if (status & HWV_IRQ) { | 790 | if (status & HWV_IRQ) { |
791 | int split = snd_es18xx_mixer_read(chip, 0x64) & 0x80; | 791 | int split = 0; |
792 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->hw_switch->id); | 792 | if (chip->caps & ES18XX_HWV) { |
793 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->hw_volume->id); | 793 | split = snd_es18xx_mixer_read(chip, 0x64) & 0x80; |
794 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->hw_switch->id); | ||
795 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->hw_volume->id); | ||
796 | } | ||
794 | if (!split) { | 797 | if (!split) { |
795 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_switch->id); | 798 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_switch->id); |
796 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_volume->id); | 799 | snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_volume->id); |
@@ -1614,22 +1617,22 @@ static int __devinit snd_es18xx_probe(struct snd_es18xx *chip) | |||
1614 | 1617 | ||
1615 | switch (chip->version) { | 1618 | switch (chip->version) { |
1616 | case 0x1868: | 1619 | case 0x1868: |
1617 | chip->caps = ES18XX_DUPLEX_MONO | ES18XX_DUPLEX_SAME | ES18XX_CONTROL | ES18XX_HWV; | 1620 | chip->caps = ES18XX_DUPLEX_MONO | ES18XX_DUPLEX_SAME | ES18XX_CONTROL; |
1618 | break; | 1621 | break; |
1619 | case 0x1869: | 1622 | case 0x1869: |
1620 | chip->caps = ES18XX_PCM2 | ES18XX_SPATIALIZER | ES18XX_RECMIX | ES18XX_NEW_RATE | ES18XX_AUXB | ES18XX_MONO | ES18XX_MUTEREC | ES18XX_CONTROL | ES18XX_HWV; | 1623 | chip->caps = ES18XX_PCM2 | ES18XX_SPATIALIZER | ES18XX_RECMIX | ES18XX_NEW_RATE | ES18XX_AUXB | ES18XX_MONO | ES18XX_MUTEREC | ES18XX_CONTROL | ES18XX_HWV; |
1621 | break; | 1624 | break; |
1622 | case 0x1878: | 1625 | case 0x1878: |
1623 | chip->caps = ES18XX_DUPLEX_MONO | ES18XX_DUPLEX_SAME | ES18XX_I2S | ES18XX_CONTROL | ES18XX_HWV; | 1626 | chip->caps = ES18XX_DUPLEX_MONO | ES18XX_DUPLEX_SAME | ES18XX_I2S | ES18XX_CONTROL; |
1624 | break; | 1627 | break; |
1625 | case 0x1879: | 1628 | case 0x1879: |
1626 | chip->caps = ES18XX_PCM2 | ES18XX_SPATIALIZER | ES18XX_RECMIX | ES18XX_NEW_RATE | ES18XX_AUXB | ES18XX_I2S | ES18XX_CONTROL | ES18XX_HWV; | 1629 | chip->caps = ES18XX_PCM2 | ES18XX_SPATIALIZER | ES18XX_RECMIX | ES18XX_NEW_RATE | ES18XX_AUXB | ES18XX_I2S | ES18XX_CONTROL | ES18XX_HWV; |
1627 | break; | 1630 | break; |
1628 | case 0x1887: | 1631 | case 0x1887: |
1629 | chip->caps = ES18XX_PCM2 | ES18XX_RECMIX | ES18XX_AUXB | ES18XX_DUPLEX_SAME | ES18XX_HWV; | 1632 | chip->caps = ES18XX_PCM2 | ES18XX_RECMIX | ES18XX_AUXB | ES18XX_DUPLEX_SAME; |
1630 | break; | 1633 | break; |
1631 | case 0x1888: | 1634 | case 0x1888: |
1632 | chip->caps = ES18XX_PCM2 | ES18XX_RECMIX | ES18XX_AUXB | ES18XX_DUPLEX_SAME | ES18XX_HWV; | 1635 | chip->caps = ES18XX_PCM2 | ES18XX_RECMIX | ES18XX_AUXB | ES18XX_DUPLEX_SAME; |
1633 | break; | 1636 | break; |
1634 | default: | 1637 | default: |
1635 | snd_printk(KERN_ERR "[0x%lx] unsupported chip ES%x\n", | 1638 | snd_printk(KERN_ERR "[0x%lx] unsupported chip ES%x\n", |