aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/platform/x86/asus-laptop.c77
1 files changed, 36 insertions, 41 deletions
diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c
index 15f131146501..28551f5a2e07 100644
--- a/drivers/platform/x86/asus-laptop.c
+++ b/drivers/platform/x86/asus-laptop.c
@@ -932,30 +932,19 @@ static ssize_t infos_show(struct device *dev, struct device_attribute *attr,
932} 932}
933static DEVICE_ATTR_RO(infos); 933static DEVICE_ATTR_RO(infos);
934 934
935static int parse_arg(const char *buf, unsigned long count, int *val)
936{
937 if (!count)
938 return 0;
939 if (count > 31)
940 return -EINVAL;
941 if (sscanf(buf, "%i", val) != 1)
942 return -EINVAL;
943 return count;
944}
945
946static ssize_t sysfs_acpi_set(struct asus_laptop *asus, 935static ssize_t sysfs_acpi_set(struct asus_laptop *asus,
947 const char *buf, size_t count, 936 const char *buf, size_t count,
948 const char *method) 937 const char *method)
949{ 938{
950 int rv, value; 939 int rv, value;
951 940
952 rv = parse_arg(buf, count, &value); 941 rv = kstrtoint(buf, 0, &value);
953 if (rv <= 0) 942 if (rv < 0)
954 return rv; 943 return rv;
955 944
956 if (write_acpi_int(asus->handle, method, value)) 945 if (write_acpi_int(asus->handle, method, value))
957 return -ENODEV; 946 return -ENODEV;
958 return rv; 947 return count;
959} 948}
960 949
961/* 950/*
@@ -975,15 +964,17 @@ static ssize_t ledd_store(struct device *dev, struct device_attribute *attr,
975 struct asus_laptop *asus = dev_get_drvdata(dev); 964 struct asus_laptop *asus = dev_get_drvdata(dev);
976 int rv, value; 965 int rv, value;
977 966
978 rv = parse_arg(buf, count, &value); 967 rv = kstrtoint(buf, 0, &value);
979 if (rv > 0) { 968 if (rv < 0)
980 if (write_acpi_int(asus->handle, METHOD_LEDD, value)) { 969 return rv;
981 pr_warn("LED display write failed\n"); 970
982 return -ENODEV; 971 if (write_acpi_int(asus->handle, METHOD_LEDD, value)) {
983 } 972 pr_warn("LED display write failed\n");
984 asus->ledd_status = (u32) value; 973 return -ENODEV;
985 } 974 }
986 return rv; 975
976 asus->ledd_status = (u32) value;
977 return count;
987} 978}
988static DEVICE_ATTR_RW(ledd); 979static DEVICE_ATTR_RW(ledd);
989 980
@@ -1148,10 +1139,12 @@ static ssize_t display_store(struct device *dev, struct device_attribute *attr,
1148 struct asus_laptop *asus = dev_get_drvdata(dev); 1139 struct asus_laptop *asus = dev_get_drvdata(dev);
1149 int rv, value; 1140 int rv, value;
1150 1141
1151 rv = parse_arg(buf, count, &value); 1142 rv = kstrtoint(buf, 0, &value);
1152 if (rv > 0) 1143 if (rv < 0)
1153 asus_set_display(asus, value); 1144 return rv;
1154 return rv; 1145
1146 asus_set_display(asus, value);
1147 return count;
1155} 1148}
1156static DEVICE_ATTR_WO(display); 1149static DEVICE_ATTR_WO(display);
1157 1150
@@ -1190,11 +1183,12 @@ static ssize_t ls_switch_store(struct device *dev,
1190 struct asus_laptop *asus = dev_get_drvdata(dev); 1183 struct asus_laptop *asus = dev_get_drvdata(dev);
1191 int rv, value; 1184 int rv, value;
1192 1185
1193 rv = parse_arg(buf, count, &value); 1186 rv = kstrtoint(buf, 0, &value);
1194 if (rv > 0) 1187 if (rv < 0)
1195 asus_als_switch(asus, value ? 1 : 0); 1188 return rv;
1196 1189
1197 return rv; 1190 asus_als_switch(asus, value ? 1 : 0);
1191 return count;
1198} 1192}
1199static DEVICE_ATTR_RW(ls_switch); 1193static DEVICE_ATTR_RW(ls_switch);
1200 1194
@@ -1219,14 +1213,15 @@ static ssize_t ls_level_store(struct device *dev, struct device_attribute *attr,
1219 struct asus_laptop *asus = dev_get_drvdata(dev); 1213 struct asus_laptop *asus = dev_get_drvdata(dev);
1220 int rv, value; 1214 int rv, value;
1221 1215
1222 rv = parse_arg(buf, count, &value); 1216 rv = kstrtoint(buf, 0, &value);
1223 if (rv > 0) { 1217 if (rv < 0)
1224 value = (0 < value) ? ((15 < value) ? 15 : value) : 0; 1218 return rv;
1225 /* 0 <= value <= 15 */ 1219
1226 asus_als_level(asus, value); 1220 value = (0 < value) ? ((15 < value) ? 15 : value) : 0;
1227 } 1221 /* 0 <= value <= 15 */
1222 asus_als_level(asus, value);
1228 1223
1229 return rv; 1224 return count;
1230} 1225}
1231static DEVICE_ATTR_RW(ls_level); 1226static DEVICE_ATTR_RW(ls_level);
1232 1227
@@ -1301,14 +1296,14 @@ static ssize_t gps_store(struct device *dev, struct device_attribute *attr,
1301 int rv, value; 1296 int rv, value;
1302 int ret; 1297 int ret;
1303 1298
1304 rv = parse_arg(buf, count, &value); 1299 rv = kstrtoint(buf, 0, &value);
1305 if (rv <= 0) 1300 if (rv < 0)
1306 return -EINVAL; 1301 return rv;
1307 ret = asus_gps_switch(asus, !!value); 1302 ret = asus_gps_switch(asus, !!value);
1308 if (ret) 1303 if (ret)
1309 return ret; 1304 return ret;
1310 rfkill_set_sw_state(asus->gps.rfkill, !value); 1305 rfkill_set_sw_state(asus->gps.rfkill, !value);
1311 return rv; 1306 return count;
1312} 1307}
1313static DEVICE_ATTR_RW(gps); 1308static DEVICE_ATTR_RW(gps);
1314 1309