60 lines
1.8 KiB
Diff
60 lines
1.8 KiB
Diff
From 0ef9299ef1afce1dbf847e75cdd16e2343d89bf9 Mon Sep 17 00:00:00 2001
|
|
From: Igor Pecovnik <igor.pecovnik@gmail.com>
|
|
Date: Sat, 30 Jan 2021 19:06:41 +0100
|
|
Subject: [PATCH] Revert "gpio: mvebu: fix pwm .get_state period calculation"
|
|
|
|
This reverts commit 43f2e6077f441d681f0337ab91f7c4c2d4c62761.
|
|
---
|
|
drivers/gpio/gpio-mvebu.c | 25 +++++++++++++++----------
|
|
1 file changed, 15 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
|
|
index ed7c5fc47f52..2f245594a90a 100644
|
|
--- a/drivers/gpio/gpio-mvebu.c
|
|
+++ b/drivers/gpio/gpio-mvebu.c
|
|
@@ -660,8 +660,9 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,
|
|
|
|
spin_lock_irqsave(&mvpwm->lock, flags);
|
|
|
|
- u = readl_relaxed(mvebu_pwmreg_blink_on_duration(mvpwm));
|
|
- val = (unsigned long long) u * NSEC_PER_SEC;
|
|
+ val = (unsigned long long)
|
|
+ readl_relaxed(mvebu_pwmreg_blink_on_duration(mvpwm));
|
|
+ val *= NSEC_PER_SEC;
|
|
do_div(val, mvpwm->clk_rate);
|
|
if (val > UINT_MAX)
|
|
state->duty_cycle = UINT_MAX;
|
|
@@ -670,17 +671,21 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,
|
|
else
|
|
state->duty_cycle = 1;
|
|
|
|
- val = (unsigned long long) u; /* on duration */
|
|
- /* period = on + off duration */
|
|
- val += readl_relaxed(mvebu_pwmreg_blink_off_duration(mvpwm));
|
|
+ val = (unsigned long long)
|
|
+ readl_relaxed(mvebu_pwmreg_blink_off_duration(mvpwm));
|
|
val *= NSEC_PER_SEC;
|
|
do_div(val, mvpwm->clk_rate);
|
|
- if (val > UINT_MAX)
|
|
- state->period = UINT_MAX;
|
|
- else if (val)
|
|
- state->period = val;
|
|
- else
|
|
+ if (val < state->duty_cycle) {
|
|
state->period = 1;
|
|
+ } else {
|
|
+ val -= state->duty_cycle;
|
|
+ if (val > UINT_MAX)
|
|
+ state->period = UINT_MAX;
|
|
+ else if (val)
|
|
+ state->period = val;
|
|
+ else
|
|
+ state->period = 1;
|
|
+ }
|
|
|
|
regmap_read(mvchip->regs, GPIO_BLINK_EN_OFF + mvchip->offset, &u);
|
|
if (u)
|
|
--
|
|
2.25.1
|
|
|