summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Grzeschik <m.grzeschik@pengutronix.de>2013-02-07 14:24:26 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-02-11 20:58:34 +0100
commit43e99fa0076301b6ac379c5d5278f894c0565a85 (patch)
tree472007010aea95a868ccc416e62a4b4a161a34d6
parent86024a9f70d0d38a03586624eff07692cff62bc4 (diff)
downloadbarebox-43e99fa0076301b6ac379c5d5278f894c0565a85.tar.gz
barebox-43e99fa0076301b6ac379c5d5278f894c0565a85.tar.xz
mx28evk: add m25p80 flash via ssp2
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/boards/freescale-mx28-evk/mx28-evk.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/arm/boards/freescale-mx28-evk/mx28-evk.c b/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
index 4311473e6..2e866a335 100644
--- a/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
+++ b/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
@@ -30,6 +30,7 @@
#include <mach/mci.h>
#include <mach/fb.h>
#include <mach/ocotp.h>
+#include <spi/spi.h>
#include <asm/armlinux.h>
#include <asm/mmu.h>
@@ -126,6 +127,12 @@ static const uint32_t mx28evk_pads[] = {
GPMI_ALE | VE_3_3V,
GPMI_CLE | VE_3_3V,
GPMI_RESETN, /* act as WP, external PU */
+
+ /* SSP */
+ SSP2_D0 | VE_3_3V | PULLUP(1) | STRENGTH(S8MA), /* MISO DO */
+ SSP2_D3 | VE_3_3V | PULLUP(1) | STRENGTH(S8MA), /* SS0 !CS */
+ SSP2_CMD | VE_3_3V | PULLUP(1) | STRENGTH(S8MA), /* MOSI DIO */
+ SSP2_SCK | VE_3_3V | PULLUP(1) | STRENGTH(S8MA), /* CLK */
};
static struct mxs_mci_platform_data mci_pdata = {
@@ -225,6 +232,19 @@ static int mx28_evk_mem_init(void)
}
mem_initcall(mx28_evk_mem_init);
+static const struct spi_board_info mx28evk_spi_board_info[] = {
+ {
+ .name = "m25p80",
+ /*
+ * we leave this with the lower frequency
+ * as the ssp unit otherwise locks up
+ */
+ .max_speed_hz = 32000000,
+ .bus_num = 2,
+ .chip_select = 0,
+ }
+};
+
static int mx28_evk_devices_init(void)
{
int i;
@@ -235,8 +255,11 @@ static int mx28_evk_devices_init(void)
/* enable IOCLK0 to run at the PLL frequency */
imx_set_ioclk(0, 480000000);
+ imx_set_ioclk(1, 320000000);
/* run the SSP unit clock at 100 MHz */
imx_set_sspclk(0, 100000000, 1);
+ /* run the SSP unit 2 clock at 160Mhz */
+ imx_set_sspclk(2, 160000000, 1);
armlinux_set_bootparams((void *)IMX_MEMORY_BASE + 0x100);
armlinux_set_architecture(MACH_TYPE_MX28EVK);
@@ -259,6 +282,12 @@ static int mx28_evk_devices_init(void)
add_generic_device("mxs_nand", 0, NULL, MXS_GPMI_BASE, 0x2000,
IORESOURCE_MEM, NULL);
+ spi_register_board_info(mx28evk_spi_board_info,
+ ARRAY_SIZE(mx28evk_spi_board_info));
+
+ add_generic_device("mxs_spi", 2, NULL, IMX_SSP2_BASE, 0x2000,
+ IORESOURCE_MEM, NULL);
+
return 0;
}
device_initcall(mx28_evk_devices_init);