mirror of
https://github.com/armbian/build.git
synced 2025-08-12 22:26:57 +02:00
* Recycling of megous v5.16.4 patches The patches were sorted as far as possible. Some patches are renamed according to their place of application. The length of the patch name has been changed to improve readability using the `git format-patch --filename-max-length=75` method. The folder containing the patches will have the name `patches.name` and the corresponding file `series.name` for the convenience of processing and moving them upstream. But the control file remains `series.conf`. Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> * Add a series of armbian patches for 5.16 Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> * Remove patches whose fixes are already in the kernel Signed-off-by: The-going <48602507+The-going@users.noreply.github.com>
88 lines
2.8 KiB
Diff
88 lines
2.8 KiB
Diff
From 7eb5fd941072067b6e66e232a199090b4ee404af Mon Sep 17 00:00:00 2001
|
|
From: Pascal Roeleven <dev@pascalroeleven.nl>
|
|
Date: Tue, 17 Mar 2020 16:59:05 +0100
|
|
Subject: [PATCH 101/446] pwm: sun4i: Move delay to function
|
|
|
|
Move the delay to a function so we can reuse it.
|
|
|
|
Signed-off-by: Pascal Roeleven <dev@pascalroeleven.nl>
|
|
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
|
|
---
|
|
drivers/pwm/pwm-sun4i.c | 32 ++++++++++++++++++--------------
|
|
1 file changed, 18 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
|
|
index 91ca67651..d3f153a06 100644
|
|
--- a/drivers/pwm/pwm-sun4i.c
|
|
+++ b/drivers/pwm/pwm-sun4i.c
|
|
@@ -89,7 +89,6 @@ struct sun4i_pwm_chip {
|
|
void __iomem *base;
|
|
spinlock_t ctrl_lock;
|
|
const struct sun4i_pwm_data *data;
|
|
- unsigned long next_period[2];
|
|
};
|
|
|
|
static inline struct sun4i_pwm_chip *to_sun4i_pwm_chip(struct pwm_chip *chip)
|
|
@@ -228,6 +227,20 @@ static int sun4i_pwm_calculate(struct sun4i_pwm_chip *sun4i_pwm,
|
|
return 0;
|
|
}
|
|
|
|
+static void sun4i_pwm_wait(unsigned long next_period) {
|
|
+ unsigned int delay_us;
|
|
+ unsigned long now;
|
|
+
|
|
+ now = jiffies;
|
|
+ if (time_before(now, next_period)) {
|
|
+ delay_us = jiffies_to_usecs(next_period - now);
|
|
+ if ((delay_us / 500) > MAX_UDELAY_MS)
|
|
+ msleep(delay_us / 1000 + 1);
|
|
+ else
|
|
+ usleep_range(delay_us, delay_us * 2);
|
|
+ }
|
|
+}
|
|
+
|
|
static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
|
const struct pwm_state *state)
|
|
{
|
|
@@ -235,8 +248,8 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
|
struct pwm_state cstate;
|
|
u32 ctrl, duty = 0, period = 0, val;
|
|
int ret;
|
|
- unsigned int delay_us, prescaler = 0;
|
|
- unsigned long now;
|
|
+ unsigned int prescaler = 0;
|
|
+ unsigned long next_period;
|
|
bool bypass;
|
|
|
|
pwm_get_state(pwm, &cstate);
|
|
@@ -284,8 +297,7 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
|
|
|
val = (duty & PWM_DTY_MASK) | PWM_PRD(period);
|
|
sun4i_pwm_writel(sun4i_pwm, val, PWM_CH_PRD(pwm->hwpwm));
|
|
- sun4i_pwm->next_period[pwm->hwpwm] = jiffies +
|
|
- nsecs_to_jiffies(cstate.period + 1000);
|
|
+ next_period = jiffies + nsecs_to_jiffies(cstate.period + 1000);
|
|
|
|
if (state->polarity != PWM_POLARITY_NORMAL)
|
|
ctrl &= ~BIT_CH(PWM_ACT_STATE, pwm->hwpwm);
|
|
@@ -305,15 +317,7 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
|
return 0;
|
|
|
|
/* We need a full period to elapse before disabling the channel. */
|
|
- now = jiffies;
|
|
- if (time_before(now, sun4i_pwm->next_period[pwm->hwpwm])) {
|
|
- delay_us = jiffies_to_usecs(sun4i_pwm->next_period[pwm->hwpwm] -
|
|
- now);
|
|
- if ((delay_us / 500) > MAX_UDELAY_MS)
|
|
- msleep(delay_us / 1000 + 1);
|
|
- else
|
|
- usleep_range(delay_us, delay_us * 2);
|
|
- }
|
|
+ sun4i_pwm_wait(next_period);
|
|
|
|
spin_lock(&sun4i_pwm->ctrl_lock);
|
|
ctrl = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG);
|
|
--
|
|
2.31.1
|
|
|