-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ASoC: codecs: Add power domains support in digital macro codecs
Add support for enabling required power domains in digital macro codecs. macro and dcodec power domains are being requested as clocks by HLOS in ADSP based architectures and ADSP internally handling as powerdomains. In ADSP bypass case need to handle them as power domains explicitly. Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com> Co-developed-by: Venkata Prasad Potturu <quic_potturu@quicinc.com> Signed-off-by: Venkata Prasad Potturu <quic_potturu@quicinc.com> Reported-by: kernel test robot <lkp@intel.com> Link: https://lore.kernel.org/r/1645898959-11231-2-git-send-email-quic_srivasam@quicinc.com Signed-off-by: Mark Brown <broonie@kernel.org>
- Loading branch information
Srinivasa Rao Mandadapu
authored and
Mark Brown
committed
Feb 28, 2022
1 parent
0f907c3
commit 9e3d83c
Showing
8 changed files
with
122 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
// Copyright (c) 2022, The Linux Foundation. All rights reserved. | ||
|
||
#include <linux/export.h> | ||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
#include <linux/of_platform.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/pm_domain.h> | ||
#include <linux/pm_runtime.h> | ||
|
||
#include "lpass-macro-common.h" | ||
|
||
struct lpass_macro *lpass_macro_pds_init(struct device *dev) | ||
{ | ||
struct lpass_macro *l_pds; | ||
int ret; | ||
|
||
if (!of_find_property(dev->of_node, "power-domains", NULL)) | ||
return NULL; | ||
|
||
l_pds = devm_kzalloc(dev, sizeof(*l_pds), GFP_KERNEL); | ||
if (!l_pds) | ||
return ERR_PTR(-ENOMEM); | ||
|
||
l_pds->macro_pd = dev_pm_domain_attach_by_name(dev, "macro"); | ||
if (IS_ERR_OR_NULL(l_pds->macro_pd)) | ||
return NULL; | ||
|
||
ret = pm_runtime_get_sync(l_pds->macro_pd); | ||
if (ret < 0) { | ||
pm_runtime_put_noidle(l_pds->macro_pd); | ||
goto macro_err; | ||
} | ||
|
||
l_pds->dcodec_pd = dev_pm_domain_attach_by_name(dev, "dcodec"); | ||
if (IS_ERR_OR_NULL(l_pds->dcodec_pd)) | ||
goto dcodec_err; | ||
|
||
ret = pm_runtime_get_sync(l_pds->dcodec_pd); | ||
if (ret < 0) { | ||
pm_runtime_put_noidle(l_pds->dcodec_pd); | ||
goto dcodec_sync_err; | ||
} | ||
return l_pds; | ||
|
||
dcodec_sync_err: | ||
dev_pm_domain_detach(l_pds->dcodec_pd, false); | ||
dcodec_err: | ||
pm_runtime_put(l_pds->macro_pd); | ||
macro_err: | ||
dev_pm_domain_detach(l_pds->macro_pd, false); | ||
return ERR_PTR(ret); | ||
} | ||
EXPORT_SYMBOL_GPL(lpass_macro_pds_init); | ||
|
||
void lpass_macro_pds_exit(struct lpass_macro *pds) | ||
{ | ||
pm_runtime_put(pds->macro_pd); | ||
dev_pm_domain_detach(pds->macro_pd, false); | ||
pm_runtime_put(pds->dcodec_pd); | ||
dev_pm_domain_detach(pds->dcodec_pd, false); | ||
} | ||
EXPORT_SYMBOL_GPL(lpass_macro_pds_exit); | ||
|
||
MODULE_DESCRIPTION("Common macro driver"); | ||
MODULE_LICENSE("GPL"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* Copyright (c) 2022, The Linux Foundation. All rights reserved. | ||
*/ | ||
|
||
#ifndef __LPASS_MACRO_COMMON_H__ | ||
#define __LPASS_MACRO_COMMON_H__ | ||
|
||
struct lpass_macro { | ||
struct device *macro_pd; | ||
struct device *dcodec_pd; | ||
}; | ||
|
||
struct lpass_macro *lpass_macro_pds_init(struct device *dev); | ||
void lpass_macro_pds_exit(struct lpass_macro *pds); | ||
|
||
#endif /* __LPASS_MACRO_COMMON_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters