aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/omap_hwmod.c
diff options
context:
space:
mode:
authorLokesh Vutla <lokeshvutla@ti.com>2015-06-10 05:26:24 -0400
committerPaul Walmsley <paul@pwsan.com>2015-07-15 20:16:16 -0400
commitaaf2c0fbbbb1ec56936e726eec6c253bc4bd469f (patch)
tree831f8fcc7dac140a0db9a2e7c961e35935e4d8d1 /arch/arm/mach-omap2/omap_hwmod.c
parentb9e23f321940d2db2c9def8ff723b8464fb86343 (diff)
ARM: OMAP2+: hwmod: add support for lock and unlock hooks
Some IP blocks like RTC, needs an additional setting for writing to its registers. This is to prevent any spurious writes from changing the register values. This patch adds optional lock and unlock function pointers to the IP block's hwmod data. These unlock and lock function pointers are called by hwmod code before and after writing sysconfig registers. Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> [paul@pwsan.com: fixed indentation level to conform with the rest of the structure members] Reviewed-by: Paul Walmsley <paul@pwsan.com> Signed-off-by: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod.c')
-rw-r--r--arch/arm/mach-omap2/omap_hwmod.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index d78c12e7cb5e..2ceed3192f22 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -299,7 +299,20 @@ static void _write_sysconfig(u32 v, struct omap_hwmod *oh)
299 299
300 /* Module might have lost context, always update cache and register */ 300 /* Module might have lost context, always update cache and register */
301 oh->_sysc_cache = v; 301 oh->_sysc_cache = v;
302
303 /*
304 * Some IP blocks (such as RTC) require unlocking of IP before
305 * accessing its registers. If a function pointer is present
306 * to unlock, then call it before accessing sysconfig and
307 * call lock after writing sysconfig.
308 */
309 if (oh->class->unlock)
310 oh->class->unlock(oh);
311
302 omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs); 312 omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs);
313
314 if (oh->class->lock)
315 oh->class->lock(oh);
303} 316}
304 317
305/** 318/**