Commit 8f5260c8 authored by Lothar Waßmann's avatar Lothar Waßmann Committed by Sascha Hauer

ARM: i.MX IOMUX-V3 replace struct pad_desc with bitmapped cookie

The following patch is a first step to convert the 'struct pad_desc'
to a bitmapped cookie to facilitate adding platform specific pullup or
drive strength definitions to existing pad definitions without need to
rewrite the complete pad def.

The patch wraps 'struct pad_desc' in an opaque data type and
introduces macros to access the individual members.
This patch does not constitute any functional change!
Signed-off-by: default avatarLothar Waßmann <LW@KARO-electronics.de>
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
parent 2a85927c
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "devices-imx25.h" #include "devices-imx25.h"
static struct pad_desc eukrea_mbimxsd_pads[] = { static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {
/* LCD */ /* LCD */
MX25_PAD_LD0__LD0, MX25_PAD_LD0__LD0,
MX25_PAD_LD1__LD1, MX25_PAD_LD1__LD1,
......
...@@ -46,7 +46,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = { ...@@ -46,7 +46,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = {
.flags = IMXUART_HAVE_RTSCTS, .flags = IMXUART_HAVE_RTSCTS,
}; };
static struct pad_desc eukrea_cpuimx25_pads[] = { static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
/* FEC - RMII */ /* FEC - RMII */
MX25_PAD_FEC_MDC__FEC_MDC, MX25_PAD_FEC_MDC__FEC_MDC,
MX25_PAD_FEC_MDIO__FEC_MDIO, MX25_PAD_FEC_MDIO__FEC_MDIO,
......
...@@ -47,7 +47,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = { ...@@ -47,7 +47,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = {
.flags = IMXUART_HAVE_RTSCTS, .flags = IMXUART_HAVE_RTSCTS,
}; };
static struct pad_desc mx25pdk_pads[] = { static iomux_v3_cfg_t mx25pdk_pads[] = {
MX25_PAD_FEC_MDC__FEC_MDC, MX25_PAD_FEC_MDC__FEC_MDC,
MX25_PAD_FEC_MDIO__FEC_MDIO, MX25_PAD_FEC_MDIO__FEC_MDIO,
MX25_PAD_FEC_TDATA0__FEC_TDATA0, MX25_PAD_FEC_TDATA0__FEC_TDATA0,
......
...@@ -111,7 +111,7 @@ static struct mx3fb_platform_data mx3fb_pdata = { ...@@ -111,7 +111,7 @@ static struct mx3fb_platform_data mx3fb_pdata = {
.num_modes = ARRAY_SIZE(fb_modedb), .num_modes = ARRAY_SIZE(fb_modedb),
}; };
static struct pad_desc eukrea_mbimxsd_pads[] = { static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {
/* LCD */ /* LCD */
MX35_PAD_LD0__IPU_DISPB_DAT_0, MX35_PAD_LD0__IPU_DISPB_DAT_0,
MX35_PAD_LD1__IPU_DISPB_DAT_1, MX35_PAD_LD1__IPU_DISPB_DAT_1,
......
...@@ -72,7 +72,7 @@ static struct i2c_board_info eukrea_cpuimx35_i2c_devices[] = { ...@@ -72,7 +72,7 @@ static struct i2c_board_info eukrea_cpuimx35_i2c_devices[] = {
}, },
}; };
static struct pad_desc eukrea_cpuimx35_pads[] = { static iomux_v3_cfg_t eukrea_cpuimx35_pads[] = {
/* UART1 */ /* UART1 */
MX35_PAD_CTS1__UART1_CTS, MX35_PAD_CTS1__UART1_CTS,
MX35_PAD_RTS1__UART1_RTS, MX35_PAD_RTS1__UART1_RTS,
......
...@@ -79,7 +79,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -79,7 +79,7 @@ static struct platform_device *devices[] __initdata = {
&mx35pdk_flash, &mx35pdk_flash,
}; };
static struct pad_desc mx35pdk_pads[] = { static iomux_v3_cfg_t mx35pdk_pads[] = {
/* UART1 */ /* UART1 */
MX35_PAD_CTS1__UART1_CTS, MX35_PAD_CTS1__UART1_CTS,
MX35_PAD_RTS1__UART1_RTS, MX35_PAD_RTS1__UART1_RTS,
......
...@@ -140,7 +140,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -140,7 +140,7 @@ static struct platform_device *devices[] __initdata = {
&pcm043_flash, &pcm043_flash,
}; };
static struct pad_desc pcm043_pads[] = { static iomux_v3_cfg_t pcm043_pads[] = {
/* UART1 */ /* UART1 */
MX35_PAD_CTS1__UART1_CTS, MX35_PAD_CTS1__UART1_CTS,
MX35_PAD_RTS1__UART1_RTS, MX35_PAD_RTS1__UART1_RTS,
...@@ -227,8 +227,8 @@ static struct pad_desc pcm043_pads[] = { ...@@ -227,8 +227,8 @@ static struct pad_desc pcm043_pads[] = {
static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97) static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97)
{ {
struct pad_desc txfs_gpio = MX35_PAD_STXFS4__GPIO2_31; iomux_v3_cfg_t txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
struct pad_desc txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS; iomux_v3_cfg_t txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
int ret; int ret;
ret = gpio_request(AC97_GPIO_TXFS, "SSI"); ret = gpio_request(AC97_GPIO_TXFS, "SSI");
...@@ -250,11 +250,11 @@ static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97) ...@@ -250,11 +250,11 @@ static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97)
static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97) static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97)
{ {
struct pad_desc txfs_gpio = MX35_PAD_STXFS4__GPIO2_31; iomux_v3_cfg_t txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
struct pad_desc txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS; iomux_v3_cfg_t txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
struct pad_desc txd_gpio = MX35_PAD_STXD4__GPIO2_28; iomux_v3_cfg_t txd_gpio = MX35_PAD_STXD4__GPIO2_28;
struct pad_desc txd = MX35_PAD_STXD4__AUDMUX_AUD4_TXD; iomux_v3_cfg_t txd = MX35_PAD_STXD4__AUDMUX_AUD4_TXD;
struct pad_desc reset_gpio = MX35_PAD_SD2_CMD__GPIO2_0; iomux_v3_cfg_t reset_gpio = MX35_PAD_SD2_CMD__GPIO2_0;
int ret; int ret;
ret = gpio_request(AC97_GPIO_TXFS, "SSI"); ret = gpio_request(AC97_GPIO_TXFS, "SSI");
......
...@@ -113,7 +113,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -113,7 +113,7 @@ static struct platform_device *devices[] __initdata = {
#endif #endif
}; };
static struct pad_desc eukrea_cpuimx51_pads[] = { static iomux_v3_cfg_t eukrea_cpuimx51_pads[] = {
/* UART1 */ /* UART1 */
MX51_PAD_UART1_RXD__UART1_RXD, MX51_PAD_UART1_RXD__UART1_RXD,
MX51_PAD_UART1_TXD__UART1_TXD, MX51_PAD_UART1_TXD__UART1_TXD,
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
#define CPUIMX51SD_GPIO_3_12 IOMUX_PAD(0x57C, 0x194, 3, 0x0, 0, \ #define CPUIMX51SD_GPIO_3_12 IOMUX_PAD(0x57C, 0x194, 3, 0x0, 0, \
MX51_PAD_CTRL_1 | PAD_CTL_PUS_22K_UP) MX51_PAD_CTRL_1 | PAD_CTL_PUS_22K_UP)
static struct pad_desc eukrea_cpuimx51sd_pads[] = { static iomux_v3_cfg_t eukrea_cpuimx51sd_pads[] = {
/* UART1 */ /* UART1 */
MX51_PAD_UART1_RXD__UART1_RXD, MX51_PAD_UART1_RXD__UART1_RXD,
MX51_PAD_UART1_TXD__UART1_TXD, MX51_PAD_UART1_TXD__UART1_TXD,
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#define EXPIO_PARENT_INT (MXC_INTERNAL_IRQS + GPIO_PORTA + 6) #define EXPIO_PARENT_INT (MXC_INTERNAL_IRQS + GPIO_PORTA + 6)
#define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28) #define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28)
static struct pad_desc mx51_3ds_pads[] = { static iomux_v3_cfg_t mx51_3ds_pads[] = {
/* UART1 */ /* UART1 */
MX51_PAD_UART1_RXD__UART1_RXD, MX51_PAD_UART1_RXD__UART1_RXD,
MX51_PAD_UART1_TXD__UART1_TXD, MX51_PAD_UART1_TXD__UART1_TXD,
......
...@@ -65,7 +65,7 @@ static const struct gpio_keys_platform_data imx_button_data __initconst = { ...@@ -65,7 +65,7 @@ static const struct gpio_keys_platform_data imx_button_data __initconst = {
.nbuttons = ARRAY_SIZE(babbage_buttons), .nbuttons = ARRAY_SIZE(babbage_buttons),
}; };
static struct pad_desc mx51babbage_pads[] = { static iomux_v3_cfg_t mx51babbage_pads[] = {
/* UART1 */ /* UART1 */
MX51_PAD_UART1_RXD__UART1_RXD, MX51_PAD_UART1_RXD__UART1_RXD,
MX51_PAD_UART1_TXD__UART1_TXD, MX51_PAD_UART1_TXD__UART1_TXD,
...@@ -177,8 +177,8 @@ static struct imxi2c_platform_data babbage_hsi2c_data = { ...@@ -177,8 +177,8 @@ static struct imxi2c_platform_data babbage_hsi2c_data = {
static int gpio_usbh1_active(void) static int gpio_usbh1_active(void)
{ {
struct pad_desc usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO_1_27; iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO_1_27;
struct pad_desc phyreset_gpio = MX51_PAD_EIM_D21__GPIO_2_5; iomux_v3_cfg_t phyreset_gpio = MX51_PAD_EIM_D21__GPIO_2_5;
int ret; int ret;
/* Set USBH1_STP to GPIO and toggle it */ /* Set USBH1_STP to GPIO and toggle it */
...@@ -315,8 +315,8 @@ __setup("otg_mode=", babbage_otg_mode); ...@@ -315,8 +315,8 @@ __setup("otg_mode=", babbage_otg_mode);
*/ */
static void __init mxc_board_init(void) static void __init mxc_board_init(void)
{ {
struct pad_desc usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP; iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP;
struct pad_desc power_key = MX51_PAD_EIM_A27__GPIO_2_21; iomux_v3_cfg_t power_key = MX51_PAD_EIM_A27__GPIO_2_21;
#if defined(CONFIG_CPU_FREQ_IMX) #if defined(CONFIG_CPU_FREQ_IMX)
get_cpu_op = mx51_get_cpu_op; get_cpu_op = mx51_get_cpu_op;
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#define MX51_USB_PLL_DIV_24_MHZ 0x01 #define MX51_USB_PLL_DIV_24_MHZ 0x01
static struct pad_desc mx51efikamx_pads[] = { static iomux_v3_cfg_t mx51efikamx_pads[] = {
/* UART1 */ /* UART1 */
MX51_PAD_UART1_RXD__UART1_RXD, MX51_PAD_UART1_RXD__UART1_RXD,
MX51_PAD_UART1_TXD__UART1_TXD, MX51_PAD_UART1_TXD__UART1_TXD,
......
...@@ -84,7 +84,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -84,7 +84,7 @@ static struct platform_device *devices[] __initdata = {
&mbimx51_leds_gpio, &mbimx51_leds_gpio,
}; };
static struct pad_desc mbimx51_pads[] = { static iomux_v3_cfg_t mbimx51_pads[] = {
/* UART2 */ /* UART2 */
MX51_PAD_UART2_RXD__UART2_RXD, MX51_PAD_UART2_RXD__UART2_RXD,
MX51_PAD_UART2_TXD__UART2_TXD, MX51_PAD_UART2_TXD__UART2_TXD,
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
#define MBIMXSD_GPIO_3_31 IOMUX_PAD(0x554, 0x16C, 3, 0x0, 0, \ #define MBIMXSD_GPIO_3_31 IOMUX_PAD(0x554, 0x16C, 3, 0x0, 0, \
MX51_PAD_CTRL_1 | PAD_CTL_PUS_22K_UP) MX51_PAD_CTRL_1 | PAD_CTL_PUS_22K_UP)
static struct pad_desc eukrea_mbimxsd_pads[] = { static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {
/* LED */ /* LED */
MX51_PAD_NANDF_D10__GPIO_3_30, MX51_PAD_NANDF_D10__GPIO_3_30,
/* SWITCH */ /* SWITCH */
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
* *
*/ */
struct pad_desc { typedef struct deprecated_pad_desc {
unsigned mux_ctrl_ofs:12; /* IOMUXC_SW_MUX_CTL_PAD offset */ unsigned mux_ctrl_ofs:12; /* IOMUXC_SW_MUX_CTL_PAD offset */
unsigned mux_mode:8; unsigned mux_mode:8;
unsigned pad_ctrl_ofs:12; /* IOMUXC_SW_PAD_CTRL offset */ unsigned pad_ctrl_ofs:12; /* IOMUXC_SW_PAD_CTRL offset */
...@@ -52,7 +52,37 @@ struct pad_desc { ...@@ -52,7 +52,37 @@ struct pad_desc {
unsigned pad_ctrl:17; unsigned pad_ctrl:17;
unsigned select_input_ofs:12; /* IOMUXC_SELECT_INPUT offset */ unsigned select_input_ofs:12; /* IOMUXC_SELECT_INPUT offset */
unsigned select_input:3; unsigned select_input:3;
}; } iomux_v3_cfg_t;
static inline unsigned int MUX_CTRL_OFS(iomux_v3_cfg_t *pad)
{
return pad->mux_ctrl_ofs;
}
static inline unsigned int MUX_MODE(iomux_v3_cfg_t *pad)
{
return pad->mux_mode;
}
static inline unsigned int MUX_SELECT_INPUT_OFS(iomux_v3_cfg_t *pad)
{
return pad->select_input_ofs;
}
static inline unsigned int MUX_SELECT_INPUT(iomux_v3_cfg_t *pad)
{
return pad->select_input;
}
static inline unsigned int MUX_PAD_CTRL_OFS(iomux_v3_cfg_t *pad)
{
return pad->pad_ctrl_ofs;
}
static inline unsigned int MUX_PAD_CTRL(iomux_v3_cfg_t *pad)
{
return pad->pad_ctrl;
}
#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _select_input_ofs, \ #define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _select_input_ofs, \
_select_input, _pad_ctrl) \ _select_input, _pad_ctrl) \
...@@ -107,13 +137,13 @@ struct pad_desc { ...@@ -107,13 +137,13 @@ struct pad_desc {
/* /*
* setups a single pad in the iomuxer * setups a single pad in the iomuxer
*/ */
int mxc_iomux_v3_setup_pad(struct pad_desc *pad); int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t *pad);
/* /*
* setups mutliple pads * setups mutliple pads
* convenient way to call the above function with tables * convenient way to call the above function with tables
*/ */
int mxc_iomux_v3_setup_multiple_pads(struct pad_desc *pad_list, unsigned count); int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count);
/* /*
* Initialise the iomux controller * Initialise the iomux controller
......
...@@ -32,26 +32,26 @@ ...@@ -32,26 +32,26 @@
static void __iomem *base; static void __iomem *base;
/* /*
* setups a single pad in the iomuxer * configures a single pad in the iomuxer
*/ */
int mxc_iomux_v3_setup_pad(struct pad_desc *pad) int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t *pad)
{ {
if (pad->mux_ctrl_ofs) if (MUX_CTRL_OFS(pad))
__raw_writel(pad->mux_mode, base + pad->mux_ctrl_ofs); __raw_writel(MUX_MODE(pad), base + MUX_CTRL_OFS(pad));
if (pad->select_input_ofs) if (MUX_SELECT_INPUT_OFS(pad))
__raw_writel(pad->select_input, __raw_writel(MUX_SELECT_INPUT(pad),
base + pad->select_input_ofs); base + MUX_SELECT_INPUT(pad));
if (!(pad->pad_ctrl & NO_PAD_CTRL) && pad->pad_ctrl_ofs) if (!(MUX_PAD_CTRL(pad) & NO_PAD_CTRL) && MUX_PAD_CTRL_OFS(pad))
__raw_writel(pad->pad_ctrl, base + pad->pad_ctrl_ofs); __raw_writel(MUX_PAD_CTRL(pad), base + MUX_PAD_CTRL_OFS(pad));
return 0; return 0;
} }
EXPORT_SYMBOL(mxc_iomux_v3_setup_pad); EXPORT_SYMBOL(mxc_iomux_v3_setup_pad);
int mxc_iomux_v3_setup_multiple_pads(struct pad_desc *pad_list, unsigned count) int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count)
{ {
struct pad_desc *p = pad_list; iomux_v3_cfg_t *p = pad_list;
int i; int i;
int ret; int ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment