Commit 48d54f3f authored by Paul Walmsley's avatar Paul Walmsley

OMAP2+: hwmod: ignore attempts to re-setup a hwmod

Previously, if a hwmod had already been set up, and the code attempted
to set up the hwmod again, an error would be returned.  This is not
really useful behavior if we wish to allow the OMAP core code to setup
the hwmods needed for the Linux clocksources and clockevents before
the rest of the hwmods are setup.  So, instead of generating errors,
just ignore the attempt to re-setup the hwmod.
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
Cc: Benoît Cousson <b-cousson@ti.com>
Cc: Kevin Hilman <khilman@ti.com>
parent 569edd70
...@@ -902,17 +902,15 @@ static struct omap_hwmod *_lookup(const char *name) ...@@ -902,17 +902,15 @@ static struct omap_hwmod *_lookup(const char *name)
* @data: not used; pass NULL * @data: not used; pass NULL
* *
* Called by omap_hwmod_setup_all() (after omap2_clk_init()). * Called by omap_hwmod_setup_all() (after omap2_clk_init()).
* Resolves all clock names embedded in the hwmod. Returns -EINVAL if * Resolves all clock names embedded in the hwmod. Returns 0 on
* the omap_hwmod has not yet been registered or if the clocks have * success, or a negative error code on failure.
* already been initialized, 0 on success, or a non-zero error on
* failure.
*/ */
static int _init_clocks(struct omap_hwmod *oh, void *data) static int _init_clocks(struct omap_hwmod *oh, void *data)
{ {
int ret = 0; int ret = 0;
if (!oh || (oh->_state != _HWMOD_STATE_REGISTERED)) if (oh->_state != _HWMOD_STATE_REGISTERED)
return -EINVAL; return 0;
pr_debug("omap_hwmod: %s: looking up clocks\n", oh->name); pr_debug("omap_hwmod: %s: looking up clocks\n", oh->name);
...@@ -1351,14 +1349,16 @@ static int _shutdown(struct omap_hwmod *oh) ...@@ -1351,14 +1349,16 @@ static int _shutdown(struct omap_hwmod *oh)
* @oh: struct omap_hwmod * * @oh: struct omap_hwmod *
* *
* Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh * Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh
* OCP_SYSCONFIG register. Returns -EINVAL if the hwmod is in the * OCP_SYSCONFIG register. Returns 0.
* wrong state or returns 0.
*/ */
static int _setup(struct omap_hwmod *oh, void *data) static int _setup(struct omap_hwmod *oh, void *data)
{ {
int i, r; int i, r;
u8 postsetup_state; u8 postsetup_state;
if (oh->_state != _HWMOD_STATE_CLKS_INITED)
return 0;
/* Set iclk autoidle mode */ /* Set iclk autoidle mode */
if (oh->slaves_cnt > 0) { if (oh->slaves_cnt > 0) {
for (i = 0; i < oh->slaves_cnt; i++) { for (i = 0; i < oh->slaves_cnt; i++) {
...@@ -1621,6 +1621,9 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs) ...@@ -1621,6 +1621,9 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs)
*/ */
static int __init _populate_mpu_rt_base(struct omap_hwmod *oh, void *data) static int __init _populate_mpu_rt_base(struct omap_hwmod *oh, void *data)
{ {
if (oh->_state != _HWMOD_STATE_REGISTERED)
return 0;
if (oh->_int_flags & _HWMOD_NO_MPU_PORT) if (oh->_int_flags & _HWMOD_NO_MPU_PORT)
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment