2009-11-28 08:17:18 +01:00
/*
2012-10-01 09:37:39 +02:00
* Copyright ( C ) 2008 - 2012 ST - Ericsson
2009-11-28 08:17:18 +01:00
*
* Author : Srinidhi KASAGAR < srinidhi . kasagar @ stericsson . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 , as
* published by the Free Software Foundation .
*
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/interrupt.h>
# include <linux/platform_device.h>
# include <linux/io.h>
2010-08-09 19:18:17 +05:30
# include <linux/i2c.h>
2012-06-11 22:56:26 +02:00
# include <linux/platform_data/i2c-nomadik.h>
2012-11-15 18:56:43 +08:00
# include <linux/platform_data/db8500_thermal.h>
2010-06-03 07:58:42 +01:00
# include <linux/gpio.h>
2009-11-28 08:17:18 +01:00
# include <linux/amba/bus.h>
# include <linux/amba/pl022.h>
2010-10-14 13:57:59 +02:00
# include <linux/amba/serial.h>
2009-11-28 08:17:18 +01:00
# include <linux/spi/spi.h>
2011-12-02 14:16:33 +01:00
# include <linux/mfd/abx500/ab8500.h>
regulator: initialization for ab8500 regulators
The regulators on the AB8500 have a lot of custom
hardware control settings pertaining to 8 external
signals, settings which are board-specific and need
be provided from the platform at startup.
Initialization added for regulators Vana, VextSupply1,
VextSupply2, VextSupply3, Vaux1, Vaux2, Vaux3, VTVout,
Vintcore12, Vaudio, Vdmic, Vamic1, Vamic2, VrefDDR.
Signed-off-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
Reviewed-by: Rickard Andersson <rickard.andersson@stericsson.com>
Reviewed-by: Jonas Aberg <jonas.aberg@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2011-03-11 11:54:46 +01:00
# include <linux/regulator/ab8500.h>
2012-09-03 14:33:39 +01:00
# include <linux/regulator/fixed.h>
2010-12-13 09:33:14 +05:30
# include <linux/mfd/tc3589x.h>
2011-03-07 11:48:15 +01:00
# include <linux/mfd/tps6105x.h>
2011-12-02 14:16:33 +01:00
# include <linux/mfd/abx500/ab8500-gpio.h>
2012-06-07 14:00:46 +02:00
# include <linux/mfd/abx500/ab8500-codec.h>
2013-02-05 19:26:59 +09:00
# include <linux/platform_data/leds-lp55xx.h>
2011-01-14 10:53:59 +01:00
# include <linux/input.h>
2011-06-20 15:55:46 +02:00
# include <linux/smsc911x.h>
2011-01-14 10:53:59 +01:00
# include <linux/gpio_keys.h>
2011-06-13 10:11:44 +02:00
# include <linux/delay.h>
2011-06-20 15:55:46 +02:00
# include <linux/leds.h>
2012-05-07 01:33:24 +02:00
# include <linux/pinctrl/consumer.h>
2012-10-10 14:27:58 +02:00
# include <linux/platform_data/pinctrl-nomadik.h>
2012-10-18 14:20:16 +02:00
# include <linux/platform_data/dma-ste-dma40.h>
2012-05-07 01:33:24 +02:00
2009-11-28 08:17:18 +01:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <mach/hardware.h>
# include <mach/setup.h>
2010-05-03 08:03:52 +01:00
# include <mach/devices.h>
2010-09-06 22:15:08 +01:00
# include <mach/irqs.h>
2012-08-24 15:19:33 +02:00
# include <linux/platform_data/crypto-ux500.h>
2009-11-28 08:17:18 +01:00
2010-10-14 13:57:59 +02:00
# include "ste-dma40-db8500.h"
2010-09-29 19:46:32 +05:30
# include "devices-db8500.h"
2010-08-19 12:06:32 +01:00
# include "board-mop500.h"
2010-12-10 11:08:48 +01:00
# include "board-mop500-regulators.h"
2010-06-03 07:58:42 +01:00
2011-06-20 15:55:46 +02:00
static struct gpio_led snowball_led_array [ ] = {
{
. name = " user_led " ,
2012-05-02 09:20:37 +01:00
. default_trigger = " heartbeat " ,
2011-06-20 15:55:46 +02:00
. gpio = 142 ,
} ,
} ;
static struct gpio_led_platform_data snowball_led_data = {
. leds = snowball_led_array ,
. num_leds = ARRAY_SIZE ( snowball_led_array ) ,
} ;
static struct platform_device snowball_led_dev = {
. name = " leds-gpio " ,
. dev = {
. platform_data = & snowball_led_data ,
} ,
} ;
2012-09-03 14:33:39 +01:00
static struct fixed_voltage_config snowball_gpio_en_3v3_data = {
. supply_name = " EN-3V3 " ,
. gpio = SNOWBALL_EN_3V3_ETH_GPIO ,
. microvolts = 3300000 ,
. enable_high = 1 ,
. init_data = & gpio_en_3v3_regulator ,
. startup_delay = 5000 , /* 1200us */
} ;
static struct platform_device snowball_gpio_en_3v3_regulator_dev = {
. name = " reg-fixed-voltage " ,
. id = 1 ,
. dev = {
. platform_data = & snowball_gpio_en_3v3_data ,
} ,
} ;
2013-01-08 10:41:02 +01:00
static struct abx500_gpio_platform_data ab8500_gpio_pdata = {
2012-02-13 10:52:25 +01:00
. gpio_base = MOP500_AB8500_PIN_GPIO ( 1 ) ,
2011-02-15 12:56:16 +05:30
} ;
2012-06-07 14:00:46 +02:00
/* ab8500-codec */
static struct ab8500_codec_platform_data ab8500_codec_pdata = {
. amics = {
. mic1_type = AMIC_TYPE_DIFFERENTIAL ,
. mic2_type = AMIC_TYPE_DIFFERENTIAL ,
. mic1a_micbias = AMIC_MICBIAS_VAMIC1 ,
. mic1b_micbias = AMIC_MICBIAS_VAMIC1 ,
. mic2_micbias = AMIC_MICBIAS_VAMIC2
} ,
. ear_cmv = EAR_CMV_0_95V
} ;
2011-06-20 15:55:46 +02:00
static struct gpio_keys_button snowball_key_array [ ] = {
{
. gpio = 32 ,
. type = EV_KEY ,
. code = KEY_1 ,
. desc = " userpb " ,
. active_low = 1 ,
. debounce_interval = 50 ,
. wakeup = 1 ,
} ,
{
. gpio = 151 ,
. type = EV_KEY ,
. code = KEY_2 ,
. desc = " extkb1 " ,
. active_low = 1 ,
. debounce_interval = 50 ,
. wakeup = 1 ,
} ,
{
. gpio = 152 ,
. type = EV_KEY ,
. code = KEY_3 ,
. desc = " extkb2 " ,
. active_low = 1 ,
. debounce_interval = 50 ,
. wakeup = 1 ,
} ,
{
. gpio = 161 ,
. type = EV_KEY ,
. code = KEY_4 ,
. desc = " extkb3 " ,
. active_low = 1 ,
. debounce_interval = 50 ,
. wakeup = 1 ,
} ,
{
. gpio = 162 ,
. type = EV_KEY ,
. code = KEY_5 ,
. desc = " extkb4 " ,
. active_low = 1 ,
. debounce_interval = 50 ,
. wakeup = 1 ,
} ,
} ;
static struct gpio_keys_platform_data snowball_key_data = {
. buttons = snowball_key_array ,
. nbuttons = ARRAY_SIZE ( snowball_key_array ) ,
} ;
static struct platform_device snowball_key_dev = {
. name = " gpio-keys " ,
. id = - 1 ,
. dev = {
. platform_data = & snowball_key_data ,
}
} ;
static struct smsc911x_platform_config snowball_sbnet_cfg = {
. irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH ,
. irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL ,
. flags = SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY ,
. shift = 1 ,
} ;
static struct resource sbnet_res [ ] = {
{
. name = " smsc911x-memory " ,
. start = ( 0x5000 < < 16 ) ,
. end = ( 0x5000 < < 16 ) + 0xffff ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = NOMADIK_GPIO_TO_IRQ ( 140 ) ,
. end = NOMADIK_GPIO_TO_IRQ ( 140 ) ,
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE ,
} ,
} ;
static struct platform_device snowball_sbnet_dev = {
. name = " smsc911x " ,
. num_resources = ARRAY_SIZE ( sbnet_res ) ,
. resource = sbnet_res ,
. dev = {
. platform_data = & snowball_sbnet_cfg ,
} ,
} ;
2013-02-07 10:17:31 +01:00
struct ab8500_platform_data ab8500_platdata = {
2010-07-26 11:12:15 +01:00
. irq_base = MOP500_AB8500_IRQ_BASE ,
2011-03-09 13:34:17 +01:00
. regulator_reg_init = ab8500_regulator_reg_init ,
. num_regulator_reg_init = ARRAY_SIZE ( ab8500_regulator_reg_init ) ,
2010-12-10 11:08:48 +01:00
. regulator = ab8500_regulators ,
. num_regulator = ARRAY_SIZE ( ab8500_regulators ) ,
2011-02-15 12:56:16 +05:30
. gpio = & ab8500_gpio_pdata ,
2012-06-07 14:00:46 +02:00
. codec = & ab8500_codec_pdata ,
2010-07-26 11:12:15 +01:00
} ;
2012-11-15 18:56:43 +08:00
/*
* Thermal Sensor
*/
static struct resource db8500_thsens_resources [ ] = {
{
. name = " IRQ_HOTMON_LOW " ,
. start = IRQ_PRCMU_HOTMON_LOW ,
. end = IRQ_PRCMU_HOTMON_LOW ,
. flags = IORESOURCE_IRQ ,
} ,
{
. name = " IRQ_HOTMON_HIGH " ,
. start = IRQ_PRCMU_HOTMON_HIGH ,
. end = IRQ_PRCMU_HOTMON_HIGH ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct db8500_thsens_platform_data db8500_thsens_data = {
. trip_points [ 0 ] = {
. temp = 70000 ,
. type = THERMAL_TRIP_ACTIVE ,
. cdev_name = {
[ 0 ] = " thermal-cpufreq-0 " ,
} ,
} ,
. trip_points [ 1 ] = {
. temp = 75000 ,
. type = THERMAL_TRIP_ACTIVE ,
. cdev_name = {
[ 0 ] = " thermal-cpufreq-0 " ,
} ,
} ,
. trip_points [ 2 ] = {
. temp = 80000 ,
. type = THERMAL_TRIP_ACTIVE ,
. cdev_name = {
[ 0 ] = " thermal-cpufreq-0 " ,
} ,
} ,
. trip_points [ 3 ] = {
. temp = 85000 ,
. type = THERMAL_TRIP_CRITICAL ,
} ,
. num_trips = 4 ,
} ;
static struct platform_device u8500_thsens_device = {
. name = " db8500-thermal " ,
. resource = db8500_thsens_resources ,
. num_resources = ARRAY_SIZE ( db8500_thsens_resources ) ,
. dev = {
. platform_data = & db8500_thsens_data ,
} ,
} ;
static struct platform_device u8500_cpufreq_cooling_device = {
. name = " db8500-cpufreq-cooling " ,
} ;
2011-03-07 11:48:15 +01:00
/*
* TPS61052
*/
static struct tps6105x_platform_data mop500_tps61052_data = {
. mode = TPS6105X_MODE_VOLTAGE ,
. regulator_data = & tps61052_regulator ,
} ;
2010-08-09 19:18:17 +05:30
/*
* TC35892
*/
2010-12-13 09:33:14 +05:30
static void mop500_tc35892_init ( struct tc3589x * tc3589x , unsigned int base )
2010-08-09 19:18:17 +05:30
{
2012-02-06 11:22:21 -08:00
struct device * parent = NULL ;
#if 0
/* FIXME: Is the sdi actually part of tc3589x? */
parent = tc3589x - > dev ;
# endif
mop500_sdi_tc35892_init ( parent ) ;
2010-08-09 19:18:17 +05:30
}
2010-12-13 09:33:14 +05:30
static struct tc3589x_gpio_platform_data mop500_tc35892_gpio_data = {
2010-08-09 19:18:17 +05:30
. gpio_base = MOP500_EGPIO ( 0 ) ,
. setup = mop500_tc35892_init ,
} ;
2010-12-13 09:33:14 +05:30
static struct tc3589x_platform_data mop500_tc35892_data = {
2010-12-13 09:33:15 +05:30
. block = TC3589x_BLOCK_GPIO ,
2010-08-09 19:18:17 +05:30
. gpio = & mop500_tc35892_gpio_data ,
. irq_base = MOP500_EGPIO_IRQ_BASE ,
} ;
2013-02-05 19:26:59 +09:00
static struct lp55xx_led_config lp5521_pri_led [ ] = {
2011-01-12 11:26:20 +01:00
[ 0 ] = {
. chan_nr = 0 ,
. led_current = 0x2f ,
. max_current = 0x5f ,
} ,
[ 1 ] = {
. chan_nr = 1 ,
. led_current = 0x2f ,
. max_current = 0x5f ,
} ,
[ 2 ] = {
. chan_nr = 2 ,
. led_current = 0x2f ,
. max_current = 0x5f ,
} ,
} ;
2013-02-05 19:26:59 +09:00
static struct lp55xx_platform_data __initdata lp5521_pri_data = {
2011-01-12 11:26:20 +01:00
. label = " lp5521_pri " ,
. led_config = & lp5521_pri_led [ 0 ] ,
. num_channels = 3 ,
2013-02-05 19:26:59 +09:00
. clock_mode = LP55XX_CLOCK_EXT ,
2011-01-12 11:26:20 +01:00
} ;
2013-02-05 19:26:59 +09:00
static struct lp55xx_led_config lp5521_sec_led [ ] = {
2011-01-12 11:26:20 +01:00
[ 0 ] = {
. chan_nr = 0 ,
. led_current = 0x2f ,
. max_current = 0x5f ,
} ,
[ 1 ] = {
. chan_nr = 1 ,
. led_current = 0x2f ,
. max_current = 0x5f ,
} ,
[ 2 ] = {
. chan_nr = 2 ,
. led_current = 0x2f ,
. max_current = 0x5f ,
} ,
} ;
2013-02-05 19:26:59 +09:00
static struct lp55xx_platform_data __initdata lp5521_sec_data = {
2011-01-12 11:26:20 +01:00
. label = " lp5521_sec " ,
. led_config = & lp5521_sec_led [ 0 ] ,
. num_channels = 3 ,
2013-02-05 19:26:59 +09:00
. clock_mode = LP55XX_CLOCK_EXT ,
2011-01-12 11:26:20 +01:00
} ;
2011-03-07 11:48:15 +01:00
static struct i2c_board_info __initdata mop500_i2c0_devices [ ] = {
2010-08-09 19:18:17 +05:30
{
2010-12-13 09:33:14 +05:30
I2C_BOARD_INFO ( " tc3589x " , 0x42 ) ,
2011-01-12 11:26:20 +01:00
. irq = NOMADIK_GPIO_TO_IRQ ( 217 ) ,
2010-08-09 19:18:17 +05:30
. platform_data = & mop500_tc35892_data ,
} ,
2011-03-30 14:31:42 +02:00
/* I2C0 devices only available prior to HREFv60 */
2011-03-07 11:48:15 +01:00
{
I2C_BOARD_INFO ( " tps61052 " , 0x33 ) ,
. platform_data = & mop500_tps61052_data ,
} ,
} ;
2011-03-30 14:31:42 +02:00
# define NUM_PRE_V60_I2C0_DEVICES 1
2011-01-12 11:26:20 +01:00
static struct i2c_board_info __initdata mop500_i2c2_devices [ ] = {
{
/* lp5521 LED driver, 1st device */
I2C_BOARD_INFO ( " lp5521 " , 0x33 ) ,
. platform_data = & lp5521_pri_data ,
} ,
{
/* lp5521 LED driver, 2st device */
I2C_BOARD_INFO ( " lp5521 " , 0x34 ) ,
. platform_data = & lp5521_sec_data ,
} ,
2011-01-13 14:41:22 +00:00
{
/* Light sensor Rohm BH1780GLI */
I2C_BOARD_INFO ( " bh1780 " , 0x29 ) ,
} ,
2011-01-12 11:26:20 +01:00
} ;
2012-02-06 11:22:21 -08:00
static void __init mop500_i2c_init ( struct device * parent )
2010-09-29 19:46:32 +05:30
{
2012-04-17 15:52:26 +01:00
db8500_add_i2c0 ( parent , NULL ) ;
db8500_add_i2c1 ( parent , NULL ) ;
db8500_add_i2c2 ( parent , NULL ) ;
db8500_add_i2c3 ( parent , NULL ) ;
2010-09-29 19:46:32 +05:30
}
2009-11-28 08:17:18 +01:00
2011-01-14 10:53:59 +01:00
static struct gpio_keys_button mop500_gpio_keys [ ] = {
{
. desc = " SFH7741 Proximity Sensor " ,
. type = EV_SW ,
. code = SW_FRONT_PROXIMITY ,
. active_low = 0 ,
. can_disable = 1 ,
}
} ;
static struct regulator * prox_regulator ;
static int mop500_prox_activate ( struct device * dev ) ;
static void mop500_prox_deactivate ( struct device * dev ) ;
static struct gpio_keys_platform_data mop500_gpio_keys_data = {
. buttons = mop500_gpio_keys ,
. nbuttons = ARRAY_SIZE ( mop500_gpio_keys ) ,
. enable = mop500_prox_activate ,
. disable = mop500_prox_deactivate ,
} ;
static struct platform_device mop500_gpio_keys_device = {
. name = " gpio-keys " ,
. id = 0 ,
. dev = {
. platform_data = & mop500_gpio_keys_data ,
} ,
} ;
static int mop500_prox_activate ( struct device * dev )
{
prox_regulator = regulator_get ( & mop500_gpio_keys_device . dev ,
" vcc " ) ;
if ( IS_ERR ( prox_regulator ) ) {
dev_err ( & mop500_gpio_keys_device . dev ,
" no regulator \n " ) ;
return PTR_ERR ( prox_regulator ) ;
}
regulator_enable ( prox_regulator ) ;
return 0 ;
}
static void mop500_prox_deactivate ( struct device * dev )
{
regulator_disable ( prox_regulator ) ;
regulator_put ( prox_regulator ) ;
}
2012-05-10 10:14:06 +02:00
static struct cryp_platform_data u8500_cryp1_platform_data = {
. mem_to_engine = {
. dir = STEDMA40_MEM_TO_PERIPH ,
. src_dev_type = STEDMA40_DEV_SRC_MEMORY ,
. dst_dev_type = DB8500_DMA_DEV48_CAC1_TX ,
. src_info . data_width = STEDMA40_WORD_WIDTH ,
. dst_info . data_width = STEDMA40_WORD_WIDTH ,
. mode = STEDMA40_MODE_LOGICAL ,
. src_info . psize = STEDMA40_PSIZE_LOG_4 ,
. dst_info . psize = STEDMA40_PSIZE_LOG_4 ,
} ,
. engine_to_mem = {
. dir = STEDMA40_PERIPH_TO_MEM ,
. src_dev_type = DB8500_DMA_DEV48_CAC1_RX ,
. dst_dev_type = STEDMA40_DEV_DST_MEMORY ,
. src_info . data_width = STEDMA40_WORD_WIDTH ,
. dst_info . data_width = STEDMA40_WORD_WIDTH ,
. mode = STEDMA40_MODE_LOGICAL ,
. src_info . psize = STEDMA40_PSIZE_LOG_4 ,
. dst_info . psize = STEDMA40_PSIZE_LOG_4 ,
}
} ;
static struct stedma40_chan_cfg u8500_hash_dma_cfg_tx = {
. dir = STEDMA40_MEM_TO_PERIPH ,
. src_dev_type = STEDMA40_DEV_SRC_MEMORY ,
. dst_dev_type = DB8500_DMA_DEV50_HAC1_TX ,
. src_info . data_width = STEDMA40_WORD_WIDTH ,
. dst_info . data_width = STEDMA40_WORD_WIDTH ,
. mode = STEDMA40_MODE_LOGICAL ,
. src_info . psize = STEDMA40_PSIZE_LOG_16 ,
. dst_info . psize = STEDMA40_PSIZE_LOG_16 ,
} ;
static struct hash_platform_data u8500_hash1_platform_data = {
. mem_to_engine = & u8500_hash_dma_cfg_tx ,
. dma_filter = stedma40_filter ,
} ;
2010-02-03 13:02:48 +01:00
/* add any platform devices here - TODO */
2011-06-20 15:55:46 +02:00
static struct platform_device * mop500_platform_devs [ ] __initdata = {
2011-01-14 10:53:59 +01:00
& mop500_gpio_keys_device ,
2010-02-03 13:02:48 +01:00
} ;
2010-10-14 13:57:59 +02:00
# ifdef CONFIG_STE_DMA40
static struct stedma40_chan_cfg ssp0_dma_cfg_rx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_PERIPH_TO_MEM ,
. src_dev_type = DB8500_DMA_DEV8_SSP0_RX ,
. dst_dev_type = STEDMA40_DEV_DST_MEMORY ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
static struct stedma40_chan_cfg ssp0_dma_cfg_tx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_MEM_TO_PERIPH ,
. src_dev_type = STEDMA40_DEV_SRC_MEMORY ,
. dst_dev_type = DB8500_DMA_DEV8_SSP0_TX ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
# endif
2012-09-27 10:17:36 +01:00
struct pl022_ssp_controller ssp0_plat = {
2010-10-14 13:57:59 +02:00
. bus_id = 0 ,
# ifdef CONFIG_STE_DMA40
. enable_dma = 1 ,
. dma_filter = stedma40_filter ,
. dma_rx_param = & ssp0_dma_cfg_rx ,
. dma_tx_param = & ssp0_dma_cfg_tx ,
# else
. enable_dma = 0 ,
# endif
/* on this platform, gpio 31,142,144,214 &
* 224 are connected as chip selects
*/
. num_chipselect = 5 ,
} ;
2012-02-06 11:22:21 -08:00
static void __init mop500_spi_init ( struct device * parent )
2009-11-28 08:17:18 +01:00
{
2012-03-15 16:47:11 +00:00
db8500_add_ssp0 ( parent , & ssp0_plat ) ;
2010-09-29 19:46:32 +05:30
}
2009-11-28 08:17:18 +01:00
2010-10-14 13:57:59 +02:00
# ifdef CONFIG_STE_DMA40
static struct stedma40_chan_cfg uart0_dma_cfg_rx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_PERIPH_TO_MEM ,
. src_dev_type = DB8500_DMA_DEV13_UART0_RX ,
. dst_dev_type = STEDMA40_DEV_DST_MEMORY ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
static struct stedma40_chan_cfg uart0_dma_cfg_tx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_MEM_TO_PERIPH ,
. src_dev_type = STEDMA40_DEV_SRC_MEMORY ,
. dst_dev_type = DB8500_DMA_DEV13_UART0_TX ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
static struct stedma40_chan_cfg uart1_dma_cfg_rx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_PERIPH_TO_MEM ,
. src_dev_type = DB8500_DMA_DEV12_UART1_RX ,
. dst_dev_type = STEDMA40_DEV_DST_MEMORY ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
static struct stedma40_chan_cfg uart1_dma_cfg_tx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_MEM_TO_PERIPH ,
. src_dev_type = STEDMA40_DEV_SRC_MEMORY ,
. dst_dev_type = DB8500_DMA_DEV12_UART1_TX ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
static struct stedma40_chan_cfg uart2_dma_cfg_rx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_PERIPH_TO_MEM ,
. src_dev_type = DB8500_DMA_DEV11_UART2_RX ,
. dst_dev_type = STEDMA40_DEV_DST_MEMORY ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
static struct stedma40_chan_cfg uart2_dma_cfg_tx = {
. mode = STEDMA40_MODE_LOGICAL ,
. dir = STEDMA40_MEM_TO_PERIPH ,
. src_dev_type = STEDMA40_DEV_SRC_MEMORY ,
. dst_dev_type = DB8500_DMA_DEV11_UART2_TX ,
. src_info . data_width = STEDMA40_BYTE_WIDTH ,
. dst_info . data_width = STEDMA40_BYTE_WIDTH ,
} ;
# endif
2012-09-27 10:17:36 +01:00
struct amba_pl011_data uart0_plat = {
2010-10-14 13:57:59 +02:00
# ifdef CONFIG_STE_DMA40
. dma_filter = stedma40_filter ,
. dma_rx_param = & uart0_dma_cfg_rx ,
. dma_tx_param = & uart0_dma_cfg_tx ,
# endif
} ;
2012-09-27 10:17:36 +01:00
struct amba_pl011_data uart1_plat = {
2010-10-14 13:57:59 +02:00
# ifdef CONFIG_STE_DMA40
. dma_filter = stedma40_filter ,
. dma_rx_param = & uart1_dma_cfg_rx ,
. dma_tx_param = & uart1_dma_cfg_tx ,
# endif
} ;
2012-09-27 10:17:36 +01:00
struct amba_pl011_data uart2_plat = {
2010-10-14 13:57:59 +02:00
# ifdef CONFIG_STE_DMA40
. dma_filter = stedma40_filter ,
. dma_rx_param = & uart2_dma_cfg_rx ,
. dma_tx_param = & uart2_dma_cfg_tx ,
# endif
} ;
2012-02-06 11:22:21 -08:00
static void __init mop500_uart_init ( struct device * parent )
2010-09-29 19:46:32 +05:30
{
2012-05-23 21:18:46 +02:00
db8500_add_uart0 ( parent , & uart0_plat ) ;
2012-02-06 11:22:21 -08:00
db8500_add_uart1 ( parent , & uart1_plat ) ;
db8500_add_uart2 ( parent , & uart2_plat ) ;
2010-09-29 19:46:32 +05:30
}
2012-05-10 10:14:06 +02:00
static void __init u8500_cryp1_hash1_init ( struct device * parent )
{
db8500_add_cryp1 ( parent , & u8500_cryp1_platform_data ) ;
db8500_add_hash1 ( parent , & u8500_hash1_platform_data ) ;
}
2011-06-20 15:55:46 +02:00
static struct platform_device * snowball_platform_devs [ ] __initdata = {
& snowball_led_dev ,
& snowball_key_dev ,
2012-05-17 13:18:36 +01:00
& snowball_sbnet_dev ,
2012-09-03 14:33:39 +01:00
& snowball_gpio_en_3v3_regulator_dev ,
2012-11-15 18:56:43 +08:00
& u8500_thsens_device ,
& u8500_cpufreq_cooling_device ,
2011-06-20 15:55:46 +02:00
} ;
2011-02-15 15:01:35 +01:00
static void __init mop500_init_machine ( void )
2010-09-29 19:46:32 +05:30
{
2012-02-06 11:22:21 -08:00
struct device * parent = NULL ;
2011-03-30 14:31:42 +02:00
int i2c0_devs ;
2012-02-06 11:22:25 -08:00
int i ;
2011-03-30 14:31:42 +02:00
2013-02-07 10:17:31 +01:00
platform_device_register ( & db8500_prcmu_device ) ;
2011-08-26 16:54:07 +01:00
mop500_gpio_keys [ 0 ] . gpio = GPIO_PROX_SENSOR ;
2012-05-03 00:44:52 +02:00
mop500_pinmaps_init ( ) ;
2012-07-06 12:46:23 +02:00
parent = u8500_init_devices ( & ab8500_platdata ) ;
2011-08-26 16:54:07 +01:00
2012-02-06 11:22:25 -08:00
for ( i = 0 ; i < ARRAY_SIZE ( mop500_platform_devs ) ; i + + )
mop500_platform_devs [ i ] - > dev . parent = parent ;
2011-08-26 16:54:07 +01:00
platform_add_devices ( mop500_platform_devs ,
ARRAY_SIZE ( mop500_platform_devs ) ) ;
2012-02-06 11:22:21 -08:00
mop500_i2c_init ( parent ) ;
mop500_sdi_init ( parent ) ;
mop500_spi_init ( parent ) ;
2012-09-14 15:46:29 +01:00
mop500_audio_init ( parent ) ;
2012-02-06 11:22:21 -08:00
mop500_uart_init ( parent ) ;
2011-08-26 16:54:07 +01:00
2012-05-10 10:14:06 +02:00
u8500_cryp1_hash1_init ( parent ) ;
2011-08-26 16:54:07 +01:00
i2c0_devs = ARRAY_SIZE ( mop500_i2c0_devices ) ;
i2c_register_board_info ( 0 , mop500_i2c0_devices , i2c0_devs ) ;
i2c_register_board_info ( 2 , mop500_i2c2_devices ,
ARRAY_SIZE ( mop500_i2c2_devices ) ) ;
/* This board has full regulator constraints */
regulator_has_full_constraints ( ) ;
}
static void __init snowball_init_machine ( void )
{
2012-02-06 11:22:21 -08:00
struct device * parent = NULL ;
2012-02-06 11:22:25 -08:00
int i ;
2011-08-26 16:54:07 +01:00
2013-02-07 10:17:31 +01:00
platform_device_register ( & db8500_prcmu_device ) ;
2012-05-03 00:44:52 +02:00
snowball_pinmaps_init ( ) ;
2012-07-06 12:46:23 +02:00
parent = u8500_init_devices ( & ab8500_platdata ) ;
2011-08-26 16:54:07 +01:00
2012-02-06 11:22:25 -08:00
for ( i = 0 ; i < ARRAY_SIZE ( snowball_platform_devs ) ; i + + )
snowball_platform_devs [ i ] - > dev . parent = parent ;
2011-08-26 16:54:07 +01:00
platform_add_devices ( snowball_platform_devs ,
ARRAY_SIZE ( snowball_platform_devs ) ) ;
2012-02-06 11:22:21 -08:00
mop500_i2c_init ( parent ) ;
snowball_sdi_init ( parent ) ;
mop500_spi_init ( parent ) ;
2012-09-14 15:46:29 +01:00
mop500_audio_init ( parent ) ;
2012-02-06 11:22:21 -08:00
mop500_uart_init ( parent ) ;
2011-08-26 16:54:07 +01:00
/* This board has full regulator constraints */
regulator_has_full_constraints ( ) ;
}
static void __init hrefv60_init_machine ( void )
{
2012-02-06 11:22:21 -08:00
struct device * parent = NULL ;
2011-08-26 16:54:07 +01:00
int i2c0_devs ;
2012-02-06 11:22:25 -08:00
int i ;
2011-08-26 16:54:07 +01:00
2013-02-07 10:17:31 +01:00
platform_device_register ( & db8500_prcmu_device ) ;
2011-02-15 15:01:35 +01:00
/*
* The HREFv60 board removed a GPIO expander and routed
* all these GPIO pins to the internal GPIO controller
* instead .
*/
2011-08-26 16:54:07 +01:00
mop500_gpio_keys [ 0 ] . gpio = HREFV60_PROX_SENSE_GPIO ;
2011-02-15 15:01:35 +01:00
2012-05-03 00:44:52 +02:00
hrefv60_pinmaps_init ( ) ;
2012-07-06 12:46:23 +02:00
parent = u8500_init_devices ( & ab8500_platdata ) ;
2010-06-03 07:58:42 +01:00
2012-02-06 11:22:25 -08:00
for ( i = 0 ; i < ARRAY_SIZE ( mop500_platform_devs ) ; i + + )
mop500_platform_devs [ i ] - > dev . parent = parent ;
2011-08-26 16:54:07 +01:00
platform_add_devices ( mop500_platform_devs ,
ARRAY_SIZE ( mop500_platform_devs ) ) ;
2010-02-03 13:02:48 +01:00
2012-02-06 11:22:21 -08:00
mop500_i2c_init ( parent ) ;
hrefv60_sdi_init ( parent ) ;
mop500_spi_init ( parent ) ;
2012-09-14 15:46:29 +01:00
mop500_audio_init ( parent ) ;
2012-02-06 11:22:21 -08:00
mop500_uart_init ( parent ) ;
2010-08-19 12:06:32 +01:00
2011-03-30 14:31:42 +02:00
i2c0_devs = ARRAY_SIZE ( mop500_i2c0_devices ) ;
2011-08-26 16:54:07 +01:00
i2c0_devs - = NUM_PRE_V60_I2C0_DEVICES ;
2011-03-30 14:31:42 +02:00
i2c_register_board_info ( 0 , mop500_i2c0_devices , i2c0_devs ) ;
2011-01-12 11:26:20 +01:00
i2c_register_board_info ( 2 , mop500_i2c2_devices ,
ARRAY_SIZE ( mop500_i2c2_devices ) ) ;
2011-04-04 10:44:51 +02:00
/* This board has full regulator constraints */
regulator_has_full_constraints ( ) ;
2009-11-28 08:17:18 +01:00
}
MACHINE_START ( U8500 , " ST-Ericsson MOP500 platform " )
/* Maintainer: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> */
2011-07-05 22:38:18 -04:00
. atag_offset = 0x100 ,
2011-09-08 13:15:22 +01:00
. smp = smp_ops ( ux500_smp_ops ) ,
2009-11-28 08:17:18 +01:00
. map_io = u8500_map_io ,
2010-05-03 07:39:02 +01:00
. init_irq = ux500_init_irq ,
2009-11-28 08:17:18 +01:00
/* we re-use nomadik timer here */
2012-11-08 12:40:59 -07:00
. init_time = ux500_timer_init ,
2011-02-15 15:01:35 +01:00
. init_machine = mop500_init_machine ,
2012-05-02 17:10:07 +08:00
. init_late = ux500_init_late ,
2011-02-15 15:01:35 +01:00
MACHINE_END
2012-10-01 09:37:39 +02:00
MACHINE_START ( U8520 , " ST-Ericsson U8520 Platform HREFP520 " )
. atag_offset = 0x100 ,
. map_io = u8500_map_io ,
. init_irq = ux500_init_irq ,
2012-11-08 12:40:59 -07:00
. init_time = ux500_timer_init ,
2012-10-01 09:37:39 +02:00
. init_machine = mop500_init_machine ,
. init_late = ux500_init_late ,
MACHINE_END
2011-02-15 15:01:35 +01:00
MACHINE_START ( HREFV60 , " ST-Ericsson U8500 Platform HREFv60+ " )
2011-07-05 22:38:18 -04:00
. atag_offset = 0x100 ,
2011-09-08 13:15:22 +01:00
. smp = smp_ops ( ux500_smp_ops ) ,
2011-02-15 15:01:35 +01:00
. map_io = u8500_map_io ,
. init_irq = ux500_init_irq ,
2012-11-08 12:40:59 -07:00
. init_time = ux500_timer_init ,
2011-08-26 16:54:07 +01:00
. init_machine = hrefv60_init_machine ,
2012-05-02 17:10:07 +08:00
. init_late = ux500_init_late ,
2009-11-28 08:17:18 +01:00
MACHINE_END
2011-06-20 15:55:46 +02:00
MACHINE_START ( SNOWBALL , " Calao Systems Snowball platform " )
2011-07-05 22:38:18 -04:00
. atag_offset = 0x100 ,
2011-09-08 13:15:22 +01:00
. smp = smp_ops ( ux500_smp_ops ) ,
2011-06-20 15:55:46 +02:00
. map_io = u8500_map_io ,
. init_irq = ux500_init_irq ,
/* we re-use nomadik timer here */
2012-11-08 12:40:59 -07:00
. init_time = ux500_timer_init ,
2011-08-26 16:54:07 +01:00
. init_machine = snowball_init_machine ,
2012-09-25 16:03:45 +01:00
. init_late = NULL ,
2012-03-07 15:04:07 +00:00
MACHINE_END