]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pinctrl: gemini: Mask and set properly
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 9 Oct 2018 08:11:53 +0000 (10:11 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 10 Oct 2018 11:55:04 +0000 (13:55 +0200)
The code was written under the assumption that the
regmap_update_bits() would mask the bits in the mask and
set the bits in the value.

It missed the points that it will not set bits in the value
unless these are also masked in the mask. Set value bits
that are not in the mask will simply be ignored.

Fixes: 06351d133dea ("pinctrl: add a Gemini SoC pin controller")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-gemini.c

index fa7d998e1d5a86ba1354c6b976acfb32b2beba01..1e484a36ff07eac63008389f8370671bfa377676 100644 (file)
@@ -2184,7 +2184,8 @@ static int gemini_pmx_set_mux(struct pinctrl_dev *pctldev,
                 func->name, grp->name);
 
        regmap_read(pmx->map, GLOBAL_MISC_CTRL, &before);
-       regmap_update_bits(pmx->map, GLOBAL_MISC_CTRL, grp->mask,
+       regmap_update_bits(pmx->map, GLOBAL_MISC_CTRL,
+                          grp->mask | grp->value,
                           grp->value);
        regmap_read(pmx->map, GLOBAL_MISC_CTRL, &after);