#ifndef __LINUX_PWM_H #define __LINUX_PWM_H struct pwm_device; /* * pwm_request - request a PWM device */ struct pwm_device *pwm_request(int pwm_id, const char *label); /* * pwm_free - free a PWM device */ void pwm_free(struct pwm_device *pwm); /* * pwm_config - change a PWM device configuration */ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns); /* * pwm_enable - start a PWM output toggling */ int pwm_enable(struct pwm_device *pwm); /* * pwm_disable - stop a PWM output toggling */ void pwm_disable(struct pwm_device *pwm); #ifdef CONFIG_PWM struct pwm_chip; /** * struct pwm_ops - PWM controller operations * @request: optional hook for requesting a PWM * @free: optional hook for freeing a PWM * @config: configure duty cycles and period length for this PWM * @enable: enable PWM output toggling * @disable: disable PWM output toggling * @owner: helps prevent removal of modules exporting active PWMs */ struct pwm_ops { int (*request)(struct pwm_chip *chip); void (*free)(struct pwm_chip *chip); int (*config)(struct pwm_chip *chip, int duty_ns, int period_ns); int (*enable)(struct pwm_chip *chip); void (*disable)(struct pwm_chip *chip); struct module *owner; }; /** * struct pwm_chip - abstract a PWM * @pwm_id: global PWM device index * @label: PWM device label * @ops: controller operations */ struct pwm_chip { int pwm_id; const char *label; struct pwm_ops *ops; }; int pwmchip_add(struct pwm_chip *chip); int pwmchip_remove(struct pwm_chip *chip); #endif #endif /* __LINUX_PWM_H */