aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/omap_hwmod.c
diff options
context:
space:
mode:
authorPaul Walmsley <paul@pwsan.com>2011-02-23 02:14:07 -0500
committerPaul Walmsley <paul@pwsan.com>2011-02-28 15:55:08 -0500
commit48d54f3fd20b435311f295b3bca3570096a2ac83 (patch)
tree8ab93d331b03aa11ff12e28bfa1bc041d23455f6 /arch/arm/mach-omap2/omap_hwmod.c
parent569edd705cc4e81a9129b5557f1fb259e21418a9 (diff)
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: Paul Walmsley <paul@pwsan.com> Cc: BenoƮt Cousson <b-cousson@ti.com> Cc: Kevin Hilman <khilman@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod.c')
-rw-r--r--arch/arm/mach-omap2/omap_hwmod.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index e4c934bd25b3..43aa894174fa 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -902,17 +902,15 @@ static struct omap_hwmod *_lookup(const char *name)
902 * @data: not used; pass NULL 902 * @data: not used; pass NULL
903 * 903 *
904 * Called by omap_hwmod_setup_all() (after omap2_clk_init()). 904 * Called by omap_hwmod_setup_all() (after omap2_clk_init()).
905 * Resolves all clock names embedded in the hwmod. Returns -EINVAL if 905 * Resolves all clock names embedded in the hwmod. Returns 0 on
906 * the omap_hwmod has not yet been registered or if the clocks have 906 * success, or a negative error code on failure.
907 * already been initialized, 0 on success, or a non-zero error on
908 * failure.
909 */ 907 */
910static int _init_clocks(struct omap_hwmod *oh, void *data) 908static int _init_clocks(struct omap_hwmod *oh, void *data)
911{ 909{
912 int ret = 0; 910 int ret = 0;
913 911
914 if (!oh || (oh->_state != _HWMOD_STATE_REGISTERED)) 912 if (oh->_state != _HWMOD_STATE_REGISTERED)
915 return -EINVAL; 913 return 0;
916 914
917 pr_debug("omap_hwmod: %s: looking up clocks\n", oh->name); 915 pr_debug("omap_hwmod: %s: looking up clocks\n", oh->name);
918 916
@@ -1351,14 +1349,16 @@ static int _shutdown(struct omap_hwmod *oh)
1351 * @oh: struct omap_hwmod * 1349 * @oh: struct omap_hwmod *
1352 * 1350 *
1353 * Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh 1351 * Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh
1354 * OCP_SYSCONFIG register. Returns -EINVAL if the hwmod is in the 1352 * OCP_SYSCONFIG register. Returns 0.
1355 * wrong state or returns 0.
1356 */ 1353 */
1357static int _setup(struct omap_hwmod *oh, void *data) 1354static int _setup(struct omap_hwmod *oh, void *data)
1358{ 1355{
1359 int i, r; 1356 int i, r;
1360 u8 postsetup_state; 1357 u8 postsetup_state;
1361 1358
1359 if (oh->_state != _HWMOD_STATE_CLKS_INITED)
1360 return 0;
1361
1362 /* Set iclk autoidle mode */ 1362 /* Set iclk autoidle mode */
1363 if (oh->slaves_cnt > 0) { 1363 if (oh->slaves_cnt > 0) {
1364 for (i = 0; i < oh->slaves_cnt; i++) { 1364 for (i = 0; i < oh->slaves_cnt; i++) {
@@ -1621,6 +1621,9 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs)
1621 */ 1621 */
1622static int __init _populate_mpu_rt_base(struct omap_hwmod *oh, void *data) 1622static int __init _populate_mpu_rt_base(struct omap_hwmod *oh, void *data)
1623{ 1623{
1624 if (oh->_state != _HWMOD_STATE_REGISTERED)
1625 return 0;
1626
1624 if (oh->_int_flags & _HWMOD_NO_MPU_PORT) 1627 if (oh->_int_flags & _HWMOD_NO_MPU_PORT)
1625 return 0; 1628 return 0;
1626 1629