ALSA: hda - Power down codec automatically at registration
authorTakashi Iwai <tiwai@suse.de>
Fri, 20 Feb 2015 08:58:14 +0000 (09:58 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 26 Feb 2015 14:37:08 +0000 (15:37 +0100)
So far, we let the controller driver power down the all codecs at the
end of probe.  But this can be done better in the codec's dev_register
callback.  This results in the reduction of duplicated codes in each
control driver.

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

index 33b8b71f8eaf53ec3927fe843cb79f4315e67298..6580a367023e255e07a701309b4c1ec738cfe7ea 100644 (file)
@@ -1163,6 +1163,8 @@ static int snd_hda_codec_dev_register(struct snd_device *device)
        snd_hda_register_beep_device(codec);
        if (device_is_registered(hda_codec_dev(codec)))
                pm_runtime_enable(hda_codec_dev(codec));
+       /* it was powered up in snd_hda_codec_new(), now all done */
+       snd_hda_power_down(codec);
        return 0;
 }
 
@@ -1260,8 +1262,7 @@ int snd_hda_codec_new(struct hda_bus *bus,
 
 #ifdef CONFIG_PM
        /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
-        * the caller has to power down appropriatley after initialization
-        * phase.
+        * it's powered down later in snd_hda_codec_dev_register().
         */
        set_bit(codec->addr, &bus->codec_powered);
        pm_runtime_set_active(hda_codec_dev(codec));
index 738d332351d5bab1ff2549f305091b6f1f812aa1..e75e8137e296cdba4276cdf11234aeb4399c0b84 100644 (file)
@@ -1604,19 +1604,6 @@ static int azx_first_init(struct azx *chip)
        return 0;
 }
 
-static void power_down_all_codecs(struct azx *chip)
-{
-#ifdef CONFIG_PM
-       /* The codecs were powered up in snd_hda_codec_new().
-        * Now all initialization done, so turn them down if possible
-        */
-       struct hda_codec *codec;
-       list_for_each_entry(codec, &chip->bus->codec_list, list) {
-               snd_hda_power_down(codec);
-       }
-#endif
-}
-
 #ifdef CONFIG_SND_HDA_PATCH_LOADER
 /* callback from request_firmware_nowait() */
 static void azx_firmware_cb(const struct firmware *fw, void *context)
@@ -1926,7 +1913,6 @@ static int azx_probe_continue(struct azx *chip)
                goto out_free;
 
        chip->running = 1;
-       power_down_all_codecs(chip);
        azx_notifier_register(chip);
        azx_add_card_list(chip);
        snd_hda_set_power_save(chip->bus, power_save * 1000);
index 42bc17655df055bb785a37b9a7ae2029851a8272..1359fdd20f02bd5eb09b50dffd64245ae669bae5 100644 (file)
@@ -337,17 +337,6 @@ static int hda_tegra_init_chip(struct azx *chip, struct platform_device *pdev)
        return 0;
 }
 
-/*
- * The codecs were powered up in snd_hda_codec_new().
- * Now all initialization done, so turn them down if possible
- */
-static void power_down_all_codecs(struct azx *chip)
-{
-       struct hda_codec *codec;
-       list_for_each_entry(codec, &chip->bus->codec_list, list)
-               snd_hda_power_down(codec);
-}
-
 static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev)
 {
        struct snd_card *card = chip->card;
@@ -523,7 +512,6 @@ static int hda_tegra_probe(struct platform_device *pdev)
                goto out_free;
 
        chip->running = 1;
-       power_down_all_codecs(chip);
        azx_notifier_register(chip);
        snd_hda_set_power_save(chip->bus, power_save * 1000);