summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLloyd Atkinson <latkinso@codeaurora.org>2016-05-30 13:46:55 -0400
committerDhaval Patel <pdhaval@codeaurora.org>2016-08-01 12:35:44 -0700
commite15f949d09fd7e8badd39e271c084e680a5940e5 (patch)
treee7b54f80becf176f13af2f8b0673edaf0d29d9d9
parent7af89afb0d9b84bfb40a7b7ea53fe6994b3808c6 (diff)
drm/msm/sde: fix reading of the pingpong counters
Correct register enum and masks used for reading out the pingpong vsync and line count values. Change-Id: Iaa2a1034d38ad9f741c5201de2de7c5f39aeaaf5 Signed-off-by: Lloyd Atkinson <latkinso@codeaurora.org>
-rw-r--r--drivers/gpu/drm/msm/sde/sde_hw_pingpong.c14
-rw-r--r--drivers/gpu/drm/msm/sde/sde_hw_pingpong.h18
2 files changed, 24 insertions, 8 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_pingpong.c b/drivers/gpu/drm/msm/sde/sde_hw_pingpong.c
index 49a98bea5386..837edeeba4c6 100644
--- a/drivers/gpu/drm/msm/sde/sde_hw_pingpong.c
+++ b/drivers/gpu/drm/msm/sde/sde_hw_pingpong.c
@@ -116,10 +116,14 @@ int sde_hw_pp_get_vsync_info(struct sde_hw_pingpong *pp,
struct sde_hw_pp_vsync_info *info)
{
struct sde_hw_blk_reg_map *c = &pp->hw;
+ u32 val;
- info->init_val = SDE_REG_READ(c, PP_VSYNC_INIT_VAL) & 0xffff;
- info->vsync_count = SDE_REG_READ(c, PP_SYNC_CONFIG_HEIGHT) & 0xffff;
- info->line_count = SDE_REG_READ(c, PP_INT_COUNT_VAL) & 0xffff;
+ val = SDE_REG_READ(c, PP_VSYNC_INIT_VAL);
+ info->init_val = val & 0xffff;
+
+ val = SDE_REG_READ(c, PP_INT_COUNT_VAL);
+ info->vsync_count = (val & 0xffff0000) >> 16;
+ info->line_count = val & 0xffff;
return 0;
}
@@ -158,3 +162,7 @@ struct sde_hw_pingpong *sde_hw_pingpong_init(enum sde_pingpong idx,
return c;
}
+void sde_hw_pingpong_destroy(struct sde_hw_pingpong *pp)
+{
+ kfree(pp);
+}
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_pingpong.h b/drivers/gpu/drm/msm/sde/sde_hw_pingpong.h
index a2bf86fb98f7..fc3bea54b485 100644
--- a/drivers/gpu/drm/msm/sde/sde_hw_pingpong.h
+++ b/drivers/gpu/drm/msm/sde/sde_hw_pingpong.h
@@ -102,14 +102,22 @@ struct sde_hw_pingpong {
};
/**
- * sde_hw_pingpong_init(): Initializes the pingpong driver for the passed
- * pingpong idx.
- * @idx: pingpong index for which driver object is required
- * @addr: mapped register io address of MDP
- * @m : pointer to mdss catalog data
+ * sde_hw_pingpong_init - initializes the pingpong driver for the passed
+ * pingpong idx.
+ * @idx: Pingpong index for which driver object is required
+ * @addr: Mapped register io address of MDP
+ * @m: Pointer to mdss catalog data
+ * Returns: Error code or allocated sde_hw_pingpong context
*/
struct sde_hw_pingpong *sde_hw_pingpong_init(enum sde_pingpong idx,
void __iomem *addr,
struct sde_mdss_cfg *m);
+/**
+ * sde_hw_pingpong_destroy - destroys pingpong driver context
+ * should be called to free the context
+ * @pp: Pointer to PP driver context returned by sde_hw_pingpong_init
+ */
+void sde_hw_pingpong_destroy(struct sde_hw_pingpong *pp);
+
#endif /*_SDE_HW_PINGPONG_H */