PM / Domains: Allow overriding the ->xlate() callback
Allow generic power domain providers to override the ->xlate() callback in case the default genpd_xlate_onecell() translation callback is not good enough. One potential use-case for this is to allow generic power domains to be specified by an ID rather than an index. Signed-off-by: Thierry Reding <treding@nvidia.com> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
2ea659a9ef
commit
408455245a
@ -1584,9 +1584,6 @@ EXPORT_SYMBOL_GPL(pm_genpd_remove);
|
||||
|
||||
#ifdef CONFIG_PM_GENERIC_DOMAINS_OF
|
||||
|
||||
typedef struct generic_pm_domain *(*genpd_xlate_t)(struct of_phandle_args *args,
|
||||
void *data);
|
||||
|
||||
/*
|
||||
* Device Tree based PM domain providers.
|
||||
*
|
||||
@ -1742,6 +1739,9 @@ int of_genpd_add_provider_onecell(struct device_node *np,
|
||||
|
||||
mutex_lock(&gpd_list_lock);
|
||||
|
||||
if (!data->xlate)
|
||||
data->xlate = genpd_xlate_onecell;
|
||||
|
||||
for (i = 0; i < data->num_domains; i++) {
|
||||
if (!data->domains[i])
|
||||
continue;
|
||||
@ -1752,7 +1752,7 @@ int of_genpd_add_provider_onecell(struct device_node *np,
|
||||
data->domains[i]->has_provider = true;
|
||||
}
|
||||
|
||||
ret = genpd_add_provider(np, genpd_xlate_onecell, data);
|
||||
ret = genpd_add_provider(np, data->xlate, data);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
|
@ -206,9 +206,13 @@ static inline void pm_genpd_syscore_poweron(struct device *dev) {}
|
||||
/* OF PM domain providers */
|
||||
struct of_device_id;
|
||||
|
||||
typedef struct generic_pm_domain *(*genpd_xlate_t)(struct of_phandle_args *args,
|
||||
void *data);
|
||||
|
||||
struct genpd_onecell_data {
|
||||
struct generic_pm_domain **domains;
|
||||
unsigned int num_domains;
|
||||
genpd_xlate_t xlate;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM_GENERIC_DOMAINS_OF
|
||||
|
Loading…
Reference in New Issue
Block a user