summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2017-03-08 14:08:53 -0800
committerSascha Hauer <s.hauer@pengutronix.de>2017-03-09 08:13:38 +0100
commit15426d5c46c57020cf62e350fa6de07a46889ec3 (patch)
tree0924f0904784468b8fe939a470c06e90dfd591f9 /drivers/pinctrl
parent7d9679a33a32f2d4fd08628d52e716bb452e8734 (diff)
downloadbarebox-15426d5c46c57020cf62e350fa6de07a46889ec3.tar.gz
barebox-15426d5c46c57020cf62e350fa6de07a46889ec3.tar.xz
pinctrl: at91: Fix a bug in at91_pinctrl_set_state()
Pin number, as specified in OF pinumx entries, is relative to each bank start, whereas both at91_mux_pin() and at91_pinctrl_set_conf() asssume absolute pin numbering, so we need to take into account each bank's pin base and convert pin number appropriately. Failing to do so results in any pinmux configuration being applied to pins in bank A. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r--drivers/pinctrl/pinctrl-at91.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index e24c9beae5..34fb0ae62a 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -462,6 +462,8 @@ static int at91_pinctrl_set_state(struct pinctrl_device *pdev, struct device_nod
mux = be32_to_cpu(*list++);
conf = be32_to_cpu(*list++);
+ pin_num += bank_num * MAX_NB_GPIO_PER_BANK;
+
ret = at91_mux_pin(pin_num, mux, conf & PULL_UP);
if (ret) {
dev_err(pdev->dev, "failed to mux pin %d\n", pin_num);