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 <steven.liu@rock-chips.com>
Change-Id: I3e699c873a9ef533e59e11dbf9777001f205b4d9
This commit is contained in:
Steven Liu
2020-10-14 17:42:00 +08:00
committed by Tao Huang
parent 30d90a2d42
commit 7711ebb8a5

View File

@@ -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);