switch: make LED port_mask file write handler use kstrtoul() function
authorFelix Fietkau <nbd@openwrt.org>
Thu, 25 Feb 2016 13:31:23 +0000 (13:31 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Thu, 25 Feb 2016 13:31:23 +0000 (13:31 +0000)
This patch changes swconfig_trig_port_mask_store() handler to utilize
kstrtoul() function instead of call to obsolete simple_strtoul(). Thanks
to this change, new handler takes less memory and makes port_mask special
file accept not only hexadecimal, but also decimal and octal numbers.

Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
SVN-Revision: 48774

target/linux/generic/files/drivers/net/phy/swconfig_leds.c

index abd7bed48c4a8ce795808d2aff677310966e6070..7d122d26cdaf3d9e9046210df02fac4c406f0d27 100644 (file)
@@ -94,37 +94,28 @@ swconfig_trig_port_mask_store(struct device *dev, struct device_attribute *attr,
        struct led_classdev *led_cdev = dev_get_drvdata(dev);
        struct swconfig_trig_data *trig_data = led_cdev->trigger_data;
        unsigned long port_mask;
-       ssize_t ret = -EINVAL;
-       char *after;
-       size_t count;
+       int ret;
+       bool changed;
 
-       port_mask = simple_strtoul(buf, &after, 16);
-       count = after - buf;
+       ret = kstrtoul(buf, 0, &port_mask);
+       if (ret)
+               return ret;
 
-       if (*after && isspace(*after))
-               count++;
+       write_lock(&trig_data->lock);
 
-       if (count == size) {
-               bool changed;
-
-               write_lock(&trig_data->lock);
-
-               changed = (trig_data->port_mask != port_mask);
-               if (changed) {
-                       trig_data->port_mask = port_mask;
-                       if (port_mask == 0)
-                               swconfig_trig_set_brightness(trig_data, LED_OFF);
-               }
-
-               write_unlock(&trig_data->lock);
+       changed = (trig_data->port_mask != port_mask);
+       if (changed) {
+               trig_data->port_mask = port_mask;
+               if (port_mask == 0)
+                       swconfig_trig_set_brightness(trig_data, LED_OFF);
+       }
 
-               if (changed)
-                       swconfig_trig_update_port_mask(led_cdev->trigger);
+       write_unlock(&trig_data->lock);
 
-               ret = count;
-       }
+       if (changed)
+               swconfig_trig_update_port_mask(led_cdev->trigger);
 
-       return ret;
+       return size;
 }
 
 static ssize_t