OMAP2+: powerdomain: add voltage domain lookup during register
When a powerdomain is registered, lookup the voltage domain by name and keep a pointer to the containing voltagedomain in the powerdomain structure. Modeled after similar method between powerdomain and clockdomain layers. Signed-off-by: Kevin Hilman <khilman@ti.com>
This commit is contained in:
@@ -77,6 +77,7 @@ static struct powerdomain *_pwrdm_lookup(const char *name)
|
|||||||
static int _pwrdm_register(struct powerdomain *pwrdm)
|
static int _pwrdm_register(struct powerdomain *pwrdm)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
struct voltagedomain *voltdm;
|
||||||
|
|
||||||
if (!pwrdm || !pwrdm->name)
|
if (!pwrdm || !pwrdm->name)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -91,6 +92,14 @@ static int _pwrdm_register(struct powerdomain *pwrdm)
|
|||||||
if (_pwrdm_lookup(pwrdm->name))
|
if (_pwrdm_lookup(pwrdm->name))
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
|
|
||||||
|
voltdm = voltdm_lookup(pwrdm->voltdm.name);
|
||||||
|
if (!voltdm) {
|
||||||
|
pr_err("powerdomain: %s: voltagedomain %s does not exist\n",
|
||||||
|
pwrdm->name, pwrdm->voltdm.name);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
pwrdm->voltdm.ptr = voltdm;
|
||||||
|
|
||||||
list_add(&pwrdm->node, &pwrdm_list);
|
list_add(&pwrdm->node, &pwrdm_list);
|
||||||
|
|
||||||
/* Initialize the powerdomain's state counter */
|
/* Initialize the powerdomain's state counter */
|
||||||
@@ -426,6 +435,18 @@ int pwrdm_for_each_clkdm(struct powerdomain *pwrdm,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pwrdm_get_voltdm - return a ptr to the voltdm that this pwrdm resides in
|
||||||
|
* @pwrdm: struct powerdomain *
|
||||||
|
*
|
||||||
|
* Return a pointer to the struct voltageomain that the specified powerdomain
|
||||||
|
* @pwrdm exists in.
|
||||||
|
*/
|
||||||
|
struct voltagedomain *pwrdm_get_voltdm(struct powerdomain *pwrdm)
|
||||||
|
{
|
||||||
|
return pwrdm->voltdm.ptr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pwrdm_get_mem_bank_count - get number of memory banks in this powerdomain
|
* pwrdm_get_mem_bank_count - get number of memory banks in this powerdomain
|
||||||
* @pwrdm: struct powerdomain *
|
* @pwrdm: struct powerdomain *
|
||||||
|
@@ -183,6 +183,7 @@ int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
|
|||||||
int pwrdm_for_each_clkdm(struct powerdomain *pwrdm,
|
int pwrdm_for_each_clkdm(struct powerdomain *pwrdm,
|
||||||
int (*fn)(struct powerdomain *pwrdm,
|
int (*fn)(struct powerdomain *pwrdm,
|
||||||
struct clockdomain *clkdm));
|
struct clockdomain *clkdm));
|
||||||
|
struct voltagedomain *pwrdm_get_voltdm(struct powerdomain *pwrdm);
|
||||||
|
|
||||||
int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm);
|
int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm);
|
||||||
|
|
||||||
|
@@ -186,4 +186,5 @@ extern void omap44xx_voltagedomains_init(void);
|
|||||||
|
|
||||||
struct voltagedomain *voltdm_lookup(const char *name);
|
struct voltagedomain *voltdm_lookup(const char *name);
|
||||||
void voltdm_init(struct voltagedomain **voltdm_list);
|
void voltdm_init(struct voltagedomain **voltdm_list);
|
||||||
|
int voltdm_add_pwrdm(struct voltagedomain *voltdm, struct powerdomain *pwrdm);
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user