summaryrefslogtreecommitdiffstats
path: root/board
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2008-10-27 12:09:18 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2008-10-27 17:29:29 +0100
commit27a7de44ee9e338dcfeca6d0445e688306844bf1 (patch)
tree8b72953f69b9e89df8f2cce711b54a49075a2323 /board
parent5482395b9e1e2c66b94c16b20e1d641cf725be09 (diff)
downloadbarebox-27a7de44ee9e338dcfeca6d0445e688306844bf1.tar.gz
barebox-27a7de44ee9e338dcfeca6d0445e688306844bf1.tar.xz
[at91sam9] Nand driver
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'board')
-rw-r--r--board/at91sam9260ek/init.c71
1 files changed, 30 insertions, 41 deletions
diff --git a/board/at91sam9260ek/init.c b/board/at91sam9260ek/init.c
index da9f0daf0b..5f35b0e3e6 100644
--- a/board/at91sam9260ek/init.c
+++ b/board/at91sam9260ek/init.c
@@ -31,50 +31,30 @@
#include <fcntl.h>
#include <asm/io.h>
#include <asm/hardware.h>
-#include <asm/arch/memory-map.h>
#include <nand.h>
#include <linux/mtd/nand.h>
-#include <asm/arch/gpio.h>
-
-#define MASK_ALE (1 << 21) /* our ALE is AD21 */
-#define MASK_CLE (1 << 22)
-
-static void at91sam9260ek_nand_hwcontrol(struct nand_chip *this, int cmd)
-{
- ulong IO_ADDR_W = (ulong) this->IO_ADDR_W;
-
- IO_ADDR_W &= ~(MASK_ALE|MASK_CLE);
- switch (cmd) {
- case NAND_CTL_SETCLE:
- IO_ADDR_W |= MASK_CLE;
- break;
- case NAND_CTL_SETALE:
- IO_ADDR_W |= MASK_ALE;
- break;
- case NAND_CTL_CLRNCE:
- at91_set_gpio_value(AT91_PIN_PC14, 1);
- break;
- case NAND_CTL_SETNCE:
- at91_set_gpio_value(AT91_PIN_PC14, 0);
- break;
- }
- this->IO_ADDR_W = (void *) IO_ADDR_W;
-}
-
-static int at91sam9260ek_nand_ready(struct nand_chip *this)
-{
- return at91_get_gpio_value(AT91_PIN_PC13);
-}
-
-static struct nand_platform_data nand_pdata = {
- .hwcontrol = at91sam9260ek_nand_hwcontrol,
- .eccmode = NAND_ECC_SOFT,
- .dev_ready = at91sam9260ek_nand_ready,
- .chip_delay = 20,
+#include <asm/arch/ether.h>
+#include <asm/arch/atmel_nand.h>
+#include <gpio.h>
+
+#define NAND_READY_GPIO (32 * 2 + 13) /* Port C pin 13 */
+#define NAND_ENABLE_GPIO (32 * 2 + 14) /* Port C pin 14 */
+
+static struct atmel_nand_data nand_pdata = {
+ .ale = 21,
+ .cle = 22,
+/* .det_pin = ... not connected */
+ .rdy_pin = NAND_READY_GPIO,
+ .enable_pin = NAND_ENABLE_GPIO,
+#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
+ .bus_width_16 = 1,
+#else
+ .bus_width_16 = 0,
+#endif
};
static struct device_d nand_dev = {
- .name = "nand_controller",
+ .name = "atmel_nand",
.map_base = 0x40000000,
.size = 0x10,
.platform_data = &nand_pdata,
@@ -90,12 +70,18 @@ static struct device_d sdram_dev = {
.type = DEVICE_TYPE_DRAM,
};
+static struct at91sam_ether_platform_data macb_pdata = {
+ .flags = AT91SAM_ETHER_RMII,
+ .phy_addr = 0,
+};
+
static struct device_d macb_dev = {
.name = "macb",
.id = "eth0",
- .map_base = AT91_BASE_EMAC,
+ .map_base = AT91C_BASE_EMACB,
.size = 0x1000,
.type = DEVICE_TYPE_ETHER,
+ .platform_data = &macb_pdata,
};
static int at91sam9260ek_devices_init(void)
@@ -107,6 +93,9 @@ static int at91sam9260ek_devices_init(void)
armlinux_set_bootparams((void *)0x20000100);
armlinux_set_architecture(MACH_TYPE_AT91SAM9260EK);
+ gpio_direction_input(NAND_READY_GPIO);
+ gpio_direction_output(NAND_ENABLE_GPIO, 1);
+
return 0;
}
@@ -115,7 +104,7 @@ device_initcall(at91sam9260ek_devices_init);
static struct device_d at91sam9260ek_serial_device = {
.name = "atmel_serial",
.id = "cs0",
- .map_base = USART3_BASE,
+ .map_base = AT91C_BASE_DBGU,
.size = 4096,
.type = DEVICE_TYPE_CONSOLE,
};