2010-05-03 08:46:51 +01:00
/*
* Copyright ( C ) ST - Ericsson SA 2010
*
* Author : Rabin Vincent < rabin . vincent @ stericsson . com > for ST - Ericsson
* License terms : GNU General Public License ( GPL ) version 2
*/
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/amba/bus.h>
2010-09-29 19:46:32 +05:30
# include <linux/irq.h>
2011-07-25 17:13:18 -07:00
# include <linux/i2c.h>
2011-09-22 08:22:27 +02:00
# include <linux/mfd/ab5500/ab5500.h>
2010-05-03 08:46:51 +01:00
# include <asm/mach/arch.h>
# include <asm/mach-types.h>
2011-07-25 17:13:18 -07:00
# include <plat/pincfg.h>
# include <plat/i2c.h>
2011-08-22 08:33:30 +01:00
# include <plat/gpio-nomadik.h>
2011-07-25 17:13:18 -07:00
2010-05-03 08:46:51 +01:00
# include <mach/hardware.h>
# include <mach/devices.h>
# include <mach/setup.h>
2011-07-25 17:13:18 -07:00
# include "pins-db5500.h"
2010-09-29 19:46:32 +05:30
# include "devices-db5500.h"
2011-07-25 17:13:18 -07:00
# include <linux/led-lm3530.h>
/*
* GPIO
*/
static pin_cfg_t u5500_pins [ ] = {
/* I2C */
GPIO218_I2C2_SCL | PIN_INPUT_PULLUP ,
GPIO219_I2C2_SDA | PIN_INPUT_PULLUP ,
/* DISPLAY_ENABLE */
GPIO226_GPIO | PIN_OUTPUT_LOW ,
/* Backlight Enbale */
GPIO224_GPIO | PIN_OUTPUT_HIGH ,
} ;
/*
* I2C
*/
# define U5500_I2C_CONTROLLER(id, _slsu, _tft, _rft, clk, _sm) \
static struct nmk_i2c_controller u5500_i2c # # id # # _data = { \
/* \
* slave data setup time , which is \
* 250 ns , 100 ns , 10 ns which is 14 , 6 , 2 \
* respectively for a 48 Mhz \
* i2c clock \
*/ \
. slsu = _slsu , \
/* Tx FIFO threshold */ \
. tft = _tft , \
/* Rx FIFO threshold */ \
. rft = _rft , \
/* std. mode operation */ \
. clk_freq = clk , \
. sm = _sm , \
}
/*
* The board uses TODO < 3 > i2c controllers , initialize all of
* them with slave data setup time of 250 ns ,
* Tx & Rx FIFO threshold values as 1 and standard
* mode of operation
*/
U5500_I2C_CONTROLLER ( 2 , 0xe , 1 , 1 , 400000 , I2C_FREQ_MODE_FAST ) ;
static struct lm3530_platform_data u5500_als_platform_data = {
. mode = LM3530_BL_MODE_MANUAL ,
. als_input_mode = LM3530_INPUT_ALS1 ,
. max_current = LM3530_FS_CURR_26mA ,
. pwm_pol_hi = true ,
. als_avrg_time = LM3530_ALS_AVRG_TIME_512ms ,
. brt_ramp_law = 1 , /* Linear */
. brt_ramp_fall = LM3530_RAMP_TIME_8s ,
. brt_ramp_rise = LM3530_RAMP_TIME_8s ,
. als1_resistor_sel = LM3530_ALS_IMPD_13_53kOhm ,
. als2_resistor_sel = LM3530_ALS_IMPD_Z ,
. als_vmin = 730 , /* mV */
. als_vmax = 1020 , /* mV */
. brt_val = 0x7F , /* Max brightness */
} ;
2010-09-29 19:46:32 +05:30
2011-07-25 17:13:18 -07:00
static struct i2c_board_info __initdata u5500_i2c2_devices [ ] = {
{
/* Backlight */
I2C_BOARD_INFO ( " lm3530-led " , 0x36 ) ,
. platform_data = & u5500_als_platform_data ,
} ,
} ;
static void __init u5500_i2c_init ( void )
{
db5500_add_i2c2 ( & u5500_i2c2_data ) ;
i2c_register_board_info ( 2 , ARRAY_AND_SIZE ( u5500_i2c2_devices ) ) ;
}
2011-09-22 08:22:27 +02:00
static struct ab5500_platform_data ab5500_plf_data = {
. irq = {
. base = 0 ,
. count = 0 ,
} ,
. init_settings = NULL ,
. init_settings_sz = 0 ,
. pm_power_off = false ,
} ;
static struct platform_device ab5500_device = {
. name = " ab5500-core " ,
. id = 0 ,
. dev = {
. platform_data = & ab5500_plf_data ,
} ,
. num_resources = 0 ,
} ;
static struct platform_device * u5500_platform_devices [ ] __initdata = {
& ab5500_device ,
} ;
2010-09-29 19:46:32 +05:30
static void __init u5500_uart_init ( void )
{
2010-10-14 13:57:59 +02:00
db5500_add_uart0 ( NULL ) ;
db5500_add_uart1 ( NULL ) ;
db5500_add_uart2 ( NULL ) ;
2010-09-29 19:46:32 +05:30
}
2010-05-03 08:46:51 +01:00
static void __init u5500_init_machine ( void )
{
u5500_init_devices ( ) ;
2011-07-25 17:13:18 -07:00
nmk_config_pins ( u5500_pins , ARRAY_SIZE ( u5500_pins ) ) ;
u5500_i2c_init ( ) ;
2010-12-05 12:49:03 +01:00
u5500_sdi_init ( ) ;
2010-09-29 19:46:32 +05:30
u5500_uart_init ( ) ;
2011-09-22 08:22:27 +02:00
platform_add_devices ( u5500_platform_devices ,
ARRAY_SIZE ( u5500_platform_devices ) ) ;
2010-05-03 08:46:51 +01:00
}
2010-12-05 12:49:03 +01:00
MACHINE_START ( U5500 , " ST-Ericsson U5500 Platform " )
2011-07-05 22:38:18 -04:00
. atag_offset = 0x100 ,
2010-05-03 08:46:51 +01:00
. map_io = u5500_map_io ,
. init_irq = ux500_init_irq ,
. timer = & ux500_timer ,
. init_machine = u5500_init_machine ,
MACHINE_END