mfd: qcom_rpm: Fix offset error for msm8660
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 14 Jun 2016 23:02:26 +0000 (01:02 +0200)
committerSasha Levin <alexander.levin@verizon.com>
Tue, 16 Aug 2016 12:25:09 +0000 (08:25 -0400)
commite6b04eb12d323bcea82654c90fbece3bf17dd2f1
tree86e06ee4ce90b7a17b07d4d8746eb015a4dbb320
parent6997496351500fd6fb92f11e89e5024d8bd3f55e
mfd: qcom_rpm: Fix offset error for msm8660

[ Upstream commit 9835f1b70bb3890d38308b9be4fb9d7451ba67f1 ]

The RPM in MSM8660/APQ8060 has different offsets to the selector
ACK and request context ACK registers. Make all these register
offsets part of the per-SoC data and assign the right values.

The bug was found by verifying backwards to the vendor tree in
the out-of-tree files <mach/rpm-[8660|8064|8960]>: all were using
offsets 3,11,15,23 and a select size of 4, except the MSM8660/APQ8060
which was using offsets 3,11,19,27 and a select size of 7.

All other platforms apart from msm8660 were affected by reading
excess registers, since 7 was hardcoded as the number of select
words, this patch makes also this part dynamic so we only write/read
as many select words as the platform actually use.

Symptoms of this bug when using msm8660: the first RPM transaction
would work, but the next would stall or raise an error since the
previous transaction was not properly ACKed as the ACK words were
read at the wrong offset.

Cc: stable@vger.kernel.org
Fixes: 58e214382bdd ("mfd: qcom-rpm: Driver for the Qualcomm RPM")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Björn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
drivers/mfd/qcom_rpm.c