Browse Source

Merge branch 'for-4.9/core' into for-next

Thierry Reding 9 years ago
parent
commit
51f01e4cba
3 changed files with 25 additions and 0 deletions
  1. 2 0
      drivers/pwm/core.c
  2. 18 0
      drivers/pwm/sysfs.c
  3. 5 0
      include/linux/pwm.h

+ 2 - 0
drivers/pwm/core.c

@@ -339,6 +339,8 @@ int pwmchip_remove(struct pwm_chip *chip)
 	unsigned int i;
 	unsigned int i;
 	int ret = 0;
 	int ret = 0;
 
 
+	pwmchip_sysfs_unexport_children(chip);
+
 	mutex_lock(&pwm_lock);
 	mutex_lock(&pwm_lock);
 
 
 	for (i = 0; i < chip->npwm; i++) {
 	for (i = 0; i < chip->npwm; i++) {

+ 18 - 0
drivers/pwm/sysfs.c

@@ -409,6 +409,24 @@ void pwmchip_sysfs_unexport(struct pwm_chip *chip)
 	}
 	}
 }
 }
 
 
+void pwmchip_sysfs_unexport_children(struct pwm_chip *chip)
+{
+	struct device *parent;
+	unsigned int i;
+
+	parent = class_find_device(&pwm_class, NULL, chip,
+				   pwmchip_sysfs_match);
+	if (!parent)
+		return;
+
+	for (i = 0; i < chip->npwm; i++) {
+		struct pwm_device *pwm = &chip->pwms[i];
+
+		if (test_bit(PWMF_EXPORTED, &pwm->flags))
+			pwm_unexport_child(parent, pwm);
+	}
+}
+
 static int __init pwm_sysfs_init(void)
 static int __init pwm_sysfs_init(void)
 {
 {
 	return class_register(&pwm_class);
 	return class_register(&pwm_class);

+ 5 - 0
include/linux/pwm.h

@@ -641,6 +641,7 @@ static inline void pwm_remove_table(struct pwm_lookup *table, size_t num)
 #ifdef CONFIG_PWM_SYSFS
 #ifdef CONFIG_PWM_SYSFS
 void pwmchip_sysfs_export(struct pwm_chip *chip);
 void pwmchip_sysfs_export(struct pwm_chip *chip);
 void pwmchip_sysfs_unexport(struct pwm_chip *chip);
 void pwmchip_sysfs_unexport(struct pwm_chip *chip);
+void pwmchip_sysfs_unexport_children(struct pwm_chip *chip);
 #else
 #else
 static inline void pwmchip_sysfs_export(struct pwm_chip *chip)
 static inline void pwmchip_sysfs_export(struct pwm_chip *chip)
 {
 {
@@ -649,6 +650,10 @@ static inline void pwmchip_sysfs_export(struct pwm_chip *chip)
 static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
 static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
 {
 {
 }
 }
+
+static inline void pwmchip_sysfs_unexport_children(struct pwm_chip *chip)
+{
+}
 #endif /* CONFIG_PWM_SYSFS */
 #endif /* CONFIG_PWM_SYSFS */
 
 
 #endif /* __LINUX_PWM_H */
 #endif /* __LINUX_PWM_H */