pwm: rockchip: add pwm en for voppwm

voppwm is frame effect, so we need add vop pwm en to
indicate the pwm en state.

Change-Id: I1492322f99b638c8dc6cf03c87035f28dca3de8f
Signed-off-by: Sandy Huang <hjc@rock-chips.com>
This commit is contained in:
Sandy Huang
2018-01-29 17:18:18 +08:00
committed by Tao Huang
parent e5e9f55c57
commit 752d7732ad

View File

@@ -38,6 +38,7 @@ struct rockchip_pwm_chip {
struct clk *pclk;
const struct rockchip_pwm_data *data;
void __iomem *base;
bool vop_pwm_en; /* indicate voppwm mirror register state */
};
struct rockchip_pwm_regs {
@@ -52,6 +53,7 @@ struct rockchip_pwm_data {
unsigned int prescaler;
bool supports_polarity;
bool supports_lock;
bool vop_pwm;
u32 enable_conf;
u32 enable_conf_mask;
};
@@ -129,6 +131,12 @@ static void rockchip_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
* change the duty and period, that would not be effective.
*/
ctrl = readl_relaxed(pc->base + pc->data->regs.ctrl);
if (pc->data->vop_pwm) {
if (pc->vop_pwm_en)
ctrl |= PWM_ENABLE;
else
ctrl &= ~PWM_ENABLE;
}
if (pc->data->supports_lock) {
ctrl |= PWM_LOCK_EN;
writel_relaxed(ctrl, pc->base + pc->data->regs.ctrl);
@@ -180,6 +188,8 @@ static int rockchip_pwm_enable(struct pwm_chip *chip,
val &= ~enable_conf;
writel_relaxed(val, pc->base + pc->data->regs.ctrl);
if (pc->data->vop_pwm)
pc->vop_pwm_en = enable;
if (!enable)
clk_disable(pc->clk);
@@ -245,6 +255,7 @@ static const struct rockchip_pwm_data pwm_data_v1 = {
.prescaler = 2,
.supports_polarity = false,
.supports_lock = false,
.vop_pwm = false,
.enable_conf = PWM_CTRL_OUTPUT_EN | PWM_CTRL_TIMER_EN,
.enable_conf_mask = BIT(1) | BIT(3),
};
@@ -259,6 +270,7 @@ static const struct rockchip_pwm_data pwm_data_v2 = {
.prescaler = 1,
.supports_polarity = true,
.supports_lock = false,
.vop_pwm = false,
.enable_conf = PWM_OUTPUT_LEFT | PWM_LP_DISABLE | PWM_ENABLE |
PWM_CONTINUOUS,
.enable_conf_mask = GENMASK(2, 0) | BIT(5) | BIT(8),
@@ -274,6 +286,7 @@ static const struct rockchip_pwm_data pwm_data_vop = {
.prescaler = 1,
.supports_polarity = true,
.supports_lock = false,
.vop_pwm = true,
.enable_conf = PWM_OUTPUT_LEFT | PWM_LP_DISABLE | PWM_ENABLE |
PWM_CONTINUOUS,
.enable_conf_mask = GENMASK(2, 0) | BIT(5) | BIT(8),
@@ -289,6 +302,7 @@ static const struct rockchip_pwm_data pwm_data_v3 = {
.prescaler = 1,
.supports_polarity = true,
.supports_lock = true,
.vop_pwm = false,
.enable_conf = PWM_OUTPUT_LEFT | PWM_LP_DISABLE | PWM_ENABLE |
PWM_CONTINUOUS,
.enable_conf_mask = GENMASK(2, 0) | BIT(5) | BIT(8),