diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-02-08 17:56:39 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-02-08 17:56:39 -0500 |
commit | e862f2e4693f287669e84971c778bf071bd0526b (patch) | |
tree | e26818cbe931482d59d77741bde8ab12a30dc08e | |
parent | 98e96852480566333f6dacd3223f0be15df34d60 (diff) | |
parent | 982d411c303a475424c67966990b5803cc536319 (diff) |
Merge tag 'sound-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
sound fixes #2 for 3.3-rc3
A collection of small fixes, mostly for regressions.
In addition, a few ASoC wm8994 updates are included, too.
* tag 'sound-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ASoC: wm8994: Disable line output discharge prior to ramping VMID
ASoC: wm8994: Fix typo in VMID ramp setting
ALSA: oxygen, virtuoso: fix exchanged L/R volumes of aux and CD inputs
ALSA: usb-audio: add Edirol UM-3G support
ALSA: hda - add support for Uniwill ECS M31EI notebook
ALSA: hda - Fix error handling in patch_ca0132.c
ASoC: wm8994: Enabling VMID should take a runtime PM reference
ALSA: hda/realtek - Fix a wrong condition
ALSA: emu8000: Remove duplicate linux/moduleparam.h include from emu8000_patch.c
ALSA: hda/realtek - Add missing Bass and CLFE as vmaster slaves
ASoC: wm_hubs: Correct line input to line output 2 paths
ASoC: cs42l73: Fix Output [X|A|V]SP_SCLK Sourcing Mode setting for master mode
ASoC: wm8962: Fix word length configuration
ASoC: core: Better support for idle_bias_off suspend ignores
ASoC: wm8994: Remove ASoC level register cache sync
ASoC: wm_hubs: Fix routing of input PGAs to line output mixer
-rw-r--r-- | sound/isa/sb/emu8000_patch.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_ca0132.c | 33 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 7 | ||||
-rw-r--r-- | sound/pci/oxygen/oxygen_mixer.c | 25 | ||||
-rw-r--r-- | sound/soc/codecs/cs42l73.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/wm8962.c | 6 | ||||
-rw-r--r-- | sound/soc/codecs/wm8994.c | 16 | ||||
-rw-r--r-- | sound/soc/codecs/wm_hubs.c | 8 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 11 | ||||
-rw-r--r-- | sound/usb/quirks-table.h | 8 |
10 files changed, 76 insertions, 41 deletions
diff --git a/sound/isa/sb/emu8000_patch.c b/sound/isa/sb/emu8000_patch.c index e09f144177f5..c99c6078be33 100644 --- a/sound/isa/sb/emu8000_patch.c +++ b/sound/isa/sb/emu8000_patch.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include "emu8000_local.h" | 22 | #include "emu8000_local.h" |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <linux/moduleparam.h> | 24 | #include <linux/moduleparam.h> |
25 | #include <linux/moduleparam.h> | ||
26 | 25 | ||
27 | static int emu8000_reset_addr; | 26 | static int emu8000_reset_addr; |
28 | module_param(emu8000_reset_addr, int, 0444); | 27 | module_param(emu8000_reset_addr, int, 0444); |
diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index 35abe3c62908..21d91d580da8 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c | |||
@@ -728,18 +728,19 @@ static int ca0132_hp_switch_put(struct snd_kcontrol *kcontrol, | |||
728 | 728 | ||
729 | err = chipio_read(codec, REG_CODEC_MUTE, &data); | 729 | err = chipio_read(codec, REG_CODEC_MUTE, &data); |
730 | if (err < 0) | 730 | if (err < 0) |
731 | return err; | 731 | goto exit; |
732 | 732 | ||
733 | /* *valp 0 is mute, 1 is unmute */ | 733 | /* *valp 0 is mute, 1 is unmute */ |
734 | data = (data & 0x7f) | (*valp ? 0 : 0x80); | 734 | data = (data & 0x7f) | (*valp ? 0 : 0x80); |
735 | chipio_write(codec, REG_CODEC_MUTE, data); | 735 | err = chipio_write(codec, REG_CODEC_MUTE, data); |
736 | if (err < 0) | 736 | if (err < 0) |
737 | return err; | 737 | goto exit; |
738 | 738 | ||
739 | spec->curr_hp_switch = *valp; | 739 | spec->curr_hp_switch = *valp; |
740 | 740 | ||
741 | exit: | ||
741 | snd_hda_power_down(codec); | 742 | snd_hda_power_down(codec); |
742 | return 1; | 743 | return err < 0 ? err : 1; |
743 | } | 744 | } |
744 | 745 | ||
745 | static int ca0132_speaker_switch_get(struct snd_kcontrol *kcontrol, | 746 | static int ca0132_speaker_switch_get(struct snd_kcontrol *kcontrol, |
@@ -770,18 +771,19 @@ static int ca0132_speaker_switch_put(struct snd_kcontrol *kcontrol, | |||
770 | 771 | ||
771 | err = chipio_read(codec, REG_CODEC_MUTE, &data); | 772 | err = chipio_read(codec, REG_CODEC_MUTE, &data); |
772 | if (err < 0) | 773 | if (err < 0) |
773 | return err; | 774 | goto exit; |
774 | 775 | ||
775 | /* *valp 0 is mute, 1 is unmute */ | 776 | /* *valp 0 is mute, 1 is unmute */ |
776 | data = (data & 0xef) | (*valp ? 0 : 0x10); | 777 | data = (data & 0xef) | (*valp ? 0 : 0x10); |
777 | chipio_write(codec, REG_CODEC_MUTE, data); | 778 | err = chipio_write(codec, REG_CODEC_MUTE, data); |
778 | if (err < 0) | 779 | if (err < 0) |
779 | return err; | 780 | goto exit; |
780 | 781 | ||
781 | spec->curr_speaker_switch = *valp; | 782 | spec->curr_speaker_switch = *valp; |
782 | 783 | ||
784 | exit: | ||
783 | snd_hda_power_down(codec); | 785 | snd_hda_power_down(codec); |
784 | return 1; | 786 | return err < 0 ? err : 1; |
785 | } | 787 | } |
786 | 788 | ||
787 | static int ca0132_hp_volume_get(struct snd_kcontrol *kcontrol, | 789 | static int ca0132_hp_volume_get(struct snd_kcontrol *kcontrol, |
@@ -819,25 +821,26 @@ static int ca0132_hp_volume_put(struct snd_kcontrol *kcontrol, | |||
819 | 821 | ||
820 | err = chipio_read(codec, REG_CODEC_HP_VOL_L, &data); | 822 | err = chipio_read(codec, REG_CODEC_HP_VOL_L, &data); |
821 | if (err < 0) | 823 | if (err < 0) |
822 | return err; | 824 | goto exit; |
823 | 825 | ||
824 | val = 31 - left_vol; | 826 | val = 31 - left_vol; |
825 | data = (data & 0xe0) | val; | 827 | data = (data & 0xe0) | val; |
826 | chipio_write(codec, REG_CODEC_HP_VOL_L, data); | 828 | err = chipio_write(codec, REG_CODEC_HP_VOL_L, data); |
827 | if (err < 0) | 829 | if (err < 0) |
828 | return err; | 830 | goto exit; |
829 | 831 | ||
830 | val = 31 - right_vol; | 832 | val = 31 - right_vol; |
831 | data = (data & 0xe0) | val; | 833 | data = (data & 0xe0) | val; |
832 | chipio_write(codec, REG_CODEC_HP_VOL_R, data); | 834 | err = chipio_write(codec, REG_CODEC_HP_VOL_R, data); |
833 | if (err < 0) | 835 | if (err < 0) |
834 | return err; | 836 | goto exit; |
835 | 837 | ||
836 | spec->curr_hp_volume[0] = left_vol; | 838 | spec->curr_hp_volume[0] = left_vol; |
837 | spec->curr_hp_volume[1] = right_vol; | 839 | spec->curr_hp_volume[1] = right_vol; |
838 | 840 | ||
841 | exit: | ||
839 | snd_hda_power_down(codec); | 842 | snd_hda_power_down(codec); |
840 | return 1; | 843 | return err < 0 ? err : 1; |
841 | } | 844 | } |
842 | 845 | ||
843 | static int add_hp_switch(struct hda_codec *codec, hda_nid_t nid) | 846 | static int add_hp_switch(struct hda_codec *codec, hda_nid_t nid) |
@@ -936,6 +939,8 @@ static int ca0132_build_controls(struct hda_codec *codec) | |||
936 | if (err < 0) | 939 | if (err < 0) |
937 | return err; | 940 | return err; |
938 | err = add_in_volume(codec, spec->dig_in, "IEC958"); | 941 | err = add_in_volume(codec, spec->dig_in, "IEC958"); |
942 | if (err < 0) | ||
943 | return err; | ||
939 | } | 944 | } |
940 | return 0; | 945 | return 0; |
941 | } | 946 | } |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index a8e82be3d2fc..9350f3c3bdf8 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -1855,6 +1855,8 @@ static const char * const alc_slave_vols[] = { | |||
1855 | "Speaker Playback Volume", | 1855 | "Speaker Playback Volume", |
1856 | "Mono Playback Volume", | 1856 | "Mono Playback Volume", |
1857 | "Line-Out Playback Volume", | 1857 | "Line-Out Playback Volume", |
1858 | "CLFE Playback Volume", | ||
1859 | "Bass Speaker Playback Volume", | ||
1858 | "PCM Playback Volume", | 1860 | "PCM Playback Volume", |
1859 | NULL, | 1861 | NULL, |
1860 | }; | 1862 | }; |
@@ -1870,6 +1872,8 @@ static const char * const alc_slave_sws[] = { | |||
1870 | "Mono Playback Switch", | 1872 | "Mono Playback Switch", |
1871 | "IEC958 Playback Switch", | 1873 | "IEC958 Playback Switch", |
1872 | "Line-Out Playback Switch", | 1874 | "Line-Out Playback Switch", |
1875 | "CLFE Playback Switch", | ||
1876 | "Bass Speaker Playback Switch", | ||
1873 | "PCM Playback Switch", | 1877 | "PCM Playback Switch", |
1874 | NULL, | 1878 | NULL, |
1875 | }; | 1879 | }; |
@@ -2318,7 +2322,7 @@ static int alc_build_pcms(struct hda_codec *codec) | |||
2318 | "%s Analog", codec->chip_name); | 2322 | "%s Analog", codec->chip_name); |
2319 | info->name = spec->stream_name_analog; | 2323 | info->name = spec->stream_name_analog; |
2320 | 2324 | ||
2321 | if (spec->multiout.dac_nids > 0) { | 2325 | if (spec->multiout.num_dacs > 0) { |
2322 | p = spec->stream_analog_playback; | 2326 | p = spec->stream_analog_playback; |
2323 | if (!p) | 2327 | if (!p) |
2324 | p = &alc_pcm_analog_playback; | 2328 | p = &alc_pcm_analog_playback; |
@@ -5623,6 +5627,7 @@ static const struct alc_fixup alc861_fixups[] = { | |||
5623 | 5627 | ||
5624 | static const struct snd_pci_quirk alc861_fixup_tbl[] = { | 5628 | static const struct snd_pci_quirk alc861_fixup_tbl[] = { |
5625 | SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP), | 5629 | SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP), |
5630 | SND_PCI_QUIRK(0x1584, 0x0000, "Uniwill ECS M31EI", PINFIX_ASUS_A6RP), | ||
5626 | SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP), | 5631 | SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP), |
5627 | SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505), | 5632 | SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505), |
5628 | {} | 5633 | {} |
diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c index 26c7e8bcb229..c0dbb52d45be 100644 --- a/sound/pci/oxygen/oxygen_mixer.c +++ b/sound/pci/oxygen/oxygen_mixer.c | |||
@@ -618,9 +618,12 @@ static int ac97_volume_get(struct snd_kcontrol *ctl, | |||
618 | mutex_lock(&chip->mutex); | 618 | mutex_lock(&chip->mutex); |
619 | reg = oxygen_read_ac97(chip, codec, index); | 619 | reg = oxygen_read_ac97(chip, codec, index); |
620 | mutex_unlock(&chip->mutex); | 620 | mutex_unlock(&chip->mutex); |
621 | value->value.integer.value[0] = 31 - (reg & 0x1f); | 621 | if (!stereo) { |
622 | if (stereo) | 622 | value->value.integer.value[0] = 31 - (reg & 0x1f); |
623 | value->value.integer.value[1] = 31 - ((reg >> 8) & 0x1f); | 623 | } else { |
624 | value->value.integer.value[0] = 31 - ((reg >> 8) & 0x1f); | ||
625 | value->value.integer.value[1] = 31 - (reg & 0x1f); | ||
626 | } | ||
624 | return 0; | 627 | return 0; |
625 | } | 628 | } |
626 | 629 | ||
@@ -636,14 +639,14 @@ static int ac97_volume_put(struct snd_kcontrol *ctl, | |||
636 | 639 | ||
637 | mutex_lock(&chip->mutex); | 640 | mutex_lock(&chip->mutex); |
638 | oldreg = oxygen_read_ac97(chip, codec, index); | 641 | oldreg = oxygen_read_ac97(chip, codec, index); |
639 | newreg = oldreg; | 642 | if (!stereo) { |
640 | newreg = (newreg & ~0x1f) | | 643 | newreg = oldreg & ~0x1f; |
641 | (31 - (value->value.integer.value[0] & 0x1f)); | 644 | newreg |= 31 - (value->value.integer.value[0] & 0x1f); |
642 | if (stereo) | 645 | } else { |
643 | newreg = (newreg & ~0x1f00) | | 646 | newreg = oldreg & ~0x1f1f; |
644 | ((31 - (value->value.integer.value[1] & 0x1f)) << 8); | 647 | newreg |= (31 - (value->value.integer.value[0] & 0x1f)) << 8; |
645 | else | 648 | newreg |= 31 - (value->value.integer.value[1] & 0x1f); |
646 | newreg = (newreg & ~0x1f00) | ((newreg & 0x1f) << 8); | 649 | } |
647 | change = newreg != oldreg; | 650 | change = newreg != oldreg; |
648 | if (change) | 651 | if (change) |
649 | oxygen_write_ac97(chip, codec, index, newreg); | 652 | oxygen_write_ac97(chip, codec, index, newreg); |
diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c index 9d38db8f1919..78979b3e0e95 100644 --- a/sound/soc/codecs/cs42l73.c +++ b/sound/soc/codecs/cs42l73.c | |||
@@ -1113,7 +1113,7 @@ static int cs42l73_pcm_hw_params(struct snd_pcm_substream *substream, | |||
1113 | priv->config[id].mmcc &= 0xC0; | 1113 | priv->config[id].mmcc &= 0xC0; |
1114 | priv->config[id].mmcc |= cs42l73_mclk_coeffs[mclk_coeff].mmcc; | 1114 | priv->config[id].mmcc |= cs42l73_mclk_coeffs[mclk_coeff].mmcc; |
1115 | priv->config[id].spc &= 0xFC; | 1115 | priv->config[id].spc &= 0xFC; |
1116 | priv->config[id].spc &= MCK_SCLK_64FS; | 1116 | priv->config[id].spc |= MCK_SCLK_MCLK; |
1117 | } else { | 1117 | } else { |
1118 | /* CS42L73 Slave */ | 1118 | /* CS42L73 Slave */ |
1119 | priv->config[id].spc &= 0xFC; | 1119 | priv->config[id].spc &= 0xFC; |
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index bda3da887d7e..29c4b02c4790 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c | |||
@@ -3159,13 +3159,13 @@ static int wm8962_hw_params(struct snd_pcm_substream *substream, | |||
3159 | case SNDRV_PCM_FORMAT_S16_LE: | 3159 | case SNDRV_PCM_FORMAT_S16_LE: |
3160 | break; | 3160 | break; |
3161 | case SNDRV_PCM_FORMAT_S20_3LE: | 3161 | case SNDRV_PCM_FORMAT_S20_3LE: |
3162 | aif0 |= 0x40; | 3162 | aif0 |= 0x4; |
3163 | break; | 3163 | break; |
3164 | case SNDRV_PCM_FORMAT_S24_LE: | 3164 | case SNDRV_PCM_FORMAT_S24_LE: |
3165 | aif0 |= 0x80; | 3165 | aif0 |= 0x8; |
3166 | break; | 3166 | break; |
3167 | case SNDRV_PCM_FORMAT_S32_LE: | 3167 | case SNDRV_PCM_FORMAT_S32_LE: |
3168 | aif0 |= 0xc0; | 3168 | aif0 |= 0xc; |
3169 | break; | 3169 | break; |
3170 | default: | 3170 | default: |
3171 | return -EINVAL; | 3171 | return -EINVAL; |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 93d27b660257..ec69a6c152fe 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -770,6 +770,8 @@ static void vmid_reference(struct snd_soc_codec *codec) | |||
770 | { | 770 | { |
771 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | 771 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); |
772 | 772 | ||
773 | pm_runtime_get_sync(codec->dev); | ||
774 | |||
773 | wm8994->vmid_refcount++; | 775 | wm8994->vmid_refcount++; |
774 | 776 | ||
775 | dev_dbg(codec->dev, "Referencing VMID, refcount is now %d\n", | 777 | dev_dbg(codec->dev, "Referencing VMID, refcount is now %d\n", |
@@ -783,7 +785,12 @@ static void vmid_reference(struct snd_soc_codec *codec) | |||
783 | WM8994_VMID_RAMP_MASK, | 785 | WM8994_VMID_RAMP_MASK, |
784 | WM8994_STARTUP_BIAS_ENA | | 786 | WM8994_STARTUP_BIAS_ENA | |
785 | WM8994_VMID_BUF_ENA | | 787 | WM8994_VMID_BUF_ENA | |
786 | (0x11 << WM8994_VMID_RAMP_SHIFT)); | 788 | (0x3 << WM8994_VMID_RAMP_SHIFT)); |
789 | |||
790 | /* Remove discharge for line out */ | ||
791 | snd_soc_update_bits(codec, WM8994_ANTIPOP_1, | ||
792 | WM8994_LINEOUT1_DISCH | | ||
793 | WM8994_LINEOUT2_DISCH, 0); | ||
787 | 794 | ||
788 | /* Main bias enable, VMID=2x40k */ | 795 | /* Main bias enable, VMID=2x40k */ |
789 | snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1, | 796 | snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1, |
@@ -837,6 +844,8 @@ static void vmid_dereference(struct snd_soc_codec *codec) | |||
837 | WM8994_VMID_BUF_ENA | | 844 | WM8994_VMID_BUF_ENA | |
838 | WM8994_VMID_RAMP_MASK, 0); | 845 | WM8994_VMID_RAMP_MASK, 0); |
839 | } | 846 | } |
847 | |||
848 | pm_runtime_put(codec->dev); | ||
840 | } | 849 | } |
841 | 850 | ||
842 | static int vmid_event(struct snd_soc_dapm_widget *w, | 851 | static int vmid_event(struct snd_soc_dapm_widget *w, |
@@ -2753,11 +2762,6 @@ static int wm8994_resume(struct snd_soc_codec *codec) | |||
2753 | codec->cache_only = 0; | 2762 | codec->cache_only = 0; |
2754 | } | 2763 | } |
2755 | 2764 | ||
2756 | /* Restore the registers */ | ||
2757 | ret = snd_soc_cache_sync(codec); | ||
2758 | if (ret != 0) | ||
2759 | dev_err(codec->dev, "Failed to sync cache: %d\n", ret); | ||
2760 | |||
2761 | wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 2765 | wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
2762 | 2766 | ||
2763 | for (i = 0; i < ARRAY_SIZE(wm8994->fll); i++) { | 2767 | for (i = 0; i < ARRAY_SIZE(wm8994->fll); i++) { |
diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c index ea2672455d07..8a68cea4a3ee 100644 --- a/sound/soc/codecs/wm_hubs.c +++ b/sound/soc/codecs/wm_hubs.c | |||
@@ -586,8 +586,8 @@ SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER1, 0, 1, 0), | |||
586 | }; | 586 | }; |
587 | 587 | ||
588 | static const struct snd_kcontrol_new line2_mix[] = { | 588 | static const struct snd_kcontrol_new line2_mix[] = { |
589 | SOC_DAPM_SINGLE("IN2R Switch", WM8993_LINE_MIXER2, 2, 1, 0), | 589 | SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 2, 1, 0), |
590 | SOC_DAPM_SINGLE("IN2L Switch", WM8993_LINE_MIXER2, 1, 1, 0), | 590 | SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 1, 1, 0), |
591 | SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), | 591 | SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), |
592 | }; | 592 | }; |
593 | 593 | ||
@@ -848,8 +848,8 @@ static const struct snd_soc_dapm_route lineout1_se_routes[] = { | |||
848 | }; | 848 | }; |
849 | 849 | ||
850 | static const struct snd_soc_dapm_route lineout2_diff_routes[] = { | 850 | static const struct snd_soc_dapm_route lineout2_diff_routes[] = { |
851 | { "LINEOUT2 Mixer", "IN2L Switch", "IN2L PGA" }, | 851 | { "LINEOUT2 Mixer", "IN1L Switch", "IN1L PGA" }, |
852 | { "LINEOUT2 Mixer", "IN2R Switch", "IN2R PGA" }, | 852 | { "LINEOUT2 Mixer", "IN1R Switch", "IN1R PGA" }, |
853 | { "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" }, | 853 | { "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" }, |
854 | 854 | ||
855 | { "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" }, | 855 | { "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" }, |
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index b5ecf6d23214..92cee24ed2dc 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -567,6 +567,17 @@ int snd_soc_suspend(struct device *dev) | |||
567 | if (!codec->suspended && codec->driver->suspend) { | 567 | if (!codec->suspended && codec->driver->suspend) { |
568 | switch (codec->dapm.bias_level) { | 568 | switch (codec->dapm.bias_level) { |
569 | case SND_SOC_BIAS_STANDBY: | 569 | case SND_SOC_BIAS_STANDBY: |
570 | /* | ||
571 | * If the CODEC is capable of idle | ||
572 | * bias off then being in STANDBY | ||
573 | * means it's doing something, | ||
574 | * otherwise fall through. | ||
575 | */ | ||
576 | if (codec->dapm.idle_bias_off) { | ||
577 | dev_dbg(codec->dev, | ||
578 | "idle_bias_off CODEC on over suspend\n"); | ||
579 | break; | ||
580 | } | ||
570 | case SND_SOC_BIAS_OFF: | 581 | case SND_SOC_BIAS_OFF: |
571 | codec->driver->suspend(codec); | 582 | codec->driver->suspend(codec); |
572 | codec->suspended = 1; | 583 | codec->suspended = 1; |
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 8edc5035fc8f..d89ab4c7d44b 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h | |||
@@ -1618,6 +1618,14 @@ YAMAHA_DEVICE(0x7010, "UB99"), | |||
1618 | } | 1618 | } |
1619 | }, | 1619 | }, |
1620 | { | 1620 | { |
1621 | /* Edirol UM-3G */ | ||
1622 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108), | ||
1623 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1624 | .ifnum = 0, | ||
1625 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
1626 | } | ||
1627 | }, | ||
1628 | { | ||
1621 | /* Boss JS-8 Jam Station */ | 1629 | /* Boss JS-8 Jam Station */ |
1622 | USB_DEVICE(0x0582, 0x0109), | 1630 | USB_DEVICE(0x0582, 0x0109), |
1623 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | 1631 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |