aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2017-01-04 16:18:38 +0100
committerArnd Bergmann <arnd@arndb.de>2017-01-04 16:18:38 +0100
commit43a8df78dc1a95c24a08f6b776dc86820c117160 (patch)
treeca9b2073ab71c8e1659f5900e560f8526f13f0b4
parentad040d8df6eb3a6d4b85ef69448d370d0065843c (diff)
parenta766347b15c01507db9bf01f9b7021be5a776691 (diff)
downloadaspeed-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.c10
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)