diff options
author | Arnd Bergmann <arnd@arndb.de> | 2017-01-04 16:18:38 +0100 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2017-01-04 16:18:38 +0100 |
commit | 43a8df78dc1a95c24a08f6b776dc86820c117160 (patch) | |
tree | ca9b2073ab71c8e1659f5900e560f8526f13f0b4 | |
parent | ad040d8df6eb3a6d4b85ef69448d370d0065843c (diff) | |
parent | a766347b15c01507db9bf01f9b7021be5a776691 (diff) | |
download | aspeed-43a8df78dc1a95c24a08f6b776dc86820c117160.tar.gz |
Merge tag 'scpi-fixes-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux into fixes
Pull "SCPI fix for v4.10" from Sudeep Holla:
A simple fix for reading only lower 32-bit sensor values on pre-1.0 SCPI
firmwares so that upper 32-bit (garbage) value is discarded properly.
* tag 'scpi-fixes-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux:
firmware: arm_scpi: fix reading sensor values on pre-1.0 SCPI firmwares
-rw-r--r-- | drivers/firmware/arm_scpi.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c index 70e13230d8db8..9ad0b1934be9a 100644 --- a/drivers/firmware/arm_scpi.c +++ b/drivers/firmware/arm_scpi.c @@ -721,11 +721,17 @@ static int scpi_sensor_get_value(u16 sensor, u64 *val) ret = scpi_send_message(CMD_SENSOR_VALUE, &id, sizeof(id), &buf, sizeof(buf)); - if (!ret) + if (ret) + return ret; + + if (scpi_info->is_legacy) + /* only 32-bits supported, hi_val can be junk */ + *val = le32_to_cpu(buf.lo_val); + else *val = (u64)le32_to_cpu(buf.hi_val) << 32 | le32_to_cpu(buf.lo_val); - return ret; + return 0; } static int scpi_device_get_power_state(u16 dev_id) |