diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-12-13 03:29:52 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-12-13 03:29:52 -0500 |
commit | 354d14b3f53cc749c5d26d4ba7280d1e931d6bc4 (patch) | |
tree | 59b597e44902d8db8bde7deac1e7e707327c6fe6 /sound/pci | |
parent | 5144c534d16529bc469396211131e8935589f833 (diff) | |
parent | 5b84ba26a9672e615897234fa5efd3eea2d6b295 (diff) |
Merge branch 'topic/workq-update' into topic/misc
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/ac97/ac97_codec.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 84 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/patch_via.c | 3 | ||||
-rw-r--r-- | sound/pci/oxygen/oxygen_lib.c | 6 |
6 files changed, 78 insertions, 28 deletions
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c index a7630e9edf8a..0fc614ce16c1 100644 --- a/sound/pci/ac97/ac97_codec.c +++ b/sound/pci/ac97/ac97_codec.c | |||
@@ -1014,8 +1014,7 @@ static int snd_ac97_free(struct snd_ac97 *ac97) | |||
1014 | { | 1014 | { |
1015 | if (ac97) { | 1015 | if (ac97) { |
1016 | #ifdef CONFIG_SND_AC97_POWER_SAVE | 1016 | #ifdef CONFIG_SND_AC97_POWER_SAVE |
1017 | cancel_delayed_work(&ac97->power_work); | 1017 | cancel_delayed_work_sync(&ac97->power_work); |
1018 | flush_scheduled_work(); | ||
1019 | #endif | 1018 | #endif |
1020 | snd_ac97_proc_done(ac97); | 1019 | snd_ac97_proc_done(ac97); |
1021 | if (ac97->bus) | 1020 | if (ac97->bus) |
@@ -2456,8 +2455,7 @@ void snd_ac97_suspend(struct snd_ac97 *ac97) | |||
2456 | if (ac97->build_ops->suspend) | 2455 | if (ac97->build_ops->suspend) |
2457 | ac97->build_ops->suspend(ac97); | 2456 | ac97->build_ops->suspend(ac97); |
2458 | #ifdef CONFIG_SND_AC97_POWER_SAVE | 2457 | #ifdef CONFIG_SND_AC97_POWER_SAVE |
2459 | cancel_delayed_work(&ac97->power_work); | 2458 | cancel_delayed_work_sync(&ac97->power_work); |
2460 | flush_scheduled_work(); | ||
2461 | #endif | 2459 | #endif |
2462 | snd_ac97_powerdown(ac97); | 2460 | snd_ac97_powerdown(ac97); |
2463 | } | 2461 | } |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index 3cfb31e77b16..846d1ead47fd 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
@@ -3111,6 +3111,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = { | |||
3111 | SND_PCI_QUIRK(0x17aa, 0x21b2, "Thinkpad X100e", CXT5066_IDEAPAD), | 3111 | SND_PCI_QUIRK(0x17aa, 0x21b2, "Thinkpad X100e", CXT5066_IDEAPAD), |
3112 | SND_PCI_QUIRK(0x17aa, 0x21b3, "Thinkpad Edge 13 (197)", CXT5066_IDEAPAD), | 3112 | SND_PCI_QUIRK(0x17aa, 0x21b3, "Thinkpad Edge 13 (197)", CXT5066_IDEAPAD), |
3113 | SND_PCI_QUIRK(0x17aa, 0x21b4, "Thinkpad Edge", CXT5066_IDEAPAD), | 3113 | SND_PCI_QUIRK(0x17aa, 0x21b4, "Thinkpad Edge", CXT5066_IDEAPAD), |
3114 | SND_PCI_QUIRK(0x17aa, 0x21c8, "Thinkpad Edge 11", CXT5066_IDEAPAD), | ||
3114 | SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), | 3115 | SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), |
3115 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G series", CXT5066_IDEAPAD), | 3116 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G series", CXT5066_IDEAPAD), |
3116 | SND_PCI_QUIRK(0x17aa, 0x390a, "Lenovo S10-3t", CXT5066_IDEAPAD), | 3117 | SND_PCI_QUIRK(0x17aa, 0x390a, "Lenovo S10-3t", CXT5066_IDEAPAD), |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index b7e234898fd8..f17159d7dbe9 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -1614,6 +1614,7 @@ do_sku: | |||
1614 | spec->init_amp = ALC_INIT_GPIO3; | 1614 | spec->init_amp = ALC_INIT_GPIO3; |
1615 | break; | 1615 | break; |
1616 | case 5: | 1616 | case 5: |
1617 | default: | ||
1617 | spec->init_amp = ALC_INIT_DEFAULT; | 1618 | spec->init_amp = ALC_INIT_DEFAULT; |
1618 | break; | 1619 | break; |
1619 | } | 1620 | } |
@@ -2014,6 +2015,36 @@ static struct hda_verb alc888_acer_aspire_6530g_verbs[] = { | |||
2014 | }; | 2015 | }; |
2015 | 2016 | ||
2016 | /* | 2017 | /* |
2018 | *ALC888 Acer Aspire 7730G model | ||
2019 | */ | ||
2020 | |||
2021 | static struct hda_verb alc888_acer_aspire_7730G_verbs[] = { | ||
2022 | /* Bias voltage on for external mic port */ | ||
2023 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80}, | ||
2024 | /* Front Mic: set to PIN_IN (empty by default) */ | ||
2025 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
2026 | /* Unselect Front Mic by default in input mixer 3 */ | ||
2027 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)}, | ||
2028 | /* Enable unsolicited event for HP jack */ | ||
2029 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, | ||
2030 | /* Enable speaker output */ | ||
2031 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2032 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2033 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
2034 | /* Enable headphone output */ | ||
2035 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP}, | ||
2036 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2037 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2038 | {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
2039 | /*Enable internal subwoofer */ | ||
2040 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2041 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2042 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
2043 | {0x17, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
2044 | { } | ||
2045 | }; | ||
2046 | |||
2047 | /* | ||
2017 | * ALC889 Acer Aspire 8930G model | 2048 | * ALC889 Acer Aspire 8930G model |
2018 | */ | 2049 | */ |
2019 | 2050 | ||
@@ -2200,6 +2231,16 @@ static void alc888_acer_aspire_6530g_setup(struct hda_codec *codec) | |||
2200 | spec->autocfg.speaker_pins[2] = 0x17; | 2231 | spec->autocfg.speaker_pins[2] = 0x17; |
2201 | } | 2232 | } |
2202 | 2233 | ||
2234 | static void alc888_acer_aspire_7730g_setup(struct hda_codec *codec) | ||
2235 | { | ||
2236 | struct alc_spec *spec = codec->spec; | ||
2237 | |||
2238 | spec->autocfg.hp_pins[0] = 0x15; | ||
2239 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2240 | spec->autocfg.speaker_pins[1] = 0x16; | ||
2241 | spec->autocfg.speaker_pins[2] = 0x17; | ||
2242 | } | ||
2243 | |||
2203 | static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) | 2244 | static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) |
2204 | { | 2245 | { |
2205 | struct alc_spec *spec = codec->spec; | 2246 | struct alc_spec *spec = codec->spec; |
@@ -9524,13 +9565,6 @@ static struct hda_verb alc883_acer_eapd_verbs[] = { | |||
9524 | { } | 9565 | { } |
9525 | }; | 9566 | }; |
9526 | 9567 | ||
9527 | static struct hda_verb alc888_acer_aspire_7730G_verbs[] = { | ||
9528 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
9529 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
9530 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, | ||
9531 | { } /* end */ | ||
9532 | }; | ||
9533 | |||
9534 | static void alc888_6st_dell_setup(struct hda_codec *codec) | 9568 | static void alc888_6st_dell_setup(struct hda_codec *codec) |
9535 | { | 9569 | { |
9536 | struct alc_spec *spec = codec->spec; | 9570 | struct alc_spec *spec = codec->spec; |
@@ -9831,7 +9865,6 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = { | |||
9831 | SND_PCI_QUIRK(0x17aa, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763), | 9865 | SND_PCI_QUIRK(0x17aa, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763), |
9832 | SND_PCI_QUIRK(0x17aa, 0x3bfd, "Lenovo NB0763", ALC883_LENOVO_NB0763), | 9866 | SND_PCI_QUIRK(0x17aa, 0x3bfd, "Lenovo NB0763", ALC883_LENOVO_NB0763), |
9833 | SND_PCI_QUIRK(0x17aa, 0x101d, "Lenovo Sky", ALC888_LENOVO_SKY), | 9867 | SND_PCI_QUIRK(0x17aa, 0x101d, "Lenovo Sky", ALC888_LENOVO_SKY), |
9834 | SND_PCI_QUIRK(0x17c0, 0x4071, "MEDION MD2", ALC883_MEDION_MD2), | ||
9835 | SND_PCI_QUIRK(0x17c0, 0x4085, "MEDION MD96630", ALC888_LENOVO_MS7195_DIG), | 9868 | SND_PCI_QUIRK(0x17c0, 0x4085, "MEDION MD96630", ALC888_LENOVO_MS7195_DIG), |
9836 | SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG), | 9869 | SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG), |
9837 | SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66), | 9870 | SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66), |
@@ -10328,7 +10361,7 @@ static struct alc_config_preset alc882_presets[] = { | |||
10328 | .const_channel_count = 6, | 10361 | .const_channel_count = 6, |
10329 | .input_mux = &alc883_capture_source, | 10362 | .input_mux = &alc883_capture_source, |
10330 | .unsol_event = alc_automute_amp_unsol_event, | 10363 | .unsol_event = alc_automute_amp_unsol_event, |
10331 | .setup = alc888_acer_aspire_6530g_setup, | 10364 | .setup = alc888_acer_aspire_7730g_setup, |
10332 | .init_hook = alc_automute_amp, | 10365 | .init_hook = alc_automute_amp, |
10333 | }, | 10366 | }, |
10334 | [ALC883_MEDION] = { | 10367 | [ALC883_MEDION] = { |
@@ -14629,7 +14662,10 @@ static int alc275_setup_dual_adc(struct hda_codec *codec) | |||
14629 | /* different alc269-variants */ | 14662 | /* different alc269-variants */ |
14630 | enum { | 14663 | enum { |
14631 | ALC269_TYPE_NORMAL, | 14664 | ALC269_TYPE_NORMAL, |
14665 | ALC269_TYPE_ALC258, | ||
14632 | ALC269_TYPE_ALC259, | 14666 | ALC269_TYPE_ALC259, |
14667 | ALC269_TYPE_ALC269VB, | ||
14668 | ALC269_TYPE_ALC270, | ||
14633 | ALC269_TYPE_ALC271X, | 14669 | ALC269_TYPE_ALC271X, |
14634 | }; | 14670 | }; |
14635 | 14671 | ||
@@ -15029,7 +15065,7 @@ static int alc269_fill_coef(struct hda_codec *codec) | |||
15029 | static int patch_alc269(struct hda_codec *codec) | 15065 | static int patch_alc269(struct hda_codec *codec) |
15030 | { | 15066 | { |
15031 | struct alc_spec *spec; | 15067 | struct alc_spec *spec; |
15032 | int board_config; | 15068 | int board_config, coef; |
15033 | int err; | 15069 | int err; |
15034 | 15070 | ||
15035 | spec = kzalloc(sizeof(*spec), GFP_KERNEL); | 15071 | spec = kzalloc(sizeof(*spec), GFP_KERNEL); |
@@ -15040,14 +15076,23 @@ static int patch_alc269(struct hda_codec *codec) | |||
15040 | 15076 | ||
15041 | alc_auto_parse_customize_define(codec); | 15077 | alc_auto_parse_customize_define(codec); |
15042 | 15078 | ||
15043 | if ((alc_read_coef_idx(codec, 0) & 0x00f0) == 0x0010){ | 15079 | coef = alc_read_coef_idx(codec, 0); |
15080 | if ((coef & 0x00f0) == 0x0010) { | ||
15044 | if (codec->bus->pci->subsystem_vendor == 0x1025 && | 15081 | if (codec->bus->pci->subsystem_vendor == 0x1025 && |
15045 | spec->cdefine.platform_type == 1) { | 15082 | spec->cdefine.platform_type == 1) { |
15046 | alc_codec_rename(codec, "ALC271X"); | 15083 | alc_codec_rename(codec, "ALC271X"); |
15047 | spec->codec_variant = ALC269_TYPE_ALC271X; | 15084 | spec->codec_variant = ALC269_TYPE_ALC271X; |
15048 | } else { | 15085 | } else if ((coef & 0xf000) == 0x1000) { |
15086 | spec->codec_variant = ALC269_TYPE_ALC270; | ||
15087 | } else if ((coef & 0xf000) == 0x2000) { | ||
15049 | alc_codec_rename(codec, "ALC259"); | 15088 | alc_codec_rename(codec, "ALC259"); |
15050 | spec->codec_variant = ALC269_TYPE_ALC259; | 15089 | spec->codec_variant = ALC269_TYPE_ALC259; |
15090 | } else if ((coef & 0xf000) == 0x3000) { | ||
15091 | alc_codec_rename(codec, "ALC258"); | ||
15092 | spec->codec_variant = ALC269_TYPE_ALC258; | ||
15093 | } else { | ||
15094 | alc_codec_rename(codec, "ALC269VB"); | ||
15095 | spec->codec_variant = ALC269_TYPE_ALC269VB; | ||
15051 | } | 15096 | } |
15052 | } else | 15097 | } else |
15053 | alc_fix_pll_init(codec, 0x20, 0x04, 15); | 15098 | alc_fix_pll_init(codec, 0x20, 0x04, 15); |
@@ -15110,7 +15155,7 @@ static int patch_alc269(struct hda_codec *codec) | |||
15110 | spec->stream_digital_capture = &alc269_pcm_digital_capture; | 15155 | spec->stream_digital_capture = &alc269_pcm_digital_capture; |
15111 | 15156 | ||
15112 | if (!spec->adc_nids) { /* wasn't filled automatically? use default */ | 15157 | if (!spec->adc_nids) { /* wasn't filled automatically? use default */ |
15113 | if (spec->codec_variant != ALC269_TYPE_NORMAL) { | 15158 | if (spec->codec_variant == ALC269_TYPE_NORMAL) { |
15114 | spec->adc_nids = alc269_adc_nids; | 15159 | spec->adc_nids = alc269_adc_nids; |
15115 | spec->num_adc_nids = ARRAY_SIZE(alc269_adc_nids); | 15160 | spec->num_adc_nids = ARRAY_SIZE(alc269_adc_nids); |
15116 | spec->capsrc_nids = alc269_capsrc_nids; | 15161 | spec->capsrc_nids = alc269_capsrc_nids; |
@@ -16904,7 +16949,7 @@ static struct alc_config_preset alc861vd_presets[] = { | |||
16904 | static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, | 16949 | static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, |
16905 | const struct auto_pin_cfg *cfg) | 16950 | const struct auto_pin_cfg *cfg) |
16906 | { | 16951 | { |
16907 | return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x09, 0); | 16952 | return alc_auto_create_input_ctls(codec, cfg, 0x0b, 0x22, 0); |
16908 | } | 16953 | } |
16909 | 16954 | ||
16910 | 16955 | ||
@@ -18958,6 +19003,8 @@ static inline hda_nid_t alc662_mix_to_dac(hda_nid_t nid) | |||
18958 | return 0x02; | 19003 | return 0x02; |
18959 | else if (nid >= 0x0c && nid <= 0x0e) | 19004 | else if (nid >= 0x0c && nid <= 0x0e) |
18960 | return nid - 0x0c + 0x02; | 19005 | return nid - 0x0c + 0x02; |
19006 | else if (nid == 0x26) /* ALC887-VD has this DAC too */ | ||
19007 | return 0x25; | ||
18961 | else | 19008 | else |
18962 | return 0; | 19009 | return 0; |
18963 | } | 19010 | } |
@@ -18966,7 +19013,7 @@ static inline hda_nid_t alc662_mix_to_dac(hda_nid_t nid) | |||
18966 | static hda_nid_t alc662_dac_to_mix(struct hda_codec *codec, hda_nid_t pin, | 19013 | static hda_nid_t alc662_dac_to_mix(struct hda_codec *codec, hda_nid_t pin, |
18967 | hda_nid_t dac) | 19014 | hda_nid_t dac) |
18968 | { | 19015 | { |
18969 | hda_nid_t mix[4]; | 19016 | hda_nid_t mix[5]; |
18970 | int i, num; | 19017 | int i, num; |
18971 | 19018 | ||
18972 | num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix)); | 19019 | num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix)); |
@@ -19426,7 +19473,10 @@ static int patch_alc888(struct hda_codec *codec) | |||
19426 | { | 19473 | { |
19427 | if ((alc_read_coef_idx(codec, 0) & 0x00f0)==0x0030){ | 19474 | if ((alc_read_coef_idx(codec, 0) & 0x00f0)==0x0030){ |
19428 | kfree(codec->chip_name); | 19475 | kfree(codec->chip_name); |
19429 | codec->chip_name = kstrdup("ALC888-VD", GFP_KERNEL); | 19476 | if (codec->vendor_id == 0x10ec0887) |
19477 | codec->chip_name = kstrdup("ALC887-VD", GFP_KERNEL); | ||
19478 | else | ||
19479 | codec->chip_name = kstrdup("ALC888-VD", GFP_KERNEL); | ||
19430 | if (!codec->chip_name) { | 19480 | if (!codec->chip_name) { |
19431 | alc_free(codec); | 19481 | alc_free(codec); |
19432 | return -ENOMEM; | 19482 | return -ENOMEM; |
@@ -19916,7 +19966,7 @@ static struct hda_codec_preset snd_hda_preset_realtek[] = { | |||
19916 | { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", | 19966 | { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", |
19917 | .patch = patch_alc882 }, | 19967 | .patch = patch_alc882 }, |
19918 | { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, | 19968 | { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, |
19919 | { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc882 }, | 19969 | { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc888 }, |
19920 | { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200", | 19970 | { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200", |
19921 | .patch = patch_alc882 }, | 19971 | .patch = patch_alc882 }, |
19922 | { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc888 }, | 19972 | { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc888 }, |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index cfd73afad882..efa4225f5fd6 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -1627,6 +1627,8 @@ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = { | |||
1627 | static struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = { | 1627 | static struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = { |
1628 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02a1, | 1628 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02a1, |
1629 | "Alienware M17x", STAC_ALIENWARE_M17X), | 1629 | "Alienware M17x", STAC_ALIENWARE_M17X), |
1630 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x043a, | ||
1631 | "Alienware M17x", STAC_ALIENWARE_M17X), | ||
1630 | {} /* terminator */ | 1632 | {} /* terminator */ |
1631 | }; | 1633 | }; |
1632 | 1634 | ||
@@ -3491,10 +3493,8 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec, | |||
3491 | return err; | 3493 | return err; |
3492 | } | 3494 | } |
3493 | 3495 | ||
3494 | if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1) { | 3496 | if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1) |
3495 | snd_hda_add_imux_item(imux, label, index, NULL); | 3497 | snd_hda_add_imux_item(imux, label, index, NULL); |
3496 | spec->num_analog_muxes++; | ||
3497 | } | ||
3498 | } | 3498 | } |
3499 | 3499 | ||
3500 | return 0; | 3500 | return 0; |
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index d1c3f8defc48..7f4852a478a1 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c | |||
@@ -263,8 +263,7 @@ static void vt1708_stop_hp_work(struct via_spec *spec) | |||
263 | return; | 263 | return; |
264 | snd_hda_codec_write(spec->codec, 0x1, 0, 0xf81, | 264 | snd_hda_codec_write(spec->codec, 0x1, 0, 0xf81, |
265 | !spec->vt1708_jack_detectect); | 265 | !spec->vt1708_jack_detectect); |
266 | cancel_delayed_work(&spec->vt1708_hp_work); | 266 | cancel_delayed_work_sync(&spec->vt1708_hp_work); |
267 | flush_scheduled_work(); | ||
268 | } | 267 | } |
269 | 268 | ||
270 | 269 | ||
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c index 3078ed66ad61..c44c91e6fb18 100644 --- a/sound/pci/oxygen/oxygen_lib.c +++ b/sound/pci/oxygen/oxygen_lib.c | |||
@@ -565,7 +565,8 @@ static void oxygen_card_free(struct snd_card *card) | |||
565 | oxygen_shutdown(chip); | 565 | oxygen_shutdown(chip); |
566 | if (chip->irq >= 0) | 566 | if (chip->irq >= 0) |
567 | free_irq(chip->irq, chip); | 567 | free_irq(chip->irq, chip); |
568 | flush_scheduled_work(); | 568 | flush_work_sync(&chip->spdif_input_bits_work); |
569 | flush_work_sync(&chip->gpio_work); | ||
569 | chip->model.cleanup(chip); | 570 | chip->model.cleanup(chip); |
570 | kfree(chip->model_data); | 571 | kfree(chip->model_data); |
571 | mutex_destroy(&chip->mutex); | 572 | mutex_destroy(&chip->mutex); |
@@ -741,7 +742,8 @@ int oxygen_pci_suspend(struct pci_dev *pci, pm_message_t state) | |||
741 | spin_unlock_irq(&chip->reg_lock); | 742 | spin_unlock_irq(&chip->reg_lock); |
742 | 743 | ||
743 | synchronize_irq(chip->irq); | 744 | synchronize_irq(chip->irq); |
744 | flush_scheduled_work(); | 745 | flush_work_sync(&chip->spdif_input_bits_work); |
746 | flush_work_sync(&chip->gpio_work); | ||
745 | chip->interrupt_mask = saved_interrupt_mask; | 747 | chip->interrupt_mask = saved_interrupt_mask; |
746 | 748 | ||
747 | pci_disable_device(pci); | 749 | pci_disable_device(pci); |