Skip to content

Commit

Permalink
i.MX31: fix mxc_iomux_set_pad()
Browse files Browse the repository at this point in the history
mxc_iomux_set_pad() is buggy on i.MX31 - it calculates the register and
the offset therein wrongly. Fix it.

Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
  • Loading branch information
Guennadi Liakhovetski authored and Sascha Hauer committed Dec 16, 2008
1 parent 1d5aa17 commit 4a7b98d
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions arch/arm/mach-mx3/iomux.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,18 @@ void mxc_iomux_set_pad(enum iomux_pins pin, u32 config)
u32 field, l;
void __iomem *reg;

reg = IOMUXSW_PAD_CTL + (pin + 2) / 3;
pin &= IOMUX_PADNUM_MASK;
reg = IOMUXSW_PAD_CTL + (pin + 2) / 3 * 4;
field = (pin + 2) % 3;

pr_debug("%s: reg offset = 0x%x field = %d\n",
pr_debug("%s: reg offset = 0x%x, field = %d\n",
__func__, (pin + 2) / 3, field);

spin_lock(&gpio_mux_lock);

l = __raw_readl(reg);
l &= ~(0x1ff << (field * 9));
l |= config << (field * 9);
l &= ~(0x1ff << (field * 10));
l |= config << (field * 10);
__raw_writel(l, reg);

spin_unlock(&gpio_mux_lock);
Expand Down

0 comments on commit 4a7b98d

Please sign in to comment.