switch: make LED port_mask file write handler use kstrtoul() function
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 25 Feb 2016 13:31:23 +0000 (13:31 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
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>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@48774 3c298f89-4303-0410-b956-a3cf2f4a3e73

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

index abd7bed..7d122d2 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