aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pwm/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pwm/core.c')
-rw-r--r--drivers/pwm/core.c25
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
277out: 279out:
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
313out: 317out:
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 */
403int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) 407int 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}
410EXPORT_SYMBOL_GPL(pwm_config); 423EXPORT_SYMBOL_GPL(pwm_config);
411 424
@@ -418,6 +431,8 @@ EXPORT_SYMBOL_GPL(pwm_config);
418 */ 431 */
419int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) 432int 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}
432EXPORT_SYMBOL_GPL(pwm_set_polarity); 453EXPORT_SYMBOL_GPL(pwm_set_polarity);
433 454