2 * Copyright (C) 2008-2012 ST-Ericsson
4 * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
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.
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>
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>
37 #include <asm/mach-types.h>
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"
49 struct ab8500_platform_data ab8500_platdata = {
50 .irq_base = MOP500_AB8500_IRQ_BASE,
51 .regulator = &ab8500_regulator_plat_data,
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,
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,
68 struct pl022_ssp_controller ssp0_plat = {
70 #ifdef CONFIG_STE_DMA40
72 .dma_filter = stedma40_filter,
73 .dma_rx_param = &ssp0_dma_cfg_rx,
74 .dma_tx_param = &ssp0_dma_cfg_tx,
78 /* on this platform, gpio 31,142,144,214 &
79 * 224 are connected as chip selects
84 static void __init mop500_spi_init(struct device *parent)
86 db8500_add_ssp0(parent, &ssp0_plat);
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,
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,
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,
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,
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,
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,
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,
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,
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,
151 static void __init mop500_uart_init(struct device *parent)
153 db8500_add_uart0(parent, &uart0_plat);
154 db8500_add_uart1(parent, &uart1_plat);
155 db8500_add_uart2(parent, &uart2_plat);
158 static void __init mop500_init_machine(void)
160 struct device *parent = NULL;
162 platform_device_register(&db8500_prcmu_device);
164 mop500_pinmaps_init();
165 parent = u8500_init_devices();
167 mop500_sdi_init(parent);
168 mop500_spi_init(parent);
169 mop500_uart_init(parent);
171 /* This board has full regulator constraints */
172 regulator_has_full_constraints();
176 static void __init snowball_init_machine(void)
178 struct device *parent = NULL;
180 platform_device_register(&db8500_prcmu_device);
182 snowball_pinmaps_init();
183 parent = u8500_init_devices();
185 snowball_sdi_init(parent);
186 mop500_spi_init(parent);
187 mop500_uart_init(parent);
189 /* This board has full regulator constraints */
190 regulator_has_full_constraints();
193 static void __init hrefv60_init_machine(void)
195 struct device *parent = NULL;
197 platform_device_register(&db8500_prcmu_device);
199 hrefv60_pinmaps_init();
200 parent = u8500_init_devices();
202 hrefv60_sdi_init(parent);
203 mop500_spi_init(parent);
204 mop500_uart_init(parent);
206 /* This board has full regulator constraints */
207 regulator_has_full_constraints();
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,
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,
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,
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,
253 .restart = ux500_restart,