Merge "msm: sde: specify a minimum rotator clock rate"
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
index ad7a8e9..d749384 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
@@ -65,6 +65,9 @@
#define ROT_OVERHEAD_NUMERATOR 27
#define ROT_OVERHEAD_DENOMINATOR 10000
+/* Minimum Rotator Clock value */
+#define ROT_MIN_ROT_CLK 20000000
+
/* default minimum bandwidth vote */
#define ROT_ENABLE_BW_VOTE 64000
/*
@@ -1378,6 +1381,9 @@ static int sde_rotator_calc_perf(struct sde_rot_mgr *mgr,
if (rot_dev->min_rot_clk > perf->clk_rate)
perf->clk_rate = rot_dev->min_rot_clk;
+ if (mgr->min_rot_clk > perf->clk_rate)
+ perf->clk_rate = mgr->min_rot_clk;
+
read_bw = sde_rotator_calc_buf_bw(in_fmt, config->input.width,
config->input.height, max_fps);
@@ -3084,6 +3090,7 @@ int sde_rotator_core_init(struct sde_rot_mgr **pmgr,
IS_SDE_MAJOR_MINOR_SAME(mdata->mdss_version,
SDE_MDP_HW_REV_410)) {
mgr->ops_hw_init = sde_rotator_r3_init;
+ mgr->min_rot_clk = ROT_MIN_ROT_CLK;
} else {
ret = -ENODEV;
SDEROT_ERR("unsupported sde version %x\n",
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h
index 32bb541..e2f5465 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.h
@@ -396,6 +396,7 @@ struct sde_rot_bus_data_type {
* @pixel_per_clk: rotator hardware performance in pixel for clock
* @fudge_factor: fudge factor for clock calculation
* @overhead: software overhead for offline rotation in msec
+ * @min_rot_clk: minimum rotator clock rate
* @sbuf_ctx: pointer to sbuf session context
* @ops_xxx: function pointers of rotator HAL layer
* @hw_data: private handle of rotator HAL layer
@@ -443,6 +444,7 @@ struct sde_rot_mgr {
struct sde_mult_factor pixel_per_clk;
struct sde_mult_factor fudge_factor;
struct sde_mult_factor overhead;
+ unsigned long min_rot_clk;
struct sde_rot_file_private *sbuf_ctx;