pwm: Drop support for legacy drivers
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Sat, 21 May 2022 11:02:03 +0000 (13:02 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Wed, 22 Jun 2022 13:31:13 +0000 (15:31 +0200)
There are no drivers left providing the legacy callbacks. So drop
support for these.

If this commit breaks your out-of-tree pwm driver, look at e.g. commit
ec00cd5e63f0 ("pwm: renesas-tpu: Implement .apply() callback") for an
example of the needed conversion for your driver.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
drivers/pwm/core.c
include/linux/pwm.h

index c7552df..0e04241 100644 (file)
@@ -235,18 +235,8 @@ EXPORT_SYMBOL_GPL(pwm_get_chip_data);
 
 static bool pwm_ops_check(const struct pwm_chip *chip)
 {
-
        const struct pwm_ops *ops = chip->ops;
 
-       /* driver supports legacy, non-atomic operation */
-       if (ops->config && ops->enable && ops->disable) {
-               if (IS_ENABLED(CONFIG_PWM_DEBUG))
-                       dev_warn(chip->dev,
-                                "Driver needs updating to atomic API\n");
-
-               return true;
-       }
-
        if (!ops->apply)
                return false;
 
@@ -548,73 +538,6 @@ static void pwm_apply_state_debug(struct pwm_device *pwm,
        }
 }
 
-static int pwm_apply_legacy(struct pwm_chip *chip, struct pwm_device *pwm,
-                           const struct pwm_state *state)
-{
-       int err;
-       struct pwm_state initial_state = pwm->state;
-
-       if (state->polarity != pwm->state.polarity) {
-               if (!chip->ops->set_polarity)
-                       return -EINVAL;
-
-               /*
-                * Changing the polarity of a running PWM is only allowed when
-                * the PWM driver implements ->apply().
-                */
-               if (pwm->state.enabled) {
-                       chip->ops->disable(chip, pwm);
-
-                       /*
-                        * Update pwm->state already here in case
-                        * .set_polarity() or another callback depend on that.
-                        */
-                       pwm->state.enabled = false;
-               }
-
-               err = chip->ops->set_polarity(chip, pwm, state->polarity);
-               if (err)
-                       goto rollback;
-
-               pwm->state.polarity = state->polarity;
-       }
-
-       if (!state->enabled) {
-               if (pwm->state.enabled)
-                       chip->ops->disable(chip, pwm);
-
-               return 0;
-       }
-
-       /*
-        * We cannot skip calling ->config even if state->period ==
-        * pwm->state.period && state->duty_cycle == pwm->state.duty_cycle
-        * because we might have exited early in the last call to
-        * pwm_apply_state because of !state->enabled and so the two values in
-        * pwm->state might not be configured in hardware.
-        */
-       err = chip->ops->config(pwm->chip, pwm,
-                               state->duty_cycle,
-                               state->period);
-       if (err)
-               goto rollback;
-
-       pwm->state.period = state->period;
-       pwm->state.duty_cycle = state->duty_cycle;
-
-       if (!pwm->state.enabled) {
-               err = chip->ops->enable(chip, pwm);
-               if (err)
-                       goto rollback;
-       }
-
-       return 0;
-
-rollback:
-       pwm->state = initial_state;
-       return err;
-}
-
 /**
  * pwm_apply_state() - atomically apply a new state to a PWM device
  * @pwm: PWM device
@@ -647,10 +570,7 @@ int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state)
            state->usage_power == pwm->state.usage_power)
                return 0;
 
-       if (chip->ops->apply)
-               err = chip->ops->apply(chip, pwm, state);
-       else
-               err = pwm_apply_legacy(chip, pwm, state);
+       err = chip->ops->apply(chip, pwm, state);
        if (err)
                return err;
 
index 9771a07..76463b7 100644 (file)
@@ -261,10 +261,6 @@ pwm_set_relative_duty_cycle(struct pwm_state *state, unsigned int duty_cycle,
  *            called once per PWM device when the PWM chip is
  *            registered.
  * @owner: helps prevent removal of modules exporting active PWMs
- * @config: configure duty cycles and period length for this PWM
- * @set_polarity: configure the polarity of this PWM
- * @enable: enable PWM output toggling
- * @disable: disable PWM output toggling
  */
 struct pwm_ops {
        int (*request)(struct pwm_chip *chip, struct pwm_device *pwm);
@@ -276,14 +272,6 @@ struct pwm_ops {
        void (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
                          struct pwm_state *state);
        struct module *owner;
-
-       /* Only used by legacy drivers */
-       int (*config)(struct pwm_chip *chip, struct pwm_device *pwm,
-                     int duty_ns, int period_ns);
-       int (*set_polarity)(struct pwm_chip *chip, struct pwm_device *pwm,
-                           enum pwm_polarity polarity);
-       int (*enable)(struct pwm_chip *chip, struct pwm_device *pwm);
-       void (*disable)(struct pwm_chip *chip, struct pwm_device *pwm);
 };
 
 /**