aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-11-12 05:49:34 -0500
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-11-19 15:54:35 -0500
commitfed3d35b06bf3f6a3383c2637d054823c563200b (patch)
treea787cffeb9f3b82d5be819a69e7eaec53e152e0b /arch/arm
parent6a697e3d310d79ea0e385975c57084ce22b04b36 (diff)
ARM: mx3: dynamically allocate mxc_rnga devices
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-mx3/Kconfig2
-rw-r--r--arch/arm/mach-mx3/devices.c18
-rw-r--r--arch/arm/mach-mx3/devices.h1
-rw-r--r--arch/arm/plat-mxc/devices/Kconfig4
-rw-r--r--arch/arm/plat-mxc/devices/Makefile1
-rw-r--r--arch/arm/plat-mxc/devices/platform-mxc_rnga.c56
6 files changed, 62 insertions, 20 deletions
diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig
index 46fffa5b0697..17ae7d365729 100644
--- a/arch/arm/mach-mx3/Kconfig
+++ b/arch/arm/mach-mx3/Kconfig
@@ -12,7 +12,7 @@ config ARCH_MX35
12 12
13config SOC_IMX31 13config SOC_IMX31
14 bool 14 bool
15 select ARCH_HAS_RNGA 15 select IMX_HAVE_PLATFORM_MXC_RNGA
16 select ARCH_MXC_AUDMUX_V2 16 select ARCH_MXC_AUDMUX_V2
17 select ARCH_MX31 17 select ARCH_MX31
18 18
diff --git a/arch/arm/mach-mx3/devices.c b/arch/arm/mach-mx3/devices.c
index 079b98e319eb..202c06c552b2 100644
--- a/arch/arm/mach-mx3/devices.c
+++ b/arch/arm/mach-mx3/devices.c
@@ -29,23 +29,6 @@
29 29
30#include "devices.h" 30#include "devices.h"
31 31
32#ifdef CONFIG_ARCH_MX31
33static struct resource rnga_resources[] = {
34 {
35 .start = MX3x_RNGA_BASE_ADDR,
36 .end = MX3x_RNGA_BASE_ADDR + 0x28,
37 .flags = IORESOURCE_MEM,
38 },
39};
40
41struct platform_device mxc_rnga_device = {
42 .name = "mxc_rnga",
43 .id = -1,
44 .num_resources = 1,
45 .resource = rnga_resources,
46};
47#endif /* CONFIG_ARCH_MX31 */
48
49/* i.MX31 Image Processing Unit */ 32/* i.MX31 Image Processing Unit */
50 33
51/* The resource order is important! */ 34/* The resource order is important! */
@@ -262,7 +245,6 @@ static int __init mx3_devices_init(void)
262 if (cpu_is_mx31()) { 245 if (cpu_is_mx31()) {
263 imx_wdt_resources[0].start = MX31_WDOG_BASE_ADDR; 246 imx_wdt_resources[0].start = MX31_WDOG_BASE_ADDR;
264 imx_wdt_resources[0].end = MX31_WDOG_BASE_ADDR + 0x3fff; 247 imx_wdt_resources[0].end = MX31_WDOG_BASE_ADDR + 0x3fff;
265 mxc_register_device(&mxc_rnga_device, NULL);
266 } 248 }
267#endif 249#endif
268#if defined(CONFIG_ARCH_MX35) 250#if defined(CONFIG_ARCH_MX35)
diff --git a/arch/arm/mach-mx3/devices.h b/arch/arm/mach-mx3/devices.h
index 20204743e8f8..d472c459238c 100644
--- a/arch/arm/mach-mx3/devices.h
+++ b/arch/arm/mach-mx3/devices.h
@@ -5,7 +5,6 @@ extern struct platform_device mxc_otg_udc_device;
5extern struct platform_device mxc_otg_host; 5extern struct platform_device mxc_otg_host;
6extern struct platform_device mxc_usbh1; 6extern struct platform_device mxc_usbh1;
7extern struct platform_device mxc_usbh2; 7extern struct platform_device mxc_usbh2;
8extern struct platform_device mxc_rnga_device;
9extern struct platform_device imx_wdt_device0; 8extern struct platform_device imx_wdt_device0;
10extern struct platform_device imx_rtc_device0; 9extern struct platform_device imx_rtc_device0;
11extern struct platform_device imx_kpp_device; 10extern struct platform_device imx_kpp_device;
diff --git a/arch/arm/plat-mxc/devices/Kconfig b/arch/arm/plat-mxc/devices/Kconfig
index 1be447638a92..f34c13998cbc 100644
--- a/arch/arm/plat-mxc/devices/Kconfig
+++ b/arch/arm/plat-mxc/devices/Kconfig
@@ -62,6 +62,10 @@ config IMX_HAVE_PLATFORM_MXC_NAND
62config IMX_HAVE_PLATFORM_MXC_PWM 62config IMX_HAVE_PLATFORM_MXC_PWM
63 bool 63 bool
64 64
65config IMX_HAVE_PLATFORM_MXC_RNGA
66 bool
67 select ARCH_HAS_RNGA
68
65config IMX_HAVE_PLATFORM_MXC_W1 69config IMX_HAVE_PLATFORM_MXC_W1
66 bool 70 bool
67 71
diff --git a/arch/arm/plat-mxc/devices/Makefile b/arch/arm/plat-mxc/devices/Makefile
index f1c3767d29d1..91fdd6c58b5b 100644
--- a/arch/arm/plat-mxc/devices/Makefile
+++ b/arch/arm/plat-mxc/devices/Makefile
@@ -19,5 +19,6 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI) += platform-mxc-ehci.o
19obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_MMC) += platform-mxc-mmc.o 19obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_MMC) += platform-mxc-mmc.o
20obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o 20obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o
21obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_PWM) += platform-mxc_pwm.o 21obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_PWM) += platform-mxc_pwm.o
22obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_RNGA) += platform-mxc_rnga.o
22obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o 23obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o
23obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) += platform-spi_imx.o 24obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) += platform-spi_imx.o
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_rnga.c b/arch/arm/plat-mxc/devices/platform-mxc_rnga.c
new file mode 100644
index 000000000000..b4b7612b6e17
--- /dev/null
+++ b/arch/arm/plat-mxc/devices/platform-mxc_rnga.c
@@ -0,0 +1,56 @@
1/*
2 * Copyright (C) 2010 Pengutronix
3 * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
4 *
5 * This program is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU General Public License version 2 as published by the
7 * Free Software Foundation.
8 */
9#include <mach/hardware.h>
10#include <mach/devices-common.h>
11
12struct imx_mxc_rnga_data {
13 resource_size_t iobase;
14};
15
16#define imx_mxc_rnga_data_entry_single(soc) \
17 { \
18 .iobase = soc ## _RNGA_BASE_ADDR, \
19 }
20
21#ifdef CONFIG_SOC_IMX31
22static const struct imx_mxc_rnga_data imx31_mxc_rnga_data __initconst =
23 imx_mxc_rnga_data_entry_single(MX31);
24#endif /* ifdef CONFIG_SOC_IMX31 */
25
26static struct platform_device *__init imx_add_mxc_rnga(
27 const struct imx_mxc_rnga_data *data)
28{
29 struct resource res[] = {
30 {
31 .start = data->iobase,
32 .end = data->iobase + SZ_16K - 1,
33 .flags = IORESOURCE_MEM,
34 },
35 };
36 return imx_add_platform_device("mxc_rnga", -1,
37 res, ARRAY_SIZE(res), NULL, 0);
38}
39
40static int __init imxXX_add_mxc_rnga(void)
41{
42 struct platform_device *ret;
43
44#if defined(CONFIG_SOC_IMX31)
45 if (cpu_is_mx31())
46 ret = imx_add_mxc_rnga(&imx31_mxc_rnga_data);
47 else
48#endif /* if defined(CONFIG_SOC_IMX31) */
49 ret = ERR_PTR(-ENODEV);
50
51 if (IS_ERR(ret))
52 return PTR_ERR(ret);
53
54 return 0;
55}
56arch_initcall(imxXX_add_mxc_rnga);