base/memory, hotplug: fix a kernel oops in show_valid_zones()
[firefly-linux-kernel-4.4.55.git] / drivers / pwm / sysfs.c
index c472772f00a7880611e23e62cfbd1731d04dfa27..375008e2be20a5ae057f72fef7898988314cbdc4 100644 (file)
@@ -40,18 +40,18 @@ static struct pwm_device *child_to_pwm_device(struct device *child)
        return export->pwm;
 }
 
-static ssize_t pwm_period_show(struct device *child,
-                              struct device_attribute *attr,
-                              char *buf)
+static ssize_t period_show(struct device *child,
+                          struct device_attribute *attr,
+                          char *buf)
 {
        const struct pwm_device *pwm = child_to_pwm_device(child);
 
        return sprintf(buf, "%u\n", pwm_get_period(pwm));
 }
 
-static ssize_t pwm_period_store(struct device *child,
-                               struct device_attribute *attr,
-                               const char *buf, size_t size)
+static ssize_t period_store(struct device *child,
+                           struct device_attribute *attr,
+                           const char *buf, size_t size)
 {
        struct pwm_device *pwm = child_to_pwm_device(child);
        unsigned int val;
@@ -66,18 +66,18 @@ static ssize_t pwm_period_store(struct device *child,
        return ret ? : size;
 }
 
-static ssize_t pwm_duty_cycle_show(struct device *child,
-                                  struct device_attribute *attr,
-                                  char *buf)
+static ssize_t duty_cycle_show(struct device *child,
+                              struct device_attribute *attr,
+                              char *buf)
 {
        const struct pwm_device *pwm = child_to_pwm_device(child);
 
        return sprintf(buf, "%u\n", pwm_get_duty_cycle(pwm));
 }
 
-static ssize_t pwm_duty_cycle_store(struct device *child,
-                                   struct device_attribute *attr,
-                                   const char *buf, size_t size)
+static ssize_t duty_cycle_store(struct device *child,
+                               struct device_attribute *attr,
+                               const char *buf, size_t size)
 {
        struct pwm_device *pwm = child_to_pwm_device(child);
        unsigned int val;
@@ -92,19 +92,18 @@ static ssize_t pwm_duty_cycle_store(struct device *child,
        return ret ? : size;
 }
 
-static ssize_t pwm_enable_show(struct device *child,
-                              struct device_attribute *attr,
-                              char *buf)
+static ssize_t enable_show(struct device *child,
+                          struct device_attribute *attr,
+                          char *buf)
 {
        const struct pwm_device *pwm = child_to_pwm_device(child);
-       int enabled = pwm_is_enabled(pwm);
 
-       return sprintf(buf, "%d\n", enabled);
+       return sprintf(buf, "%d\n", pwm_is_enabled(pwm));
 }
 
-static ssize_t pwm_enable_store(struct device *child,
-                               struct device_attribute *attr,
-                               const char *buf, size_t size)
+static ssize_t enable_store(struct device *child,
+                           struct device_attribute *attr,
+                           const char *buf, size_t size)
 {
        struct pwm_device *pwm = child_to_pwm_device(child);
        int val, ret;
@@ -128,9 +127,9 @@ static ssize_t pwm_enable_store(struct device *child,
        return ret ? : size;
 }
 
-static ssize_t pwm_polarity_show(struct device *child,
-                                struct device_attribute *attr,
-                                char *buf)
+static ssize_t polarity_show(struct device *child,
+                            struct device_attribute *attr,
+                            char *buf)
 {
        const struct pwm_device *pwm = child_to_pwm_device(child);
        const char *polarity = "unknown";
@@ -148,9 +147,9 @@ static ssize_t pwm_polarity_show(struct device *child,
        return sprintf(buf, "%s\n", polarity);
 }
 
-static ssize_t pwm_polarity_store(struct device *child,
-                                 struct device_attribute *attr,
-                                 const char *buf, size_t size)
+static ssize_t polarity_store(struct device *child,
+                             struct device_attribute *attr,
+                             const char *buf, size_t size)
 {
        struct pwm_device *pwm = child_to_pwm_device(child);
        enum pwm_polarity polarity;
@@ -168,10 +167,10 @@ static ssize_t pwm_polarity_store(struct device *child,
        return ret ? : size;
 }
 
-static DEVICE_ATTR(period, 0644, pwm_period_show, pwm_period_store);
-static DEVICE_ATTR(duty_cycle, 0644, pwm_duty_cycle_show, pwm_duty_cycle_store);
-static DEVICE_ATTR(enable, 0644, pwm_enable_show, pwm_enable_store);
-static DEVICE_ATTR(polarity, 0644, pwm_polarity_show, pwm_polarity_store);
+static DEVICE_ATTR_RW(period);
+static DEVICE_ATTR_RW(duty_cycle);
+static DEVICE_ATTR_RW(enable);
+static DEVICE_ATTR_RW(polarity);
 
 static struct attribute *pwm_attrs[] = {
        &dev_attr_period.attr,
@@ -245,9 +244,9 @@ static int pwm_unexport_child(struct device *parent, struct pwm_device *pwm)
        return 0;
 }
 
-static ssize_t pwm_export_store(struct device *parent,
-                               struct device_attribute *attr,
-                               const char *buf, size_t len)
+static ssize_t export_store(struct device *parent,
+                           struct device_attribute *attr,
+                           const char *buf, size_t len)
 {
        struct pwm_chip *chip = dev_get_drvdata(parent);
        struct pwm_device *pwm;
@@ -271,11 +270,11 @@ static ssize_t pwm_export_store(struct device *parent,
 
        return ret ? : len;
 }
-static DEVICE_ATTR(export, 0200, NULL, pwm_export_store);
+static DEVICE_ATTR_WO(export);
 
-static ssize_t pwm_unexport_store(struct device *parent,
-                                 struct device_attribute *attr,
-                                 const char *buf, size_t len)
+static ssize_t unexport_store(struct device *parent,
+                             struct device_attribute *attr,
+                             const char *buf, size_t len)
 {
        struct pwm_chip *chip = dev_get_drvdata(parent);
        unsigned int hwpwm;
@@ -292,7 +291,7 @@ static ssize_t pwm_unexport_store(struct device *parent,
 
        return ret ? : len;
 }
-static DEVICE_ATTR(unexport, 0200, NULL, pwm_unexport_store);
+static DEVICE_ATTR_WO(unexport);
 
 static ssize_t npwm_show(struct device *parent, struct device_attribute *attr,
                         char *buf)
@@ -351,6 +350,26 @@ 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);
+       }
+
+       put_device(parent);
+}
+
 static int __init pwm_sysfs_init(void)
 {
        return class_register(&pwm_class);