pwm: Add sysfs interface
Add a simple sysfs interface to the generic PWM framework. /sys/class/pwm/ `-- pwmchipN/ for each PWM chip |-- export (w/o) ask the kernel to export a PWM channel |-- npwm (r/o) number of PWM channels in this PWM chip |-- pwmX/ for each exported PWM channel | |-- duty_cycle (r/w) duty cycle (in nanoseconds) | |-- enable (r/w) enable/disable PWM | |-- period (r/w) period (in nanoseconds) | `-- polarity (r/w) polarity of PWM (normal/inversed) `-- unexport (w/o) return a PWM channel to the kernel Based on work by Lars Poeschel. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Thierry Reding <thierry.reding@gmail.com> Cc: Lars Poeschel <poeschel@lemonage.de> Cc: Ryan Mallon <rmallon@gmail.com> Cc: Rob Landley <rob@landley.net> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:

committed by
Thierry Reding

parent
3dd0a90947
commit
76abbdde2d
@@ -76,6 +76,7 @@ enum pwm_polarity {
|
||||
enum {
|
||||
PWMF_REQUESTED = 1 << 0,
|
||||
PWMF_ENABLED = 1 << 1,
|
||||
PWMF_EXPORTED = 1 << 2,
|
||||
};
|
||||
|
||||
struct pwm_device {
|
||||
@@ -86,7 +87,9 @@ struct pwm_device {
|
||||
struct pwm_chip *chip;
|
||||
void *chip_data;
|
||||
|
||||
unsigned int period; /* in nanoseconds */
|
||||
unsigned int period; /* in nanoseconds */
|
||||
unsigned int duty_cycle; /* in nanoseconds */
|
||||
enum pwm_polarity polarity;
|
||||
};
|
||||
|
||||
static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
|
||||
@@ -100,6 +103,17 @@ static inline unsigned int pwm_get_period(struct pwm_device *pwm)
|
||||
return pwm ? pwm->period : 0;
|
||||
}
|
||||
|
||||
static inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)
|
||||
{
|
||||
if (pwm)
|
||||
pwm->duty_cycle = duty;
|
||||
}
|
||||
|
||||
static inline unsigned int pwm_get_duty_cycle(struct pwm_device *pwm)
|
||||
{
|
||||
return pwm ? pwm->duty_cycle : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pwm_set_polarity - configure the polarity of a PWM signal
|
||||
*/
|
||||
@@ -278,4 +292,17 @@ static inline void pwm_add_table(struct pwm_lookup *table, size_t num)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PWM_SYSFS
|
||||
void pwmchip_sysfs_export(struct pwm_chip *chip);
|
||||
void pwmchip_sysfs_unexport(struct pwm_chip *chip);
|
||||
#else
|
||||
static inline void pwmchip_sysfs_export(struct pwm_chip *chip)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_PWM_SYSFS */
|
||||
|
||||
#endif /* __LINUX_PWM_H */
|
||||
|
Reference in New Issue
Block a user