mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-27 05:30:56 +07:00
pcm038: Setup all iomux pins at once
Also, remove usage of set_irq_type after request_irq. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
60c24dc79f
commit
f231ea441a
@ -39,6 +39,63 @@
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
static int pcm038_pins[] = {
|
||||
/* UART1 */
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_RTS,
|
||||
/* UART2 */
|
||||
PE3_PF_UART2_CTS,
|
||||
PE4_PF_UART2_RTS,
|
||||
PE6_PF_UART2_TXD,
|
||||
PE7_PF_UART2_RXD,
|
||||
/* UART3 */
|
||||
PE8_PF_UART3_TXD,
|
||||
PE9_PF_UART3_RXD,
|
||||
PE10_PF_UART3_CTS,
|
||||
PE11_PF_UART3_RTS,
|
||||
/* FEC */
|
||||
PD0_AIN_FEC_TXD0,
|
||||
PD1_AIN_FEC_TXD1,
|
||||
PD2_AIN_FEC_TXD2,
|
||||
PD3_AIN_FEC_TXD3,
|
||||
PD4_AOUT_FEC_RX_ER,
|
||||
PD5_AOUT_FEC_RXD1,
|
||||
PD6_AOUT_FEC_RXD2,
|
||||
PD7_AOUT_FEC_RXD3,
|
||||
PD8_AF_FEC_MDIO,
|
||||
PD9_AIN_FEC_MDC,
|
||||
PD10_AOUT_FEC_CRS,
|
||||
PD11_AOUT_FEC_TX_CLK,
|
||||
PD12_AOUT_FEC_RXD0,
|
||||
PD13_AOUT_FEC_RX_DV,
|
||||
PD14_AOUT_FEC_RX_CLK,
|
||||
PD15_AOUT_FEC_COL,
|
||||
PD16_AIN_FEC_TX_ER,
|
||||
PF23_AIN_FEC_TX_EN,
|
||||
/* I2C2 */
|
||||
PC5_PF_I2C2_SDA,
|
||||
PC6_PF_I2C2_SCL,
|
||||
/* SPI1 */
|
||||
PD25_PF_CSPI1_RDY,
|
||||
PD27_PF_CSPI1_SS1,
|
||||
PD28_PF_CSPI1_SS0,
|
||||
PD29_PF_CSPI1_SCLK,
|
||||
PD30_PF_CSPI1_MISO,
|
||||
PD31_PF_CSPI1_MOSI,
|
||||
/* SSI1 */
|
||||
PC20_PF_SSI1_FS,
|
||||
PC21_PF_SSI1_RXD,
|
||||
PC22_PF_SSI1_TXD,
|
||||
PC23_PF_SSI1_CLK,
|
||||
/* SSI4 */
|
||||
PC16_PF_SSI4_FS,
|
||||
PC17_PF_SSI4_RXD,
|
||||
PC18_PF_SSI4_TXD,
|
||||
PC19_PF_SSI4_CLK,
|
||||
};
|
||||
|
||||
/*
|
||||
* Phytec's PCM038 comes with 2MiB battery buffered SRAM,
|
||||
* 16 bit width
|
||||
@ -88,104 +145,16 @@ static struct platform_device pcm038_nor_mtd_device = {
|
||||
.resource = &pcm038_flash_resource,
|
||||
};
|
||||
|
||||
static int mxc_uart0_pins[] = {
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_RTS
|
||||
};
|
||||
|
||||
static int uart_mxc_port0_init(struct platform_device *pdev)
|
||||
{
|
||||
return mxc_gpio_setup_multiple_pins(mxc_uart0_pins,
|
||||
ARRAY_SIZE(mxc_uart0_pins), "UART0");
|
||||
}
|
||||
|
||||
static void uart_mxc_port0_exit(struct platform_device *pdev)
|
||||
{
|
||||
mxc_gpio_release_multiple_pins(mxc_uart0_pins,
|
||||
ARRAY_SIZE(mxc_uart0_pins));
|
||||
}
|
||||
|
||||
static int mxc_uart1_pins[] = {
|
||||
PE3_PF_UART2_CTS,
|
||||
PE4_PF_UART2_RTS,
|
||||
PE6_PF_UART2_TXD,
|
||||
PE7_PF_UART2_RXD
|
||||
};
|
||||
|
||||
static int uart_mxc_port1_init(struct platform_device *pdev)
|
||||
{
|
||||
return mxc_gpio_setup_multiple_pins(mxc_uart1_pins,
|
||||
ARRAY_SIZE(mxc_uart1_pins), "UART1");
|
||||
}
|
||||
|
||||
static void uart_mxc_port1_exit(struct platform_device *pdev)
|
||||
{
|
||||
mxc_gpio_release_multiple_pins(mxc_uart1_pins,
|
||||
ARRAY_SIZE(mxc_uart1_pins));
|
||||
}
|
||||
|
||||
static int mxc_uart2_pins[] = { PE8_PF_UART3_TXD,
|
||||
PE9_PF_UART3_RXD,
|
||||
PE10_PF_UART3_CTS,
|
||||
PE11_PF_UART3_RTS };
|
||||
|
||||
static int uart_mxc_port2_init(struct platform_device *pdev)
|
||||
{
|
||||
return mxc_gpio_setup_multiple_pins(mxc_uart2_pins,
|
||||
ARRAY_SIZE(mxc_uart2_pins), "UART2");
|
||||
}
|
||||
|
||||
static void uart_mxc_port2_exit(struct platform_device *pdev)
|
||||
{
|
||||
mxc_gpio_release_multiple_pins(mxc_uart2_pins,
|
||||
ARRAY_SIZE(mxc_uart2_pins));
|
||||
}
|
||||
|
||||
static struct imxuart_platform_data uart_pdata[] = {
|
||||
{
|
||||
.init = uart_mxc_port0_init,
|
||||
.exit = uart_mxc_port0_exit,
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
}, {
|
||||
.init = uart_mxc_port1_init,
|
||||
.exit = uart_mxc_port1_exit,
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
}, {
|
||||
.init = uart_mxc_port2_init,
|
||||
.exit = uart_mxc_port2_exit,
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
},
|
||||
};
|
||||
|
||||
static int mxc_fec_pins[] = {
|
||||
PD0_AIN_FEC_TXD0,
|
||||
PD1_AIN_FEC_TXD1,
|
||||
PD2_AIN_FEC_TXD2,
|
||||
PD3_AIN_FEC_TXD3,
|
||||
PD4_AOUT_FEC_RX_ER,
|
||||
PD5_AOUT_FEC_RXD1,
|
||||
PD6_AOUT_FEC_RXD2,
|
||||
PD7_AOUT_FEC_RXD3,
|
||||
PD8_AF_FEC_MDIO,
|
||||
PD9_AIN_FEC_MDC,
|
||||
PD10_AOUT_FEC_CRS,
|
||||
PD11_AOUT_FEC_TX_CLK,
|
||||
PD12_AOUT_FEC_RXD0,
|
||||
PD13_AOUT_FEC_RX_DV,
|
||||
PD14_AOUT_FEC_RX_CLK,
|
||||
PD15_AOUT_FEC_COL,
|
||||
PD16_AIN_FEC_TX_ER,
|
||||
PF23_AIN_FEC_TX_EN
|
||||
};
|
||||
|
||||
static void gpio_fec_active(void)
|
||||
{
|
||||
mxc_gpio_setup_multiple_pins(mxc_fec_pins,
|
||||
ARRAY_SIZE(mxc_fec_pins), "FEC");
|
||||
}
|
||||
|
||||
static struct mxc_nand_platform_data pcm038_nand_board_info = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
@ -208,26 +177,8 @@ static void __init pcm038_init_sram(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_I2C_IMX
|
||||
static int mxc_i2c1_pins[] = {
|
||||
PC5_PF_I2C2_SDA,
|
||||
PC6_PF_I2C2_SCL
|
||||
};
|
||||
|
||||
static int pcm038_i2c_1_init(struct device *dev)
|
||||
{
|
||||
return mxc_gpio_setup_multiple_pins(mxc_i2c1_pins, ARRAY_SIZE(mxc_i2c1_pins),
|
||||
"I2C1");
|
||||
}
|
||||
|
||||
static void pcm038_i2c_1_exit(struct device *dev)
|
||||
{
|
||||
mxc_gpio_release_multiple_pins(mxc_i2c1_pins, ARRAY_SIZE(mxc_i2c1_pins));
|
||||
}
|
||||
|
||||
static struct imxi2c_platform_data pcm038_i2c_1_data = {
|
||||
.bitrate = 100000,
|
||||
.init = pcm038_i2c_1_init,
|
||||
.exit = pcm038_i2c_1_exit,
|
||||
};
|
||||
|
||||
static struct at24_platform_data board_eeprom = {
|
||||
@ -254,7 +205,9 @@ static struct i2c_board_info pcm038_i2c_devices[] = {
|
||||
|
||||
static void __init pcm038_init(void)
|
||||
{
|
||||
gpio_fec_active();
|
||||
mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins),
|
||||
"PCM038");
|
||||
|
||||
pcm038_init_sram();
|
||||
|
||||
mxc_register_device(&mxc_uart_device0, &uart_pdata[0]);
|
||||
|
@ -30,57 +30,93 @@
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
static int pcm970_sdhc2_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(GPIO_PORTC + 28);
|
||||
}
|
||||
|
||||
static int pcm970_sdhc2_pins[] = {
|
||||
static int pcm970_pins[] = {
|
||||
/* SDHC */
|
||||
PB4_PF_SD2_D0,
|
||||
PB5_PF_SD2_D1,
|
||||
PB6_PF_SD2_D2,
|
||||
PB7_PF_SD2_D3,
|
||||
PB8_PF_SD2_CMD,
|
||||
PB9_PF_SD2_CLK,
|
||||
GPIO_PORTC | 28 | GPIO_GPIO | GPIO_IN, /* card detect */
|
||||
/* display */
|
||||
PA5_PF_LSCLK,
|
||||
PA6_PF_LD0,
|
||||
PA7_PF_LD1,
|
||||
PA8_PF_LD2,
|
||||
PA9_PF_LD3,
|
||||
PA10_PF_LD4,
|
||||
PA11_PF_LD5,
|
||||
PA12_PF_LD6,
|
||||
PA13_PF_LD7,
|
||||
PA14_PF_LD8,
|
||||
PA15_PF_LD9,
|
||||
PA16_PF_LD10,
|
||||
PA17_PF_LD11,
|
||||
PA18_PF_LD12,
|
||||
PA19_PF_LD13,
|
||||
PA20_PF_LD14,
|
||||
PA21_PF_LD15,
|
||||
PA22_PF_LD16,
|
||||
PA23_PF_LD17,
|
||||
PA24_PF_REV,
|
||||
PA25_PF_CLS,
|
||||
PA26_PF_PS,
|
||||
PA27_PF_SPL_SPR,
|
||||
PA28_PF_HSYNC,
|
||||
PA29_PF_VSYNC,
|
||||
PA30_PF_CONTRAST,
|
||||
PA31_PF_OE_ACD,
|
||||
/*
|
||||
* it seems the data line misses a pullup, so we must enable
|
||||
* the internal pullup as a local workaround
|
||||
*/
|
||||
PD17_PF_I2C_DATA | GPIO_PUEN,
|
||||
PD18_PF_I2C_CLK,
|
||||
/* Camera */
|
||||
PB10_PF_CSI_D0,
|
||||
PB11_PF_CSI_D1,
|
||||
PB12_PF_CSI_D2,
|
||||
PB13_PF_CSI_D3,
|
||||
PB14_PF_CSI_D4,
|
||||
PB15_PF_CSI_MCLK,
|
||||
PB16_PF_CSI_PIXCLK,
|
||||
PB17_PF_CSI_D5,
|
||||
PB18_PF_CSI_D6,
|
||||
PB19_PF_CSI_D7,
|
||||
PB20_PF_CSI_VSYNC,
|
||||
PB21_PF_CSI_HSYNC,
|
||||
};
|
||||
|
||||
static int pcm970_sdhc2_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(GPIO_PORTC + 28);
|
||||
}
|
||||
|
||||
static int pcm970_sdhc2_init(struct device *dev, irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = mxc_gpio_setup_multiple_pins(pcm970_sdhc2_pins,
|
||||
ARRAY_SIZE(pcm970_sdhc2_pins), "sdhc2");
|
||||
if(ret)
|
||||
return ret;
|
||||
|
||||
ret = request_irq(IRQ_GPIOC(29), detect_irq, 0,
|
||||
ret = request_irq(IRQ_GPIOC(29), detect_irq, IRQF_TRIGGER_FALLING,
|
||||
"imx-mmc-detect", data);
|
||||
if (ret)
|
||||
goto out_release_gpio;
|
||||
|
||||
set_irq_type(IRQ_GPIOC(29), IRQF_TRIGGER_FALLING);
|
||||
return ret;
|
||||
|
||||
ret = gpio_request(GPIO_PORTC + 28, "imx-mmc-ro");
|
||||
if (ret)
|
||||
goto out_release_gpio;
|
||||
if (ret) {
|
||||
free_irq(IRQ_GPIOC(29), data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
mxc_gpio_mode((GPIO_PORTC | 28) | GPIO_GPIO | GPIO_IN);
|
||||
gpio_direction_input(GPIO_PORTC + 28);
|
||||
|
||||
return 0;
|
||||
|
||||
out_release_gpio:
|
||||
mxc_gpio_release_multiple_pins(pcm970_sdhc2_pins,
|
||||
ARRAY_SIZE(pcm970_sdhc2_pins));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void pcm970_sdhc2_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(IRQ_GPIOC(29), data);
|
||||
gpio_free(GPIO_PORTC + 28);
|
||||
mxc_gpio_release_multiple_pins(pcm970_sdhc2_pins,
|
||||
ARRAY_SIZE(pcm970_sdhc2_pins));
|
||||
}
|
||||
|
||||
static struct imxmmc_platform_data sdhc_pdata = {
|
||||
@ -89,27 +125,6 @@ static struct imxmmc_platform_data sdhc_pdata = {
|
||||
.exit = pcm970_sdhc2_exit,
|
||||
};
|
||||
|
||||
static int mxc_fb_pins[] = {
|
||||
PA5_PF_LSCLK, PA6_PF_LD0, PA7_PF_LD1, PA8_PF_LD2,
|
||||
PA9_PF_LD3, PA10_PF_LD4, PA11_PF_LD5, PA12_PF_LD6,
|
||||
PA13_PF_LD7, PA14_PF_LD8, PA15_PF_LD9, PA16_PF_LD10,
|
||||
PA17_PF_LD11, PA18_PF_LD12, PA19_PF_LD13, PA20_PF_LD14,
|
||||
PA21_PF_LD15, PA22_PF_LD16, PA23_PF_LD17, PA24_PF_REV,
|
||||
PA25_PF_CLS, PA26_PF_PS, PA27_PF_SPL_SPR, PA28_PF_HSYNC,
|
||||
PA29_PF_VSYNC, PA30_PF_CONTRAST, PA31_PF_OE_ACD
|
||||
};
|
||||
|
||||
static int pcm038_fb_init(struct platform_device *pdev)
|
||||
{
|
||||
return mxc_gpio_setup_multiple_pins(mxc_fb_pins,
|
||||
ARRAY_SIZE(mxc_fb_pins), "FB");
|
||||
}
|
||||
|
||||
static void pcm038_fb_exit(struct platform_device *pdev)
|
||||
{
|
||||
mxc_gpio_release_multiple_pins(mxc_fb_pins, ARRAY_SIZE(mxc_fb_pins));
|
||||
}
|
||||
|
||||
/*
|
||||
* Connected is a portrait Sharp-QVGA display
|
||||
* of type: LQ035Q7DH06
|
||||
@ -142,9 +157,6 @@ static struct imx_fb_platform_data pcm038_fb_data = {
|
||||
.pwmr = 0x00A903FF,
|
||||
.lscr1 = 0x00120300,
|
||||
.dmacr = 0x00020010,
|
||||
|
||||
.init = pcm038_fb_init,
|
||||
.exit = pcm038_fb_exit,
|
||||
};
|
||||
|
||||
/*
|
||||
@ -155,6 +167,9 @@ static struct imx_fb_platform_data pcm038_fb_data = {
|
||||
*/
|
||||
void __init pcm970_baseboard_init(void)
|
||||
{
|
||||
mxc_gpio_setup_multiple_pins(pcm970_pins, ARRAY_SIZE(pcm970_pins),
|
||||
"PCM970");
|
||||
|
||||
mxc_register_device(&mxc_fb_device, &pcm038_fb_data);
|
||||
mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user