Use the pcs->fmask to make sure that the value is not changing (setting)
bits in areas where it should not.
To avoid situations like this:

pmx_dummy: pinmux@4a100040 {
        compatible = "pinctrl-single";
        reg = <0x4a100040 0x0196>;
        #address-cells = <1>;
        #size-cells = <0>;
        pinctrl-single,register-width = <16>;
        pinctrl-single,function-mask = <0x00ff>;
};

&pmx_dummy {
        pinctrl-names = "default";
        pinctrl-0 = <&board_pins>;

        board_pins: pinmux_board_pins {
                pinctrl-single,pins = <
                        0x6c 0xf0f
                        0x6e 0x10f
                        0x70 0x23f
                        0x72 0xa5f
                >;
        };
};

Signed-off-by: Peter Ujfalusi <peter.ujfal...@ti.com>
---
 drivers/pinctrl/pinctrl-single.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
index 76a4260..3508631 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
@@ -337,7 +337,7 @@ static int pcs_enable(struct pinctrl_dev *pctldev, unsigned 
fselector,
                vals = &func->vals[i];
                val = pcs->read(vals->reg);
                val &= ~pcs->fmask;
-               val |= vals->val;
+               val |= (vals->val & pcs->fmask);
                pcs->write(val, vals->reg);
        }
 
-- 
1.7.12

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to