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