aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiedrius Statkevičius <giedrius.statkevicius@gmail.com>2016-08-05 16:57:10 -0400
committerDarren Hart <dvhart@linux.intel.com>2016-09-23 19:20:44 -0400
commit6f7e357bf181b5a9da9daffcd40a64ee516a29e4 (patch)
tree93d340676406f8ec1ae46d0b205d2be5d22b8166
parent999d4376c62828b260fbb59d5ab6bc28918ca448 (diff)
platform/x86: asus-laptop: get rid of parse_arg()
parse_arg() duplicates the funcionality of kstrtoint() so use the latter function instead. There is no funcionality change except that in the case of input being too big -ERANGE will be returned instead of -EINVAL which is not bad because -ERANGE makes more sense here. The check for !count is already done by the sysfs core so no need to duplicate it again. Also, add some minor corrections to error handling to accommodate the change in return values (parse_arg returned count if everything succeeded whereas kstrtoint returns 0 in the same situation) As a result of this patch asus-laptop.ko size is reduced by almost 1%: add/remove: 0/1 grow/shrink: 1/6 up/down: 1/-149 (-148) function old new delta __UNIQUE_ID_vermagic0 69 70 +1 ls_switch_store 133 117 -16 ledd_store 175 159 -16 display_store 157 141 -16 ls_level_store 193 176 -17 gps_store 200 178 -22 sysfs_acpi_set.isra 148 125 -23 parse_arg.part 39 - -39 Total: Before=19160, After=19012, chg -0.77% Signed-off-by: Giedrius Statkevičius <giedrius.statkevicius@gmail.com> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
-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