aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Reding <thierry.reding@gmail.com>2016-09-08 04:59:29 -0400
committerThierry Reding <thierry.reding@gmail.com>2016-09-08 04:59:29 -0400
commit51f01e4cbaf321effa75a21611ed5c34ea7cc583 (patch)
tree7d4ab85ed86beb175351738eef22132d8987678e
parent29b4817d4018df78086157ea3a55c1d9424a7cfc (diff)
parent0733424c9ba9f42242409d1ece780777272f7ea1 (diff)
Merge branch 'for-4.9/core' into for-next
-rw-r--r--drivers/pwm/core.c2
-rw-r--r--drivers/pwm/sysfs.c18
-rw-r--r--include/linux/pwm.h5
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
412void 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
412static int __init pwm_sysfs_init(void) 430static 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
642void pwmchip_sysfs_export(struct pwm_chip *chip); 642void pwmchip_sysfs_export(struct pwm_chip *chip);
643void pwmchip_sysfs_unexport(struct pwm_chip *chip); 643void pwmchip_sysfs_unexport(struct pwm_chip *chip);
644void pwmchip_sysfs_unexport_children(struct pwm_chip *chip);
644#else 645#else
645static inline void pwmchip_sysfs_export(struct pwm_chip *chip) 646static 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)
649static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip) 650static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
650{ 651{
651} 652}
653
654static 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 */