9
0
Fork 0

i.MX: vf610: Add low-level pin configuration helper

Add low-level pin configuration helper for early boot code, and convert
pinctrl driver to use that code as well.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Andrey Smirnov 2017-01-10 07:09:08 -08:00 committed by Sascha Hauer
parent 094820a63b
commit 5d296b98ea
2 changed files with 21 additions and 5 deletions

View File

@ -223,4 +223,19 @@ enum {
VF610_PAD_DDR_ODT0__DDR_ODT_1 = IOMUX_PAD(0x02d8, 0x02d8, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
};
#define PINCTRL_VF610_MUX_SHIFT 20
static inline void vf610_setup_pad(void __iomem *iomux, iomux_v3_cfg_t pad)
{
iomux_v3_setup_pad(iomux, SHARE_MUX_CONF_REG | ZERO_OFFSET_VALID,
IOMUX_CTRL_OFS(pad),
IOMUX_PAD_CTRL_OFS(pad),
IOMUX_SEL_INPUT_OFS(pad),
IOMUX_MODE(pad) << PINCTRL_VF610_MUX_SHIFT,
IOMUX_PAD_CTRL(pad),
IOMUX_SEL_INPUT(pad));
}
#endif /* __IOMUX_VF610_H__ */

View File

@ -24,9 +24,10 @@
#include <malloc.h>
#include <gpio.h>
#include <mach/iomux-vf610.h>
enum {
PINCTRL_VF610_MUX_LINE_SIZE = 20,
PINCTRL_VF610_MUX_SHIFT = 20,
PINCTRL_VF610_IBE = 1 << 0,
PINCTRL_VF610_OBE = 1 << 1,
@ -60,17 +61,17 @@ static int pinctrl_vf610_set_state(struct pinctrl_device *pdev,
npins = size / PINCTRL_VF610_MUX_LINE_SIZE;
for (i = 0; i < npins; i++) {
iomux_v3_cfg_t pad;
u32 mux_reg = be32_to_cpu(*list++);
u32 input_reg = be32_to_cpu(*list++);
u32 mux_val = be32_to_cpu(*list++);
u32 input_val = be32_to_cpu(*list++);
u32 conf_val = be32_to_cpu(*list++);
writel(mux_val << PINCTRL_VF610_MUX_SHIFT | conf_val,
iomux->base + mux_reg);
pad = IOMUX_PAD(mux_reg, mux_reg, mux_val,
input_reg, input_val, conf_val);
if (input_reg)
writel(input_val, iomux->base + input_reg);
vf610_setup_pad(iomux->base, pad);
}
return 0;