diff options
author | Thierry Reding <thierry.reding@gmail.com> | 2016-09-08 04:59:29 -0400 |
---|---|---|
committer | Thierry Reding <thierry.reding@gmail.com> | 2016-09-08 04:59:29 -0400 |
commit | 51f01e4cbaf321effa75a21611ed5c34ea7cc583 (patch) | |
tree | 7d4ab85ed86beb175351738eef22132d8987678e | |
parent | 29b4817d4018df78086157ea3a55c1d9424a7cfc (diff) | |
parent | 0733424c9ba9f42242409d1ece780777272f7ea1 (diff) |
Merge branch 'for-4.9/core' into for-next
-rw-r--r-- | drivers/pwm/core.c | 2 | ||||
-rw-r--r-- | drivers/pwm/sysfs.c | 18 | ||||
-rw-r--r-- | include/linux/pwm.h | 5 |
3 files changed, 25 insertions, 0 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 0dbd29e287db..172ef8245811 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c | |||
@@ -339,6 +339,8 @@ int pwmchip_remove(struct pwm_chip *chip) | |||
339 | unsigned int i; | 339 | unsigned int i; |
340 | int ret = 0; | 340 | int ret = 0; |
341 | 341 | ||
342 | pwmchip_sysfs_unexport_children(chip); | ||
343 | |||
342 | mutex_lock(&pwm_lock); | 344 | mutex_lock(&pwm_lock); |
343 | 345 | ||
344 | for (i = 0; i < chip->npwm; i++) { | 346 | for (i = 0; i < chip->npwm; i++) { |
diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c index 18ed725594c3..0296d8178ae2 100644 --- a/drivers/pwm/sysfs.c +++ b/drivers/pwm/sysfs.c | |||
@@ -409,6 +409,24 @@ void pwmchip_sysfs_unexport(struct pwm_chip *chip) | |||
409 | } | 409 | } |
410 | } | 410 | } |
411 | 411 | ||
412 | void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) | ||
413 | { | ||
414 | struct device *parent; | ||
415 | unsigned int i; | ||
416 | |||
417 | parent = class_find_device(&pwm_class, NULL, chip, | ||
418 | pwmchip_sysfs_match); | ||
419 | if (!parent) | ||
420 | return; | ||
421 | |||
422 | for (i = 0; i < chip->npwm; i++) { | ||
423 | struct pwm_device *pwm = &chip->pwms[i]; | ||
424 | |||
425 | if (test_bit(PWMF_EXPORTED, &pwm->flags)) | ||
426 | pwm_unexport_child(parent, pwm); | ||
427 | } | ||
428 | } | ||
429 | |||
412 | static int __init pwm_sysfs_init(void) | 430 | static int __init pwm_sysfs_init(void) |
413 | { | 431 | { |
414 | return class_register(&pwm_class); | 432 | return class_register(&pwm_class); |
diff --git a/include/linux/pwm.h b/include/linux/pwm.h index f1bbae014889..2c6c5114c089 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h | |||
@@ -641,6 +641,7 @@ static inline void pwm_remove_table(struct pwm_lookup *table, size_t num) | |||
641 | #ifdef CONFIG_PWM_SYSFS | 641 | #ifdef CONFIG_PWM_SYSFS |
642 | void pwmchip_sysfs_export(struct pwm_chip *chip); | 642 | void pwmchip_sysfs_export(struct pwm_chip *chip); |
643 | void pwmchip_sysfs_unexport(struct pwm_chip *chip); | 643 | void pwmchip_sysfs_unexport(struct pwm_chip *chip); |
644 | void pwmchip_sysfs_unexport_children(struct pwm_chip *chip); | ||
644 | #else | 645 | #else |
645 | static inline void pwmchip_sysfs_export(struct pwm_chip *chip) | 646 | static inline void pwmchip_sysfs_export(struct pwm_chip *chip) |
646 | { | 647 | { |
@@ -649,6 +650,10 @@ static inline void pwmchip_sysfs_export(struct pwm_chip *chip) | |||
649 | static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip) | 650 | static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip) |
650 | { | 651 | { |
651 | } | 652 | } |
653 | |||
654 | static inline void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) | ||
655 | { | ||
656 | } | ||
652 | #endif /* CONFIG_PWM_SYSFS */ | 657 | #endif /* CONFIG_PWM_SYSFS */ |
653 | 658 | ||
654 | #endif /* __LINUX_PWM_H */ | 659 | #endif /* __LINUX_PWM_H */ |