pwm: meson: Don't cache struct pwm_state internally
authorMartin Blumenstingl <martin.blumenstingl@googlemail.com>
Wed, 12 Jun 2019 19:59:09 +0000 (21:59 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Wed, 26 Jun 2019 09:39:10 +0000 (11:39 +0200)
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>
drivers/pwm/pwm-meson.c

index fd40bb1..70a8ca3 100644 (file)
@@ -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;