ARM: OMAP3+: PRM: add common APIs for prm_vp_check/clear_txdone
authorTero Kristo <t-kristo@ti.com>
Fri, 4 Apr 2014 12:52:01 +0000 (15:52 +0300)
committerTero Kristo <t-kristo@ti.com>
Wed, 25 Mar 2015 09:03:39 +0000 (11:03 +0200)
PRM driver now only exports a generic API for clearing / checking
VP txdone status.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
arch/arm/mach-omap2/prm.h
arch/arm/mach-omap2/prm3xxx.c
arch/arm/mach-omap2/prm3xxx.h
arch/arm/mach-omap2/prm44xx.c
arch/arm/mach-omap2/prm44xx_54xx.h
arch/arm/mach-omap2/prm_common.c
arch/arm/mach-omap2/vp.h
arch/arm/mach-omap2/vp3xxx_data.c
arch/arm/mach-omap2/vp44xx_data.c

index 2a01a5885c614d2012faace786090b5d85e5e0f2..4e390ec0ed855ccc2c07230a3158fcd767d06787 100644 (file)
@@ -147,6 +147,8 @@ struct prm_ll_data {
                                     u16 offset);
        void (*reset_system)(void);
        int (*clear_mod_irqs)(s16 module, u8 regs, u32 wkst_mask);
+       u32 (*vp_check_txdone)(u8 vp_id);
+       void (*vp_clear_txdone)(u8 vp_id);
 };
 
 extern int prm_register(struct prm_ll_data *pld);
@@ -164,6 +166,18 @@ void omap_prm_reset_system(void);
 void omap_prm_reconfigure_io_chain(void);
 int omap_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask);
 
+/*
+ * Voltage Processor (VP) identifiers
+ */
+#define OMAP3_VP_VDD_MPU_ID    0
+#define OMAP3_VP_VDD_CORE_ID   1
+#define OMAP4_VP_VDD_CORE_ID   0
+#define OMAP4_VP_VDD_IVA_ID    1
+#define OMAP4_VP_VDD_MPU_ID    2
+
+u32 omap_prm_vp_check_txdone(u8 vp_id);
+void omap_prm_vp_clear_txdone(u8 vp_id);
+
 #endif
 
 
