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: Lothar Waßmann <LW@KARO-electronics.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
2a85927c79
commit
8f5260c8c1
|
@ -37,7 +37,7 @@
|
|||
|
||||
#include "devices-imx25.h"
|
||||
|
||||
static struct pad_desc eukrea_mbimxsd_pads[] = {
|
||||
static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {
|
||||
/* LCD */
|
||||
MX25_PAD_LD0__LD0,
|
||||
MX25_PAD_LD1__LD1,
|
||||
|
|
|
@ -46,7 +46,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = {
|
|||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct pad_desc eukrea_cpuimx25_pads[] = {
|
||||
static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
|
||||
/* FEC - RMII */
|
||||
MX25_PAD_FEC_MDC__FEC_MDC,
|
||||
MX25_PAD_FEC_MDIO__FEC_MDIO,
|
||||
|
|
|
@ -47,7 +47,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = {
|
|||
.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_MDIO__FEC_MDIO,
|
||||
MX25_PAD_FEC_TDATA0__FEC_TDATA0,
|
||||
|
|
|
@ -111,7 +111,7 @@ static struct mx3fb_platform_data mx3fb_pdata = {
|
|||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
static struct pad_desc eukrea_mbimxsd_pads[] = {
|
||||
static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {
|
||||
/* LCD */
|
||||
MX35_PAD_LD0__IPU_DISPB_DAT_0,
|
||||
MX35_PAD_LD1__IPU_DISPB_DAT_1,
|
||||
|
|
|
@ -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 */
|
||||
MX35_PAD_CTS1__UART1_CTS,
|
||||
MX35_PAD_RTS1__UART1_RTS,
|
||||
|
|
|
@ -79,7 +79,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
&mx35pdk_flash,
|
||||
};
|
||||
|
||||
static struct pad_desc mx35pdk_pads[] = {
|
||||
static iomux_v3_cfg_t mx35pdk_pads[] = {
|
||||
/* UART1 */
|
||||
MX35_PAD_CTS1__UART1_CTS,
|
||||
MX35_PAD_RTS1__UART1_RTS,
|
||||
|
|
|
@ -140,7 +140,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
&pcm043_flash,
|
||||
};
|
||||
|
||||
static struct pad_desc pcm043_pads[] = {
|
||||
static iomux_v3_cfg_t pcm043_pads[] = {
|
||||
/* UART1 */
|
||||
MX35_PAD_CTS1__UART1_CTS,
|
||||
MX35_PAD_RTS1__UART1_RTS,
|
||||
|
@ -227,8 +227,8 @@ static struct pad_desc pcm043_pads[] = {
|
|||
|
||||
static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97)
|
||||
{
|
||||
struct pad_desc txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
|
||||
struct pad_desc txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
|
||||
iomux_v3_cfg_t txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
|
||||
iomux_v3_cfg_t txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(AC97_GPIO_TXFS, "SSI");
|
||||
|
@ -250,11 +250,11 @@ static void pcm043_ac97_warm_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;
|
||||
struct pad_desc txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
|
||||
struct pad_desc txd_gpio = MX35_PAD_STXD4__GPIO2_28;
|
||||
struct pad_desc txd = MX35_PAD_STXD4__AUDMUX_AUD4_TXD;
|
||||
struct pad_desc reset_gpio = MX35_PAD_SD2_CMD__GPIO2_0;
|
||||
iomux_v3_cfg_t txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
|
||||
iomux_v3_cfg_t txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
|
||||
iomux_v3_cfg_t txd_gpio = MX35_PAD_STXD4__GPIO2_28;
|
||||
iomux_v3_cfg_t txd = MX35_PAD_STXD4__AUDMUX_AUD4_TXD;
|
||||
iomux_v3_cfg_t reset_gpio = MX35_PAD_SD2_CMD__GPIO2_0;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(AC97_GPIO_TXFS, "SSI");
|
||||
|
|
|
@ -113,7 +113,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static struct pad_desc eukrea_cpuimx51_pads[] = {
|
||||
static iomux_v3_cfg_t eukrea_cpuimx51_pads[] = {
|
||||
/* UART1 */
|
||||
MX51_PAD_UART1_RXD__UART1_RXD,
|
||||
MX51_PAD_UART1_TXD__UART1_TXD,
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
#define CPUIMX51SD_GPIO_3_12 IOMUX_PAD(0x57C, 0x194, 3, 0x0, 0, \
|
||||
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 */
|
||||
MX51_PAD_UART1_RXD__UART1_RXD,
|
||||
MX51_PAD_UART1_TXD__UART1_TXD,
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#define EXPIO_PARENT_INT (MXC_INTERNAL_IRQS + GPIO_PORTA + 6)
|
||||
#define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28)
|
||||
|
||||
static struct pad_desc mx51_3ds_pads[] = {
|
||||
static iomux_v3_cfg_t mx51_3ds_pads[] = {
|
||||
/* UART1 */
|
||||
MX51_PAD_UART1_RXD__UART1_RXD,
|
||||
MX51_PAD_UART1_TXD__UART1_TXD,
|
||||
|
|
|
@ -65,7 +65,7 @@ static const struct gpio_keys_platform_data imx_button_data __initconst = {
|
|||
.nbuttons = ARRAY_SIZE(babbage_buttons),
|
||||
};
|
||||
|
||||
static struct pad_desc mx51babbage_pads[] = {
|
||||
static iomux_v3_cfg_t mx51babbage_pads[] = {
|
||||
/* UART1 */
|
||||
MX51_PAD_UART1_RXD__UART1_RXD,
|
||||
MX51_PAD_UART1_TXD__UART1_TXD,
|
||||
|
@ -177,8 +177,8 @@ static struct imxi2c_platform_data babbage_hsi2c_data = {
|
|||
|
||||
static int gpio_usbh1_active(void)
|
||||
{
|
||||
struct pad_desc 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 usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO_1_27;
|
||||
iomux_v3_cfg_t phyreset_gpio = MX51_PAD_EIM_D21__GPIO_2_5;
|
||||
int ret;
|
||||
|
||||
/* Set USBH1_STP to GPIO and toggle it */
|
||||
|
@ -315,8 +315,8 @@ __setup("otg_mode=", babbage_otg_mode);
|
|||
*/
|
||||
static void __init mxc_board_init(void)
|
||||
{
|
||||
struct pad_desc usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP;
|
||||
struct pad_desc power_key = MX51_PAD_EIM_A27__GPIO_2_21;
|
||||
iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP;
|
||||
iomux_v3_cfg_t power_key = MX51_PAD_EIM_A27__GPIO_2_21;
|
||||
|
||||
#if defined(CONFIG_CPU_FREQ_IMX)
|
||||
get_cpu_op = mx51_get_cpu_op;
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
#define MX51_USB_PLL_DIV_24_MHZ 0x01
|
||||
|
||||
static struct pad_desc mx51efikamx_pads[] = {
|
||||
static iomux_v3_cfg_t mx51efikamx_pads[] = {
|
||||
/* UART1 */
|
||||
MX51_PAD_UART1_RXD__UART1_RXD,
|
||||
MX51_PAD_UART1_TXD__UART1_TXD,
|
||||
|
|
|
@ -84,7 +84,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
&mbimx51_leds_gpio,
|
||||
};
|
||||
|
||||
static struct pad_desc mbimx51_pads[] = {
|
||||
static iomux_v3_cfg_t mbimx51_pads[] = {
|
||||
/* UART2 */
|
||||
MX51_PAD_UART2_RXD__UART2_RXD,
|
||||
MX51_PAD_UART2_TXD__UART2_TXD,
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
#define MBIMXSD_GPIO_3_31 IOMUX_PAD(0x554, 0x16C, 3, 0x0, 0, \
|
||||
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 */
|
||||
MX51_PAD_NANDF_D10__GPIO_3_30,
|
||||
/* SWITCH */
|
||||
|
|
|
@ -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_mode:8;
|
||||
unsigned pad_ctrl_ofs:12; /* IOMUXC_SW_PAD_CTRL offset */
|
||||
|
@ -52,7 +52,37 @@ struct pad_desc {
|
|||
unsigned pad_ctrl:17;
|
||||
unsigned select_input_ofs:12; /* IOMUXC_SELECT_INPUT offset */
|
||||
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, \
|
||||
_select_input, _pad_ctrl) \
|
||||
|
@ -107,13 +137,13 @@ struct pad_desc {
|
|||
/*
|
||||
* 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
|
||||
* 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
|
||||
|
|
|
@ -32,26 +32,26 @@
|
|||
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)
|
||||
__raw_writel(pad->mux_mode, base + pad->mux_ctrl_ofs);
|
||||
if (MUX_CTRL_OFS(pad))
|
||||
__raw_writel(MUX_MODE(pad), base + MUX_CTRL_OFS(pad));
|
||||
|
||||
if (pad->select_input_ofs)
|
||||
__raw_writel(pad->select_input,
|
||||
base + pad->select_input_ofs);
|
||||
if (MUX_SELECT_INPUT_OFS(pad))
|
||||
__raw_writel(MUX_SELECT_INPUT(pad),
|
||||
base + MUX_SELECT_INPUT(pad));
|
||||
|
||||
if (!(pad->pad_ctrl & NO_PAD_CTRL) && pad->pad_ctrl_ofs)
|
||||
__raw_writel(pad->pad_ctrl, base + pad->pad_ctrl_ofs);
|
||||
if (!(MUX_PAD_CTRL(pad) & NO_PAD_CTRL) && MUX_PAD_CTRL_OFS(pad))
|
||||
__raw_writel(MUX_PAD_CTRL(pad), base + MUX_PAD_CTRL_OFS(pad));
|
||||
return 0;
|
||||
}
|
||||
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 ret;
|
||||
|
||||
|
|
Loading…
Reference in New Issue