diff options
author | Afzal Mohammed <afzal@ti.com> | 2012-08-30 15:53:23 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2012-08-30 15:53:23 -0400 |
commit | 681988ba0c369795def0346d210ce96d6177059a (patch) | |
tree | 9b036db5e1d220b2537ffd9e4257776cb0d79019 /arch/arm/mach-omap2/gpmc-onenand.c | |
parent | 9222e3a7bbf3fe63629d4169b63afa27bc108ecc (diff) |
ARM: OMAP2+: gpmc-onenand: provide memory as resource
Currently omap onenand driver invokes gpmc_cs_request, obtains address
space allocated by gpmc to onenand. Remove this, instead use resource
structure; this is now updated with address space for onenand by gpmc
initialization with the help of gpmc_cs_request. And remove usage of
gpmc_cs_request in onenand driver.
This helps in smooth migration of gpmc to driver.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/gpmc-onenand.c')
-rw-r--r-- | arch/arm/mach-omap2/gpmc-onenand.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c index a0fa9bb2bda5..71d7c07dd350 100644 --- a/arch/arm/mach-omap2/gpmc-onenand.c +++ b/arch/arm/mach-omap2/gpmc-onenand.c | |||
@@ -23,11 +23,19 @@ | |||
23 | #include <plat/board.h> | 23 | #include <plat/board.h> |
24 | #include <plat/gpmc.h> | 24 | #include <plat/gpmc.h> |
25 | 25 | ||
26 | #define ONENAND_IO_SIZE SZ_128K | ||
27 | |||
26 | static struct omap_onenand_platform_data *gpmc_onenand_data; | 28 | static struct omap_onenand_platform_data *gpmc_onenand_data; |
27 | 29 | ||
30 | static struct resource gpmc_onenand_resource = { | ||
31 | .flags = IORESOURCE_MEM, | ||
32 | }; | ||
33 | |||
28 | static struct platform_device gpmc_onenand_device = { | 34 | static struct platform_device gpmc_onenand_device = { |
29 | .name = "omap2-onenand", | 35 | .name = "omap2-onenand", |
30 | .id = -1, | 36 | .id = -1, |
37 | .num_resources = 1, | ||
38 | .resource = &gpmc_onenand_resource, | ||
31 | }; | 39 | }; |
32 | 40 | ||
33 | static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) | 41 | static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) |
@@ -390,6 +398,8 @@ static int gpmc_onenand_setup(void __iomem *onenand_base, int *freq_ptr) | |||
390 | 398 | ||
391 | void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data) | 399 | void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data) |
392 | { | 400 | { |
401 | int err; | ||
402 | |||
393 | gpmc_onenand_data = _onenand_data; | 403 | gpmc_onenand_data = _onenand_data; |
394 | gpmc_onenand_data->onenand_setup = gpmc_onenand_setup; | 404 | gpmc_onenand_data->onenand_setup = gpmc_onenand_setup; |
395 | gpmc_onenand_device.dev.platform_data = gpmc_onenand_data; | 405 | gpmc_onenand_device.dev.platform_data = gpmc_onenand_data; |
@@ -401,8 +411,19 @@ void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data) | |||
401 | gpmc_onenand_data->flags |= ONENAND_SYNC_READ; | 411 | gpmc_onenand_data->flags |= ONENAND_SYNC_READ; |
402 | } | 412 | } |
403 | 413 | ||
414 | err = gpmc_cs_request(gpmc_onenand_data->cs, ONENAND_IO_SIZE, | ||
415 | (unsigned long *)&gpmc_onenand_resource.start); | ||
416 | if (err < 0) { | ||
417 | pr_err("%s: Cannot request GPMC CS\n", __func__); | ||
418 | return; | ||
419 | } | ||
420 | |||
421 | gpmc_onenand_resource.end = gpmc_onenand_resource.start + | ||
422 | ONENAND_IO_SIZE - 1; | ||
423 | |||
404 | if (platform_device_register(&gpmc_onenand_device) < 0) { | 424 | if (platform_device_register(&gpmc_onenand_device) < 0) { |
405 | printk(KERN_ERR "Unable to register OneNAND device\n"); | 425 | pr_err("%s: Unable to register OneNAND device\n", __func__); |
426 | gpmc_cs_free(gpmc_onenand_data->cs); | ||
406 | return; | 427 | return; |
407 | } | 428 | } |
408 | } | 429 | } |