Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
devices-db8500.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) ST-Ericsson SA 2010
3  *
4  * Author: Rabin Vincent <[email protected]> for ST-Ericsson
5  * License terms: GNU General Public License (GPL) version 2
6  */
7 
8 #include <linux/kernel.h>
10 #include <linux/interrupt.h>
11 #include <linux/io.h>
12 #include <linux/gpio.h>
13 #include <linux/amba/bus.h>
14 #include <linux/amba/pl022.h>
15 
16 #include <plat/ste_dma40.h>
17 
18 #include <mach/hardware.h>
19 #include <mach/setup.h>
20 
21 #include "ste-dma40-db8500.h"
22 
23 static struct resource dma40_resources[] = {
24  [0] = {
25  .start = U8500_DMA_BASE,
26  .end = U8500_DMA_BASE + SZ_4K - 1,
27  .flags = IORESOURCE_MEM,
28  .name = "base",
29  },
30  [1] = {
31  .start = U8500_DMA_LCPA_BASE,
32  .end = U8500_DMA_LCPA_BASE + 2 * SZ_1K - 1,
33  .flags = IORESOURCE_MEM,
34  .name = "lcpa",
35  },
36  [2] = {
37  .start = IRQ_DB8500_DMA,
38  .end = IRQ_DB8500_DMA,
39  .flags = IORESOURCE_IRQ,
40  }
41 };
42 
43 /* Default configuration for physcial memcpy */
45  .mode = STEDMA40_MODE_PHYSICAL,
46  .dir = STEDMA40_MEM_TO_MEM,
47 
48  .src_info.data_width = STEDMA40_BYTE_WIDTH,
49  .src_info.psize = STEDMA40_PSIZE_PHY_1,
50  .src_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
51 
52  .dst_info.data_width = STEDMA40_BYTE_WIDTH,
53  .dst_info.psize = STEDMA40_PSIZE_PHY_1,
54  .dst_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
55 };
56 /* Default configuration for logical memcpy */
58  .dir = STEDMA40_MEM_TO_MEM,
59 
60  .src_info.data_width = STEDMA40_BYTE_WIDTH,
61  .src_info.psize = STEDMA40_PSIZE_LOG_1,
62  .src_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
63 
64  .dst_info.data_width = STEDMA40_BYTE_WIDTH,
65  .dst_info.psize = STEDMA40_PSIZE_LOG_1,
66  .dst_info.flow_ctrl = STEDMA40_NO_FLOW_CTRL,
67 };
68 
69 /*
70  * Mapping between destination event lines and physical device address.
71  * The event line is tied to a device and therefore the address is constant.
72  * When the address comes from a primecell it will be configured in runtime
73  * and we set the address to -1 as a placeholder.
74  */
75 static const dma_addr_t dma40_tx_map[DB8500_DMA_NR_DEV] = {
76  /* MUSB - these will be runtime-reconfigured */
85  /* PrimeCells - run-time configured */
109 };
110 
111 /* Mapping between source event lines and physical device address */
112 static const dma_addr_t dma40_rx_map[DB8500_DMA_NR_DEV] = {
113  /* MUSB - these will be runtime-reconfigured */
122  /* PrimeCells */
145 };
146 
147 /* Reserved event lines for memcpy only */
148 static int dma40_memcpy_event[] = {
155 };
156 
157 static struct stedma40_platform_data dma40_plat_data = {
158  .dev_len = DB8500_DMA_NR_DEV,
159  .dev_rx = dma40_rx_map,
160  .dev_tx = dma40_tx_map,
161  .memcpy = dma40_memcpy_event,
162  .memcpy_len = ARRAY_SIZE(dma40_memcpy_event),
163  .memcpy_conf_phy = &dma40_memcpy_conf_phy,
164  .memcpy_conf_log = &dma40_memcpy_conf_log,
165  .disabled_channels = {-1},
166 };
167 
169  .dev = {
170  .platform_data = &dma40_plat_data,
171  },
172  .name = "dma40",
173  .id = 0,
174  .num_resources = ARRAY_SIZE(dma40_resources),
175  .resource = dma40_resources
176 };
177 
179  [0] = {
180  .start = U8500_SKE_BASE,
181  .end = U8500_SKE_BASE + SZ_4K - 1,
182  .flags = IORESOURCE_MEM,
183  },
184  [1] = {
185  .start = IRQ_DB8500_KB,
186  .end = IRQ_DB8500_KB,
187  .flags = IORESOURCE_IRQ,
188  },
189 };
190 
192  .name = "nmk-ske-keypad",
193  .id = -1,
194  .num_resources = ARRAY_SIZE(keypad_resources),
195  .resource = keypad_resources,
196 };