Skip to content

Commit

Permalink
ALSA: hda - Power down codec automatically at registration
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Takashi Iwai committed Feb 26, 2015
1 parent 55ed9cd commit 709949f
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 28 deletions.
5 changes: 3 additions & 2 deletions sound/pci/hda/hda_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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));
Expand Down
14 changes: 0 additions & 14 deletions sound/pci/hda/hda_intel.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down
12 changes: 0 additions & 12 deletions sound/pci/hda/hda_tegra.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 709949f

Please sign in to comment.