diff options
-rw-r--r-- | sound/soc/fsl/fsl_asrc.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c index a451905928c6..778754d0110a 100644 --- a/sound/soc/fsl/fsl_asrc.c +++ b/sound/soc/fsl/fsl_asrc.c @@ -16,6 +16,7 @@ #include <linux/pm_runtime.h> #include <linux/miscdevice.h> #include <linux/sched/signal.h> +#include <linux/pm_domain.h> #include <sound/dmaengine_pcm.h> #include <sound/pcm_params.h> @@ -1026,6 +1027,7 @@ static int fsl_asrc_probe(struct platform_device *pdev) void __iomem *regs; int irq, ret, i; char tmp[16]; + int num_domains = 0; asrc_priv = devm_kzalloc(&pdev->dev, sizeof(*asrc_priv), GFP_KERNEL); if (!asrc_priv) @@ -1084,6 +1086,24 @@ static int fsl_asrc_probe(struct platform_device *pdev) } } + num_domains = of_count_phandle_with_args(np, "power-domains", + "#power-domain-cells"); + for (i = 0; i < num_domains; i++) { + struct device *pd_dev; + struct device_link *link; + + pd_dev = dev_pm_domain_attach_by_id(&pdev->dev, i); + if (IS_ERR(pd_dev)) + return PTR_ERR(pd_dev); + + link = device_link_add(&pdev->dev, pd_dev, + DL_FLAG_STATELESS | + DL_FLAG_PM_RUNTIME | + DL_FLAG_RPM_ACTIVE); + if (IS_ERR(link)) + return PTR_ERR(link); + } + if (of_device_is_compatible(np, "fsl,imx35-asrc")) { asrc_priv->channel_bits = 3; strncpy(asrc_priv->name, "mxc_asrc", |