Merge branch 'gup_flag-cleanups'
[cascardo/linux.git] / drivers / platform / x86 / asus-laptop.c
index 15f1311..28551f5 100644 (file)
@@ -932,30 +932,19 @@ static ssize_t infos_show(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RO(infos);
 
-static int parse_arg(const char *buf, unsigned long count, int *val)
-{
-       if (!count)
-               return 0;
-       if (count > 31)
-               return -EINVAL;
-       if (sscanf(buf, "%i", val) != 1)
-               return -EINVAL;
-       return count;
-}
-
 static ssize_t sysfs_acpi_set(struct asus_laptop *asus,
                              const char *buf, size_t count,
                              const char *method)
 {
        int rv, value;
 
-       rv = parse_arg(buf, count, &value);
-       if (rv <= 0)
+       rv = kstrtoint(buf, 0, &value);
+       if (rv < 0)
                return rv;
 
        if (write_acpi_int(asus->handle, method, value))
                return -ENODEV;
-       return rv;
+       return count;
 }
 
 /*
@@ -975,15 +964,17 @@ static ssize_t ledd_store(struct device *dev, struct device_attribute *attr,
        struct asus_laptop *asus = dev_get_drvdata(dev);
        int rv, value;
 
-       rv = parse_arg(buf, count, &value);
-       if (rv > 0) {
-               if (write_acpi_int(asus->handle, METHOD_LEDD, value)) {
-                       pr_warn("LED display write failed\n");
-                       return -ENODEV;
-               }
-               asus->ledd_status = (u32) value;
+       rv = kstrtoint(buf, 0, &value);
+       if (rv < 0)
+               return rv;
+
+       if (write_acpi_int(asus->handle, METHOD_LEDD, value)) {
+               pr_warn("LED display write failed\n");
+               return -ENODEV;
        }
-       return rv;
+
+       asus->ledd_status = (u32) value;
+       return count;
 }
 static DEVICE_ATTR_RW(ledd);
 
@@ -1148,10 +1139,12 @@ static ssize_t display_store(struct device *dev, struct device_attribute *attr,
        struct asus_laptop *asus = dev_get_drvdata(dev);
        int rv, value;
 
-       rv = parse_arg(buf, count, &value);
-       if (rv > 0)
-               asus_set_display(asus, value);
-       return rv;
+       rv = kstrtoint(buf, 0, &value);
+       if (rv < 0)
+               return rv;
+
+       asus_set_display(asus, value);
+       return count;
 }
 static DEVICE_ATTR_WO(display);
 
@@ -1190,11 +1183,12 @@ static ssize_t ls_switch_store(struct device *dev,
        struct asus_laptop *asus = dev_get_drvdata(dev);
        int rv, value;
 
-       rv = parse_arg(buf, count, &value);
-       if (rv > 0)
-               asus_als_switch(asus, value ? 1 : 0);
+       rv = kstrtoint(buf, 0, &value);
+       if (rv < 0)
+               return rv;
 
-       return rv;
+       asus_als_switch(asus, value ? 1 : 0);
+       return count;
 }
 static DEVICE_ATTR_RW(ls_switch);
 
@@ -1219,14 +1213,15 @@ static ssize_t ls_level_store(struct device *dev, struct device_attribute *attr,
        struct asus_laptop *asus = dev_get_drvdata(dev);
        int rv, value;
 
-       rv = parse_arg(buf, count, &value);
-       if (rv > 0) {
-               value = (0 < value) ? ((15 < value) ? 15 : value) : 0;
-               /* 0 <= value <= 15 */
-               asus_als_level(asus, value);
-       }
+       rv = kstrtoint(buf, 0, &value);
+       if (rv < 0)
+               return rv;
+
+       value = (0 < value) ? ((15 < value) ? 15 : value) : 0;
+       /* 0 <= value <= 15 */
+       asus_als_level(asus, value);
 
-       return rv;
+       return count;
 }
 static DEVICE_ATTR_RW(ls_level);
 
@@ -1301,14 +1296,14 @@ static ssize_t gps_store(struct device *dev, struct device_attribute *attr,
        int rv, value;
        int ret;
 
-       rv = parse_arg(buf, count, &value);
-       if (rv <= 0)
-               return -EINVAL;
+       rv = kstrtoint(buf, 0, &value);
+       if (rv < 0)
+               return rv;
        ret = asus_gps_switch(asus, !!value);
        if (ret)
                return ret;
        rfkill_set_sw_state(asus->gps.rfkill, !value);
-       return rv;
+       return count;
 }
 static DEVICE_ATTR_RW(gps);