diff options
-rw-r--r-- | sound/pci/hda/hda_codec.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 14a6f546327..cfd50b56187 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -288,6 +288,9 @@ static int init_unsol_queue(struct hda_bus *bus) { struct hda_bus_unsolicited *unsol; + if (bus->unsol) /* already initialized */ + return 0; + unsol = kzalloc(sizeof(*unsol), GFP_KERNEL); if (! unsol) { snd_printk(KERN_ERR "hda_codec: can't allocate unsolicited queue\n"); @@ -373,8 +376,6 @@ int snd_hda_bus_new(snd_card_t *card, const struct hda_bus_template *temp, init_MUTEX(&bus->cmd_mutex); INIT_LIST_HEAD(&bus->codec_list); - init_unsol_queue(bus); - if ((err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops)) < 0) { snd_hda_bus_free(bus); return err; @@ -540,6 +541,9 @@ int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr, return err; } + if (codec->patch_ops.unsol_event) + init_unsol_queue(bus); + snd_hda_codec_proc_new(codec); sprintf(component, "HDA:%08x", codec->vendor_id); |