diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2014-09-03 07:44:37 -0400 |
---|---|---|
committer | Darren Hart <dvhart@linux.intel.com> | 2014-09-03 13:45:12 -0400 |
commit | aeaac098bd58349d7415acd998089309fd798190 (patch) | |
tree | f44c231d53de46e5994d35c9974dd1127837f20e /drivers/platform | |
parent | e7fdb762b9e1e10c3271e47723b2003330829ddf (diff) |
toshiba_acpi: fix and cleanup toshiba_kbd_bl_mode_store()
The current code just returns -EINVAL because mode can't be equal to
both 1 and 2.
Also this function is messy so I have cleaned it up:
1) Remove initializers like "int time = -1". Initializing variables to
garbage values turns off GCC's uninitialized variable warnings so it
can lead to bugs.
2) Use kstrtoint() instead of sscanf().
3) Use SCI_KBD_MODE_FNZ and SCI_KBD_MODE_AUTO instead of magic numbers 1
and 2.
4) Don't check for "mode == -1" because that can't happen.
5) Preserve the error code from toshiba_kbd_illum_status_set().
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/x86/toshiba_acpi.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c index ba75701986e5..d0dce734b2ed 100644 --- a/drivers/platform/x86/toshiba_acpi.c +++ b/drivers/platform/x86/toshiba_acpi.c | |||
@@ -1255,10 +1255,15 @@ static ssize_t toshiba_kbd_bl_mode_store(struct device *dev, | |||
1255 | const char *buf, size_t count) | 1255 | const char *buf, size_t count) |
1256 | { | 1256 | { |
1257 | struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev); | 1257 | struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev); |
1258 | int mode = -1; | 1258 | int mode; |
1259 | int time = -1; | 1259 | int time; |
1260 | int ret; | ||
1261 | |||
1260 | 1262 | ||
1261 | if (sscanf(buf, "%i", &mode) != 1 && (mode != 2 || mode != 1)) | 1263 | ret = kstrtoint(buf, 0, &mode); |
1264 | if (ret) | ||
1265 | return ret; | ||
1266 | if (mode != SCI_KBD_MODE_FNZ && mode != SCI_KBD_MODE_AUTO) | ||
1262 | return -EINVAL; | 1267 | return -EINVAL; |
1263 | 1268 | ||
1264 | /* Set the Keyboard Backlight Mode where: | 1269 | /* Set the Keyboard Backlight Mode where: |
@@ -1266,11 +1271,12 @@ static ssize_t toshiba_kbd_bl_mode_store(struct device *dev, | |||
1266 | * Auto - KBD backlight turns off automatically in given time | 1271 | * Auto - KBD backlight turns off automatically in given time |
1267 | * FN-Z - KBD backlight "toggles" when hotkey pressed | 1272 | * FN-Z - KBD backlight "toggles" when hotkey pressed |
1268 | */ | 1273 | */ |
1269 | if (mode != -1 && toshiba->kbd_mode != mode) { | 1274 | if (toshiba->kbd_mode != mode) { |
1270 | time = toshiba->kbd_time << HCI_MISC_SHIFT; | 1275 | time = toshiba->kbd_time << HCI_MISC_SHIFT; |
1271 | time = time + toshiba->kbd_mode; | 1276 | time = time + toshiba->kbd_mode; |
1272 | if (toshiba_kbd_illum_status_set(toshiba, time) < 0) | 1277 | ret = toshiba_kbd_illum_status_set(toshiba, time); |
1273 | return -EIO; | 1278 | if (ret) |
1279 | return ret; | ||
1274 | toshiba->kbd_mode = mode; | 1280 | toshiba->kbd_mode = mode; |
1275 | } | 1281 | } |
1276 | 1282 | ||