diff options
author | Peng Fan <peng.fan@nxp.com> | 2017-02-21 10:51:23 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:25:38 +0800 |
commit | f2ed9c5a70c69218e83f10a838e2282001daa7d8 (patch) | |
tree | 77f22637c8bbc4a0b28bf6f594cd45b65882565c /drivers/pinctrl | |
parent | a93ce57f151f5a7eb4bd75d9833fe004497fe956 (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')
-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 a1f02a97cdc2..531caf2daf31 100644 --- a/drivers/pinctrl/freescale/pinctrl-memmap.c +++ b/drivers/pinctrl/freescale/pinctrl-memmap.c @@ -45,7 +45,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) { @@ -171,8 +171,7 @@ int imx_pinctrl_parse_pin(struct imx_pinctrl_soc_info *info, const __be32 **list_p, u32 generic_config) { 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; @@ -181,27 +180,27 @@ 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)++)); if (info->generic_pinconf) { /* generic pin config decoded */ pin_memmap->config = generic_config; } else { /* legacy pin config read from devicetree */ - config = be32_to_cpu(*list++); + config = be32_to_cpu(*((*list_p)++)); /* SION bit is in mux register */ if (config & IMX_PAD_SION) diff --git a/drivers/pinctrl/freescale/pinctrl-scu.c b/drivers/pinctrl/freescale/pinctrl-scu.c index 00bc4e6c1c18..7a629baacf22 100644 --- a/drivers/pinctrl/freescale/pinctrl-scu.c +++ b/drivers/pinctrl/freescale/pinctrl-scu.c @@ -87,14 +87,11 @@ int imx_pinctrl_parse_pin(struct imx_pinctrl_soc_info *info, unsigned int *pin_id, struct imx_pin *pin, const __be32 **list_p, u32 generic_config) { - 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); |