Skip to content

Commit

Permalink
ARM: imx: dynamically allocate imx2-wdt devices
Browse files Browse the repository at this point in the history
Currently there is no platform data used in the driver.  In case this
changes and for consistency NULL is passed unused to the soc specific
functions.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
  • Loading branch information
Uwe Kleine-König committed Nov 17, 2010
1 parent b2997cb commit e0a1961
Show file tree
Hide file tree
Showing 12 changed files with 64 additions and 24 deletions.
3 changes: 3 additions & 0 deletions arch/arm/mach-imx/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ config MACH_MX27ADS

config MACH_PCM038
bool "Phytec phyCORE-i.MX27 CPU module (pcm038)"
select IMX_HAVE_PLATFORM_IMX2_WDT
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
Expand All @@ -121,6 +122,7 @@ endchoice

config MACH_CPUIMX27
bool "Eukrea CPUIMX27 module"
select IMX_HAVE_PLATFORM_IMX2_WDT
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
Expand Down Expand Up @@ -185,6 +187,7 @@ config MACH_IMX27LITE

config MACH_PCA100
bool "Phytec phyCARD-s (pca100)"
select IMX_HAVE_PLATFORM_IMX2_WDT
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_SSI
select IMX_HAVE_PLATFORM_IMX_UART
Expand Down
4 changes: 4 additions & 0 deletions arch/arm/mach-imx/devices-imx21.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
#include <mach/mx21.h>
#include <mach/devices-common.h>

extern const struct imx_imx2_wdt_data imx21_imx2_wdt_data __initconst;
#define imx21_add_imx2_wdt(pdata) \
imx_add_imx2_wdt(&imx21_imx2_wdt_data)

extern const struct imx_imx_i2c_data imx21_imx_i2c_data __initconst;
#define imx21_add_imx_i2c(pdata) \
imx_add_imx_i2c(&imx21_imx_i2c_data, pdata)
Expand Down
4 changes: 4 additions & 0 deletions arch/arm/mach-imx/devices-imx27.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ extern const struct imx_fec_data imx27_fec_data __initconst;
#define imx27_add_fec(pdata) \
imx_add_fec(&imx27_fec_data, pdata)

extern const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst;
#define imx27_add_imx2_wdt(pdata) \
imx_add_imx2_wdt(&imx27_imx2_wdt_data)

extern const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst;
#define imx27_add_imx_i2c(id, pdata) \
imx_add_imx_i2c(&imx27_imx_i2c_data[id], pdata)
Expand Down
16 changes: 0 additions & 16 deletions arch/arm/mach-imx/devices.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,22 +77,6 @@ int __init imx1_register_gpios(void)
#endif

#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
/* Watchdog: i.MX1 has seperate driver, i.MX21 and i.MX27 are equal */
static struct resource mxc_wdt_resources[] = {
{
.start = MX2x_WDOG_BASE_ADDR,
.end = MX2x_WDOG_BASE_ADDR + SZ_4K - 1,
.flags = IORESOURCE_MEM,
},
};

struct platform_device mxc_wdt = {
.name = "imx2-wdt",
.id = 0,
.num_resources = ARRAY_SIZE(mxc_wdt_resources),
.resource = mxc_wdt_resources,
};

