Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 184635
b: refs/heads/master
c: e909d62
h: refs/heads/master
i:
  184633: 3642386
  184631: 68d705a
v: v3
  • Loading branch information
Paul Walmsley committed Jan 27, 2010
1 parent b3ff924 commit ca02de4
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 217 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3d309cdef37e238c108cade95a8192d5688bd56a
refs/heads/master: e909d62a8afda7a224a7e322cf2f387d69ca771f
118 changes: 40 additions & 78 deletions trunk/arch/arm/mach-omap2/clockdomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,6 @@
/* clkdm_list contains all registered struct clockdomains */
static LIST_HEAD(clkdm_list);

/* clkdm_mutex protects clkdm_list add and del ops */
static DEFINE_MUTEX(clkdm_mutex);

/* array of clockdomain deps to be added/removed when clkdm in hwsup mode */
static struct clkdm_autodep *autodeps;

Expand All @@ -67,6 +64,45 @@ static struct clockdomain *_clkdm_lookup(const char *name)
return clkdm;
}

/**
* _clkdm_register - register a clockdomain
* @clkdm: struct clockdomain * to register
*
* Adds a clockdomain to the internal clockdomain list.
* Returns -EINVAL if given a null pointer, -EEXIST if a clockdomain is
* already registered by the provided name, or 0 upon success.
*/
static int _clkdm_register(struct clockdomain *clkdm)
{
struct powerdomain *pwrdm;

if (!clkdm || !clkdm->name)
return -EINVAL;

if (!omap_chip_is(clkdm->omap_chip))
return -EINVAL;

pwrdm = pwrdm_lookup(clkdm->pwrdm.name);
if (!pwrdm) {
pr_err("clockdomain: %s: powerdomain %s does not exist\n",
clkdm->name, clkdm->pwrdm.name);
return -EINVAL;
}
clkdm->pwrdm.ptr = pwrdm;

/* Verify that the clockdomain is not already registered */
if (_clkdm_lookup(clkdm->name))
return -EEXIST;

list_add(&clkdm->node, &clkdm_list);

pwrdm_add_clkdm(pwrdm, clkdm);

pr_debug("clockdomain: registered %s\n", clkdm->name);

return 0;
}

/* _clkdm_deps_lookup - look up the specified clockdomain in a clkdm list */
static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm,
struct clkdm_dep *deps)
Expand Down Expand Up @@ -240,84 +276,14 @@ void clkdm_init(struct clockdomain **clkdms,

if (clkdms)
for (c = clkdms; *c; c++)
clkdm_register(*c);
_clkdm_register(*c);

autodeps = init_autodeps;
if (autodeps)
for (autodep = autodeps; autodep->clkdm.ptr; autodep++)
_autodep_lookup(autodep);
}

/**
* clkdm_register - register a clockdomain
* @clkdm: struct clockdomain * to register
*
* Adds a clockdomain to the internal clockdomain list.
* Returns -EINVAL if given a null pointer, -EEXIST if a clockdomain is
* already registered by the provided name, or 0 upon success.
*/
int clkdm_register(struct clockdomain *clkdm)
{
int ret = -EINVAL;
struct powerdomain *pwrdm;

if (!clkdm || !clkdm->name)
return -EINVAL;

if (!omap_chip_is(clkdm->omap_chip))
return -EINVAL;

pwrdm = pwrdm_lookup(clkdm->pwrdm.name);
if (!pwrdm) {
pr_err("clockdomain: %s: powerdomain %s does not exist\n",
clkdm->name, clkdm->pwrdm.name);
return -EINVAL;
}
clkdm->pwrdm.ptr = pwrdm;

mutex_lock(&clkdm_mutex);
/* Verify that the clockdomain is not already registered */
if (_clkdm_lookup(clkdm->name)) {
ret = -EEXIST;
goto cr_unlock;
}

list_add(&clkdm->node, &clkdm_list);

pwrdm_add_clkdm(pwrdm, clkdm);

pr_debug("clockdomain: registered %s\n", clkdm->name);
ret = 0;

cr_unlock:
mutex_unlock(&clkdm_mutex);

return ret;
}

/**
* clkdm_unregister - unregister a clockdomain
* @clkdm: struct clockdomain * to unregister
*
* Removes a clockdomain from the internal clockdomain list. Returns
* -EINVAL if clkdm argument is NULL.
*/
int clkdm_unregister(struct clockdomain *clkdm)
{
if (!clkdm)
return -EINVAL;

pwrdm_del_clkdm(clkdm->pwrdm.ptr, clkdm);

mutex_lock(&clkdm_mutex);
list_del(&clkdm->node);
mutex_unlock(&clkdm_mutex);

pr_debug("clockdomain: unregistered %s\n", clkdm->name);

return 0;
}

/**
* clkdm_lookup - look up a clockdomain by name, return a pointer
* @name: name of clockdomain
Expand All @@ -334,14 +300,12 @@ struct clockdomain *clkdm_lookup(const char *name)

clkdm = NULL;

mutex_lock(&clkdm_mutex);
list_for_each_entry(temp_clkdm, &clkdm_list, node) {
if (!strcmp(name, temp_clkdm->name)) {
clkdm = temp_clkdm;
break;
}
}
mutex_unlock(&clkdm_mutex);

return clkdm;
}
Expand Down Expand Up @@ -369,13 +333,11 @@ int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user),
if (!fn)
return -EINVAL;

mutex_lock(&clkdm_mutex);
list_for_each_entry(clkdm, &clkdm_list, node) {
ret = (*fn)(clkdm, user);
if (ret)
break;
}
mutex_unlock(&clkdm_mutex);

return ret;
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/arm/mach-omap2/pm-debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ static int __init pm_dbg_init(void)
(void) debugfs_create_file("time", S_IRUGO,
d, (void *)DEBUG_FILE_TIMERS, &debug_fops);

pwrdm_for_each_nolock(pwrdms_setup, (void *)d);
pwrdm_for_each(pwrdms_setup, (void *)d);

pm_dbg_dir = debugfs_create_dir("registers", d);
if (IS_ERR(pm_dbg_dir))
Expand Down
Loading

0 comments on commit ca02de4

Please sign in to comment.