| From b1af3fa81d6703136cd5cd48a14055dd1fd1a8e5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 8 Mar 2022 18:09:49 +0800 |
| Subject: pinctrl: mediatek: paris: Fix pingroup pin config state readback |
| |
| From: Chen-Yu Tsai <wenst@chromium.org> |
| |
| [ Upstream commit 54fe55fb384ade630ef20b9a8b8f3b2a89ad97f2 ] |
| |
| mtk_pconf_group_get(), used to read back pingroup pin config state, |
| simply returns a set of configs saved from a previous invocation of |
| mtk_pconf_group_set(). This is an unfiltered, unvalidated set passed |
| in from the pinconf core, which does not match the current hardware |
| state. |
| |
| Since the driver library is designed to have one pin per group, pass |
| through mtk_pconf_group_get() to mtk_pinconf_get(), to read back the |
| current pin config state of the only pin in the group. |
| |
| Also drop the assignment of pin config state to the group. |
| |
| Fixes: 805250982bb5 ("pinctrl: mediatek: add pinctrl-paris that implements the vendor dt-bindings") |
| Signed-off-by: Chen-Yu Tsai <wenst@chromium.org> |
| Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> |
| Link: https://lore.kernel.org/r/20220308100956.2750295-5-wenst@chromium.org |
| Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/pinctrl/mediatek/pinctrl-paris.c | 8 +++----- |
| 1 file changed, 3 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c |
| index e8bfaaccca68..31449514a8c0 100644 |
| --- a/drivers/pinctrl/mediatek/pinctrl-paris.c |
| +++ b/drivers/pinctrl/mediatek/pinctrl-paris.c |
| @@ -646,10 +646,10 @@ static int mtk_pconf_group_get(struct pinctrl_dev *pctldev, unsigned group, |
| unsigned long *config) |
| { |
| struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev); |
| + struct mtk_pinctrl_group *grp = &hw->groups[group]; |
| |
| - *config = hw->groups[group].config; |
| - |
| - return 0; |
| + /* One pin per group only */ |
| + return mtk_pinconf_get(pctldev, grp->pin, config); |
| } |
| |
| static int mtk_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group, |
| @@ -665,8 +665,6 @@ static int mtk_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group, |
| pinconf_to_config_argument(configs[i])); |
| if (ret < 0) |
| return ret; |
| - |
| - grp->config = configs[i]; |
| } |
| |
| return 0; |
| -- |
| 2.34.1 |
| |