/*
* lcdc:
* - i.MX1: the basic controller
Expand Down
1 change: 0 additions & 1 deletion arch/arm/mach-imx/devices.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
extern struct platform_device mxc_wdt;
extern struct platform_device mxc_fb_device;
extern struct platform_device mxc_pwm_device;
extern struct platform_device mxc_sdhc_device0;
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-imx/mach-cpuimx27.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,6 @@ cpuimx27_nand_board_info __initconst = {

static struct platform_device *platform_devices[] __initdata = {
&eukrea_cpuimx27_nor_mtd_device,
&mxc_wdt,
};

static const struct imxi2c_platform_data cpuimx27_i2c1_data __initconst = {
Expand Down Expand Up @@ -261,6 +260,7 @@ static void __init eukrea_cpuimx27_init(void)

imx27_add_fec(NULL);
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
imx27_add_imx2_wdt(NULL);
imx27_add_mxc_w1(NULL);

#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2)
Expand Down
6 changes: 1 addition & 5 deletions arch/arm/mach-imx/mach-pca100.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,10 +171,6 @@ pca100_nand_board_info __initconst = {
.hw_ecc = 1,
};

static struct platform_device *platform_devices[] __initdata = {
&mxc_wdt,
};

static const struct imxi2c_platform_data pca100_i2c1_data __initconst = {
.bitrate = 100000,
};
Expand Down Expand Up @@ -432,7 +428,7 @@ static void __init pca100_init(void)
mxc_register_device(&mxc_fb_device, &pca100_fb_data);

imx27_add_fec(NULL);
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
imx27_add_imx2_wdt(NULL);
imx27_add_mxc_w1(NULL);
}

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-imx/mach-pcm038.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ pcm038_nand_board_info __initconst = {
static struct platform_device *platform_devices[] __initdata = {
&pcm038_nor_mtd_device,
&pcm038_sram_mtd_device,
&mxc_wdt,
};

/* On pcm038 there's a sram attached to CS1, we enable the chipselect here and
Expand Down Expand Up @@ -325,6 +324,7 @@ static void __init pcm038_init(void)

imx27_add_fec(NULL);
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
imx27_add_imx2_wdt(NULL);
imx27_add_mxc_w1(NULL);

#ifdef CONFIG_MACH_PCM970_BASEBOARD
Expand Down
3 changes: 3 additions & 0 deletions arch/arm/plat-mxc/devices/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ config IMX_HAVE_PLATFORM_GPIO_KEYS
bool
default y if ARCH_MX51

config IMX_HAVE_PLATFORM_IMX2_WDT
bool

config IMX_HAVE_PLATFORM_IMX_I2C
bool

Expand Down
1 change: 1 addition & 0 deletions arch/arm/plat-mxc/devices/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_ESDHC) += platform-esdhc.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_FEC) += platform-fec.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_GPIO_KEYS) += platform-gpio_keys.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT) += platform-imx2-wdt.o
obj-y += platform-imx-dma.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_SSI) += platform-imx-ssi.o
Expand Down
40 changes: 40 additions & 0 deletions arch/arm/plat-mxc/devices/platform-imx2-wdt.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* 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 <asm/sizes.h>
#include <mach/hardware.h>
#include <mach/devices-common.h>

#define imx_imx2_wdt_data_entry_single(soc) \
{ \
.iobase = soc ## _WDOG_BASE_ADDR, \
}

#ifdef CONFIG_SOC_IMX21
const struct imx_imx2_wdt_data imx21_imx2_wdt_data __initconst =
imx_imx2_wdt_data_entry_single(MX21);
#endif /* ifdef CONFIG_SOC_IMX21 */

#ifdef CONFIG_SOC_IMX27
const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst =
imx_imx2_wdt_data_entry_single(MX27);
#endif /* ifdef CONFIG_SOC_IMX27 */

struct platform_device *__init imx_add_imx2_wdt(
const struct imx_imx2_wdt_data *data)
{
struct resource res[] = {
{
.start = data->iobase,
.end = data->iobase + SZ_4K - 1,
.flags = IORESOURCE_MEM,
},
};
return imx_add_platform_device("imx2-wdt", 0,
res, ARRAY_SIZE(res), NULL, 0);
}
6 changes: 6 additions & 0 deletions arch/arm/plat-mxc/include/mach/devices-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ struct platform_device *__init imx_add_flexcan(int id,
struct platform_device *__init imx_add_gpio_keys(
const struct gpio_keys_platform_data *pdata);

struct imx_imx2_wdt_data {
resource_size_t iobase;
};
struct platform_device *__init imx_add_imx2_wdt(
const struct imx_imx2_wdt_data *data);

#include <mach/i2c.h>
struct imx_imx_i2c_data {
int id;
Expand Down

0 comments on commit e0a1961

Please sign in to comment.