summaryrefslogtreecommitdiff
path: root/drivers/pinctrl/freescale
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2017-02-21 10:51:23 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commit0a85ec7e4adfe4754645a53facdd8f5411846b58 (patch)
treefc2e03736e8097c93caa42e0d73ff851eec3f4b1 /drivers/pinctrl/freescale
parentb1feb8be96a0b9de3348859db9091105a4066baf (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.c17
-rw-r--r--drivers/pinctrl/freescale/pinctrl-scu.c7
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);