[ALSA] hda-codec - Prepare unsol workqueue on demand
authorTakashi Iwai <tiwai@suse.de>
Thu, 17 Nov 2005 10:07:49 +0000 (11:07 +0100)
committerJaroslav Kysela <perex@suse.cz>
Tue, 3 Jan 2006 11:17:22 +0000 (12:17 +0100)
Modules: HDA Codec driver

Prepare unsol workqueue only when a codec really supports.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.c

index 14a6f5463277939131959085dd5a774684978a11..cfd50b56187b80f5e4b7a6bbc95d3e312fdb1d27 100644 (file)
@@ -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);