diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /include/linux/pwm.h | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'include/linux/pwm.h')
| -rw-r--r-- | include/linux/pwm.h | 99 | 
1 files changed, 58 insertions, 41 deletions
diff --git a/include/linux/pwm.h b/include/linux/pwm.h index 36262d08a9da..d681f6875aef 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -79,26 +79,43 @@ enum {  	PWMF_EXPORTED = 1 << 2,  }; +/** + * struct pwm_device - PWM channel object + * @label: name of the PWM device + * @flags: flags associated with the PWM device + * @hwpwm: per-chip relative index of the PWM device + * @pwm: global index of the PWM device + * @chip: PWM chip providing this PWM device + * @chip_data: chip-private data associated with the PWM device + * @period: period of the PWM signal (in nanoseconds) + * @duty_cycle: duty cycle of the PWM signal (in nanoseconds) + * @polarity: polarity of the PWM signal + */  struct pwm_device { -	const char		*label; -	unsigned long		flags; -	unsigned int		hwpwm; -	unsigned int		pwm; -	struct pwm_chip		*chip; -	void			*chip_data; - -	unsigned int		period; 	/* in nanoseconds */ -	unsigned int		duty_cycle;	/* in nanoseconds */ -	enum pwm_polarity	polarity; +	const char *label; +	unsigned long flags; +	unsigned int hwpwm; +	unsigned int pwm; +	struct pwm_chip *chip; +	void *chip_data; + +	unsigned int period; +	unsigned int duty_cycle; +	enum pwm_polarity polarity;  }; +static inline bool pwm_is_enabled(const struct pwm_device *pwm) +{ +	return test_bit(PWMF_ENABLED, &pwm->flags); +} +  static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)  {  	if (pwm)  		pwm->period = period;  } -static inline unsigned int pwm_get_period(struct pwm_device *pwm) +static inline unsigned int pwm_get_period(const struct pwm_device *pwm)  {  	return pwm ? pwm->period : 0;  } @@ -109,7 +126,7 @@ static inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)  		pwm->duty_cycle = duty;  } -static inline unsigned int pwm_get_duty_cycle(struct pwm_device *pwm) +static inline unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm)  {  	return pwm ? pwm->duty_cycle : 0;  } @@ -119,6 +136,11 @@ static inline unsigned int pwm_get_duty_cycle(struct pwm_device *pwm)   */  int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity); +static inline enum pwm_polarity pwm_get_polarity(const struct pwm_device *pwm) +{ +	return pwm ? pwm->polarity : PWM_POLARITY_NORMAL; +} +  /**   * struct pwm_ops - PWM controller operations   * @request: optional hook for requesting a PWM @@ -131,25 +153,18 @@ int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity);   * @owner: helps prevent removal of modules exporting active PWMs   */  struct pwm_ops { -	int			(*request)(struct pwm_chip *chip, -					   struct pwm_device *pwm); -	void			(*free)(struct pwm_chip *chip, -					struct pwm_device *pwm); -	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); +	int (*request)(struct pwm_chip *chip, struct pwm_device *pwm); +	void (*free)(struct pwm_chip *chip, struct pwm_device *pwm); +	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);  #ifdef CONFIG_DEBUG_FS -	void			(*dbg_show)(struct pwm_chip *chip, -					    struct seq_file *s); +	void (*dbg_show)(struct pwm_chip *chip, struct seq_file *s);  #endif -	struct module		*owner; +	struct module *owner;  };  /** @@ -160,22 +175,24 @@ struct pwm_ops {   * @base: number of first PWM controlled by this chip   * @npwm: number of PWMs controlled by this chip   * @pwms: array of PWM devices allocated by the framework + * @of_xlate: request a PWM device given a device tree PWM specifier + * @of_pwm_n_cells: number of cells expected in the device tree PWM specifier   * @can_sleep: must be true if the .config(), .enable() or .disable()   *             operations may sleep   */  struct pwm_chip { -	struct device		*dev; -	struct list_head	list; -	const struct pwm_ops	*ops; -	int			base; -	unsigned int		npwm; - -	struct pwm_device	*pwms; - -	struct pwm_device *	(*of_xlate)(struct pwm_chip *pc, -					    const struct of_phandle_args *args); -	unsigned int		of_pwm_n_cells; -	bool			can_sleep; +	struct device *dev; +	struct list_head list; +	const struct pwm_ops *ops; +	int base; +	unsigned int npwm; + +	struct pwm_device *pwms; + +	struct pwm_device * (*of_xlate)(struct pwm_chip *pc, +					const struct of_phandle_args *args); +	unsigned int of_pwm_n_cells; +	bool can_sleep;  };  #if IS_ENABLED(CONFIG_PWM)  |