pwm: meson: Don't cache struct pwm_state internally
The PWM core already caches the "current struct pwm_state" as the "current state of the hardware registers" inside struct pwm_device. Drop the struct pwm_state from struct meson_pwm_channel in favour of the struct pwm_state in struct pwm_device. While here also drop any checks based on the pwm_state because the PWM core already takes care of this. No functional changes intended. Reviewed-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
Родитель
c375bcbaab
Коммит
d6885b3e0a
|
@ -68,8 +68,6 @@ struct meson_pwm_channel {
|
|||
unsigned int lo;
|
||||
u8 pre_div;
|
||||
|
||||
struct pwm_state state;
|
||||
|
||||
struct clk *clk_parent;
|
||||
struct clk_mux mux;
|
||||
struct clk *clk;
|
||||
|
@ -127,8 +125,6 @@ static int meson_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
|
|||
return err;
|
||||
}
|
||||
|
||||
chip->ops->get_state(chip, pwm, &channel->state);
|
||||
|
||||
return pwm_set_chip_data(pwm, channel);
|
||||
}
|
||||
|
||||
|
@ -153,10 +149,6 @@ static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm,
|
|||
if (state->polarity == PWM_POLARITY_INVERSED)
|
||||
duty = period - duty;
|
||||
|
||||
if (period == channel->state.period &&
|
||||
duty == channel->state.duty_cycle)
|
||||
return 0;
|
||||
|
||||
fin_freq = clk_get_rate(channel->clk);
|
||||
if (fin_freq == 0) {
|
||||
dev_err(meson->chip.dev, "invalid source clock frequency\n");
|
||||
|
@ -253,7 +245,6 @@ static void meson_pwm_disable(struct meson_pwm *meson, struct pwm_device *pwm)
|
|||
static int meson_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
||||
struct pwm_state *state)
|
||||
{
|
||||
struct meson_pwm_channel *channel = pwm_get_chip_data(pwm);
|
||||
struct meson_pwm *meson = to_meson_pwm(chip);
|
||||
int err = 0;
|
||||
|
||||
|
@ -262,26 +253,12 @@ static int meson_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
|||
|
||||
if (!state->enabled) {
|
||||
meson_pwm_disable(meson, pwm);
|
||||
channel->state.enabled = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (state->period != channel->state.period ||
|
||||
state->duty_cycle != channel->state.duty_cycle ||
|
||||
state->polarity != channel->state.polarity) {
|
||||
} else {
|
||||
err = meson_pwm_calc(meson, pwm, state);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
channel->state.polarity = state->polarity;
|
||||
channel->state.period = state->period;
|
||||
channel->state.duty_cycle = state->duty_cycle;
|
||||
}
|
||||
|
||||
if (state->enabled && !channel->state.enabled) {
|
||||
meson_pwm_enable(meson, pwm);
|
||||
channel->state.enabled = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче