| 
					
				 | 
			
			
				@@ -0,0 +1,170 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Copyright 2004-2009 Analog Devices Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *           2008-2009 Bluetechnix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *                2005 National ICT Australia (NICTA) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *                      Aidan Williams <aidan@nicta.com.au> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Licensed under the GPL-2 or later. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/device.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/export.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/etherdevice.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/platform_device.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/mtd/mtd.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/mtd/partitions.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/mtd/physmap.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/spi/spi.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/spi/flash.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/usb/isp1362.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/ata_platform.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/irq.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/dma.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/bfin5xx_spi.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/portmux.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/dpmc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/bfin_sport.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Name the Board for the /proc/cpuinfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const char bfin_board_name[] = "Bluetechnix CM BF537E"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_SPI_BFIN5XX) || defined(CONFIG_SPI_BFIN5XX_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* all SPI peripherals info goes here */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct mtd_partition bfin_spi_flash_partitions[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.name = "bootloader(spi)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.size = 0x00020000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.offset = 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.mask_flags = MTD_CAP_ROM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.name = "linux kernel(spi)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.size = 0xe0000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.offset = 0x20000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.name = "file system(spi)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.size = 0x700000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.offset = 0x00100000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct flash_platform_data bfin_spi_flash_data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name = "m25p80", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.parts = bfin_spi_flash_partitions, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.type = "m25p64", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* SPI flash chip (m25p64) */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct bfin5xx_spi_chip spi_flash_chip_info = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.enable_dma = 0,         /* use dma transfer with this chip*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct bfin5xx_spi_chip  mmc_spi_chip_info = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.enable_dma = 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct spi_board_info bfin_spi_board_info[] __initdata = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		/* the modalias must be the same as spi device driver name */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.modalias = "m25p80", /* Name of spi_driver for this device */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.bus_num = 0, /* Framework bus number */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.platform_data = &bfin_spi_flash_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.controller_data = &spi_flash_chip_info, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.mode = SPI_MODE_3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_SND_BF5XX_SOC_AD183X) || defined(CONFIG_SND_BF5XX_SOC_AD183X_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.modalias = "ad183x", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.max_speed_hz = 3125000,     /* max spi clock (SCK) speed in HZ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.bus_num = 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.chip_select = 4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.modalias = "mmc_spi", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.max_speed_hz = 20000000,     /* max spi clock (SCK) speed in HZ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.bus_num = 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.chip_select = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.controller_data = &mmc_spi_chip_info, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.mode = SPI_MODE_3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* SPI (0) */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource bfin_spi0_resource[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start = SPI0_REGBASE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end   = SPI0_REGBASE + 0xFF, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags = IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[1] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start = CH_SPI, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end   = CH_SPI, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags = IORESOURCE_DMA, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[2] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start = IRQ_SPI, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end   = IRQ_SPI, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags = IORESOURCE_IRQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* SPI controller data */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct bfin5xx_spi_master bfin_spi0_info = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_chipselect = 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.enable_dma = 1,  /* master has the ability to do dma transfer */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device bfin_spi0_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name = "bfin-spi", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id = 0, /* Bus number */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources = ARRAY_SIZE(bfin_spi0_resource), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource = bfin_spi0_resource, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.platform_data = &bfin_spi0_info, /* Passed to driver */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif  /* spi master and devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_SPI_BFIN_SPORT) || defined(CONFIG_SPI_BFIN_SPORT_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* SPORT SPI controller data */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct bfin5xx_spi_master bfin_sport_spi0_info = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_chipselect = MAX_BLACKFIN_GPIOS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.enable_dma = 0,  /* master don't support DMA */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.pin_req = {P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_DRPRI, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		P_SPORT0_RSCLK, P_SPORT0_TFS, P_SPORT0_RFS, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource bfin_sport_spi0_resource[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start = SPORT0_TCR1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end   = SPORT0_TCR1 + 0xFF, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags = IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[1] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start = IRQ_SPORT0_ERROR, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end   = IRQ_SPORT0_ERROR, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags = IORESOURCE_IRQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device bfin_sport_spi0_device = { 
			 |