From 7711ebb8a5bf6ee45d7b76ce79a0de61abbcbedd Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 14 Oct 2020 17:42:00 +0800 Subject: [PATCH] pwm: rockchip: Add pwm output center aligned mdoe Support pwm output aligned mode to switch from left-aligned to center-aligned. In dts, add "center-aligned". Signed-off-by: Steven Liu Change-Id: I3e699c873a9ef533e59e11dbf9777001f205b4d9 --- drivers/pwm/pwm-rockchip.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/pwm/pwm-rockchip.c b/drivers/pwm/pwm-rockchip.c index 47d5af13048a..367916838a9e 100644 --- a/drivers/pwm/pwm-rockchip.c +++ b/drivers/pwm/pwm-rockchip.c @@ -26,6 +26,7 @@ #define PWM_INACTIVE_POSITIVE (1 << 4) #define PWM_POLARITY_MASK (PWM_DUTY_POSITIVE | PWM_INACTIVE_POSITIVE) #define PWM_OUTPUT_LEFT (0 << 5) +#define PWM_OUTPUT_CENTER (1 << 5) #define PWM_LOCK_EN (1 << 6) #define PWM_LP_DISABLE (0 << 8) @@ -36,6 +37,7 @@ struct rockchip_pwm_chip { const struct rockchip_pwm_data *data; void __iomem *base; bool vop_pwm_en; /* indicate voppwm mirror register state */ + bool center_aligned; }; struct rockchip_pwm_regs { @@ -178,6 +180,11 @@ static int rockchip_pwm_enable(struct pwm_chip *chip, val = readl_relaxed(pc->base + pc->data->regs.ctrl); val &= ~pc->data->enable_conf_mask; + if (PWM_OUTPUT_CENTER & pc->data->enable_conf_mask) { + if (pc->center_aligned) + val |= PWM_OUTPUT_CENTER; + } + if (enable) val |= enable_conf; else @@ -381,6 +388,9 @@ static int rockchip_pwm_probe(struct platform_device *pdev) ctrl = readl_relaxed(pc->base + pc->data->regs.ctrl); enabled = (ctrl & enable_conf) == enable_conf; + pc->center_aligned = + device_property_read_bool(&pdev->dev, "center-aligned"); + ret = pwmchip_add(&pc->chip); if (ret < 0) { dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret);