diff options
| author | Dan Carpenter <dan.carpenter@oracle.com> | 2012-06-09 00:18:13 -0400 |
|---|---|---|
| committer | Matthew Garrett <mjg@redhat.com> | 2012-06-26 14:43:27 -0400 |
| commit | c7a2918373983b32db3ca35823d930641747e26f (patch) | |
| tree | 514d6e8c95ffe2cf893671f6e706e20415e00e22 | |
| parent | ca3c2c706de39b3400e57254dce054bf7350efa2 (diff) | |
sony-laptop: fix sony_nc_sysfs_store()
We made this an unsigned long and it causes a bug on 64 bit big endian
systems when we try to pass the value to sony_nc_int_call().
Also value has to be signed because validate() returns negative error
codes.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mattia Dongili <malattia@linux.it>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
| -rw-r--r-- | drivers/platform/x86/sony-laptop.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c index 89ff6d845f34..78e6389d2cae 100644 --- a/drivers/platform/x86/sony-laptop.c +++ b/drivers/platform/x86/sony-laptop.c | |||
| @@ -973,7 +973,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev, | |||
| 973 | struct device_attribute *attr, | 973 | struct device_attribute *attr, |
| 974 | const char *buffer, size_t count) | 974 | const char *buffer, size_t count) |
| 975 | { | 975 | { |
| 976 | unsigned long value = 0; | 976 | int value; |
| 977 | int ret = 0; | 977 | int ret = 0; |
| 978 | struct sony_nc_value *item = | 978 | struct sony_nc_value *item = |
| 979 | container_of(attr, struct sony_nc_value, devattr); | 979 | container_of(attr, struct sony_nc_value, devattr); |
| @@ -984,7 +984,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev, | |||
| 984 | if (count > 31) | 984 | if (count > 31) |
| 985 | return -EINVAL; | 985 | return -EINVAL; |
| 986 | 986 | ||
| 987 | if (kstrtoul(buffer, 10, &value)) | 987 | if (kstrtoint(buffer, 10, &value)) |
| 988 | return -EINVAL; | 988 | return -EINVAL; |
| 989 | 989 | ||
| 990 | if (item->validate) | 990 | if (item->validate) |
| @@ -994,7 +994,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev, | |||
| 994 | return value; | 994 | return value; |
| 995 | 995 | ||
| 996 | ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset, | 996 | ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset, |
| 997 | (int *)&value, NULL); | 997 | &value, NULL); |
| 998 | if (ret < 0) | 998 | if (ret < 0) |
| 999 | return -EIO; | 999 | return -EIO; |
| 1000 | 1000 | ||
