aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/hda_codec.c1
-rw-r--r--sound/pci/hda/hda_codec.h1
-rw-r--r--sound/pci/hda/patch_sigmatel.c3
3 files changed, 4 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 5d5e8012d6a5..a98ce5b11188 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -464,6 +464,7 @@ static int snd_hda_bus_free(struct hda_bus *bus)
464static int snd_hda_bus_dev_free(struct snd_device *device) 464static int snd_hda_bus_dev_free(struct snd_device *device)
465{ 465{
466 struct hda_bus *bus = device->device_data; 466 struct hda_bus *bus = device->device_data;
467 bus->shutdown = 1;
467 return snd_hda_bus_free(bus); 468 return snd_hda_bus_free(bus);
468} 469}
469 470
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
index ee122b009fd4..a70b181bbace 100644
--- a/sound/pci/hda/hda_codec.h
+++ b/sound/pci/hda/hda_codec.h
@@ -617,6 +617,7 @@ struct hda_bus {
617 617
618 /* misc op flags */ 618 /* misc op flags */
619 unsigned int needs_damn_long_delay :1; 619 unsigned int needs_damn_long_delay :1;
620 unsigned int shutdown :1; /* being unloaded */
620}; 621};
621 622
622/* 623/*
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index a501c9121649..4fa5189264b7 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -3921,8 +3921,9 @@ static int stac92xx_init(struct hda_codec *codec)
3921static void stac92xx_free_jacks(struct hda_codec *codec) 3921static void stac92xx_free_jacks(struct hda_codec *codec)
3922{ 3922{
3923#ifdef CONFIG_SND_JACK 3923#ifdef CONFIG_SND_JACK
3924 /* free jack instances manually when clearing/reconfiguring */
3924 struct sigmatel_spec *spec = codec->spec; 3925 struct sigmatel_spec *spec = codec->spec;
3925 if (spec->jacks.list) { 3926 if (!codec->bus->shutdown && spec->jacks.list) {
3926 struct sigmatel_jack *jacks = spec->jacks.list; 3927 struct sigmatel_jack *jacks = spec->jacks.list;
3927 int i; 3928 int i;
3928 for (i = 0; i < spec->jacks.used; i++) 3929 for (i = 0; i < spec->jacks.used; i++)