mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
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:
parent
3dd0a90947
commit
76abbdde2d
7 changed files with 524 additions and 3 deletions
|
@ -274,6 +274,8 @@ int pwmchip_add(struct pwm_chip *chip)
|
|||
if (IS_ENABLED(CONFIG_OF))
|
||||
of_pwmchip_add(chip);
|
||||
|
||||
pwmchip_sysfs_export(chip);
|
||||
|
||||
out:
|
||||
mutex_unlock(&pwm_lock);
|
||||
return ret;
|
||||
|
@ -310,6 +312,8 @@ int pwmchip_remove(struct pwm_chip *chip)
|
|||
|
||||
free_pwms(chip);
|
||||
|
||||
pwmchip_sysfs_unexport(chip);
|
||||
|
||||
out:
|
||||
mutex_unlock(&pwm_lock);
|
||||
return ret;
|
||||
|
@ -402,10 +406,19 @@ EXPORT_SYMBOL_GPL(pwm_free);
|
|||
*/
|
||||
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns)
|
||||
return -EINVAL;
|
||||
|
||||
return pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns);
|
||||
err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
pwm->duty_cycle = duty_ns;
|
||||
pwm->period = period_ns;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pwm_config);
|
||||
|
||||
|
@ -418,6 +431,8 @@ EXPORT_SYMBOL_GPL(pwm_config);
|
|||
*/
|
||||
int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!pwm || !pwm->chip->ops)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -427,7 +442,13 @@ int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity)
|
|||
if (test_bit(PWMF_ENABLED, &pwm->flags))
|
||||
return -EBUSY;
|
||||
|
||||
return pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity);
|
||||
err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
pwm->polarity = polarity;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pwm_set_polarity);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue