Loading drivers/media/platform/msm/sde/rotator/sde_rotator_core.h +9 −0 Original line number Original line Diff line number Diff line Loading @@ -761,6 +761,15 @@ int sde_rotator_validate_request(struct sde_rot_mgr *rot_dev, */ */ int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable); int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable); /* sde_rotator_resource_ctrl_enabled - check if resource control is enabled * @mgr: Pointer to rotator manager * Return: true if enabled; false otherwise */ static inline int sde_rotator_resource_ctrl_enabled(struct sde_rot_mgr *mgr) { return mgr->regulator_enable; } /* /* * sde_rotator_cancel_all_requests - cancel all outstanding requests * sde_rotator_cancel_all_requests - cancel all outstanding requests * @mgr: Pointer to rotator manager * @mgr: Pointer to rotator manager Loading drivers/media/platform/msm/sde/rotator/sde_rotator_debug.c +18 −0 Original line number Original line Diff line number Diff line Loading @@ -1208,18 +1208,29 @@ static ssize_t sde_rotator_debug_base_reg_write(struct file *file, mutex_lock(&dbg->buflock); mutex_lock(&dbg->buflock); /* Enable Clock for register access */ /* Enable Clock for register access */ sde_rot_mgr_lock(dbg->mgr); if (!sde_rotator_resource_ctrl_enabled(dbg->mgr)) { SDEROT_WARN("resource ctrl is not enabled\n"); sde_rot_mgr_unlock(dbg->mgr); goto debug_write_error; } sde_rotator_clk_ctrl(dbg->mgr, true); sde_rotator_clk_ctrl(dbg->mgr, true); writel_relaxed(data, dbg->base + off); writel_relaxed(data, dbg->base + off); /* Disable Clock after register access */ /* Disable Clock after register access */ sde_rotator_clk_ctrl(dbg->mgr, false); sde_rotator_clk_ctrl(dbg->mgr, false); sde_rot_mgr_unlock(dbg->mgr); mutex_unlock(&dbg->buflock); mutex_unlock(&dbg->buflock); SDEROT_DBG("addr=%zx data=%x\n", off, data); SDEROT_DBG("addr=%zx data=%x\n", off, data); return count; return count; debug_write_error: mutex_unlock(&dbg->buflock); return 0; } } static ssize_t sde_rotator_debug_base_reg_read(struct file *file, static ssize_t sde_rotator_debug_base_reg_read(struct file *file, Loading Loading @@ -1257,6 +1268,12 @@ static ssize_t sde_rotator_debug_base_reg_read(struct file *file, tot = 0; tot = 0; /* Enable clock for register access */ /* Enable clock for register access */ sde_rot_mgr_lock(dbg->mgr); if (!sde_rotator_resource_ctrl_enabled(dbg->mgr)) { SDEROT_WARN("resource ctrl is not enabled\n"); sde_rot_mgr_unlock(dbg->mgr); goto debug_read_error; } sde_rotator_clk_ctrl(dbg->mgr, true); sde_rotator_clk_ctrl(dbg->mgr, true); for (cnt = dbg->cnt; cnt > 0; cnt -= ROW_BYTES) { for (cnt = dbg->cnt; cnt > 0; cnt -= ROW_BYTES) { Loading @@ -1276,6 +1293,7 @@ static ssize_t sde_rotator_debug_base_reg_read(struct file *file, } } /* Disable clock after register access */ /* Disable clock after register access */ sde_rotator_clk_ctrl(dbg->mgr, false); sde_rotator_clk_ctrl(dbg->mgr, false); sde_rot_mgr_unlock(dbg->mgr); dbg->buf_len = tot; dbg->buf_len = tot; } } Loading Loading
drivers/media/platform/msm/sde/rotator/sde_rotator_core.h +9 −0 Original line number Original line Diff line number Diff line Loading @@ -761,6 +761,15 @@ int sde_rotator_validate_request(struct sde_rot_mgr *rot_dev, */ */ int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable); int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable); /* sde_rotator_resource_ctrl_enabled - check if resource control is enabled * @mgr: Pointer to rotator manager * Return: true if enabled; false otherwise */ static inline int sde_rotator_resource_ctrl_enabled(struct sde_rot_mgr *mgr) { return mgr->regulator_enable; } /* /* * sde_rotator_cancel_all_requests - cancel all outstanding requests * sde_rotator_cancel_all_requests - cancel all outstanding requests * @mgr: Pointer to rotator manager * @mgr: Pointer to rotator manager Loading
drivers/media/platform/msm/sde/rotator/sde_rotator_debug.c +18 −0 Original line number Original line Diff line number Diff line Loading @@ -1208,18 +1208,29 @@ static ssize_t sde_rotator_debug_base_reg_write(struct file *file, mutex_lock(&dbg->buflock); mutex_lock(&dbg->buflock); /* Enable Clock for register access */ /* Enable Clock for register access */ sde_rot_mgr_lock(dbg->mgr); if (!sde_rotator_resource_ctrl_enabled(dbg->mgr)) { SDEROT_WARN("resource ctrl is not enabled\n"); sde_rot_mgr_unlock(dbg->mgr); goto debug_write_error; } sde_rotator_clk_ctrl(dbg->mgr, true); sde_rotator_clk_ctrl(dbg->mgr, true); writel_relaxed(data, dbg->base + off); writel_relaxed(data, dbg->base + off); /* Disable Clock after register access */ /* Disable Clock after register access */ sde_rotator_clk_ctrl(dbg->mgr, false); sde_rotator_clk_ctrl(dbg->mgr, false); sde_rot_mgr_unlock(dbg->mgr); mutex_unlock(&dbg->buflock); mutex_unlock(&dbg->buflock); SDEROT_DBG("addr=%zx data=%x\n", off, data); SDEROT_DBG("addr=%zx data=%x\n", off, data); return count; return count; debug_write_error: mutex_unlock(&dbg->buflock); return 0; } } static ssize_t sde_rotator_debug_base_reg_read(struct file *file, static ssize_t sde_rotator_debug_base_reg_read(struct file *file, Loading Loading @@ -1257,6 +1268,12 @@ static ssize_t sde_rotator_debug_base_reg_read(struct file *file, tot = 0; tot = 0; /* Enable clock for register access */ /* Enable clock for register access */ sde_rot_mgr_lock(dbg->mgr); if (!sde_rotator_resource_ctrl_enabled(dbg->mgr)) { SDEROT_WARN("resource ctrl is not enabled\n"); sde_rot_mgr_unlock(dbg->mgr); goto debug_read_error; } sde_rotator_clk_ctrl(dbg->mgr, true); sde_rotator_clk_ctrl(dbg->mgr, true); for (cnt = dbg->cnt; cnt > 0; cnt -= ROW_BYTES) { for (cnt = dbg->cnt; cnt > 0; cnt -= ROW_BYTES) { Loading @@ -1276,6 +1293,7 @@ static ssize_t sde_rotator_debug_base_reg_read(struct file *file, } } /* Disable clock after register access */ /* Disable clock after register access */ sde_rotator_clk_ctrl(dbg->mgr, false); sde_rotator_clk_ctrl(dbg->mgr, false); sde_rot_mgr_unlock(dbg->mgr); dbg->buf_len = tot; dbg->buf_len = tot; } } Loading