]> Pileus Git - ~andy/linux/blob - arch/arm/mach-ux500/board-mop500.c
ARM: ux500: Remove I2C support when booting with ATAG support
[~andy/linux] / arch / arm / mach-ux500 / board-mop500.c
1 /*
2  * Copyright (C) 2008-2012 ST-Ericsson
3  *
4  * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2, as
8  * published by the Free Software Foundation.
9  *
10  */
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/interrupt.h>
14 #include <linux/platform_device.h>
15 #include <linux/clk.h>
16 #include <linux/io.h>
17 #include <linux/platform_data/db8500_thermal.h>
18 #include <linux/gpio.h>
19 #include <linux/amba/bus.h>
20 #include <linux/amba/pl022.h>
21 #include <linux/amba/serial.h>
22 #include <linux/spi/spi.h>
23 #include <linux/mfd/abx500/ab8500.h>
24 #include <linux/regulator/ab8500.h>
25 #include <linux/regulator/fixed.h>
26 #include <linux/regulator/driver.h>
27 #include <linux/mfd/tps6105x.h>
28 #include <linux/mfd/abx500/ab8500-gpio.h>
29 #include <linux/platform_data/leds-lp55xx.h>
30 #include <linux/input.h>
31 #include <linux/delay.h>
32 #include <linux/leds.h>
33 #include <linux/pinctrl/consumer.h>
34 #include <linux/platform_data/pinctrl-nomadik.h>
35 #include <linux/platform_data/dma-ste-dma40.h>
36
37 #include <asm/mach-types.h>
38
39 #include "setup.h"
40 #include "devices.h"
41 #include "irqs.h"
42
43 #include "ste-dma40-db8500.h"
44 #include "db8500-regs.h"
45 #include "devices-db8500.h"
46 #include "board-mop500.h"
47 #include "board-mop500-regulators.h"
48
49 struct ab8500_platform_data ab8500_platdata = {
50         .irq_base       = MOP500_AB8500_IRQ_BASE,
51         .regulator      = &ab8500_regulator_plat_data,
52 };
53
54 #ifdef CONFIG_STE_DMA40
55 static struct stedma40_chan_cfg ssp0_dma_cfg_rx = {
56         .mode = STEDMA40_MODE_LOGICAL,
57         .dir = DMA_DEV_TO_MEM,
58         .dev_type = DB8500_DMA_DEV8_SSP0,
59 };
60
61 static struct stedma40_chan_cfg ssp0_dma_cfg_tx = {
62         .mode = STEDMA40_MODE_LOGICAL,
63         .dir = DMA_MEM_TO_DEV,
64         .dev_type = DB8500_DMA_DEV8_SSP0,
65 };
66 #endif
67
68 struct pl022_ssp_controller ssp0_plat = {
69         .bus_id = 0,
70 #ifdef CONFIG_STE_DMA40
71         .enable_dma = 1,
72         .dma_filter = stedma40_filter,
73         .dma_rx_param = &ssp0_dma_cfg_rx,
74         .dma_tx_param = &ssp0_dma_cfg_tx,
75 #else
76         .enable_dma = 0,
77 #endif
78         /* on this platform, gpio 31,142,144,214 &
79          * 224 are connected as chip selects
80          */
81         .num_chipselect = 5,
82 };
83
84 static void __init mop500_spi_init(struct device *parent)
85 {
86         db8500_add_ssp0(parent, &ssp0_plat);
87 }
88
89 #ifdef CONFIG_STE_DMA40
90 static struct stedma40_chan_cfg uart0_dma_cfg_rx = {
91         .mode = STEDMA40_MODE_LOGICAL,
92         .dir = DMA_DEV_TO_MEM,
93         .dev_type = DB8500_DMA_DEV13_UART0,
94 };
95
96 static struct stedma40_chan_cfg uart0_dma_cfg_tx = {
97         .mode = STEDMA40_MODE_LOGICAL,
98         .dir = DMA_MEM_TO_DEV,
99         .dev_type = DB8500_DMA_DEV13_UART0,
100 };
101
102 static struct stedma40_chan_cfg uart1_dma_cfg_rx = {
103         .mode = STEDMA40_MODE_LOGICAL,
104         .dir = DMA_DEV_TO_MEM,
105         .dev_type = DB8500_DMA_DEV12_UART1,
106 };
107
108 static struct stedma40_chan_cfg uart1_dma_cfg_tx = {
109         .mode = STEDMA40_MODE_LOGICAL,
110         .dir = DMA_MEM_TO_DEV,
111         .dev_type = DB8500_DMA_DEV12_UART1,
112 };
113
114 static struct stedma40_chan_cfg uart2_dma_cfg_rx = {
115         .mode = STEDMA40_MODE_LOGICAL,
116         .dir = DMA_DEV_TO_MEM,
117         .dev_type = DB8500_DMA_DEV11_UART2,
118 };
119
120 static struct stedma40_chan_cfg uart2_dma_cfg_tx = {
121         .mode = STEDMA40_MODE_LOGICAL,
122         .dir = DMA_MEM_TO_DEV,
123         .dev_type = DB8500_DMA_DEV11_UART2,
124 };
125 #endif
126
127 struct amba_pl011_data uart0_plat = {
128 #ifdef CONFIG_STE_DMA40
129         .dma_filter = stedma40_filter,
130         .dma_rx_param = &uart0_dma_cfg_rx,
131         .dma_tx_param = &uart0_dma_cfg_tx,
132 #endif
133 };
134
135 struct amba_pl011_data uart1_plat = {
136 #ifdef CONFIG_STE_DMA40
137         .dma_filter = stedma40_filter,
138         .dma_rx_param = &uart1_dma_cfg_rx,
139         .dma_tx_param = &uart1_dma_cfg_tx,
140 #endif
141 };
142
143 struct amba_pl011_data uart2_plat = {
144 #ifdef CONFIG_STE_DMA40
145         .dma_filter = stedma40_filter,
146         .dma_rx_param = &uart2_dma_cfg_rx,
147         .dma_tx_param = &uart2_dma_cfg_tx,
148 #endif
149 };
150
151 static void __init mop500_uart_init(struct device *parent)
152 {
153         db8500_add_uart0(parent, &uart0_plat);
154         db8500_add_uart1(parent, &uart1_plat);
155         db8500_add_uart2(parent, &uart2_plat);
156 }
157
158 static void __init mop500_init_machine(void)
159 {
160         struct device *parent = NULL;
161
162         platform_device_register(&db8500_prcmu_device);
163
164         mop500_pinmaps_init();
165         parent = u8500_init_devices();
166
167         mop500_sdi_init(parent);
168         mop500_spi_init(parent);
169         mop500_uart_init(parent);
170
171         /* This board has full regulator constraints */
172         regulator_has_full_constraints();
173 }
174
175
176 static void __init snowball_init_machine(void)
177 {
178         struct device *parent = NULL;
179
180         platform_device_register(&db8500_prcmu_device);
181
182         snowball_pinmaps_init();
183         parent = u8500_init_devices();
184
185         snowball_sdi_init(parent);
186         mop500_spi_init(parent);
187         mop500_uart_init(parent);
188
189         /* This board has full regulator constraints */
190         regulator_has_full_constraints();
191 }
192
193 static void __init hrefv60_init_machine(void)
194 {
195         struct device *parent = NULL;
196
197         platform_device_register(&db8500_prcmu_device);
198
199         hrefv60_pinmaps_init();
200         parent = u8500_init_devices();
201
202         hrefv60_sdi_init(parent);
203         mop500_spi_init(parent);
204         mop500_uart_init(parent);
205
206         /* This board has full regulator constraints */
207         regulator_has_full_constraints();
208 }
209
210 MACHINE_START(U8500, "ST-Ericsson MOP500 platform")
211         /* Maintainer: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> */
212         .atag_offset    = 0x100,
213         .smp            = smp_ops(ux500_smp_ops),
214         .map_io         = u8500_map_io,
215         .init_irq       = ux500_init_irq,
216         /* we re-use nomadik timer here */
217         .init_time      = ux500_timer_init,
218         .init_machine   = mop500_init_machine,
219         .init_late      = ux500_init_late,
220         .restart        = ux500_restart,
221 MACHINE_END
222
223 MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520")
224         .atag_offset    = 0x100,
225         .map_io         = u8500_map_io,
226         .init_irq       = ux500_init_irq,
227         .init_time      = ux500_timer_init,
228         .init_machine   = mop500_init_machine,
229         .init_late      = ux500_init_late,
230         .restart        = ux500_restart,
231 MACHINE_END
232
233 MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+")
234         .atag_offset    = 0x100,
235         .smp            = smp_ops(ux500_smp_ops),
236         .map_io         = u8500_map_io,
237         .init_irq       = ux500_init_irq,
238         .init_time      = ux500_timer_init,
239         .init_machine   = hrefv60_init_machine,
240         .init_late      = ux500_init_late,
241         .restart        = ux500_restart,
242 MACHINE_END
243
244 MACHINE_START(SNOWBALL, "Calao Systems Snowball platform")
245         .atag_offset    = 0x100,
246         .smp            = smp_ops(ux500_smp_ops),
247         .map_io         = u8500_map_io,
248         .init_irq       = ux500_init_irq,
249         /* we re-use nomadik timer here */
250         .init_time      = ux500_timer_init,
251         .init_machine   = snowball_init_machine,
252         .init_late      = NULL,
253         .restart        = ux500_restart,
254 MACHINE_END