Commit 9d3d945a authored by Uwe Kleine-König's avatar Uwe Kleine-König

ARM: imx: dynamically register mxc-mmc devices

... plus a trivial simplification of mx21ads_sdhc_init()
Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
parent c194daad
...@@ -73,6 +73,7 @@ config MACH_MX21ADS ...@@ -73,6 +73,7 @@ config MACH_MX21ADS
bool "MX21ADS platform" bool "MX21ADS platform"
select IMX_HAVE_PLATFORM_IMX_FB select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
help help
Include support for MX21ADS platform. This includes specific Include support for MX21ADS platform. This includes specific
...@@ -89,6 +90,7 @@ config MACH_MX27ADS ...@@ -89,6 +90,7 @@ config MACH_MX27ADS
select IMX_HAVE_PLATFORM_IMX_FB select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_MXC_W1 select IMX_HAVE_PLATFORM_MXC_W1
help help
...@@ -116,6 +118,7 @@ choice ...@@ -116,6 +118,7 @@ choice
config MACH_PCM970_BASEBOARD config MACH_PCM970_BASEBOARD
bool "PHYTEC PCM970 development board" bool "PHYTEC PCM970 development board"
select IMX_HAVE_PLATFORM_IMX_FB select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_MXC_MMC
help help
This adds board specific devices that can be found on Phytec's This adds board specific devices that can be found on Phytec's
PCM970 evaluation board. PCM970 evaluation board.
...@@ -137,6 +140,7 @@ config MACH_CPUIMX27 ...@@ -137,6 +140,7 @@ config MACH_CPUIMX27
config MACH_EUKREA_CPUIMX27_USESDHC2 config MACH_EUKREA_CPUIMX27_USESDHC2
bool "CPUIMX27 integrates SDHC2 module" bool "CPUIMX27 integrates SDHC2 module"
depends on MACH_CPUIMX27 depends on MACH_CPUIMX27
select IMX_HAVE_PLATFORM_MXC_MMC
help help
This adds support for the internal SDHC2 used on CPUIMX27 This adds support for the internal SDHC2 used on CPUIMX27
for wifi or eMMC. for wifi or eMMC.
...@@ -158,6 +162,7 @@ config MACH_EUKREA_MBIMX27_BASEBOARD ...@@ -158,6 +162,7 @@ config MACH_EUKREA_MBIMX27_BASEBOARD
select IMX_HAVE_PLATFORM_IMX_FB select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_IMX_SSI select IMX_HAVE_PLATFORM_IMX_SSI
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_SPI_IMX select IMX_HAVE_PLATFORM_SPI_IMX
help help
This adds board specific devices that can be found on Eukrea's This adds board specific devices that can be found on Eukrea's
...@@ -168,6 +173,7 @@ endchoice ...@@ -168,6 +173,7 @@ endchoice
config MACH_MX27_3DS config MACH_MX27_3DS
bool "MX27PDK platform" bool "MX27PDK platform"
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
help help
Include support for MX27PDK platform. This includes specific Include support for MX27PDK platform. This includes specific
configurations for the board and its peripherals. configurations for the board and its peripherals.
...@@ -176,6 +182,7 @@ config MACH_IMX27_VISSTRIM_M10 ...@@ -176,6 +182,7 @@ config MACH_IMX27_VISSTRIM_M10
bool "Vista Silicon i.MX27 Visstrim_m10" bool "Vista Silicon i.MX27 Visstrim_m10"
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
help help
Include support for Visstrim_m10 platform and its different variants. Include support for Visstrim_m10 platform and its different variants.
This includes specific configurations for the board and its This includes specific configurations for the board and its
...@@ -195,6 +202,7 @@ config MACH_PCA100 ...@@ -195,6 +202,7 @@ config MACH_PCA100
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_SSI select IMX_HAVE_PLATFORM_IMX_SSI
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_MXC_W1 select IMX_HAVE_PLATFORM_MXC_W1
select IMX_HAVE_PLATFORM_SPI_IMX select IMX_HAVE_PLATFORM_SPI_IMX
...@@ -208,6 +216,7 @@ config MACH_MXT_TD60 ...@@ -208,6 +216,7 @@ config MACH_MXT_TD60
select IMX_HAVE_PLATFORM_IMX_FB select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
help help
Include support for i-MXT (aka td60) platform. This Include support for i-MXT (aka td60) platform. This
......
...@@ -33,6 +33,10 @@ extern const struct imx_imx_uart_1irq_data imx21_imx_uart_data[] __initconst; ...@@ -33,6 +33,10 @@ extern const struct imx_imx_uart_1irq_data imx21_imx_uart_data[] __initconst;
#define imx21_add_imx_uart2(pdata) imx21_add_imx_uart(2, pdata) #define imx21_add_imx_uart2(pdata) imx21_add_imx_uart(2, pdata)
#define imx21_add_imx_uart3(pdata) imx21_add_imx_uart(3, pdata) #define imx21_add_imx_uart3(pdata) imx21_add_imx_uart(3, pdata)
extern const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst;
#define imx21_add_mxc_mmc(id, pdata) \
imx_add_mxc_mmc(&imx21_mxc_mmc_data[id], pdata)
extern const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst; extern const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst;
#define imx21_add_mxc_nand(pdata) \ #define imx21_add_mxc_nand(pdata) \
imx_add_mxc_nand(&imx21_mxc_nand_data, pdata) imx_add_mxc_nand(&imx21_mxc_nand_data, pdata)
......
...@@ -43,6 +43,10 @@ extern const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst; ...@@ -43,6 +43,10 @@ extern const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst;
#define imx27_add_mx2_camera(pdata) \ #define imx27_add_mx2_camera(pdata) \
imx_add_mx2_camera(&imx27_mx2_camera_data, pdata) imx_add_mx2_camera(&imx27_mx2_camera_data, pdata)
extern const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst;
#define imx27_add_mxc_mmc(id, pdata) \
imx_add_mxc_mmc(&imx27_mxc_mmc_data[id], pdata)
extern const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst; extern const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst;
#define imx27_add_mxc_nand(pdata) \ #define imx27_add_mxc_nand(pdata) \
imx_add_mxc_nand(&imx27_mxc_nand_data, pdata) imx_add_mxc_nand(&imx27_mxc_nand_data, pdata)
......
...@@ -76,40 +76,6 @@ int __init imx1_register_gpios(void) ...@@ -76,40 +76,6 @@ int __init imx1_register_gpios(void)
} }
#endif #endif
#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
#define DEFINE_MXC_MMC_DEVICE(n, baseaddr, irq, dmareq) \
static struct resource mxc_sdhc_resources ## n[] = { \
{ \
.start = baseaddr, \
.end = baseaddr + SZ_4K - 1, \
.flags = IORESOURCE_MEM, \
}, { \
.start = irq, \
.end = irq, \
.flags = IORESOURCE_IRQ, \
}, { \
.start = dmareq, \
.end = dmareq, \
.flags = IORESOURCE_DMA, \
}, \
}; \
\
static u64 mxc_sdhc ## n ## _dmamask = DMA_BIT_MASK(32); \
\
struct platform_device mxc_sdhc_device ## n = { \
.name = "mxc-mmc", \
.id = n, \
.dev = { \
.dma_mask = &mxc_sdhc ## n ## _dmamask, \
.coherent_dma_mask = DMA_BIT_MASK(32), \
}, \
.num_resources = ARRAY_SIZE(mxc_sdhc_resources ## n), \
.resource = mxc_sdhc_resources ## n, \
}
DEFINE_MXC_MMC_DEVICE(0, MX2x_SDHC1_BASE_ADDR, MX2x_INT_SDHC1, MX2x_DMA_REQ_SDHC1);
DEFINE_MXC_MMC_DEVICE(1, MX2x_SDHC2_BASE_ADDR, MX2x_INT_SDHC2, MX2x_DMA_REQ_SDHC2);
#ifdef CONFIG_MACH_MX27 #ifdef CONFIG_MACH_MX27
static struct resource otg_resources[] = { static struct resource otg_resources[] = {
{ {
...@@ -203,6 +169,7 @@ struct platform_device mxc_usbh2 = { ...@@ -203,6 +169,7 @@ struct platform_device mxc_usbh2 = {
}; };
#endif #endif
#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
/* GPIO port description */ /* GPIO port description */
#define DEFINE_MXC_GPIO_PORT_IRQ(SOC, n, _irq) \ #define DEFINE_MXC_GPIO_PORT_IRQ(SOC, n, _irq) \
{ \ { \
......
#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27) #if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
extern struct platform_device mxc_sdhc_device0;
extern struct platform_device mxc_sdhc_device1;
extern struct platform_device mxc_otg_udc_device; extern struct platform_device mxc_otg_udc_device;
extern struct platform_device mxc_otg_host; extern struct platform_device mxc_otg_host;
extern struct platform_device mxc_usbh1; extern struct platform_device mxc_usbh1;
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <mach/common.h> #include <mach/common.h>
#include <mach/iomux-mx27.h> #include <mach/iomux-mx27.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/mmc.h>
#include <mach/spi.h> #include <mach/spi.h>
#include <mach/audmux.h> #include <mach/audmux.h>
...@@ -305,7 +304,7 @@ static struct platform_device *platform_devices[] __initdata = { ...@@ -305,7 +304,7 @@ static struct platform_device *platform_devices[] __initdata = {
&leds_gpio, &leds_gpio,
}; };
static struct imxmmc_platform_data sdhc_pdata = { static const struct imxmmc_platform_data sdhc_pdata __initconst = {
.dat3_card_detect = 1, .dat3_card_detect = 1,
}; };
...@@ -351,7 +350,7 @@ void __init eukrea_mbimx27_baseboard_init(void) ...@@ -351,7 +350,7 @@ void __init eukrea_mbimx27_baseboard_init(void)
#endif #endif
imx27_add_imx_fb(&eukrea_mbimx27_fb_data); imx27_add_imx_fb(&eukrea_mbimx27_fb_data);
mxc_register_device(&mxc_sdhc_device0, &sdhc_pdata); imx27_add_mxc_mmc(0, &sdhc_pdata);
i2c_register_board_info(0, eukrea_mbimx27_i2c_devices, i2c_register_board_info(0, eukrea_mbimx27_i2c_devices,
ARRAY_SIZE(eukrea_mbimx27_i2c_devices)); ARRAY_SIZE(eukrea_mbimx27_i2c_devices));
......
...@@ -265,7 +265,7 @@ static void __init eukrea_cpuimx27_init(void) ...@@ -265,7 +265,7 @@ static void __init eukrea_cpuimx27_init(void)
#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2) #if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2)
/* SDHC2 can be used for Wifi */ /* SDHC2 can be used for Wifi */
mxc_register_device(&mxc_sdhc_device1, NULL); imx27_add_mxc_mmc(1, NULL);
#endif #endif
#if defined(MACH_EUKREA_CPUIMX27_USEUART4) #if defined(MACH_EUKREA_CPUIMX27_USEUART4)
/* in which case UART4 is also used for Bluetooth */ /* in which case UART4 is also used for Bluetooth */
......
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/mmc.h>
#include <mach/iomux.h> #include <mach/iomux.h>
#include <mach/mxc_ehci.h> #include <mach/mxc_ehci.h>
...@@ -156,7 +155,7 @@ static void visstrim_m10_sdhc1_exit(struct device *dev, void *data) ...@@ -156,7 +155,7 @@ static void visstrim_m10_sdhc1_exit(struct device *dev, void *data)
free_irq(SDHC1_IRQ, data); free_irq(SDHC1_IRQ, data);
} }
static struct imxmmc_platform_data visstrim_m10_sdhc_pdata = { static const struct imxmmc_platform_data visstrim_m10_sdhc_pdata __initconst = {
.init = visstrim_m10_sdhc1_init, .init = visstrim_m10_sdhc1_init,
.exit = visstrim_m10_sdhc1_exit, .exit = visstrim_m10_sdhc1_exit,
}; };
...@@ -237,7 +236,7 @@ static void __init visstrim_m10_board_init(void) ...@@ -237,7 +236,7 @@ static void __init visstrim_m10_board_init(void)
ARRAY_SIZE(visstrim_m10_i2c_devices)); ARRAY_SIZE(visstrim_m10_i2c_devices));
imx27_add_imx_i2c(0, &visstrim_m10_i2c_data); imx27_add_imx_i2c(0, &visstrim_m10_i2c_data);
imx27_add_imx_i2c(1, &visstrim_m10_i2c_data); imx27_add_imx_i2c(1, &visstrim_m10_i2c_data);
mxc_register_device(&mxc_sdhc_device0, &visstrim_m10_sdhc_pdata); imx27_add_mxc_mmc(0, &visstrim_m10_sdhc_pdata);
mxc_register_device(&mxc_otg_host, &visstrim_m10_usbotg_pdata); mxc_register_device(&mxc_otg_host, &visstrim_m10_usbotg_pdata);
imx27_add_fec(NULL); imx27_add_fec(NULL);
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/iomux-mx21.h> #include <mach/iomux-mx21.h>
#include <mach/mxc_nand.h> #include <mach/mxc_nand.h>
#include <mach/mmc.h>
#include "devices-imx21.h" #include "devices-imx21.h"
#include "devices.h" #include "devices.h"
...@@ -232,15 +231,8 @@ static int mx21ads_sdhc_get_ro(struct device *dev) ...@@ -232,15 +231,8 @@ static int mx21ads_sdhc_get_ro(struct device *dev)
static int mx21ads_sdhc_init(struct device *dev, irq_handler_t detect_irq, static int mx21ads_sdhc_init(struct device *dev, irq_handler_t detect_irq,
void *data) void *data)
{ {
int ret; return request_irq(IRQ_GPIOD(25), detect_irq,
ret = request_irq(IRQ_GPIOD(25), detect_irq,
IRQF_TRIGGER_FALLING, "mmc-detect", data); IRQF_TRIGGER_FALLING, "mmc-detect", data);
if (ret)
goto out;
return 0;
out:
return ret;
} }
static void mx21ads_sdhc_exit(struct device *dev, void *data) static void mx21ads_sdhc_exit(struct device *dev, void *data)
...@@ -248,7 +240,7 @@ static void mx21ads_sdhc_exit(struct device *dev, void *data) ...@@ -248,7 +240,7 @@ static void mx21ads_sdhc_exit(struct device *dev, void *data)
free_irq(IRQ_GPIOD(25), data); free_irq(IRQ_GPIOD(25), data);
} }
static struct imxmmc_platform_data mx21ads_sdhc_pdata = { static const struct imxmmc_platform_data mx21ads_sdhc_pdata __initconst = {
.ocr_avail = MMC_VDD_29_30 | MMC_VDD_30_31, /* 3.0V */ .ocr_avail = MMC_VDD_29_30 | MMC_VDD_30_31, /* 3.0V */
.get_ro = mx21ads_sdhc_get_ro, .get_ro = mx21ads_sdhc_get_ro,
.init = mx21ads_sdhc_init, .init = mx21ads_sdhc_init,
...@@ -296,7 +288,7 @@ static void __init mx21ads_board_init(void) ...@@ -296,7 +288,7 @@ static void __init mx21ads_board_init(void)
imx21_add_imx_uart2(&uart_pdata_norts); imx21_add_imx_uart2(&uart_pdata_norts);
imx21_add_imx_uart3(&uart_pdata_rts); imx21_add_imx_uart3(&uart_pdata_rts);
imx21_add_imx_fb(&mx21ads_fb_data); imx21_add_imx_fb(&mx21ads_fb_data);
mxc_register_device(&mxc_sdhc_device0, &mx21ads_sdhc_pdata); imx21_add_mxc_mmc(0, &mx21ads_sdhc_pdata);
imx21_add_mxc_nand(&mx21ads_nand_board_info); imx21_add_mxc_nand(&mx21ads_nand_board_info);
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/iomux-mx27.h> #include <mach/iomux-mx27.h>
#include <mach/mmc.h>
#include "devices-imx27.h" #include "devices-imx27.h"
#include "devices.h" #include "devices.h"
...@@ -109,7 +108,7 @@ static void mx27_3ds_sdhc1_exit(struct device *dev, void *data) ...@@ -109,7 +108,7 @@ static void mx27_3ds_sdhc1_exit(struct device *dev, void *data)
free_irq(IRQ_GPIOB(26), data); free_irq(IRQ_GPIOB(26), data);
} }
static struct imxmmc_platform_data sdhc1_pdata = { static const struct imxmmc_platform_data sdhc1_pdata __initconst = {
.init = mx27_3ds_sdhc1_init, .init = mx27_3ds_sdhc1_init,
.exit = mx27_3ds_sdhc1_exit, .exit = mx27_3ds_sdhc1_exit,
}; };
...@@ -129,7 +128,7 @@ static void __init mx27pdk_init(void) ...@@ -129,7 +128,7 @@ static void __init mx27pdk_init(void)
imx27_add_imx_uart0(&uart_pdata); imx27_add_imx_uart0(&uart_pdata);
imx27_add_fec(NULL); imx27_add_fec(NULL);
mxc_register_device(&imx_kpp_device, &mx27_3ds_keymap_data); mxc_register_device(&imx_kpp_device, &mx27_3ds_keymap_data);
mxc_register_device(&mxc_sdhc_device0, &sdhc1_pdata); imx27_add_mxc_mmc(0, &sdhc1_pdata);
} }
static void __init mx27pdk_timer_init(void) static void __init mx27pdk_timer_init(void)
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <mach/gpio.h> #include <mach/gpio.h>
#include <mach/iomux-mx27.h> #include <mach/iomux-mx27.h>
#include <mach/mxc_nand.h> #include <mach/mxc_nand.h>
#include <mach/mmc.h>
#include "devices-imx27.h" #include "devices-imx27.h"
#include "devices.h" #include "devices.h"
...@@ -271,12 +270,12 @@ static void mx27ads_sdhc2_exit(struct device *dev, void *data) ...@@ -271,12 +270,12 @@ static void mx27ads_sdhc2_exit(struct device *dev, void *data)
free_irq(IRQ_GPIOB(7), data); free_irq(IRQ_GPIOB(7), data);
} }
static struct imxmmc_platform_data sdhc1_pdata = { static const struct imxmmc_platform_data sdhc1_pdata __initconst = {
.init = mx27ads_sdhc1_init, .init = mx27ads_sdhc1_init,
.exit = mx27ads_sdhc1_exit, .exit = mx27ads_sdhc1_exit,
}; };
static struct imxmmc_platform_data sdhc2_pdata = { static const struct imxmmc_platform_data sdhc2_pdata __initconst = {
.init = mx27ads_sdhc2_init, .init = mx27ads_sdhc2_init,
.exit = mx27ads_sdhc2_exit, .exit = mx27ads_sdhc2_exit,
}; };
...@@ -307,8 +306,8 @@ static void __init mx27ads_board_init(void) ...@@ -307,8 +306,8 @@ static void __init mx27ads_board_init(void)
ARRAY_SIZE(mx27ads_i2c_devices)); ARRAY_SIZE(mx27ads_i2c_devices));
imx27_add_imx_i2c(1, &mx27ads_i2c1_data); imx27_add_imx_i2c(1, &mx27ads_i2c1_data);
imx27_add_imx_fb(&mx27ads_fb_data); imx27_add_imx_fb(&mx27ads_fb_data);
mxc_register_device(&mxc_sdhc_device0, &sdhc1_pdata); imx27_add_mxc_mmc(0, &sdhc1_pdata);
mxc_register_device(&mxc_sdhc_device1, &sdhc2_pdata); imx27_add_mxc_mmc(1, &sdhc2_pdata);
imx27_add_fec(NULL); imx27_add_fec(NULL);
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include <mach/iomux-mx27.h> #include <mach/iomux-mx27.h>
#include <mach/mxc_nand.h> #include <mach/mxc_nand.h>
#include <linux/i2c/pca953x.h> #include <linux/i2c/pca953x.h>
#include <mach/mmc.h>
#include "devices-imx27.h" #include "devices-imx27.h"
#include "devices.h" #include "devices.h"
...@@ -225,7 +224,7 @@ static void mxt_td60_sdhc1_exit(struct device *dev, void *data) ...@@ -225,7 +224,7 @@ static void mxt_td60_sdhc1_exit(struct device *dev, void *data)
free_irq(IRQ_GPIOF(8), data); free_irq(IRQ_GPIOF(8), data);
} }
static struct imxmmc_platform_data sdhc1_pdata = { static const struct imxmmc_platform_data sdhc1_pdata __initconst = {
.init = mxt_td60_sdhc1_init, .init = mxt_td60_sdhc1_init,
.exit = mxt_td60_sdhc1_exit, .exit = mxt_td60_sdhc1_exit,
}; };
...@@ -253,7 +252,7 @@ static void __init mxt_td60_board_init(void) ...@@ -253,7 +252,7 @@ static void __init mxt_td60_board_init(void)
imx27_add_imx_i2c(0, &mxt_td60_i2c0_data); imx27_add_imx_i2c(0, &mxt_td60_i2c0_data);
imx27_add_imx_i2c(1, &mxt_td60_i2c1_data); imx27_add_imx_i2c(1, &mxt_td60_i2c1_data);
imx27_add_imx_fb(&mxt_td60_fb_data); imx27_add_imx_fb(&mxt_td60_fb_data);
mxc_register_device(&mxc_sdhc_device0, &sdhc1_pdata); imx27_add_mxc_mmc(0, &sdhc1_pdata);
imx27_add_fec(NULL); imx27_add_fec(NULL);
} }
......
...@@ -40,7 +40,6 @@ ...@@ -40,7 +40,6 @@
#include <mach/audmux.h> #include <mach/audmux.h>
#include <mach/mxc_nand.h> #include <mach/mxc_nand.h>
#include <mach/irqs.h> #include <mach/irqs.h>
#include <mach/mmc.h>
#include <mach/mxc_ehci.h> #include <mach/mxc_ehci.h>
#include <mach/ulpi.h> #include <mach/ulpi.h>
...@@ -268,7 +267,7 @@ static void pca100_sdhc2_exit(struct device *dev, void *data) ...@@ -268,7 +267,7 @@ static void pca100_sdhc2_exit(struct device *dev, void *data)
free_irq(IRQ_GPIOC(29), data); free_irq(IRQ_GPIOC(29), data);
} }
static struct imxmmc_platform_data sdhc_pdata = { static const struct imxmmc_platform_data sdhc_pdata __initconst = {
.init = pca100_sdhc2_init, .init = pca100_sdhc2_init,
.exit = pca100_sdhc2_exit, .exit = pca100_sdhc2_exit,
}; };
...@@ -383,7 +382,7 @@ static void __init pca100_init(void) ...@@ -383,7 +382,7 @@ static void __init pca100_init(void)
imx27_add_imx_uart0(&uart_pdata); imx27_add_imx_uart0(&uart_pdata);
mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata); imx27_add_mxc_mmc(1, &sdhc_pdata);
imx27_add_mxc_nand(&pca100_nand_board_info); imx27_add_mxc_nand(&pca100_nand_board_info);
......
...@@ -212,7 +212,7 @@ static const struct spi_imx_master pcm038_spi0_data __initconst = { ...@@ -212,7 +212,7 @@ static const struct spi_imx_master pcm038_spi0_data __initconst = {
static struct regulator_consumer_supply sdhc1_consumers[] = { static struct regulator_consumer_supply sdhc1_consumers[] = {
{ {
.dev = &mxc_sdhc_device1.dev, .dev_name = "mxc-mmc.1",
.supply = "sdhc_vcc", .supply = "sdhc_vcc",
}, },
}; };
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <mach/common.h> #include <mach/common.h>
#include <mach/iomux-mx27.h> #include <mach/iomux-mx27.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/mmc.h>
#include "devices-imx27.h" #include "devices-imx27.h"
#include "devices.h" #include "devices.h"
...@@ -119,7 +118,7 @@ static void pcm970_sdhc2_exit(struct device *dev, void *data) ...@@ -119,7 +118,7 @@ static void pcm970_sdhc2_exit(struct device *dev, void *data)
gpio_free(GPIO_PORTC + 28); gpio_free(GPIO_PORTC + 28);
} }
static struct imxmmc_platform_data sdhc_pdata = { static const struct imxmmc_platform_data sdhc_pdata __initconst = {
.get_ro = pcm970_sdhc2_get_ro, .get_ro = pcm970_sdhc2_get_ro,
.init = pcm970_sdhc2_init, .init = pcm970_sdhc2_init,
.exit = pcm970_sdhc2_exit, .exit = pcm970_sdhc2_exit,
...@@ -228,6 +227,6 @@ void __init pcm970_baseboard_init(void) ...@@ -228,6 +227,6 @@ void __init pcm970_baseboard_init(void)
imx27_add_imx_fb(&pcm038_fb_data); imx27_add_imx_fb(&pcm038_fb_data);
mxc_gpio_mode(GPIO_PORTC | 28 | GPIO_GPIO | GPIO_IN); mxc_gpio_mode(GPIO_PORTC | 28 | GPIO_GPIO | GPIO_IN);
mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata); imx27_add_mxc_mmc(1, &sdhc_pdata);
platform_device_register(&pcm970_sja1000); platform_device_register(&pcm970_sja1000);
} }
...@@ -37,6 +37,9 @@ config IMX_HAVE_PLATFORM_MX1_CAMERA ...@@ -37,6 +37,9 @@ config IMX_HAVE_PLATFORM_MX1_CAMERA
config IMX_HAVE_PLATFORM_MX2_CAMERA config IMX_HAVE_PLATFORM_MX2_CAMERA
bool bool
config IMX_HAVE_PLATFORM_MXC_MMC
bool
config IMX_HAVE_PLATFORM_MXC_NAND config IMX_HAVE_PLATFORM_MXC_NAND
bool bool
......
...@@ -11,6 +11,7 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o ...@@ -11,6 +11,7 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UDC) += platform-imx_udc.o obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UDC) += platform-imx_udc.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MX1_CAMERA) += platform-mx1-camera.o obj-$(CONFIG_IMX_HAVE_PLATFORM_MX1_CAMERA) += platform-mx1-camera.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MX2_CAMERA) += platform-mx2-camera.o obj-$(CONFIG_IMX_HAVE_PLATFORM_MX2_CAMERA) += platform-mx2-camera.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_MMC) += platform-mxc-mmc.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_PWM) += platform-mxc_pwm.o obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_PWM) += platform-mxc_pwm.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o
......
/*
* Copyright (C) 2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2 as published by the
* Free Software Foundation.
*/
#include <mach/hardware.h>
#include <mach/devices-common.h>
#define imx_mxc_mmc_data_entry_single(soc, _id, _hwid) \
{ \
.id = _id, \
.iobase = soc ## _SDHC ## _hwid ## _BASE_ADDR, \
.irq = soc ## _INT_SDHC ## _hwid, \
.dmareq = soc ## _DMA_REQ_SDHC ## _hwid, \
}
#define imx_mxc_mmc_data_entry(soc, _id, _hwid) \
[_id] = imx_mxc_mmc_data_entry_single(soc, _id, _hwid)
#ifdef CONFIG_SOC_IMX21
const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = {
#define imx21_mxc_mmc_data_entry(_id, _hwid) \
imx_mxc_mmc_data_entry(MX21, _id, _hwid)
imx21_mxc_mmc_data_entry(0, 1),
imx21_mxc_mmc_data_entry(1, 2),
};
#endif /* ifdef CONFIG_SOC_IMX21 */
#ifdef CONFIG_SOC_IMX27
const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = {
#define imx27_mxc_mmc_data_entry(_id, _hwid) \
imx_mxc_mmc_data_entry(MX27, _id, _hwid)
imx27_mxc_mmc_data_entry(0, 1),
imx27_mxc_mmc_data_entry(1, 2),
};
#endif /* ifdef CONFIG_SOC_IMX27 */
struct platform_device *__init imx_add_mxc_mmc(
const struct imx_mxc_mmc_data *data,
const struct imxmmc_platform_data *pdata)
{
struct resource res[] = {
{
.start = data->iobase,
.end = data->iobase + SZ_4K - 1,
.flags = IORESOURCE_MEM,
}, {
.start = data->irq,
.end = data->irq,
.flags = IORESOURCE_IRQ,
}, {
.start = data->dmareq,
.end = data->dmareq,
.flags = IORESOURCE_DMA,
},
};
return imx_add_platform_device_dmamask("mxc-mmc", data->id,
res, ARRAY_SIZE(res),
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
}
...@@ -151,6 +151,17 @@ struct platform_device *__init imx_add_mx2_camera( ...@@ -151,6 +151,17 @@ struct platform_device *__init imx_add_mx2_camera(
const struct imx_mx2_camera_data *data, const struct imx_mx2_camera_data *data,
const struct mx2_camera_platform_data *pdata); const struct mx2_camera_platform_data *pdata);
#include <mach/mmc.h>
struct imx_mxc_mmc_data {
int id;
resource_size_t iobase;
resource_size_t irq;
resource_size_t dmareq;
};
struct platform_device *__init imx_add_mxc_mmc(
const struct imx_mxc_mmc_data *data,
const struct imxmmc_platform_data *pdata);
#include <mach/mxc_nand.h> #include <mach/mxc_nand.h>
struct imx_mxc_nand_data { struct imx_mxc_nand_data {
/* /*
......
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