pinctrl: imx: Fix select input issue
authorYe Li <ye.li@nxp.com>
Fri, 4 Jan 2019 09:08:26 +0000 (09:08 +0000)
committerStefano Babic <sbabic@denx.de>
Mon, 28 Jan 2019 19:35:47 +0000 (20:35 +0100)
The pinctrl supports to set any bit in input register on iMX6 if
the MSB of input value is 0xff. But the driver uses signed int for
input value, so when executing the codes below, it won't meet.
Because this is arithmetic right shift.

    if (input_val >> 24 == 0xff)

Fix the issue by changing the input_val, config_val and mux_mode to u32.

Signed-off-by: Ye Li <ye.li@nxp.com>
Reviewed-by: Fugang Duan <fugang.duan@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
drivers/pinctrl/nxp/pinctrl-imx.c

index 04ea82aba5b347e2e779bb523f7d3e875a2b9eaf..0c9d15cb0c9a79f763776640df493e64f0c1f61a 100644 (file)
@@ -22,7 +22,8 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config)
        const struct fdt_property *prop;
        u32 *pin_data;
        int npins, size, pin_size;
-       int mux_reg, conf_reg, input_reg, input_val, mux_mode, config_val;
+       int mux_reg, conf_reg, input_reg;
+       u32 input_val, mux_mode, config_val;
        u32 mux_shift = info->mux_mask ? ffs(info->mux_mask) - 1 : 0;
        int i, j = 0;