mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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…
	
		Reference in a new issue