diff options
Diffstat (limited to 'arch/arm/mach-davinci/board-da830-evm.c')
| -rw-r--r-- | arch/arm/mach-davinci/board-da830-evm.c | 113 | 
1 files changed, 94 insertions, 19 deletions
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c index b52a3a1abd9..5623131c4f0 100644 --- a/arch/arm/mach-davinci/board-da830-evm.c +++ b/arch/arm/mach-davinci/board-da830-evm.c @@ -17,19 +17,24 @@  #include <linux/platform_device.h>  #include <linux/i2c.h>  #include <linux/i2c/pcf857x.h> -#include <linux/i2c/at24.h> +#include <linux/platform_data/at24.h>  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h> +#include <linux/spi/spi.h> +#include <linux/spi/flash.h> +#include <linux/platform_data/gpio-davinci.h> +#include <linux/platform_data/mtd-davinci.h> +#include <linux/platform_data/mtd-davinci-aemif.h> +#include <linux/platform_data/spi-davinci.h> +#include <linux/platform_data/usb-davinci.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> +#include <mach/common.h>  #include <mach/cp_intc.h>  #include <mach/mux.h> -#include <mach/nand.h>  #include <mach/da8xx.h> -#include <mach/usb.h> -#include <mach/aemif.h>  #define DA830_EVM_PHY_ID		""  /* @@ -71,7 +76,7 @@ static int da830_evm_usb_ocic_notify(da8xx_ocic_handler_t handler)  	if (handler != NULL) {  		da830_evm_usb_ocic_handler = handler; -		error = request_irq(irq, da830_evm_usb_ocic_irq, IRQF_DISABLED | +		error = request_irq(irq, da830_evm_usb_ocic_irq,  				    IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,  				    "OHCI over-current indicator", NULL);  		if (error) @@ -182,10 +187,6 @@ static __init void da830_evm_usb_init(void)  			   __func__, ret);  } -static struct davinci_uart_config da830_evm_uart_config __initdata = { -	.enabled_uarts = 0x7, -}; -  static const short da830_evm_mcasp1_pins[] = {  	DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1, DA830_AHCLKR1, DA830_AFSR1,  	DA830_AMUTE1, DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_5, @@ -243,7 +244,6 @@ static struct davinci_mmc_config da830_evm_mmc_config = {  	.wires			= 8,  	.max_freq		= 50000000,  	.caps			= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version		= MMC_CTLR_VERSION_2,  };  static inline void da830_evm_init_mmc(void) @@ -295,11 +295,7 @@ static const short da830_evm_emif25_pins[] = {  	-1  }; -#if defined(CONFIG_MMC_DAVINCI) || defined(CONFIG_MMC_DAVINCI_MODULE) -#define HAS_MMC	1 -#else -#define HAS_MMC	0 -#endif +#define HAS_MMC		IS_ENABLED(CONFIG_MMC_DAVINCI)  #ifdef CONFIG_DA830_UI_NAND  static struct mtd_partition da830_evm_nand_partitions[] = { @@ -374,7 +370,7 @@ static struct davinci_nand_pdata da830_evm_nand_pdata = {  	.nr_parts	= ARRAY_SIZE(da830_evm_nand_partitions),  	.ecc_mode	= NAND_ECC_HW,  	.ecc_bits	= 4, -	.options	= NAND_USE_FLASH_BBT, +	.bbt_options	= NAND_BBT_USE_FLASH,  	.bbt_td		= &da830_evm_nand_bbt_main_descr,  	.bbt_md		= &da830_evm_nand_bbt_mirror_descr,  	.timing         = &da830_evm_nandflash_timing, @@ -423,6 +419,9 @@ static inline void da830_evm_init_nand(int mux_mode)  	if (ret)  		pr_warning("da830_evm_init: NAND device not registered.\n"); +	if (davinci_aemif_setup(&da830_evm_nand_device)) +		pr_warn("%s: Cannot configure AEMIF.\n", __func__); +  	gpio_direction_output(mux_mode, 1);  }  #else @@ -534,11 +533,73 @@ 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;  	int ret; +	ret = da830_register_gpio(); +	if (ret) +		pr_warn("da830_evm_init: GPIO init failed: %d\n", ret); +  	ret = da830_register_edma(da830_edma_rsv);  	if (ret)  		pr_warning("da830_evm_init: edma registration failed: %d\n", @@ -574,7 +635,7 @@ static __init void da830_evm_init(void)  		pr_warning("da830_evm_init: watchdog registration failed: %d\n",  				ret); -	davinci_serial_init(&da830_evm_uart_config); +	davinci_serial_init(da8xx_serial_device);  	i2c_register_board_info(1, da830_evm_i2c_devices,  			ARRAY_SIZE(da830_evm_i2c_devices)); @@ -590,6 +651,17 @@ 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 = spi_register_board_info(da830evm_spi_info, +				      ARRAY_SIZE(da830evm_spi_info)); +	if (ret) +		pr_warn("%s: spi info registration failed: %d\n", __func__, +			ret); + +	ret = da8xx_register_spi_bus(0, ARRAY_SIZE(da830evm_spi_info)); +	if (ret) +		pr_warning("da830_evm_init: spi 0 registration failed: %d\n", +			   ret);  }  #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -609,9 +681,12 @@ static void __init da830_evm_map_io(void)  }  MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137/AM17x EVM") -	.boot_params	= (DA8XX_DDR_BASE + 0x100), +	.atag_offset	= 0x100,  	.map_io		= da830_evm_map_io,  	.init_irq	= cp_intc_init, -	.timer		= &davinci_timer, +	.init_time	= davinci_timer_init,  	.init_machine	= da830_evm_init, +	.init_late	= davinci_init_late, +	.dma_zone_size	= SZ_128M, +	.restart	= da8xx_restart,  MACHINE_END  | 
