pwm: Drop support for legacy drivers
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
ec00cd5e63
("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>
This commit is contained in:
parent
f2906aa863
commit
0829c35dc5
2 changed files with 1 additions and 93 deletions
|
@ -235,18 +235,8 @@ EXPORT_SYMBOL_GPL(pwm_get_chip_data);
|
||||||
|
|
||||||
static bool pwm_ops_check(const struct pwm_chip *chip)
|
static bool pwm_ops_check(const struct pwm_chip *chip)
|
||||||
{
|
{
|
||||||
|
|
||||||
const struct pwm_ops *ops = chip->ops;
|
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)
|
if (!ops->apply)
|
||||||
return false;
|
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_apply_state() - atomically apply a new state to a PWM device
|
||||||
* @pwm: 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)
|
state->usage_power == pwm->state.usage_power)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (chip->ops->apply)
|
|
||||||
err = chip->ops->apply(chip, pwm, state);
|
err = chip->ops->apply(chip, pwm, state);
|
||||||
else
|
|
||||||
err = pwm_apply_legacy(chip, pwm, state);
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
|
@ -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
|
* called once per PWM device when the PWM chip is
|
||||||
* registered.
|
* registered.
|
||||||
* @owner: helps prevent removal of modules exporting active PWMs
|
* @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 {
|
struct pwm_ops {
|
||||||
int (*request)(struct pwm_chip *chip, struct pwm_device *pwm);
|
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,
|
void (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
|
||||||
struct pwm_state *state);
|
struct pwm_state *state);
|
||||||
struct module *owner;
|
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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue