diff options
author | Peng Fan <peng.fan@nxp.com> | 2017-02-21 10:51:23 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:41:33 +0300 |
commit | 0a85ec7e4adfe4754645a53facdd8f5411846b58 (patch) | |
tree | fc2e03736e8097c93caa42e0d73ff851eec3f4b1 /drivers/pinctrl/freescale | |
parent | b1feb8be96a0b9de3348859db9091105a4066baf (diff) |
MLK-14012 pinctrl: imx: fix imx_pinctrl_parse_pin
list is a local variable, each time imx_pinctrl_parse_pin is
invoked, list points to the first pin. Directly use list_p in
imx_pinctrl_parse_pin to fix it.
When splitting pinctrl-imx.c, two pieces code is correctly moved.
- In imx_pmx_set_one_pin, when mux_reg is -1, need to return 0 to
let the caller continue the loop.
- In imx_pinctrl_parse_pin, need to use (mux_reg != -1) when calculating
the pin_id.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Diffstat (limited to 'drivers/pinctrl/freescale')
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-memmap.c | 17 | ||||
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-scu.c | 7 |
2 files changed, 10 insertions, 14 deletions
diff --git a/drivers/pinctrl/freescale/pinctrl-memmap.c b/drivers/pinctrl/freescale/pinctrl-memmap.c index a531de71e492..038a002249bd 100644 --- a/drivers/pinctrl/freescale/pinctrl-memmap.c +++ b/drivers/pinctrl/freescale/pinctrl-memmap.c @@ -46,7 +46,7 @@ int imx_pmx_set_one_pin(struct imx_pinctrl *ipctl, struct imx_pin *pin) if (pin_reg->mux_reg == -1) { dev_err(ipctl->dev, "Pin(%s) does not support mux function\n", info->pins[pin_id].name); - return -EINVAL; + return 0; } if (info->flags & SHARE_MUX_CONF_REG) { @@ -277,8 +277,7 @@ int imx_pinctrl_parse_pin(struct imx_pinctrl_soc_info *info, const __be32 **list_p) { struct imx_pin_memmap *pin_memmap = &pin->pin_conf.pin_memmap; - const __be32 *list = *list_p; - u32 mux_reg = be32_to_cpu(*list++); + u32 mux_reg = be32_to_cpu(*((*list_p)++)); u32 conf_reg; u32 config; unsigned int pin_id; @@ -287,23 +286,23 @@ int imx_pinctrl_parse_pin(struct imx_pinctrl_soc_info *info, if (info->flags & SHARE_MUX_CONF_REG) { conf_reg = mux_reg; } else { - conf_reg = be32_to_cpu(*list++); + conf_reg = be32_to_cpu(*((*list_p)++)); if (!conf_reg) conf_reg = -1; } - pin_id = mux_reg ? mux_reg / 4 : conf_reg / 4; + pin_id = (mux_reg != -1) ? mux_reg / 4 : conf_reg / 4; pin_reg = &info->pin_regs[pin_id]; pin->pin = pin_id; *grp_pin_id = pin_id; pin_reg->mux_reg = mux_reg; pin_reg->conf_reg = conf_reg; - pin_memmap->input_reg = be32_to_cpu(*list++); - pin_memmap->mux_mode = be32_to_cpu(*list++); - pin_memmap->input_val = be32_to_cpu(*list++); + pin_memmap->input_reg = be32_to_cpu(*((*list_p)++)); + pin_memmap->mux_mode = be32_to_cpu(*((*list_p)++)); + pin_memmap->input_val = be32_to_cpu((*(*list_p)++)); /* SION bit is in mux register */ - config = be32_to_cpu(*list++); + config = be32_to_cpu(*((*list_p)++)); if (config & IMX_PAD_SION) pin_memmap->mux_mode |= IOMUXC_CONFIG_SION; pin_memmap->config = config & ~IMX_PAD_SION; diff --git a/drivers/pinctrl/freescale/pinctrl-scu.c b/drivers/pinctrl/freescale/pinctrl-scu.c index 23a0c875e2e8..c74a1ca1ae85 100644 --- a/drivers/pinctrl/freescale/pinctrl-scu.c +++ b/drivers/pinctrl/freescale/pinctrl-scu.c @@ -105,14 +105,11 @@ int imx_pinctrl_parse_pin(struct imx_pinctrl_soc_info *info, unsigned int *pin_id, struct imx_pin *pin, const __be32 **list_p) { - const __be32 *list = *list_p; struct imx_pin_scu *pin_scu = &pin->pin_conf.pin_scu; - pin->pin = be32_to_cpu(*list++); + pin->pin = be32_to_cpu(*((*list_p)++)); *pin_id = pin->pin; - pin_scu->all = be32_to_cpu(*list++); - - *list_p = list; + pin_scu->all = be32_to_cpu(*((*list_p)++)); dev_dbg(info->dev, "%s: 0x%x", info->pins[pin->pin].name, pin_scu->all); |