gpmc driver has been converted to driver. Modify board_flash_init so that it can setup gpmc driver platform details for boards Signed-off-by: Afzal Mohammed <afzal@xxxxxx> --- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-3630sdp.c | 3 +- arch/arm/mach-omap2/board-flash.c | 89 +++++++++++++++++++---------------- arch/arm/mach-omap2/board-flash.h | 11 +++-- 4 files changed, 58 insertions(+), 47 deletions(-) diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index da75f23..ac2e398 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -620,7 +620,7 @@ static void __init omap_3430sdp_init(void) omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL); usb_musb_init(NULL); board_smc91x_init(); - board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); + board_flash_init(sdp_flash_partitions, chip_sel_3430, 0, NULL); sdp3430_display_init(); enable_board_wakeup_source(); usbhs_init(&usbhs_bdata); diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index 6ef350d..74195b7 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c @@ -204,7 +204,8 @@ static void __init omap_sdp_init(void) h8mbx00u0mer0em_sdrc_params); zoom_display_init(); board_smc91x_init(); - board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16); + board_flash_init(sdp_flash_partitions, chip_sel_sdp, + NAND_BUSWIDTH_16, NULL); enable_board_wakeup_source(); usbhs_init(&usbhs_bdata); } diff --git a/arch/arm/mach-omap2/board-flash.c b/arch/arm/mach-omap2/board-flash.c index 8727c05..8deead9 100644 --- a/arch/arm/mach-omap2/board-flash.c +++ b/arch/arm/mach-omap2/board-flash.c @@ -39,46 +39,33 @@ static struct physmap_flash_data board_nor_data = { .width = 2, }; -static struct resource board_nor_resource = { - .flags = IORESOURCE_MEM, +static struct gpmc_cs_data gpmc_nor_cs_data = { }; -static struct platform_device board_nor_device = { +static struct gpmc_device_pdata gpmc_nor_data = { .name = "physmap-flash", .id = 0, - .dev = { - .platform_data = &board_nor_data, - }, - .num_resources = 1, - .resource = &board_nor_resource, + .cs_data = &gpmc_nor_cs_data, + .num_cs = 1, }; -static void -__init board_nor_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs) +static __init struct gpmc_device_pdata * +gpmc_nor_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs) { - int err; - board_nor_data.parts = nor_parts; board_nor_data.nr_parts = nr_parts; - /* Configure start address and size of NOR device */ - if (omap_rev() >= OMAP3430_REV_ES1_0) { - err = gpmc_cs_request(cs, FLASH_SIZE_SDPV2 - 1, - (unsigned long *)&board_nor_resource.start); - board_nor_resource.end = board_nor_resource.start - + FLASH_SIZE_SDPV2 - 1; - } else { - err = gpmc_cs_request(cs, FLASH_SIZE_SDPV1 - 1, - (unsigned long *)&board_nor_resource.start); - board_nor_resource.end = board_nor_resource.start - + FLASH_SIZE_SDPV1 - 1; - } - if (err < 0) { - pr_err("NOR: Can't request GPMC CS\n"); - return; - } - if (platform_device_register(&board_nor_device) < 0) - pr_err("Unable to register NOR device\n"); + gpmc_nor_cs_data.cs = cs; + + if (omap_rev() >= OMAP3430_REV_ES1_0) + gpmc_nor_cs_data.mem_size = FLASH_SIZE_SDPV2; + else + gpmc_nor_cs_data.mem_size = FLASH_SIZE_SDPV1; + + gpmc_nor_data.pdata = &board_nor_data; + gpmc_nor_data.pdata_size = sizeof(board_nor_data); + + return &gpmc_nor_data; } #if defined(CONFIG_MTD_ONENAND_OMAP2) || \ @@ -183,8 +170,11 @@ unmap: * * @return - void. */ -void __init board_flash_init(struct flash_partitions partition_info[], - char chip_sel_board[][GPMC_CS_NUM], int nand_type) +__init struct gpmc_device_pdata **board_flash_init( + struct flash_partitions partition_info[], + char chip_sel_board[][GPMC_CS_NUM], + int nand_type, + struct gpmc_device_pdata **gpmc_data) { u8 cs = 0; u8 norcs = GPMC_CS_NUM + 1; @@ -193,13 +183,18 @@ void __init board_flash_init(struct flash_partitions partition_info[], u8 idx; unsigned char *config_sel = NULL; + if (gpmc_data == NULL) { + pr_err("%s: NULL arguement passed\n", __func__); + return NULL; + } + /* REVISIT: Is this return correct idx for 2430 SDP? * for which cs configuration matches for 2430 SDP? */ idx = get_gpmc0_type(); if (idx >= MAX_SUPPORTED_GPMC_CONFIG) { pr_err("%s: Invalid chip select: %d\n", __func__, cs); - return; + return gpmc_data; } config_sel = (unsigned char *)(chip_sel_board[idx]); @@ -224,19 +219,31 @@ void __init board_flash_init(struct flash_partitions partition_info[], if (norcs > GPMC_CS_NUM) pr_err("NOR: Unable to find configuration in GPMC\n"); else - board_nor_init(partition_info[0].parts, + *gpmc_data++ = gpmc_nor_init(partition_info[0].parts, partition_info[0].nr_parts, norcs); if (onenandcs > GPMC_CS_NUM) pr_err("OneNAND: Unable to find configuration in GPMC\n"); - else - board_onenand_init(partition_info[1].parts, - partition_info[1].nr_parts, onenandcs); + else { + struct omap_onenand_platform_data *onenand_data; + + onenand_data = board_onenand_init(partition_info[1].parts, + partition_info[1].nr_parts, onenandcs); + if (onenand_data != NULL) + *gpmc_data++ = gpmc_onenand_init(onenand_data); + } if (nandcs > GPMC_CS_NUM) pr_err("NAND: Unable to find configuration in GPMC\n"); - else - board_nand_init(partition_info[2].parts, - partition_info[2].nr_parts, nandcs, - nand_type, nand_default_timings); + else { + struct omap_nand_platform_data *nand_data; + + nand_data = board_nand_init(partition_info[2].parts, + partition_info[2].nr_parts, nandcs, + nand_type, nand_default_timings); + if (nand_data != NULL) + *gpmc_data++ = gpmc_nand_init(nand_data); + } + + return gpmc_data; } diff --git a/arch/arm/mach-omap2/board-flash.h b/arch/arm/mach-omap2/board-flash.h index 75ba49f..4dd733d 100644 --- a/arch/arm/mach-omap2/board-flash.h +++ b/arch/arm/mach-omap2/board-flash.h @@ -28,12 +28,15 @@ struct flash_partitions { defined(CONFIG_MTD_NAND_OMAP2_MODULE) || \ defined(CONFIG_MTD_ONENAND_OMAP2) || \ defined(CONFIG_MTD_ONENAND_OMAP2_MODULE) -extern void board_flash_init(struct flash_partitions [], - char chip_sel[][GPMC_CS_NUM], int nand_type); +extern struct gpmc_device_pdata **board_flash_init( + struct flash_partitions [], char chip_sel[][GPMC_CS_NUM], + int nand_type, struct gpmc_device_pdata **gpmc_data); #else -static inline void board_flash_init(struct flash_partitions part[], - char chip_sel[][GPMC_CS_NUM], int nand_type) +static inline struct gpmc_device_pdata **board_flash_init( + struct flash_partitions part[], char chip_sel[][GPMC_CS_NUM], + int nand_type, struct gpmc_device_pdata **gpmc_data) { + return NULL; } #endif -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html