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>
This commit is contained in:
Родитель
ca3c2c706d
Коммит
c7a2918373
|
@ -973,7 +973,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
|
|||
struct device_attribute *attr,
|
||||
const char *buffer, size_t count)
|
||||
{
|
||||
unsigned long value = 0;
|
||||
int value;
|
||||
int ret = 0;
|
||||
struct sony_nc_value *item =
|
||||
container_of(attr, struct sony_nc_value, devattr);
|
||||
|
@ -984,7 +984,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
|
|||
if (count > 31)
|
||||
return -EINVAL;
|
||||
|
||||
if (kstrtoul(buffer, 10, &value))
|
||||
if (kstrtoint(buffer, 10, &value))
|
||||
return -EINVAL;
|
||||
|
||||
if (item->validate)
|
||||
|
@ -994,7 +994,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
|
|||
return value;
|
||||
|
||||
ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset,
|
||||
(int *)&value, NULL);
|
||||
&value, NULL);
|
||||
if (ret < 0)
|
||||
return -EIO;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче