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 | |
| 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>
| -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 | } |
