Commit 87fc20e4 authored by Kai Vehmanen's avatar Kai Vehmanen Committed by Takashi Iwai

ASoC: SOF: Intel: hda: use hdac_ext fine-grained link management

Opt-in to use snd_hdac_ext_bus_link_power() to manage HDA link
power up/down events.

This allows to reduce power consumption in cases where some HDA codecs
are suspended, but other child devices (HDA or non-HDA codecs) remain
active and controller itself remains in active state.

By using snd_hdac_ext_bus_link_power(), the individual HDA links can be
powered off and if all HDA codecs are powered down, the command DMA can
also be shut down.
Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Acked-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20210205184630.1938761-3-kai.vehmanen@linux.intel.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent f9e5fd1b
...@@ -19,13 +19,21 @@ ...@@ -19,13 +19,21 @@
#define sof_hda_ext_ops NULL #define sof_hda_ext_ops NULL
#endif #endif
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
static const struct hdac_bus_ops bus_core_ops = {
.command = snd_hdac_bus_send_cmd,
.get_response = snd_hdac_bus_get_response,
.link_power = snd_hdac_ext_bus_link_power,
};
#endif
/* /*
* This can be used for both with/without hda link support. * This can be used for both with/without hda link support.
*/ */
void sof_hda_bus_init(struct hdac_bus *bus, struct device *dev) void sof_hda_bus_init(struct hdac_bus *bus, struct device *dev)
{ {
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
snd_hdac_ext_bus_init(bus, dev, NULL, sof_hda_ext_ops); snd_hdac_ext_bus_init(bus, dev, &bus_core_ops, sof_hda_ext_ops);
#else /* CONFIG_SND_SOC_SOF_HDA */ #else /* CONFIG_SND_SOC_SOF_HDA */
memset(bus, 0, sizeof(*bus)); memset(bus, 0, sizeof(*bus));
bus->dev = dev; bus->dev = dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment