ARM: OMAP3/4: PRM: add support of late_init call to prm_ll_ops
authorTero Kristo <t-kristo@ti.com>
Mon, 31 Mar 2014 15:15:45 +0000 (18:15 +0300)
committerPaul Walmsley <paul@pwsan.com>
Fri, 16 May 2014 04:35:04 +0000 (22:35 -0600)
SoC specific late_init call is now registered during PRM init, and will
be called automatically by PRM core. This helps to get rid of some
redundant initcalls and cpu_is_X checks from the PRM code.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
arch/arm/mach-omap2/prm.h
arch/arm/mach-omap2/prm3xxx.c
arch/arm/mach-omap2/prm44xx.c
arch/arm/mach-omap2/prm_common.c

index 04426c441fff1285fbff33edb7960807d9634bab..48480d557b61f82541068b174b430e4f8a1c53b5 100644 (file)
@@ -126,6 +126,7 @@ struct prm_reset_src_map {
  * @read_reset_sources: ptr to the SoC PRM-specific get_reset_source impl
  * @was_any_context_lost_old: ptr to the SoC PRM context loss test fn
  * @clear_context_loss_flags_old: ptr to the SoC PRM context loss flag clear fn
+ * @late_init: ptr to the late init function
  *
  * XXX @was_any_context_lost_old and @clear_context_loss_flags_old are
  * deprecated.
@@ -134,6 +135,7 @@ struct prm_ll_data {
        u32 (*read_reset_sources)(void);
        bool (*was_any_context_lost_old)(u8 part, s16 inst, u16 idx);
        void (*clear_context_loss_flags_old)(u8 part, s16 inst, u16 idx);
+       int (*late_init)(void);
 };
 
 extern int prm_register(struct prm_ll_data *pld);
index 9c95ac21c5b39f5994b223b7c5e0c3f81845542b..4a792fd1363c7b4ec1858b33d4cd798e1097d3f2 100644 (file)
@@ -401,8 +401,11 @@ struct pwrdm_ops omap3_pwrdm_operations = {
  *
  */
 
+static int omap3xxx_prm_late_init(void);
+
 static struct prm_ll_data omap3xxx_prm_ll_data = {
        .read_reset_sources = &omap3xxx_prm_read_reset_sources,
+       .late_init = &omap3xxx_prm_late_init,
 };
 
 int __init omap3xxx_prm_init(void)
@@ -417,9 +420,6 @@ static int __init omap3xxx_prm_late_init(void)
 {
        int ret;
 
-       if (!cpu_is_omap34xx())
-               return 0;
-
        if (!(prm_features & PRM_HAS_IO_WAKEUP))
                return 0;
 
@@ -431,7 +431,6 @@ static int __init omap3xxx_prm_late_init(void)
 
        return ret;
 }
-omap_subsys_initcall(omap3xxx_prm_late_init);
 
 static void __exit omap3xxx_prm_exit(void)
 {
index e4e52f14dbbf2ea7c0cfde9053f268dbed8d8ccd..edf49ef867e16b4a637f91094138bcfb6ece11a7 100644 (file)
@@ -650,6 +650,8 @@ struct pwrdm_ops omap4_pwrdm_operations = {
        .pwrdm_has_voltdm       = omap4_check_vcvp,
 };
 
+static int omap44xx_prm_late_init(void);
+
 /*
  * XXX document
  */
@@ -657,6 +659,7 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
        .read_reset_sources = &omap44xx_prm_read_reset_sources,
        .was_any_context_lost_old = &omap44xx_prm_was_any_context_lost_old,
        .clear_context_loss_flags_old = &omap44xx_prm_clear_context_loss_flags_old,
+       .late_init = &omap44xx_prm_late_init,
 };
 
 int __init omap44xx_prm_init(void)
@@ -669,9 +672,6 @@ int __init omap44xx_prm_init(void)
 
 static int __init omap44xx_prm_late_init(void)
 {
-       if (!cpu_is_omap44xx())
-               return 0;
-
        if (!(prm_features & PRM_HAS_IO_WAKEUP))
                return 0;
 
@@ -679,7 +679,6 @@ static int __init omap44xx_prm_late_init(void)
 
        return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);
 }
-omap_subsys_initcall(omap44xx_prm_late_init);
 
 static void __exit omap44xx_prm_exit(void)
 {
index aa2550dd2ac1894d64fe0b38279772b6e6151135..25e8b8232115cab152b5f926f3ca044922b4b9d0 100644 (file)
@@ -527,3 +527,11 @@ int __init of_prcm_init(void)
 
        return 0;
 }
+
+static int __init prm_late_init(void)
+{
+       if (prm_ll_data->late_init)
+               return prm_ll_data->late_init();
+       return 0;
+}
+subsys_initcall(prm_late_init);
This page took 0.029381 seconds and 5 git commands to generate.