]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/arm/mach-ux500/board-mop500-sdi.c
Merge branch 'next/drivers' into for-next
[karo-tx-linux.git] / arch / arm / mach-ux500 / board-mop500-sdi.c
1 /*
2  * Copyright (C) ST-Ericsson SA 2010
3  *
4  * Author: Hanumath Prasad <hanumath.prasad@stericsson.com>
5  * License terms: GNU General Public License (GPL) version 2
6  */
7
8 #include <linux/kernel.h>
9 #include <linux/gpio.h>
10 #include <linux/amba/bus.h>
11 #include <linux/amba/mmci.h>
12 #include <linux/mmc/host.h>
13 #include <linux/platform_device.h>
14 #include <linux/platform_data/dma-ste-dma40.h>
15
16 #include <asm/mach-types.h>
17
18 #include "db8500-regs.h"
19 #include "board-mop500.h"
20 #include "ste-dma40-db8500.h"
21
22 /*
23  * v2 has a new version of this block that need to be forced, the number found
24  * in hardware is incorrect
25  */
26 #define U8500_SDI_V2_PERIPHID 0x10480180
27
28 /*
29  * SDI 0 (MicroSD slot)
30  */
31
32 #ifdef CONFIG_STE_DMA40
33 struct stedma40_chan_cfg mop500_sdi0_dma_cfg_rx = {
34         .mode = STEDMA40_MODE_LOGICAL,
35         .dir = DMA_DEV_TO_MEM,
36         .dev_type = DB8500_DMA_DEV29_SD_MM0,
37 };
38
39 static struct stedma40_chan_cfg mop500_sdi0_dma_cfg_tx = {
40         .mode = STEDMA40_MODE_LOGICAL,
41         .dir = DMA_MEM_TO_DEV,
42         .dev_type = DB8500_DMA_DEV29_SD_MM0,
43 };
44 #endif
45
46 struct mmci_platform_data mop500_sdi0_data = {
47         .f_max          = 100000000,
48         .capabilities   = MMC_CAP_4_BIT_DATA |
49                                 MMC_CAP_SD_HIGHSPEED |
50                                 MMC_CAP_MMC_HIGHSPEED |
51                                 MMC_CAP_ERASE |
52                                 MMC_CAP_UHS_SDR12 |
53                                 MMC_CAP_UHS_SDR25,
54         .gpio_wp        = -1,
55         .sigdir         = MCI_ST_FBCLKEN |
56                                 MCI_ST_CMDDIREN |
57                                 MCI_ST_DATA0DIREN |
58                                 MCI_ST_DATA2DIREN,
59 #ifdef CONFIG_STE_DMA40
60         .dma_filter     = stedma40_filter,
61         .dma_rx_param   = &mop500_sdi0_dma_cfg_rx,
62         .dma_tx_param   = &mop500_sdi0_dma_cfg_tx,
63 #endif
64 };
65
66 /*
67  * SDI1 (SDIO WLAN)
68  */
69 #ifdef CONFIG_STE_DMA40
70 static struct stedma40_chan_cfg sdi1_dma_cfg_rx = {
71         .mode = STEDMA40_MODE_LOGICAL,
72         .dir = DMA_DEV_TO_MEM,
73         .dev_type = DB8500_DMA_DEV32_SD_MM1,
74 };
75
76 static struct stedma40_chan_cfg sdi1_dma_cfg_tx = {
77         .mode = STEDMA40_MODE_LOGICAL,
78         .dir = DMA_MEM_TO_DEV,
79         .dev_type = DB8500_DMA_DEV32_SD_MM1,
80 };
81 #endif
82
83 struct mmci_platform_data mop500_sdi1_data = {
84         .ocr_mask       = MMC_VDD_29_30,
85         .f_max          = 100000000,
86         .capabilities   = MMC_CAP_4_BIT_DATA |
87                                 MMC_CAP_NONREMOVABLE,
88         .gpio_cd        = -1,
89         .gpio_wp        = -1,
90 #ifdef CONFIG_STE_DMA40
91         .dma_filter     = stedma40_filter,
92         .dma_rx_param   = &sdi1_dma_cfg_rx,
93         .dma_tx_param   = &sdi1_dma_cfg_tx,
94 #endif
95 };
96
97 /*
98  * SDI 2 (POP eMMC, not on DB8500ed)
99  */
100
101 #ifdef CONFIG_STE_DMA40
102 struct stedma40_chan_cfg mop500_sdi2_dma_cfg_rx = {
103         .mode = STEDMA40_MODE_LOGICAL,
104         .dir = DMA_DEV_TO_MEM,
105         .dev_type =  DB8500_DMA_DEV28_SD_MM2,
106 };
107
108 static struct stedma40_chan_cfg mop500_sdi2_dma_cfg_tx = {
109         .mode = STEDMA40_MODE_LOGICAL,
110         .dir = DMA_MEM_TO_DEV,
111         .dev_type = DB8500_DMA_DEV28_SD_MM2,
112 };
113 #endif
114
115 struct mmci_platform_data mop500_sdi2_data = {
116         .ocr_mask       = MMC_VDD_165_195,
117         .f_max          = 100000000,
118         .capabilities   = MMC_CAP_4_BIT_DATA |
119                                 MMC_CAP_8_BIT_DATA |
120                                 MMC_CAP_NONREMOVABLE |
121                                 MMC_CAP_MMC_HIGHSPEED |
122                                 MMC_CAP_ERASE |
123                                 MMC_CAP_CMD23,
124         .gpio_cd        = -1,
125         .gpio_wp        = -1,
126 #ifdef CONFIG_STE_DMA40
127         .dma_filter     = stedma40_filter,
128         .dma_rx_param   = &mop500_sdi2_dma_cfg_rx,
129         .dma_tx_param   = &mop500_sdi2_dma_cfg_tx,
130 #endif
131 };
132
133 /*
134  * SDI 4 (on-board eMMC)
135  */
136
137 #ifdef CONFIG_STE_DMA40
138 struct stedma40_chan_cfg mop500_sdi4_dma_cfg_rx = {
139         .mode = STEDMA40_MODE_LOGICAL,
140         .dir = DMA_DEV_TO_MEM,
141         .dev_type =  DB8500_DMA_DEV42_SD_MM4,
142 };
143
144 static struct stedma40_chan_cfg mop500_sdi4_dma_cfg_tx = {
145         .mode = STEDMA40_MODE_LOGICAL,
146         .dir = DMA_MEM_TO_DEV,
147         .dev_type = DB8500_DMA_DEV42_SD_MM4,
148 };
149 #endif
150
151 struct mmci_platform_data mop500_sdi4_data = {
152         .f_max          = 100000000,
153         .capabilities   = MMC_CAP_4_BIT_DATA |
154                                 MMC_CAP_8_BIT_DATA |
155                                 MMC_CAP_NONREMOVABLE |
156                                 MMC_CAP_MMC_HIGHSPEED |
157                                 MMC_CAP_ERASE |
158                                 MMC_CAP_CMD23,
159         .gpio_cd        = -1,
160         .gpio_wp        = -1,
161 #ifdef CONFIG_STE_DMA40
162         .dma_filter     = stedma40_filter,
163         .dma_rx_param   = &mop500_sdi4_dma_cfg_rx,
164         .dma_tx_param   = &mop500_sdi4_dma_cfg_tx,
165 #endif
166 };