diff options
author | H. Nikolaus Schaller <hns@goldelico.com> | 2019-06-04 14:35:58 +0200 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2019-06-08 00:03:18 +0200 |
commit | 3b00691cc46a4089368a008b30655a8343411715 (patch) | |
tree | 8dfdd0941d277e7a9ec9480029d8343c2b8da710 /arch/arm64 | |
parent | Linux 5.2-rc3 (diff) | |
download | linux-3b00691cc46a4089368a008b30655a8343411715.tar.xz linux-3b00691cc46a4089368a008b30655a8343411715.zip |
gpio: pca953x: hack to fix 24 bit gpio expanders
24 bit expanders use REG_ADDR_AI in combination with register addressing. This
conflicts with regmap which takes this bit as part of the register number,
i.e. a second cache entry is defined for accessed with REG_ADDR_AI being
set although on the chip it is the same register as with REG_ADDR_AI being
cleared.
The problem was introduced by
commit b32cecb46bdc ("gpio: pca953x: Extract the register address mangling to single function")
but only became visible by
commit 8b9f9d4dc511 ("regmap: verify if register is writeable before writing operations")
because before, the regmap size was effectively ignored and
pca953x_writeable_register() did know to ignore REG_ADDR_AI. Still, there
were two separate cache entries created.
Since the use of REG_ADDR_AI seems to be static we can work around this
issue by simply increasing the size of the regmap to cover the "virtual"
registers with REG_ADDR_AI being set. This only means that half of the
regmap buffer will be unused.
Reported-by: H. Nikolaus Schaller <hns@goldelico.com>
Suggested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'arch/arm64')
0 files changed, 0 insertions, 0 deletions