index a4443344affe8413786983622908eee4776479ab..2b478adc337dd3f0ec1aa6a5e4da006b54ce59e3 100644 (file)
@@ -96,7 +96,7 @@ static struct omap3_vp omap3_vp[] = {
 
 #define MAX_VP_ID ARRAY_SIZE(omap3_vp);
 
-u32 omap3_prm_vp_check_txdone(u8 vp_id)
+static u32 omap3_prm_vp_check_txdone(u8 vp_id)
 {
        struct omap3_vp *vp = &omap3_vp[vp_id];
        u32 irqstatus;
@@ -106,7 +106,7 @@ u32 omap3_prm_vp_check_txdone(u8 vp_id)
        return irqstatus & vp->tranxdone_status;
 }
 
-void omap3_prm_vp_clear_txdone(u8 vp_id)
+static void omap3_prm_vp_clear_txdone(u8 vp_id)
 {
        struct omap3_vp *vp = &omap3_vp[vp_id];
 
@@ -665,6 +665,8 @@ static struct prm_ll_data omap3xxx_prm_ll_data = {
        .is_hardreset_asserted = &omap2_prm_is_hardreset_asserted,
        .reset_system = &omap3xxx_prm_dpll3_reset,
        .clear_mod_irqs = &omap3xxx_prm_clear_mod_irqs,
+       .vp_check_txdone = &omap3_prm_vp_check_txdone,
+       .vp_clear_txdone = &omap3_prm_vp_clear_txdone,
 };
 
 int __init omap3xxx_prm_init(void)
index 5a09a74e7f8f5e35c9ddbb17d2ccd7ab2c9b5b73..55e4c898ba2525fc6ac8e4357b2f7cb7b8a86063 100644 (file)
 
 #ifndef __ASSEMBLER__
 
-/* OMAP3-specific VP functions */
-u32 omap3_prm_vp_check_txdone(u8 vp_id);
-void omap3_prm_vp_clear_txdone(u8 vp_id);
-
 /*
  * OMAP3 access functions for voltage controller (VC) and
  * voltage proccessor (VP) in the PRM.
index a08a617a6c110365cf20ce9c5df54edef19c20c5..1af0137e82837b7e1734fc1be2c3fb23bea54ecc 100644 (file)
@@ -138,7 +138,7 @@ static struct omap4_vp omap4_vp[] = {
        },
 };
 
-u32 omap4_prm_vp_check_txdone(u8 vp_id)
+static u32 omap4_prm_vp_check_txdone(u8 vp_id)
 {
        struct omap4_vp *vp = &omap4_vp[vp_id];
        u32 irqstatus;
@@ -149,7 +149,7 @@ u32 omap4_prm_vp_check_txdone(u8 vp_id)
        return irqstatus & vp->tranxdone_status;
 }
 
-void omap4_prm_vp_clear_txdone(u8 vp_id)
+static void omap4_prm_vp_clear_txdone(u8 vp_id)
 {
        struct omap4_vp *vp = &omap4_vp[vp_id];
 
@@ -699,6 +699,8 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
        .deassert_hardreset     = omap4_prminst_deassert_hardreset,
        .is_hardreset_asserted  = omap4_prminst_is_hardreset_asserted,
        .reset_system           = omap4_prminst_global_warm_sw_reset,
+       .vp_check_txdone        = omap4_prm_vp_check_txdone,
+       .vp_clear_txdone        = omap4_prm_vp_clear_txdone,
 };
 
 int __init omap44xx_prm_init(void)
index 714329565b90b70e4509a8b4ae4583c223afdc9a..a470185d9edefd8ffa2a53363e2a58bf40076d69 100644 (file)
 /* Function prototypes */
 #ifndef __ASSEMBLER__
 
-/* OMAP4/OMAP5-specific VP functions */
-u32 omap4_prm_vp_check_txdone(u8 vp_id);
-void omap4_prm_vp_clear_txdone(u8 vp_id);
-
 /*
  * OMAP4/OMAP5 access functions for voltage controller (VC) and
  * voltage proccessor (VP) in the PRM.
index 2c2e7ed1bc6c5ec543c05d4ff68554ba737f45ff..79cee117f9714911c4df12eaa0157a98689cfffe 100644 (file)
@@ -554,6 +554,40 @@ int omap_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask)
        return prm_ll_data->clear_mod_irqs(module, regs, wkst_mask);
 }
 
+/**
+ * omap_prm_vp_check_txdone - check voltage processor TX done status
+ *
+ * Checks if voltage processor transmission has been completed.
+ * Returns non-zero if a transmission has completed, 0 otherwise.
+ */
+u32 omap_prm_vp_check_txdone(u8 vp_id)
+{
+       if (!prm_ll_data->vp_check_txdone) {
+               WARN_ONCE(1, "prm: %s: no mapping function defined\n",
+                         __func__);
+               return 0;
+       }
+
+       return prm_ll_data->vp_check_txdone(vp_id);
+}
+
+/**
+ * omap_prm_vp_clear_txdone - clears voltage processor TX done status
+ *
+ * Clears the status bit for completed voltage processor transmission
+ * returned by prm_vp_check_txdone.
+ */
+void omap_prm_vp_clear_txdone(u8 vp_id)
+{
+       if (!prm_ll_data->vp_clear_txdone) {
+               WARN_ONCE(1, "prm: %s: no mapping function defined\n",
+                         __func__);
+               return;
+       }
+
+       prm_ll_data->vp_clear_txdone(vp_id);
+}
+
 /**
  * prm_register - register per-SoC low-level data with the PRM
  * @pld: low-level per-SoC OMAP PRM data & function pointers to register
index 0fdf7080e4a641002796a0f9fe34b76c363b95c3..7e0829682bd02cba1b1897d837c8cd5960eca489 100644 (file)
 
 struct voltagedomain;
 
-/*
- * Voltage Processor (VP) identifiers
- */
-#define OMAP3_VP_VDD_MPU_ID 0
-#define OMAP3_VP_VDD_CORE_ID 1
-#define OMAP4_VP_VDD_CORE_ID 0
-#define OMAP4_VP_VDD_IVA_ID 1
-#define OMAP4_VP_VDD_MPU_ID 2
-
 /* XXX document */
 #define VP_IDLE_TIMEOUT                200
 #define VP_TRANXDONE_TIMEOUT   300
index 1914e026245e0464f77d9bd49d6c4aba29fefb3a..b0590fe6ab01dc3a3f653fb8e9d22f3a333ea1cb 100644 (file)
@@ -28,8 +28,8 @@
 #include "prm2xxx_3xxx.h"
 
 static const struct omap_vp_ops omap3_vp_ops = {
-       .check_txdone = omap3_prm_vp_check_txdone,
-       .clear_txdone = omap3_prm_vp_clear_txdone,
+       .check_txdone = omap_prm_vp_check_txdone,
+       .clear_txdone = omap_prm_vp_clear_txdone,
 };
 
 /*
index e62f6b018beb2379ad5dde520cfa84fe6e39e454..2448bb9a871608e102033dd76a9796186b339ea1 100644 (file)
@@ -28,8 +28,8 @@
 #include "vp.h"
 
 static const struct omap_vp_ops omap4_vp_ops = {
-       .check_txdone = omap4_prm_vp_check_txdone,
-       .clear_txdone = omap4_prm_vp_clear_txdone,
+       .check_txdone = omap_prm_vp_check_txdone,
+       .clear_txdone = omap_prm_vp_clear_txdone,
 };
 
 /*