|
@@ -0,0 +1,129 @@
|
|
|
+/*
|
|
|
+ * Copyright (C) 2007 Atmel Corporation
|
|
|
+ *
|
|
|
+ * This file is subject to the terms and conditions of the GNU General Public
|
|
|
+ * License. See the file COPYING in the main directory of this archive for
|
|
|
+ * more details.
|
|
|
+ */
|
|
|
+
|
|
|
+#include <asm/mach/arch.h>
|
|
|
+#include <asm/mach/map.h>
|
|
|
+
|
|
|
+#include <linux/dma-mapping.h>
|
|
|
+#include <linux/gpio.h>
|
|
|
+#include <linux/platform_device.h>
|
|
|
+#include <linux/i2c-gpio.h>
|
|
|
+
|
|
|
+#include <linux/fb.h>
|
|
|
+#include <video/atmel_lcdc.h>
|
|
|
+
|
|
|
+#include <mach/at91sam9rl.h>
|
|
|
+#include <mach/at91sam9rl_matrix.h>
|
|
|
+#include <mach/at91_matrix.h>
|
|
|
+#include <mach/at91sam9_smc.h>
|
|
|
+#include <linux/platform_data/dma-atmel.h>
|
|
|
+
|
|
|
+#include "board.h"
|
|
|
+#include "generic.h"
|
|
|
+
|
|
|
+
|
|
|
+/* --------------------------------------------------------------------
|
|
|
+ * HDMAC - AHB DMA Controller
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
+
|
|
|
+#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
|
|
|
+static u64 hdmac_dmamask = DMA_BIT_MASK(32);
|
|
|
+
|
|
|
+static struct resource hdmac_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = AT91SAM9RL_BASE_DMA,
|
|
|
+ .end = AT91SAM9RL_BASE_DMA + SZ_512 - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .start = NR_IRQS_LEGACY + AT91SAM9RL_ID_DMA,
|
|
|
+ .end = NR_IRQS_LEGACY + AT91SAM9RL_ID_DMA,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device at_hdmac_device = {
|
|
|
+ .name = "at91sam9rl_dma",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .dma_mask = &hdmac_dmamask,
|
|
|
+ .coherent_dma_mask = DMA_BIT_MASK(32),
|
|
|
+ },
|
|
|
+ .resource = hdmac_resources,
|
|
|
+ .num_resources = ARRAY_SIZE(hdmac_resources),
|
|
|
+};
|
|
|
+
|
|
|
+void __init at91_add_device_hdmac(void)
|
|
|
+{
|
|
|
+ platform_device_register(&at_hdmac_device);
|
|
|
+}
|
|
|
+#else
|
|
|
+void __init at91_add_device_hdmac(void) {}
|
|
|
+#endif
|
|
|
+
|
|
|
+/* --------------------------------------------------------------------
|
|
|
+ * USB HS Device (Gadget)
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
+
|
|
|
+#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
|
|
+
|
|
|
+static struct resource usba_udc_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = AT91SAM9RL_UDPHS_FIFO,
|
|
|
+ .end = AT91SAM9RL_UDPHS_FIFO + SZ_512K - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = AT91SAM9RL_BASE_UDPHS,
|
|
|
+ .end = AT91SAM9RL_BASE_UDPHS + SZ_1K - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .start = NR_IRQS_LEGACY + AT91SAM9RL_ID_UDPHS,
|
|
|
+ .end = NR_IRQS_LEGACY + AT91SAM9RL_ID_UDPHS,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+#define EP(nam, idx, maxpkt, maxbk, dma, isoc) \
|
|
|
+ [idx] = { \
|
|
|
+ .name = nam, \
|
|
|
+ .index = idx, \
|
|
|
+ .fifo_size = maxpkt, \
|
|
|
+ .nr_banks = maxbk, \
|
|
|
+ .can_dma = dma, \
|
|
|
+ .can_isoc = isoc, \
|
|
|
+ }
|
|
|
+
|
|
|
+static struct usba_ep_data usba_udc_ep[] __initdata = {
|
|
|
+ EP("ep0", 0, 64, 1, 0, 0),
|
|
|
+ EP("ep1", 1, 1024, 2, 1, 1),
|
|
|
+ EP("ep2", 2, 1024, 2, 1, 1),
|
|
|
+ EP("ep3", 3, 1024, 3, 1, 0),
|
|
|
+ EP("ep4", 4, 1024, 3, 1, 0),
|
|
|
+ EP("ep5", 5, 1024, 3, 1, 1),
|
|
|
+ EP("ep6", 6, 1024, 3, 1, 1),
|
|
|
+};
|
|
|
+
|
|
|
+#undef EP
|
|
|
+
|
|
|
+/*
|
|
|
+ * pdata doesn't have room for any endpoints, so we need to
|
|
|
+ * append room for the ones we need right after it.
|
|
|
+ */
|
|
|
+static struct {
|
|
|
+ struct usba_platform_data pdata;
|
|
|
+ struct usba_ep_data ep[7];
|
|
|
+} usba_udc_data;
|
|
|
+
|
|
|
+static struct platform_device at91_usba_udc_device = {
|
|
|
+ .name = "atmel_usba_udc",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &usba_udc_data.pdata,
|
|
|
+ },
|