mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
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:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user