diff options
| author | Sukumar Ghorai <s-ghorai@ti.com> | 2011-01-28 05:12:03 -0500 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2011-02-17 18:32:52 -0500 |
| commit | d5ce2b6592c49935462cba7317fa67fe8ee474ec (patch) | |
| tree | 5dac64a2ee28e08bd730efa2bb28d3f32e12fbca | |
| parent | df7ffd317d36d36095c26bb57b3dd405274048e5 (diff) | |
omap3630: nand: fix device size to work in polled mode
zoom3 and 3630-sdp having the x16 nand device.
This patch configure gpmc as x16 and select the currect function in driver
for polled mode (without prefetch enable) transfer.
Signed-off-by: Sukumar Ghorai <s-ghorai@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
| -rw-r--r-- | arch/arm/mach-omap2/board-3430sdp.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-3630sdp.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-flash.c | 10 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-flash.h | 4 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-ldp.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-zoom.c | 5 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/gpmc-nand.c | 7 | ||||
| -rw-r--r-- | drivers/mtd/nand/omap2.c | 2 |
8 files changed, 21 insertions, 14 deletions
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 31085883199e..4a37c70e38b0 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
| @@ -812,7 +812,7 @@ static void __init omap_3430sdp_init(void) | |||
| 812 | omap_serial_init(); | 812 | omap_serial_init(); |
| 813 | usb_musb_init(&musb_board_data); | 813 | usb_musb_init(&musb_board_data); |
| 814 | board_smc91x_init(); | 814 | board_smc91x_init(); |
| 815 | board_flash_init(sdp_flash_partitions, chip_sel_3430); | 815 | board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); |
| 816 | sdp3430_display_init(); | 816 | sdp3430_display_init(); |
| 817 | enable_board_wakeup_source(); | 817 | enable_board_wakeup_source(); |
| 818 | usb_ehci_init(&ehci_pdata); | 818 | usb_ehci_init(&ehci_pdata); |
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index 16538757291a..8d1c4358ecf9 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
| 12 | #include <linux/input.h> | 12 | #include <linux/input.h> |
| 13 | #include <linux/gpio.h> | 13 | #include <linux/gpio.h> |
| 14 | #include <linux/mtd/nand.h> | ||
| 14 | 15 | ||
| 15 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 16 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
| @@ -208,7 +209,7 @@ static void __init omap_sdp_init(void) | |||
| 208 | zoom_peripherals_init(); | 209 | zoom_peripherals_init(); |
| 209 | zoom_display_init(); | 210 | zoom_display_init(); |
| 210 | board_smc91x_init(); | 211 | board_smc91x_init(); |
| 211 | board_flash_init(sdp_flash_partitions, chip_sel_sdp); | 212 | board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16); |
| 212 | enable_board_wakeup_source(); | 213 | enable_board_wakeup_source(); |
| 213 | usb_ehci_init(&ehci_pdata); | 214 | usb_ehci_init(&ehci_pdata); |
| 214 | } | 215 | } |
diff --git a/arch/arm/mach-omap2/board-flash.c b/arch/arm/mach-omap2/board-flash.c index fd38c05bb47f..f6b72533c089 100644 --- a/arch/arm/mach-omap2/board-flash.c +++ b/arch/arm/mach-omap2/board-flash.c | |||
| @@ -139,11 +139,13 @@ static struct omap_nand_platform_data board_nand_data = { | |||
| 139 | }; | 139 | }; |
| 140 | 140 | ||
| 141 | void | 141 | void |
| 142 | __init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs) | 142 | __init board_nand_init(struct mtd_partition *nand_parts, |
| 143 | u8 nr_parts, u8 cs, int nand_type) | ||
| 143 | { | 144 | { |
| 144 | board_nand_data.cs = cs; | 145 | board_nand_data.cs = cs; |
| 145 | board_nand_data.parts = nand_parts; | 146 | board_nand_data.parts = nand_parts; |
| 146 | board_nand_data.nr_parts = nr_parts; | 147 | board_nand_data.nr_parts = nr_parts; |
| 148 | board_nand_data.devsize = nand_type; | ||
| 147 | 149 | ||
| 148 | gpmc_nand_init(&board_nand_data); | 150 | gpmc_nand_init(&board_nand_data); |
| 149 | } | 151 | } |
| @@ -194,7 +196,7 @@ unmap: | |||
| 194 | * @return - void. | 196 | * @return - void. |
| 195 | */ | 197 | */ |
| 196 | void board_flash_init(struct flash_partitions partition_info[], | 198 | void board_flash_init(struct flash_partitions partition_info[], |
| 197 | char chip_sel_board[][GPMC_CS_NUM]) | 199 | char chip_sel_board[][GPMC_CS_NUM], int nand_type) |
| 198 | { | 200 | { |
| 199 | u8 cs = 0; | 201 | u8 cs = 0; |
| 200 | u8 norcs = GPMC_CS_NUM + 1; | 202 | u8 norcs = GPMC_CS_NUM + 1; |
| @@ -250,5 +252,5 @@ void board_flash_init(struct flash_partitions partition_info[], | |||
| 250 | "in GPMC\n"); | 252 | "in GPMC\n"); |
| 251 | else | 253 | else |
| 252 | board_nand_init(partition_info[2].parts, | 254 | board_nand_init(partition_info[2].parts, |
| 253 | partition_info[2].nr_parts, nandcs); | 255 | partition_info[2].nr_parts, nandcs, nand_type); |
| 254 | } | 256 | } |
diff --git a/arch/arm/mach-omap2/board-flash.h b/arch/arm/mach-omap2/board-flash.h index 69befe00dd2f..c240a3f8d163 100644 --- a/arch/arm/mach-omap2/board-flash.h +++ b/arch/arm/mach-omap2/board-flash.h | |||
| @@ -25,6 +25,6 @@ struct flash_partitions { | |||
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | extern void board_flash_init(struct flash_partitions [], | 27 | extern void board_flash_init(struct flash_partitions [], |
| 28 | char chip_sel[][GPMC_CS_NUM]); | 28 | char chip_sel[][GPMC_CS_NUM], int nand_type); |
| 29 | extern void board_nand_init(struct mtd_partition *nand_parts, | 29 | extern void board_nand_init(struct mtd_partition *nand_parts, |
| 30 | u8 nr_parts, u8 cs); | 30 | u8 nr_parts, u8 cs, int nand_type); |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index d8eb2cb7cbc7..a3fae5697a72 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
| @@ -433,7 +433,7 @@ static void __init omap_ldp_init(void) | |||
| 433 | omap_serial_init(); | 433 | omap_serial_init(); |
| 434 | usb_musb_init(&musb_board_data); | 434 | usb_musb_init(&musb_board_data); |
| 435 | board_nand_init(ldp_nand_partitions, | 435 | board_nand_init(ldp_nand_partitions, |
| 436 | ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS); | 436 | ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); |
| 437 | 437 | ||
| 438 | omap2_hsmmc_init(mmc); | 438 | omap2_hsmmc_init(mmc); |
| 439 | /* link regulators to MMC adapters */ | 439 | /* link regulators to MMC adapters */ |
diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c index 85d4170f30ab..7e3f1595d77b 100644 --- a/arch/arm/mach-omap2/board-zoom.c +++ b/arch/arm/mach-omap2/board-zoom.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/input.h> | 16 | #include <linux/input.h> |
| 17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
| 18 | #include <linux/i2c/twl.h> | 18 | #include <linux/i2c/twl.h> |
| 19 | #include <linux/mtd/nand.h> | ||
| 19 | 20 | ||
| 20 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 21 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
| @@ -124,8 +125,8 @@ static void __init omap_zoom_init(void) | |||
| 124 | usb_ehci_init(&ehci_pdata); | 125 | usb_ehci_init(&ehci_pdata); |
| 125 | } | 126 | } |
| 126 | 127 | ||
| 127 | board_nand_init(zoom_nand_partitions, | 128 | board_nand_init(zoom_nand_partitions, ARRAY_SIZE(zoom_nand_partitions), |
| 128 | ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS); | 129 | ZOOM_NAND_CS, NAND_BUSWIDTH_16); |
| 129 | zoom_debugboard_init(); | 130 | zoom_debugboard_init(); |
| 130 | zoom_peripherals_init(); | 131 | zoom_peripherals_init(); |
| 131 | zoom_display_init(); | 132 | zoom_display_init(); |
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index 2bb29c160702..c1791d08ae56 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
| 13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
| 14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
| 15 | #include <linux/mtd/nand.h> | ||
| 15 | 16 | ||
| 16 | #include <asm/mach/flash.h> | 17 | #include <asm/mach/flash.h> |
| 17 | 18 | ||
| @@ -69,8 +70,10 @@ static int omap2_nand_gpmc_retime(void) | |||
| 69 | t.wr_cycle = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->wr_cycle); | 70 | t.wr_cycle = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->wr_cycle); |
| 70 | 71 | ||
| 71 | /* Configure GPMC */ | 72 | /* Configure GPMC */ |
| 72 | gpmc_cs_configure(gpmc_nand_data->cs, | 73 | if (gpmc_nand_data->devsize == NAND_BUSWIDTH_16) |
| 73 | GPMC_CONFIG_DEV_SIZE, gpmc_nand_data->devsize); | 74 | gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 1); |
| 75 | else | ||
| 76 | gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 0); | ||
| 74 | gpmc_cs_configure(gpmc_nand_data->cs, | 77 | gpmc_cs_configure(gpmc_nand_data->cs, |
| 75 | GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND); | 78 | GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND); |
| 76 | err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t); | 79 | err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t); |
diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c index 15682ec8530e..7c04cd6fb7aa 100644 --- a/drivers/mtd/nand/omap2.c +++ b/drivers/mtd/nand/omap2.c | |||
| @@ -804,7 +804,7 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) | |||
| 804 | info->mtd.name = dev_name(&pdev->dev); | 804 | info->mtd.name = dev_name(&pdev->dev); |
| 805 | info->mtd.owner = THIS_MODULE; | 805 | info->mtd.owner = THIS_MODULE; |
| 806 | 806 | ||
| 807 | info->nand.options |= pdata->devsize ? NAND_BUSWIDTH_16 : 0; | 807 | info->nand.options = pdata->devsize; |
| 808 | info->nand.options |= NAND_SKIP_BBTSCAN; | 808 | info->nand.options |= NAND_SKIP_BBTSCAN; |
| 809 | 809 | ||
| 810 | /* NAND write protect off */ | 810 | /* NAND write protect off */ |
