davinci: add spi devices support for da830/omap-l137/am17x evm
authorSekhar Nori <nsekhar@ti.com>
Thu, 24 Feb 2011 05:23:27 +0000 (10:53 +0530)
committerKevin Hilman <khilman@ti.com>
Fri, 11 Mar 2011 18:48:29 +0000 (10:48 -0800)
This patch adds the on-board SPI flash device to the
DA830/OMAP-L137/AM17x EVM. It also registers the SPI flash
device to the MTD subsystem.

Based on SPI flash device support for MityDSP-L138F platform.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
[michael.williamson@criticallink.com: moved da830evm_spi0_pdata to devices-da8xx.c]
[michael.williamson@criticallink.com: moved da830evm_init_spi0 to devices-da8xx.c]
Signed-off-by: Michael Williamson <michael.williamson@criticallink.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
arch/arm/mach-davinci/board-da830-evm.c

index b52a3a1abd945745bf7e251062f7d4b6447f99ab..8bc3701aa05cdca50c4db84d54b2190de991527a 100644 (file)
@@ -20,6 +20,8 @@
 #include <linux/i2c/at24.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/flash.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -30,6 +32,7 @@
 #include <mach/da8xx.h>
 #include <mach/usb.h>
 #include <mach/aemif.h>
+#include <mach/spi.h>
 
 #define DA830_EVM_PHY_ID               ""
 /*
@@ -534,6 +537,64 @@ static struct edma_rsv_info da830_edma_rsv[] = {
        },
 };
 
+static struct mtd_partition da830evm_spiflash_part[] = {
+       [0] = {
+               .name = "DSP-UBL",
+               .offset = 0,
+               .size = SZ_8K,
+               .mask_flags = MTD_WRITEABLE,
+       },
+       [1] = {
+               .name = "ARM-UBL",
+               .offset = MTDPART_OFS_APPEND,
+               .size = SZ_16K + SZ_8K,
+               .mask_flags = MTD_WRITEABLE,
+       },
+       [2] = {
+               .name = "U-Boot",
+               .offset = MTDPART_OFS_APPEND,
+               .size = SZ_256K - SZ_32K,
+               .mask_flags = MTD_WRITEABLE,
+       },
+       [3] = {
+               .name = "U-Boot-Environment",
+               .offset = MTDPART_OFS_APPEND,
+               .size = SZ_16K,
+               .mask_flags = 0,
+       },
+       [4] = {
+               .name = "Kernel",
+               .offset = MTDPART_OFS_APPEND,
+               .size = MTDPART_SIZ_FULL,
+               .mask_flags = 0,
+       },
+};
+
+static struct flash_platform_data da830evm_spiflash_data = {
+       .name           = "m25p80",
+       .parts          = da830evm_spiflash_part,
+       .nr_parts       = ARRAY_SIZE(da830evm_spiflash_part),
+       .type           = "w25x32",
+};
+
+static struct davinci_spi_config da830evm_spiflash_cfg = {
+       .io_type        = SPI_IO_TYPE_DMA,
+       .c2tdelay       = 8,
+       .t2cdelay       = 8,
+};
+
+static struct spi_board_info da830evm_spi_info[] = {
+       {
+               .modalias               = "m25p80",
+               .platform_data          = &da830evm_spiflash_data,
+               .controller_data        = &da830evm_spiflash_cfg,
+               .mode                   = SPI_MODE_0,
+               .max_speed_hz           = 30000000,
+               .bus_num                = 0,
+               .chip_select            = 0,
+       },
+};
+
 static __init void da830_evm_init(void)
 {
        struct davinci_soc_info *soc_info = &davinci_soc_info;
@@ -590,6 +651,12 @@ static __init void da830_evm_init(void)
        ret = da8xx_register_rtc();
        if (ret)
                pr_warning("da830_evm_init: rtc setup failed: %d\n", ret);
+
+       ret = da8xx_register_spi(0, da830evm_spi_info,
+                                ARRAY_SIZE(da830evm_spi_info));
+       if (ret)
+               pr_warning("da830_evm_init: spi 0 registration failed: %d\n",
+                          ret);
 }
 
 #ifdef CONFIG_SERIAL_8250_CONSOLE