diff options
Diffstat (limited to 'drivers/pwm/core.c')
-rw-r--r-- | drivers/pwm/core.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 0cf0f65eb037..dfbfbc521768 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c | |||
@@ -274,6 +274,8 @@ int pwmchip_add(struct pwm_chip *chip) | |||
274 | if (IS_ENABLED(CONFIG_OF)) | 274 | if (IS_ENABLED(CONFIG_OF)) |
275 | of_pwmchip_add(chip); | 275 | of_pwmchip_add(chip); |
276 | 276 | ||
277 | pwmchip_sysfs_export(chip); | ||
278 | |||
277 | out: | 279 | out: |
278 | mutex_unlock(&pwm_lock); | 280 | mutex_unlock(&pwm_lock); |
279 | return ret; | 281 | return ret; |
@@ -310,6 +312,8 @@ int pwmchip_remove(struct pwm_chip *chip) | |||
310 | 312 | ||
311 | free_pwms(chip); | 313 | free_pwms(chip); |
312 | 314 | ||
315 | pwmchip_sysfs_unexport(chip); | ||
316 | |||
313 | out: | 317 | out: |
314 | mutex_unlock(&pwm_lock); | 318 | mutex_unlock(&pwm_lock); |
315 | return ret; | 319 | return ret; |
@@ -402,10 +406,19 @@ EXPORT_SYMBOL_GPL(pwm_free); | |||
402 | */ | 406 | */ |
403 | int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | 407 | int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) |
404 | { | 408 | { |
409 | int err; | ||
410 | |||
405 | if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns) | 411 | if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns) |
406 | return -EINVAL; | 412 | return -EINVAL; |
407 | 413 | ||
408 | return pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); | 414 | err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); |
415 | if (err) | ||
416 | return err; | ||
417 | |||
418 | pwm->duty_cycle = duty_ns; | ||
419 | pwm->period = period_ns; | ||
420 | |||
421 | return 0; | ||
409 | } | 422 | } |
410 | EXPORT_SYMBOL_GPL(pwm_config); | 423 | EXPORT_SYMBOL_GPL(pwm_config); |
411 | 424 | ||
@@ -418,6 +431,8 @@ EXPORT_SYMBOL_GPL(pwm_config); | |||
418 | */ | 431 | */ |
419 | int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) | 432 | int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) |
420 | { | 433 | { |
434 | int err; | ||
435 | |||
421 | if (!pwm || !pwm->chip->ops) | 436 | if (!pwm || !pwm->chip->ops) |
422 | return -EINVAL; | 437 | return -EINVAL; |
423 | 438 | ||
@@ -427,7 +442,13 @@ int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) | |||
427 | if (test_bit(PWMF_ENABLED, &pwm->flags)) | 442 | if (test_bit(PWMF_ENABLED, &pwm->flags)) |
428 | return -EBUSY; | 443 | return -EBUSY; |
429 | 444 | ||
430 | return pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); | 445 | err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); |
446 | if (err) | ||
447 | return err; | ||
448 | |||
449 | pwm->polarity = polarity; | ||
450 | |||
451 | return 0; | ||
431 | } | 452 | } |
432 | EXPORT_SYMBOL_GPL(pwm_set_polarity); | 453 | EXPORT_SYMBOL_GPL(pwm_set_polarity); |
433 | 454 | ||