diff mbox

[3/3] davinci: spi: modify platform data for updated SPIdriver

Message ID BA34378D1528D04CB3C865B8BAB2472B024D3E@transmx01.transcrypt.local (mailing list archive)
State Changes Requested
Headers show

Commit Message

Brian Niebuhr June 16, 2010, 3:57 p.m. UTC
None
diff mbox

Patch

diff --git a/arch/arm/mach-davinci/board-da850-evm.c
b/arch/arm/mach-davinci/boa
index 2ec3095..4ecae04 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -27,6 +27,8 @@ 
 #include <linux/regulator/machine.h>
 #include <linux/mfd/tps6507x.h>
 #include <linux/input/tps6507x-ts.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/flash.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -35,6 +37,7 @@ 
 #include <mach/da8xx.h>
 #include <mach/nand.h>
 #include <mach/mux.h>
+#include <mach/spi.h>
 
 #define DA850_EVM_PHY_MASK             0x1
 #define DA850_EVM_MDIO_FREQUENCY       2200000 /* PHY bus frequency */
@@ -92,6 +95,59 @@  static struct platform_device
da850_evm_norflash_device = {
        .resource       = da850_evm_norflash_resource,
 };
 
+static struct mtd_partition spi_flash_partitions[] = {
+       [0] = {
+               .name = "U-Boot",
+               .offset = 0,
+               .size = SZ_256K,
+               .mask_flags = MTD_WRITEABLE,
+       },
+       [1] = {
+               .name = "U-Boot Environment",
+               .offset = MTDPART_OFS_APPEND,
+               .size = SZ_64K,
+               .mask_flags = MTD_WRITEABLE,
+       },
+       [2] = {
+               .name = "Linux",
+               .offset = MTDPART_OFS_NXTBLK,
+               .size = SZ_8M - (SZ_256K + SZ_64K + SZ_64K),
+               .mask_flags = 0,
+       },
+};
+
+struct davinci_spi_config m25p64_spi_cfg = {
+       .odd_parity     = 0,
+       .parity_enable  = 0,
+       .intr_level     = 1,
+       .io_type        = SPI_IO_TYPE_DMA,
+       .wdelay         = 0,
+       .timer_disable  = 1,
+       .c2t_delay      = 0,
+       .t2c_delay      = 0,
+       .t2e_delay      = 0,
+       .c2e_delay      = 0,    
+};
+
+static struct flash_platform_data spi_flash_data = {
+       .name = "m25p80",
+       .parts = spi_flash_partitions,
+       .nr_parts = ARRAY_SIZE(spi_flash_partitions),
+       .type = "m25p64",
+};
+
+static struct spi_board_info da850_spi_board_info[] = {
+       [0] = {
+               .modalias = "m25p80",
+               .platform_data = &spi_flash_data,
+               .controller_data = &m25p64_spi_cfg,
+               .mode = SPI_MODE_0,
+               .max_speed_hz = 30000000,
+               .bus_num = 1,
+               .chip_select = 0,
+       },
+};
+
 static struct davinci_pm_config da850_pm_pdata = {
        .sleepcount = 128,
 };
@@ -629,6 +685,61 @@  static int __init da850_evm_config_emac(void)
 }
 device_initcall(da850_evm_config_emac);

+static struct davinci_spi_platform_data da850_spi_pdata1 = {
+       .version = SPI_VERSION_2,
+};
+
+static struct resource da850_spi_resources1[] = {
+       [0] = {
+               .start = 0x01F0E000,
+               .end = 0x01F0E000 + 0xfff,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = IRQ_DA8XX_SPINT1,
+               .end = IRQ_DA8XX_SPINT1,
+               .flags = IORESOURCE_IRQ,
+       },
+       [2] = {
+               .start = EDMA_CTLR_CHAN(0, 18),
+               .end = EDMA_CTLR_CHAN(0, 18),
+               .flags = IORESOURCE_DMA | IORESOURCE_DMA_RX_CHAN,
+       },
+       [3] = {
+               .start = EDMA_CTLR_CHAN(0, 19),
+               .end = EDMA_CTLR_CHAN(0, 19),
+               .flags = IORESOURCE_DMA | IORESOURCE_DMA_TX_CHAN,
+       },
+       [4] = {
+               .start = 1,
+               .end = 1,
+               .flags = IORESOURCE_DMA | IORESOURCE_DMA_EVENT_Q,
+       },
+};
+
+static struct platform_device da850_spi_pdev1 = {
+       .name = "spi_davinci",
+       .id = 1,
+       .resource = da850_spi_resources1,
+       .num_resources = ARRAY_SIZE(da850_spi_resources1),
+       .dev = {
+               .platform_data = &da850_spi_pdata1,
+       },
+};
+
+static void __init da850_init_spi1(unsigned char* chip_sel,
+       unsigned int num_sel, struct spi_board_info *info, unsigned
num_dev)
+{
+       struct davinci_spi_platform_data *pdata =
+                       da850_spi_pdev1.dev.platform_data;
+
+       spi_register_board_info(info, num_dev);
+
+       pdata->chip_sel = chip_sel;
+       pdata->num_chipselect = num_sel;
+       platform_device_register(&da850_spi_pdev1);
+}
+
 static __init void da850_evm_init(void)
 {
        int ret;
@@ -739,6 +850,9 @@  static __init void da850_evm_init(void)
                pr_warning("da850_evm_init: cpuidle registration failed:
%d\n",
                                ret);
 
+       da850_init_spi1(NULL, 1, da850_spi_board_info,
+                       ARRAY_SIZE(da850_spi_board_info));
+
        ret = da850_register_pm(&da850_pm_device);
        if (ret)
                pr_warning("da850_evm_init: suspend registration failed:
%d\n",


diff --git a/arch/arm/mach-davinci/da850.c
b/arch/arm/mach-davinci/da850.c
index 6b8331b..311c447 100644
--- a/arch/arm/mach-davinci/da850.c
+++ b/arch/arm/mach-davinci/da850.c
@@ -336,6 +336,13 @@  static struct clk aemif_clk = {
        .flags          = ALWAYS_ENABLED,
 };
 
+static struct clk spi1_clk = {
+       .name   = "spi1",
+       .parent = &pll0_sysclk2,
+       .lpsc   = DA8XX_LPSC1_SPI1,
+       .gpsc   = 1,
+};
+
 static struct clk_lookup da850_clks[] = {
        CLK(NULL,               "ref",          &ref_clk),
        CLK(NULL,               "pll0",         &pll0_clk),
@@ -377,6 +384,7 @@  static struct clk_lookup da850_clks[] = {
        CLK("da8xx_lcdc.0",     NULL,           &lcdc_clk),
        CLK("davinci_mmc.0",    NULL,           &mmcsd_clk),
        CLK(NULL,               "aemif",        &aemif_clk),
+       CLK("spi_davinci.1",    NULL,           &spi1_clk),
        CLK(NULL,               NULL,           NULL),
 };