14036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/*
24036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  linux/arch/arm/mach-pxa/stargate2.c
34036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *
44036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  Author:	Ed C. Epp
54036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  Created:	Nov 05, 2002
64036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  Copyright:	Intel Corp.
74036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *
84036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  Modified 2009:  Jonathan Cameron <jic23@cam.ac.uk>
94036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *
104036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  This program is free software; you can redistribute it and/or modify
114036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  it under the terms of the GNU General Public License version 2 as
124036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *  published by the Free Software Foundation.
134036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron */
144036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
154036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/init.h>
164036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/device.h>
174036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/interrupt.h>
184036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/sched.h>
194036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/bitops.h>
204036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/fb.h>
214036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/delay.h>
224036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/platform_device.h>
234036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/regulator/machine.h>
244036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/mtd/mtd.h>
254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/mtd/plat-ram.h>
264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/mtd/partitions.h>
274036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
28b459396ee9398bdf61e3118ca730394f58e90c9cSebastian Andrzej Siewior#include <linux/i2c/pxa-i2c.h>
294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/i2c/pcf857x.h>
304036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/i2c/at24.h>
314036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/smc91x.h>
324036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/gpio.h>
33dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#include <linux/leds.h>
344036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
354036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/types.h>
364036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/setup.h>
374036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/memory.h>
384036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/mach-types.h>
394036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/irq.h>
404036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
414036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/mach/arch.h>
424036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/mach/map.h>
434036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/mach/irq.h>
444036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <asm/mach/flash.h>
454036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
464036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <mach/pxa27x.h>
474036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <mach/mmc.h>
484036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <mach/udc.h>
494036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <mach/pxa27x-udc.h>
50ad68bb9f7a3cd47396635a5e3895215af57579daMarek Vasut#include <mach/smemc.h>
514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
524036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/spi/spi.h>
538348c259dd6a6019a8fa01b0a3443409480f7b9dSebastian Andrzej Siewior#include <linux/spi/pxa2xx_spi.h>
544036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/mfd/da903x.h>
554036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include <linux/sht15.h>
564036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
574036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include "devices.h"
584036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#include "generic.h"
594036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
606ac6b817f3f4c23c5febd960d8deb343e13af5f3Haojian Zhuang#define STARGATE_NR_IRQS	(IRQ_BOARD_START + 8)
616ac6b817f3f4c23c5febd960d8deb343e13af5f3Haojian Zhuang
624036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/* Bluetooth */
634036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#define SG2_BT_RESET		81
644036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
654036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/* SD */
664036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#define SG2_GPIO_nSD_DETECT	90
674036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron#define SG2_SD_POWER_ENABLE	89
684036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
69dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic unsigned long sg2_im2_unified_pin_config[] __initdata = {
704036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* Device Identification for wakeup*/
714036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO102_GPIO,
724036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* DA9030 */
734036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO1_GPIO,
744036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
754036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* MMC */
764036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO32_MMC_CLK,
774036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO112_MMC_CMD,
784036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO92_MMC_DAT_0,
794036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO109_MMC_DAT_1,
804036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO110_MMC_DAT_2,
814036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO111_MMC_DAT_3,
824036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
83dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* 802.15.4 radio - driver out of mainline */
84dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO22_GPIO,			/* CC_RSTN */
85dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO114_GPIO,			/* CC_FIFO */
86dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO116_GPIO,			/* CC_CCA */
87dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO0_GPIO,			/* CC_FIFOP */
88dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO16_GPIO,			/* CCSFD */
89dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO115_GPIO,			/* Power enable */
904036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
914036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* I2C */
924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO117_I2C_SCL,
934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO118_I2C_SDA,
944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
954036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* SSP 3 - 802.15.4 radio */
96dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO39_GPIO,			/* Chip Select */
974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO34_SSP3_SCLK,
984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO35_SSP3_TXD,
994036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO41_SSP3_RXD,
1004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
101dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* SSP 2 to daughter boards */
1024036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO11_SSP2_RXD,
1034036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO38_SSP2_TXD,
1044036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO36_SSP2_SCLK,
1054036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO37_GPIO, /* chip select */
1064036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
107dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* SSP 1 - to daughter boards */
108dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO24_GPIO,			/* Chip Select */
1094036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO23_SSP1_SCLK,
110dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO25_SSP1_TXD,
111dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO26_SSP1_RXD,
1124036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
113dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* BTUART Basic Connector*/
1144036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO42_BTUART_RXD,
1154036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO43_BTUART_TXD,
1164036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO44_BTUART_CTS,
1174036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO45_BTUART_RTS,
1184036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
119dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* STUART  - IM2 via debug board not sure on SG2*/
1204036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO46_STUART_RXD,
1214036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO47_STUART_TXD,
1224036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1234036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* Basic sensor board */
1244036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO96_GPIO,	/* accelerometer interrupt */
1254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO99_GPIO,	/* ADC interrupt */
1264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1274036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* SHT15 */
1284036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO100_GPIO,
1294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	GPIO98_GPIO,
1304036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
131dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* Basic sensor board */
132dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO96_GPIO,	/* accelerometer interrupt */
133dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO99_GPIO,	/* ADC interrupt */
1344036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
135dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* Connector pins specified as gpios */
136dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO94_GPIO, /* large basic connector pin 14 */
137dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO10_GPIO, /* large basic connector pin 23 */
1384036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
1394036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1404036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct sht15_platform_data platform_data_sht15 = {
1414036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.gpio_data =  100,
1424036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.gpio_sck  =  98,
1434036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
1444036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1454036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct platform_device sht15 = {
1464036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.name = "sht15",
1474036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.id = -1,
1484036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.dev = {
1494036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &platform_data_sht15,
1504036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
1514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
1524036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1534036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct regulator_consumer_supply stargate2_sensor_3_con[] = {
1544036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	{
1555616131daff6047d293b25a05cff7b1890efd6a3Haojian Zhuang		.dev_name = "sht15",
1564036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.supply = "vcc",
1574036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
1584036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
1594036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1604036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronenum stargate2_ldos{
1614036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_vref,
1624036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_cc2420,
1634036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* a mote connector? */
1644036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_mica,
1654036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* the CSR bluecore chip */
1664036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_bt,
1674036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* The two voltages available to sensor boards */
1684036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_sensor_1_8,
1694036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_sensor_3,
1704036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* directly connected to the pxa27x */
1714036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_sram_ext,
1724036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_pxa_pll,
1734036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_pxa_usim, /* Reference voltage for certain gpios */
1744036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_pxa_mem,
1754036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_pxa_flash,
1764036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_pxa_core, /*Dc-Dc buck not yet supported */
1774036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_lcd,
1784036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_bb,
1794036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_bbio, /*not sure!*/
1804036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	vcc_io, /* cc2420 802.15.4 radio and pxa vcc_io ?*/
1814036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
1824036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1834036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/* The values of the various regulator constraints are obviously dependent
1844036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * on exactly what is wired to each ldo.  Unfortunately this information is
1854036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * not generally available.  More information has been requested from Xbow.
1864036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron */
1874036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct regulator_init_data stargate2_ldo_init_data[] = {
1884036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_bbio] = {
1894036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* board default 1.8V */
1904036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_bbio",
1914036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1800000,
1924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 1800000,
1934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
1944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
1954036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_bb] = {
1964036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* board default 2.8V */
1974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_bb",
1984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2700000,
1994036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 3000000,
2004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2014036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2024036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_pxa_flash] = {
2034036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = {/* default is 1.8V */
2044036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_pxa_flash",
2054036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1800000,
2064036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 1800000,
2074036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2084036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2094036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_cc2420] = { /* also vcc_io */
2104036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = {
2114036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			/* board default is 2.8V */
2124036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_cc2420",
2134036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2700000,
2144036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 3300000,
2154036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2164036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2174036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_vref] = { /* Reference for what? */
2184036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 1.8V */
2194036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_vref",
2204036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1800000,
2214036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 1800000,
2224036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2234036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2244036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_sram_ext] = {
2254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 2.8V */
2264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_sram_ext",
2274036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2800000,
2284036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 2800000,
2294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2304036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2314036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_mica] = {
2324036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 2.8V */
2334036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_mica",
2344036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2800000,
2354036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 2800000,
2364036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2374036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2384036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_bt] = {
2394036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 2.8V */
2404036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_bt",
2414036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2800000,
2424036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 2800000,
2434036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2444036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2454036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_lcd] = {
2464036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 2.8V */
2474036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_lcd",
2484036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2700000,
2494036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 3300000,
2504036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2524036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_io] = { /* Same or higher than everything
2534036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			  * bar vccbat and vccusb */
2544036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 2.8V */
2554036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_io",
2564036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2692000,
2574036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 3300000,
2584036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2594036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2604036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_sensor_1_8] = {
2614036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 1.8V */
2624036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_sensor_1_8",
2634036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1800000,
2644036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 1800000,
2654036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2664036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2674036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_sensor_3] = { /* curiously default 2.8V */
2684036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = {
2694036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_sensor_3",
2704036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 2800000,
2714036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 3000000,
2724036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2734036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.num_consumer_supplies = ARRAY_SIZE(stargate2_sensor_3_con),
2744036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.consumer_supplies = stargate2_sensor_3_con,
2754036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2764036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
2774036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = {
2784036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_pxa_pll",
2794036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1170000,
2804036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 1430000,
2814036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2824036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2834036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_pxa_usim] = {
2844036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 1.8V */
2854036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_pxa_usim",
2864036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1710000,
2874036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 2160000,
2884036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2894036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2904036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	[vcc_pxa_mem] = {
2914036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.constraints = { /* default 1.8V */
2924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.name = "vcc_pxa_mem",
2934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.min_uV = 1800000,
2944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			.max_uV = 1800000,
2954036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		},
2964036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
2974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
2984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
299dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct mtd_partition stargate2flash_partitions[] = {
3004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	{
301dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "Bootloader",
302dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.size = 0x00040000,
303dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.offset = 0,
304dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.mask_flags = 0,
3054036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
306dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "Kernel",
307dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.size = 0x00200000,
308dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.offset = 0x00040000,
309dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.mask_flags = 0
3104036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
311dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "Filesystem",
312dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.size = 0x01DC0000,
313dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.offset = 0x00240000,
314dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.mask_flags = 0
315dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
316dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
317dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
318dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct resource flash_resources = {
319dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.start = PXA_CS0_PHYS,
320dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.end = PXA_CS0_PHYS + SZ_32M - 1,
321dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.flags = IORESOURCE_MEM,
322dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
323dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
324dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct flash_platform_data stargate2_flash_data = {
325dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.map_name = "cfi_probe",
326dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.parts = stargate2flash_partitions,
327dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.nr_parts = ARRAY_SIZE(stargate2flash_partitions),
328dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.name = "PXA27xOnChipROM",
329dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.width = 2,
330dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
331dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
332dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct platform_device stargate2_flash_device = {
333dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.name = "pxa2xx-flash",
334dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.id = 0,
335dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.dev = {
336dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_flash_data,
337dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
338dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.resource = &flash_resources,
339dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_resources = 1,
340dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
341dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
342dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxa2xx_spi_master pxa_ssp_master_0_info = {
343dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_chipselect = 1,
344dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
345dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
346dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxa2xx_spi_master pxa_ssp_master_1_info = {
347dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_chipselect = 1,
348dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
349dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
350dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxa2xx_spi_master pxa_ssp_master_2_info = {
351dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_chipselect = 1,
352dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
353dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
354dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron/* An upcoming kernel change will scrap SFRM usage so these
355dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron * drivers have been moved to use gpio's via cs_control */
356dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxa2xx_spi_chip staccel_chip_info = {
357dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.tx_threshold = 8,
358dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.rx_threshold = 8,
359dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.dma_burst_size = 8,
360dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.timeout = 235,
361dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.gpio_cs = 24,
362dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
363dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
364dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxa2xx_spi_chip cc2420_info = {
365dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.tx_threshold = 8,
366dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.rx_threshold = 8,
367dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.dma_burst_size = 8,
368dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.timeout = 235,
369dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.gpio_cs = 39,
370dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
371dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
372dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct spi_board_info spi_board_info[] __initdata = {
373dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
374dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.modalias = "lis3l02dq",
375dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
376dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.bus_num = 1,
377dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.chip_select = 0,
378dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.controller_data = &staccel_chip_info,
3796384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(96),
380dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
381dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.modalias = "cc2420",
382dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.max_speed_hz = 6500000,
383dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.bus_num = 3,
384dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.chip_select = 0,
385dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.controller_data = &cc2420_info,
386dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
387dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
388dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
389dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic void sg2_udc_command(int cmd)
390dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron{
391dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	switch (cmd) {
392dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	case PXA2XX_UDC_CMD_CONNECT:
393dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		UP2OCR |=  UP2OCR_HXOE  | UP2OCR_DPPUE | UP2OCR_DPPUBE;
394dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		break;
395dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	case PXA2XX_UDC_CMD_DISCONNECT:
396dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		UP2OCR &= ~(UP2OCR_HXOE  | UP2OCR_DPPUE | UP2OCR_DPPUBE);
397dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		break;
398dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}
399dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron}
400dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
401dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct i2c_pxa_platform_data i2c_pwr_pdata = {
402dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.fast_mode = 1,
403dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
404dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
405dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct i2c_pxa_platform_data i2c_pdata = {
406dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.fast_mode = 1,
407dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
408dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
409dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic void __init imote2_stargate2_init(void)
410dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron{
411dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
412dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa2xx_mfp_config(ARRAY_AND_SIZE(sg2_im2_unified_pin_config));
413dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
414dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa_set_ffuart_info(NULL);
415dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa_set_btuart_info(NULL);
416dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa_set_stuart_info(NULL);
417dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
418dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
419dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
420dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
421dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
422dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
423dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
424dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
425dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa_set_i2c_info(&i2c_pdata);
426dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron}
427dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
428dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#ifdef CONFIG_MACH_INTELMOTE2
429dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron/* As the the imote2 doesn't currently have a conventional SD slot
430dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron * there is no option to hotplug cards, making all this rather simple
431dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron */
432dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic int imote2_mci_get_ro(struct device *dev)
433dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron{
434dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	return 0;
435dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron}
436dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
437dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron/* Rather simple case as hotplugging not possible */
438dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxamci_platform_data imote2_mci_platform_data = {
439dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
440dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.get_ro = imote2_mci_get_ro,
441dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.gpio_card_detect = -1,
442dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.gpio_card_ro	= -1,
443dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.gpio_power = -1,
444dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
445dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
446dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct gpio_led imote2_led_pins[] = {
447dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
448dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name       =  "imote2:red",
449dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.gpio       = 103,
450dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.active_low = 1,
4514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
452dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name       = "imote2:green",
453dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.gpio       = 104,
454dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.active_low = 1,
455dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
456dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name       = "imote2:blue",
457dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.gpio       = 105,
458dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.active_low = 1,
459dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
460dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
461dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
462dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct gpio_led_platform_data imote2_led_data = {
463dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_leds = ARRAY_SIZE(imote2_led_pins),
464dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.leds     = imote2_led_pins,
465dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
466dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
467dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct platform_device imote2_leds = {
468dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.name = "leds-gpio",
469dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.id   = -1,
470dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.dev = {
471dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &imote2_led_data,
472dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
473dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
474dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
475dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct da903x_subdev_info imote2_da9030_subdevs[] = {
476dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
4774036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
4784036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO2,
4794036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_bbio],
4804036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
4814036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
4824036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO3,
4834036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_bb],
4844036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
4854036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
4864036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO4,
4874036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
4884036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
4894036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
4904036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO5,
4914036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_cc2420],
4924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
4934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
4944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO6,
4954036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_vref],
4964036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
4974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
4984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO7,
4994036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
5004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5014036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5024036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO8,
5034036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_mica],
5044036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5054036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5064036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO9,
5074036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_bt],
5084036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5094036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5104036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO10,
5114036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
5124036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5134036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5144036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO11,
5154036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
5164036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5174036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5184036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO12,
5194036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_lcd],
5204036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5214036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5224036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO15,
5234036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
5244036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO17,
5274036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
5284036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
5304036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO18,
5314036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_io],
5324036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
5334036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.name = "da903x-regulator",
5344036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.id = DA9030_ID_LDO19,
5354036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
5364036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
5374036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
5384036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
539dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct da903x_platform_data imote2_da9030_pdata = {
540dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs),
541dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.subdevs = imote2_da9030_subdevs,
5424036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
5434036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
544dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = {
545dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
546dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "da9030",
547dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x49,
548dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &imote2_da9030_pdata,
5494929f5a8a99f64378659c5658621e45c90c2aaa9Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(1),
5504036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
5514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
5524036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
553dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct i2c_board_info __initdata imote2_i2c_board_info[] = {
554dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{ /* UCAM sensor board */
555dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "max1239",
556dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x35,
557dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, { /* ITS400 Sensor board only */
558dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "max1363",
559dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x34,
560dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		/* Through a nand gate - Also beware, on V2 sensor board the
561dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		 * pull up resistors are missing.
562dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		 */
5636384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(99),
564dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, { /* ITS400 Sensor board only */
565dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "tsl2561",
566dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x49,
567dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		/* Through a nand gate - Also beware, on V2 sensor board the
568dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		 * pull up resistors are missing.
569dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		 */
5706384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(99),
571dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, { /* ITS400 Sensor board only */
572dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "tmp175",
573dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x4A,
5746384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(96),
575dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, { /* IMB400 Multimedia board */
576dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "wm8940",
577dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x1A,
578dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
579dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
580dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
581dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic unsigned long imote2_pin_config[] __initdata = {
582dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
583dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* Button */
584dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO91_GPIO,
585dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
586dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* LEDS */
587dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO103_GPIO, /* red led */
588dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO104_GPIO, /* green led */
589dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO105_GPIO, /* blue led */
590dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
591dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
592dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
593dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.udc_command		= sg2_udc_command,
594dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
595dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
596ac1e89860a89c9d91174bf5439689bba2e4f83bbAxel Linstatic struct platform_device imote2_audio_device = {
597ac1e89860a89c9d91174bf5439689bba2e4f83bbAxel Lin	.name = "imote2-audio",
598ac1e89860a89c9d91174bf5439689bba2e4f83bbAxel Lin	.id   = -1,
599ac1e89860a89c9d91174bf5439689bba2e4f83bbAxel Lin};
600ac1e89860a89c9d91174bf5439689bba2e4f83bbAxel Lin
601dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct platform_device *imote2_devices[] = {
602dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	&stargate2_flash_device,
603dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	&imote2_leds,
604dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	&sht15,
605ac1e89860a89c9d91174bf5439689bba2e4f83bbAxel Lin	&imote2_audio_device,
606dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
607dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
608dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic void __init imote2_init(void)
609dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron{
610dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
611dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
612dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	imote2_stargate2_init();
613dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
614dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
615dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
616dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	i2c_register_board_info(0, imote2_i2c_board_info,
617dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron				ARRAY_SIZE(imote2_i2c_board_info));
618dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	i2c_register_board_info(1, imote2_pwr_i2c_board_info,
619dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron				ARRAY_SIZE(imote2_pwr_i2c_board_info));
620dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
621dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa_set_mci_info(&imote2_mci_platform_data);
622dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	pxa_set_udc_info(&imote2_udc_info);
623dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron}
624dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#endif
625dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
626dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#ifdef CONFIG_MACH_STARGATE2
627dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
628dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic unsigned long stargate2_pin_config[] __initdata = {
629dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
630dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO15_nCS_1, /* SRAM */
631dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* SMC91x */
632dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO80_nCS_4,
633dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO40_GPIO, /*cable detect?*/
634dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
635dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* Button */
636dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO91_GPIO | WAKEUP_ON_LEVEL_HIGH,
637dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
638dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* Compact Flash */
639dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO79_PSKTSEL,
640dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO48_nPOE,
641dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO49_nPWE,
642dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO50_nPIOR,
643dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO51_nPIOW,
644dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO85_nPCE_1,
645dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO54_nPCE_2,
646dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO55_nPREG,
647dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO56_nPWAIT,
648dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO57_nIOIS16,
649dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO120_GPIO, /* Buff ctrl */
650dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO108_GPIO, /* Power ctrl */
651dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO82_GPIO, /* Reset */
652dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */
653dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
654dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* MMC not shared with imote2 */
655dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO90_GPIO, /* nSD detect */
656dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO89_GPIO, /* SD_POWER_ENABLE */
657dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
658dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* Bluetooth */
659dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	GPIO81_GPIO, /* reset */
660dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
661dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
662dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct resource smc91x_resources[] = {
663dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	[0] = {
664dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "smc91x-regs",
665dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.start = (PXA_CS4_PHYS + 0x300),
666dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.end = (PXA_CS4_PHYS + 0xfffff),
667dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.flags = IORESOURCE_MEM,
668dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
669dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	[1] = {
6706384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.start = PXA_GPIO_TO_IRQ(40),
6716384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.end = PXA_GPIO_TO_IRQ(40),
672dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
673dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}
674dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
675dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
676dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct smc91x_platdata stargate2_smc91x_info = {
677dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT
678dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	| SMC91X_NOWAIT | SMC91X_USE_DMA,
679dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
680dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
681dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct platform_device smc91x_device = {
682dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.name = "smc91x",
683dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.id = -1,
684dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_resources = ARRAY_SIZE(smc91x_resources),
6854036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.resource = smc91x_resources,
6864036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.dev = {
6874036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_smc91x_info,
6884036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
6894036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
6904036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
6914036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
6924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/*
6934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * The card detect interrupt isn't debounced so we delay it by 250ms
6944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * to give the card a chance to fully insert / eject.
6954036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron */
6964036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic int stargate2_mci_init(struct device *dev,
6974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			      irq_handler_t stargate2_detect_int,
6984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			      void *data)
6994036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron{
7004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	int err;
7014036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7024036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	err = gpio_request(SG2_SD_POWER_ENABLE, "SG2_sd_power_enable");
7034036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	if (err) {
7044036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		printk(KERN_ERR "Can't get the gpio for SD power control");
7054036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		goto return_err;
7064036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}
7074036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_direction_output(SG2_SD_POWER_ENABLE, 0);
7084036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7094036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	err = gpio_request(SG2_GPIO_nSD_DETECT, "SG2_sd_detect");
7104036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	if (err) {
7114036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		printk(KERN_ERR "Can't get the sd detect gpio");
7124036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		goto free_power_en;
7134036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}
7144036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_direction_input(SG2_GPIO_nSD_DETECT);
7154036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7166384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang	err = request_irq(PXA_GPIO_TO_IRQ(SG2_GPIO_nSD_DETECT),
7174036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			  stargate2_detect_int,
7184036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			  IRQ_TYPE_EDGE_BOTH,
7194036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			  "MMC card detect",
7204036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron			  data);
7214036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	if (err) {
7224036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		printk(KERN_ERR "can't request MMC card detect IRQ\n");
7234036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		goto free_nsd_detect;
7244036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}
7254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	return 0;
7264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7274036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron free_nsd_detect:
7284036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_free(SG2_GPIO_nSD_DETECT);
7294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron free_power_en:
7304036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_free(SG2_SD_POWER_ENABLE);
7314036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron return_err:
7324036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	return err;
7334036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron}
7344036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7354036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/**
7364036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * stargate2_mci_setpower() - set state of mmc power supply
7374036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *
7384036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * Very simple control. Either it is on or off and is controlled by
7394036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * a gpio pin */
7404036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic void stargate2_mci_setpower(struct device *dev, unsigned int vdd)
7414036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron{
7424036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_set_value(SG2_SD_POWER_ENABLE, !!vdd);
7434036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron}
7444036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7454036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic void stargate2_mci_exit(struct device *dev, void *data)
7464036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron{
7476384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang	free_irq(PXA_GPIO_TO_IRQ(SG2_GPIO_nSD_DETECT), data);
7484036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_free(SG2_SD_POWER_ENABLE);
7494036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	gpio_free(SG2_GPIO_nSD_DETECT);
7504036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron}
7514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7524036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct pxamci_platform_data stargate2_mci_platform_data = {
753f97cab28b1895ecb0aa317cc785bb209f57fc1e8Eric Miao	.detect_delay_ms = 250,
7544036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
7554036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.init = stargate2_mci_init,
7564036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.setpower = stargate2_mci_setpower,
7574036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.exit = stargate2_mci_exit,
7584036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
7594036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7604036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7614036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/*
7624036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * SRAM - The Stargate 2 has 32MB of SRAM.
7634036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron *
7644036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * Here it is made available as an MTD. This will then
7654036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * typically have a cifs filesystem created on it to provide
7664036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * fast temporary storage.
7674036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron */
7684036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct resource sram_resources = {
7694036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.start = PXA_CS1_PHYS,
7704036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.end = PXA_CS1_PHYS + SZ_32M-1,
7714036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.flags = IORESOURCE_MEM,
7724036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
7734036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7744036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct platdata_mtd_ram stargate2_sram_pdata = {
7754036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.mapname = "Stargate2 SRAM",
7764036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.bankwidth = 2,
7774036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
7784036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7794036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct platform_device stargate2_sram = {
7804036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.name = "mtd-ram",
7814036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.id = 0,
7824036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.resource = &sram_resources,
7834036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.num_resources = 1,
7844036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.dev = {
7854036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &stargate2_sram_pdata,
7864036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
7874036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
7884036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7894036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct pcf857x_platform_data platform_data_pcf857x = {
7904036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.gpio_base = 128,
7914036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.n_latch = 0,
7924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.setup = NULL,
7934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.teardown = NULL,
7944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.context = NULL,
7954036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
7964036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
7974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct at24_platform_data pca9500_eeprom_pdata = {
7984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.byte_len = 256,
7994036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.page_size = 4,
8004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
8014036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
802dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron/**
803dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron * stargate2_reset_bluetooth() reset the bluecore to ensure consistent state
804dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron **/
805dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic int stargate2_reset_bluetooth(void)
806dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron{
807dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	int err;
808dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET");
809dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	if (err) {
810dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		printk(KERN_ERR "Could not get gpio for bluetooth reset\n");
811dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		return err;
812dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}
813dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	gpio_direction_output(SG2_BT_RESET, 1);
814dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	mdelay(5);
815dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	/* now reset it - 5 msec minimum */
816dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	gpio_set_value(SG2_BT_RESET, 0);
817dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	mdelay(10);
818dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	gpio_set_value(SG2_BT_RESET, 1);
819dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	gpio_free(SG2_BT_RESET);
820dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	return 0;
821dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron}
822dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
823dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct led_info stargate2_leds[] = {
824dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
825dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "sg2:red",
826dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.flags = DA9030_LED_RATE_ON,
827dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
828dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "sg2:blue",
829dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.flags = DA9030_LED_RATE_ON,
830dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
831dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "sg2:green",
832dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.flags = DA9030_LED_RATE_ON,
833dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
834dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
835dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
836dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct da903x_subdev_info stargate2_da9030_subdevs[] = {
837dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
838dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-led",
839dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LED_2,
840dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_leds[0],
841dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
842dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-led",
843dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LED_3,
844dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_leds[2],
845dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
846dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-led",
847dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LED_4,
848dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_leds[1],
849dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
850dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
851dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO2,
852dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_bbio],
853dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
854dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
855dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO3,
856dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_bb],
857dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
858dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
859dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO4,
860dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
861dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
862dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
863dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO5,
864dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_cc2420],
865dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
866dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
867dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO6,
868dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_vref],
869dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
870dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
871dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO7,
872dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
873dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
874dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
875dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO8,
876dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_mica],
877dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
878dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
879dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO9,
880dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_bt],
881dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
882dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
883dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO10,
884dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
885dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
886dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
887dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO11,
888dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
889dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
890dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
891dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO12,
892dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_lcd],
893dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
894dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
895dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO15,
896dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
897dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
898dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
899dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO17,
900dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
901dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
902dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
903dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO18,
904dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_io],
905dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	}, {
906dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.name = "da903x-regulator",
907dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.id = DA9030_ID_LDO19,
908dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
909dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
910dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
911dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
912dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct da903x_platform_data stargate2_da9030_pdata = {
913dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs),
914dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.subdevs = stargate2_da9030_subdevs,
915dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
916dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
917dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameronstatic struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = {
918dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	{
919dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.type = "da9030",
920dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.addr = 0x49,
921dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron		.platform_data = &stargate2_da9030_pdata,
9224929f5a8a99f64378659c5658621e45c90c2aaa9Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(1),
923dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	},
924dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron};
9254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct i2c_board_info __initdata stargate2_i2c_board_info[] = {
9274036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* Techically this a pca9500 - but it's compatible with the 8574
9284036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	 * for gpio expansion and the 24c02 for eeprom access.
9294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	 */
9304036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	{
9314036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.type = "pcf8574",
9324036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.addr =  0x27,
9334036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &platform_data_pcf857x,
9344036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
9354036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.type = "24c02",
9364036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.addr = 0x57,
9374036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.platform_data = &pca9500_eeprom_pdata,
9384036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, {
9394036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.type = "max1238",
9404036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.addr = 0x35,
9414036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, { /* ITS400 Sensor board only */
9424036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.type = "max1363",
9434036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.addr = 0x34,
9444036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		/* Through a nand gate - Also beware, on V2 sensor board the
9454036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		 * pull up resistors are missing.
9464036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		 */
9476384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(99),
9484036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, { /* ITS400 Sensor board only */
9494036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.type = "tsl2561",
9504036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.addr = 0x49,
9514036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		/* Through a nand gate - Also beware, on V2 sensor board the
9524036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		 * pull up resistors are missing.
9534036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		 */
9546384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(99),
9554036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	}, { /* ITS400 Sensor board only */
9564036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.type = "tmp175",
9574036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron		.addr = 0x4A,
9586384fdadb48a875bcc1c0f58933275f15f409b76Haojian Zhuang		.irq = PXA_GPIO_TO_IRQ(96),
9594036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	},
9604036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
9614036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9624036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron/* Board doesn't support cable detection - so always lie and say
9634036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron * something is there.
9644036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron */
9654036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic int sg2_udc_detect(void)
9664036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron{
9674036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	return 1;
9684036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron}
9694036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9704036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct pxa2xx_udc_mach_info stargate2_udc_info __initdata = {
9714036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.udc_is_connected	= sg2_udc_detect,
9724036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.udc_command		= sg2_udc_command,
9734036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
9744036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9754036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic struct platform_device *stargate2_devices[] = {
9764036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	&stargate2_flash_device,
9774036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	&stargate2_sram,
9784036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	&smc91x_device,
9794036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	&sht15,
9804036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron};
9814036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9824036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameronstatic void __init stargate2_init(void)
9834036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron{
9844036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	/* This is probably a board specific hack as this must be set
9854036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	   prior to connecting the MFP stuff up. */
986ad68bb9f7a3cd47396635a5e3895215af57579daMarek Vasut	__raw_writel(__raw_readl(MECR) & ~MECR_NOS, MECR);
9874036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9884036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	pxa2xx_mfp_config(ARRAY_AND_SIZE(stargate2_pin_config));
9894036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
990dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	imote2_stargate2_init();
991cc155c6f2cc705cb082ed676044368424e4b9121Russell King
9924036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	platform_add_devices(ARRAY_AND_SIZE(stargate2_devices));
9934036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9944036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	i2c_register_board_info(0, ARRAY_AND_SIZE(stargate2_i2c_board_info));
995dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	i2c_register_board_info(1, stargate2_pwr_i2c_board_info,
996dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron				ARRAY_SIZE(stargate2_pwr_i2c_board_info));
9974036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
9984036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	pxa_set_mci_info(&stargate2_mci_platform_data);
9994036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
10004036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	pxa_set_udc_info(&stargate2_udc_info);
10014036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
10024036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	stargate2_reset_bluetooth();
10034036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron}
1004dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#endif
1005dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron
1006dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#ifdef CONFIG_MACH_INTELMOTE2
1007dcd925f95194da42e42cea7e5f901f9746cf441cJonathan CameronMACHINE_START(INTELMOTE2, "IMOTE 2")
1008851982c1b6ca18cedf6d01e4529a0c1ddb30771eMarek Vasut	.map_io		= pxa27x_map_io,
10094e611091f859906c28921cf8d3c75a848fd249bdRob Herring	.nr_irqs	= PXA_NR_IRQS,
1010dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.init_irq	= pxa27x_init_irq,
10118a97ae2f554d762a4bc67b5d13b52ef39c8d6baaEric Miao	.handle_irq	= pxa27x_handle_irq,
1012dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.timer		= &pxa_timer,
1013dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron	.init_machine	= imote2_init,
10147375aba6737419db5a17b4a8540ffe7b4452ff40Nicolas Pitre	.atag_offset	= 0x100,
1015271a74fc875210d3dfcc03d557fb5d86d3990a0fRussell King	.restart	= pxa_restart,
1016dcd925f95194da42e42cea7e5f901f9746cf441cJonathan CameronMACHINE_END
1017dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#endif
10184036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron
1019dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#ifdef CONFIG_MACH_STARGATE2
10204036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan CameronMACHINE_START(STARGATE2, "Stargate 2")
1021851982c1b6ca18cedf6d01e4529a0c1ddb30771eMarek Vasut	.map_io = pxa27x_map_io,
10226ac6b817f3f4c23c5febd960d8deb343e13af5f3Haojian Zhuang	.nr_irqs = STARGATE_NR_IRQS,
10234036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.init_irq = pxa27x_init_irq,
10248a97ae2f554d762a4bc67b5d13b52ef39c8d6baaEric Miao	.handle_irq = pxa27x_handle_irq,
10254036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.timer = &pxa_timer,
10264036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan Cameron	.init_machine = stargate2_init,
10277375aba6737419db5a17b4a8540ffe7b4452ff40Nicolas Pitre	.atag_offset = 0x100,
1028271a74fc875210d3dfcc03d557fb5d86d3990a0fRussell King	.restart	= pxa_restart,
10294036e1dea565207010408f5c6137a9d8d3c0ff5cJonathan CameronMACHINE_END
1030dcd925f95194da42e42cea7e5f901f9746cf441cJonathan Cameron#endif
1031