aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2010-12-13 03:29:52 -0500
committerTakashi Iwai <tiwai@suse.de>2010-12-13 03:29:52 -0500
commit354d14b3f53cc749c5d26d4ba7280d1e931d6bc4 (patch)
tree59b597e44902d8db8bde7deac1e7e707327c6fe6 /sound/pci
parent5144c534d16529bc469396211131e8935589f833 (diff)
parent5b84ba26a9672e615897234fa5efd3eea2d6b295 (diff)
Merge branch 'topic/workq-update' into topic/misc
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/ac97/ac97_codec.c6
-rw-r--r--sound/pci/hda/patch_conexant.c1
-rw-r--r--sound/pci/hda/patch_realtek.c84
-rw-r--r--sound/pci/hda/patch_sigmatel.c6
-rw-r--r--sound/pci/hda/patch_via.c3
-rw-r--r--sound/pci/oxygen/oxygen_lib.c6
6 files changed, 78 insertions, 28 deletions
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
index a7630e9edf8..0fc614ce16c 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 3cfb31e77b1..846d1ead47f 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 b7e234898fd..f17159d7dbe 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
2021static 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
2234static 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
2203static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) 2244static 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
9527static 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
9534static void alc888_6st_dell_setup(struct hda_codec *codec) 9568static 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 */
14630enum { 14663enum {
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)
15029static int patch_alc269(struct hda_codec *codec) 15065static 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[] = {
16904static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, 16949static 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)
18966static hda_nid_t alc662_dac_to_mix(struct hda_codec *codec, hda_nid_t pin, 19013static 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 cfd73afad88..efa4225f5fd 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[] = {
1627static struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = { 1627static 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 d1c3f8defc4..7f4852a478a 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 3078ed66ad6..c44c91e6fb1 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);