2009-03-23 18:38:16 -07:00
/*
* linux / arch / arm / mach - omap2 / board - 3430 sdp . c
*
* Copyright ( C ) 2007 Texas Instruments
*
* Modified from mach - omap2 / board - generic . c
*
* Initial code : Syed Mohammed Khasim
*
* 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/platform_device.h>
# include <linux/delay.h>
# include <linux/input.h>
2009-10-22 14:43:17 -07:00
# include <linux/input/matrix_keypad.h>
2009-03-23 18:38:16 -07:00
# include <linux/spi/spi.h>
2009-12-13 20:05:51 +01:00
# include <linux/i2c/twl.h>
2009-03-23 18:38:16 -07:00
# include <linux/regulator/machine.h>
# include <linux/io.h>
# include <linux/gpio.h>
2010-09-15 14:49:23 +00:00
# include <linux/mmc/host.h>
2009-03-23 18:38:16 -07:00
# include <mach/hardware.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2009-10-20 09:40:47 -07:00
# include <plat/mcspi.h>
# include <plat/board.h>
# include <plat/usb.h>
# include <plat/common.h>
# include <plat/dma.h>
# include <plat/gpmc.h>
2011-05-11 14:05:07 +03:00
# include <video/omapdss.h>
2011-09-01 10:13:04 +03:00
# include <video/omap-panel-dvi.h>
2009-03-23 18:38:16 -07:00
2009-10-20 09:40:47 -07:00
# include <plat/gpmc-smc91x.h>
2009-03-23 18:38:16 -07:00
2010-10-08 09:58:35 -07:00
# include "board-flash.h"
2009-12-11 16:16:32 -08:00
# include "mux.h"
2009-05-28 14:03:59 -07:00
# include "sdram-qimonda-hyb18m512160af-6.h"
2010-02-15 10:03:34 -08:00
# include "hsmmc.h"
2009-12-15 16:37:18 -08:00
# include "pm.h"
2010-10-08 11:40:20 -06:00
# include "control.h"
2011-04-25 01:09:05 +03:00
# include "common-board-devices.h"
2009-03-23 18:38:16 -07:00
# define CONFIG_DISABLE_HFCLK 1
# define SDP3430_TS_GPIO_IRQ_SDPV1 3
# define SDP3430_TS_GPIO_IRQ_SDPV2 2
# define ENABLE_VAUX3_DEDICATED 0x03
# define ENABLE_VAUX3_DEV_GRP 0x20
# define TWL4030_MSECURE_GPIO 22
2010-10-08 10:01:13 -07:00
static uint32_t board_keymap [ ] = {
2009-03-23 18:38:16 -07:00
KEY ( 0 , 0 , KEY_LEFT ) ,
KEY ( 0 , 1 , KEY_RIGHT ) ,
KEY ( 0 , 2 , KEY_A ) ,
KEY ( 0 , 3 , KEY_B ) ,
KEY ( 0 , 4 , KEY_C ) ,
KEY ( 1 , 0 , KEY_DOWN ) ,
KEY ( 1 , 1 , KEY_UP ) ,
KEY ( 1 , 2 , KEY_E ) ,
KEY ( 1 , 3 , KEY_F ) ,
KEY ( 1 , 4 , KEY_G ) ,
KEY ( 2 , 0 , KEY_ENTER ) ,
KEY ( 2 , 1 , KEY_I ) ,
KEY ( 2 , 2 , KEY_J ) ,
KEY ( 2 , 3 , KEY_K ) ,
KEY ( 2 , 4 , KEY_3 ) ,
KEY ( 3 , 0 , KEY_M ) ,
KEY ( 3 , 1 , KEY_N ) ,
KEY ( 3 , 2 , KEY_O ) ,
KEY ( 3 , 3 , KEY_P ) ,
KEY ( 3 , 4 , KEY_Q ) ,
KEY ( 4 , 0 , KEY_R ) ,
KEY ( 4 , 1 , KEY_4 ) ,
KEY ( 4 , 2 , KEY_T ) ,
KEY ( 4 , 3 , KEY_U ) ,
KEY ( 4 , 4 , KEY_D ) ,
KEY ( 5 , 0 , KEY_V ) ,
KEY ( 5 , 1 , KEY_W ) ,
KEY ( 5 , 2 , KEY_L ) ,
KEY ( 5 , 3 , KEY_S ) ,
KEY ( 5 , 4 , KEY_H ) ,
0
} ;
2009-09-24 16:23:16 -07:00
static struct matrix_keymap_data board_map_data = {
. keymap = board_keymap ,
. keymap_size = ARRAY_SIZE ( board_keymap ) ,
} ;
2009-03-23 18:38:16 -07:00
static struct twl4030_keypad_data sdp3430_kp_data = {
2009-09-24 16:23:16 -07:00
. keymap_data = & board_map_data ,
2009-03-23 18:38:16 -07:00
. rows = 5 ,
. cols = 6 ,
. rep = 1 ,
} ;
2009-12-09 18:25:18 +02:00
# define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
# define SDP3430_LCD_PANEL_ENABLE_GPIO 5
2011-05-03 18:22:09 +03:00
static struct gpio sdp3430_dss_gpios [ ] __initdata = {
{ SDP3430_LCD_PANEL_ENABLE_GPIO , GPIOF_OUT_INIT_LOW , " LCD reset " } ,
{ SDP3430_LCD_PANEL_BACKLIGHT_GPIO , GPIOF_OUT_INIT_LOW , " LCD Backlight " } ,
} ;
2009-12-09 18:25:18 +02:00
static int lcd_enabled ;
static int dvi_enabled ;
static void __init sdp3430_display_init ( void )
{
int r ;
2011-05-03 18:22:09 +03:00
r = gpio_request_array ( sdp3430_dss_gpios ,
ARRAY_SIZE ( sdp3430_dss_gpios ) ) ;
if ( r )
printk ( KERN_ERR " failed to get LCD control GPIOs \n " ) ;
2009-12-09 18:25:18 +02:00
}
static int sdp3430_panel_enable_lcd ( struct omap_dss_device * dssdev )
{
if ( dvi_enabled ) {
printk ( KERN_ERR " cannot enable LCD, DVI is enabled \n " ) ;
return - EINVAL ;
}
2011-05-03 18:22:09 +03:00
gpio_direction_output ( SDP3430_LCD_PANEL_ENABLE_GPIO , 1 ) ;
gpio_direction_output ( SDP3430_LCD_PANEL_BACKLIGHT_GPIO , 1 ) ;
2009-12-09 18:25:18 +02:00
lcd_enabled = 1 ;
return 0 ;
}
static void sdp3430_panel_disable_lcd ( struct omap_dss_device * dssdev )
{
lcd_enabled = 0 ;
2011-05-03 18:22:09 +03:00
gpio_direction_output ( SDP3430_LCD_PANEL_ENABLE_GPIO , 0 ) ;
gpio_direction_output ( SDP3430_LCD_PANEL_BACKLIGHT_GPIO , 0 ) ;
2009-12-09 18:25:18 +02:00
}
static int sdp3430_panel_enable_dvi ( struct omap_dss_device * dssdev )
{
if ( lcd_enabled ) {
printk ( KERN_ERR " cannot enable DVI, LCD is enabled \n " ) ;
return - EINVAL ;
}
dvi_enabled = 1 ;
return 0 ;
}
static void sdp3430_panel_disable_dvi ( struct omap_dss_device * dssdev )
{
dvi_enabled = 0 ;
}
static int sdp3430_panel_enable_tv ( struct omap_dss_device * dssdev )
{
return 0 ;
}
static void sdp3430_panel_disable_tv ( struct omap_dss_device * dssdev )
{
}
static struct omap_dss_device sdp3430_lcd_device = {
. name = " lcd " ,
. driver_name = " sharp_ls_panel " ,
. type = OMAP_DISPLAY_TYPE_DPI ,
. phy . dpi . data_lines = 16 ,
. platform_enable = sdp3430_panel_enable_lcd ,
. platform_disable = sdp3430_panel_disable_lcd ,
2009-03-23 18:38:16 -07:00
} ;
2011-09-01 10:13:04 +03:00
static struct panel_dvi_platform_data dvi_panel = {
2010-11-17 13:34:34 +00:00
. platform_enable = sdp3430_panel_enable_dvi ,
. platform_disable = sdp3430_panel_disable_dvi ,
} ;
2009-12-09 18:25:18 +02:00
static struct omap_dss_device sdp3430_dvi_device = {
. name = " dvi " ,
. type = OMAP_DISPLAY_TYPE_DPI ,
2011-09-01 10:13:04 +03:00
. driver_name = " dvi " ,
2010-11-17 13:34:34 +00:00
. data = & dvi_panel ,
2009-12-09 18:25:18 +02:00
. phy . dpi . data_lines = 24 ,
2009-03-23 18:38:16 -07:00
} ;
2009-12-09 18:25:18 +02:00
static struct omap_dss_device sdp3430_tv_device = {
. name = " tv " ,
. driver_name = " venc " ,
. type = OMAP_DISPLAY_TYPE_VENC ,
. phy . venc . type = OMAP_DSS_VENC_TYPE_SVIDEO ,
. platform_enable = sdp3430_panel_enable_tv ,
. platform_disable = sdp3430_panel_disable_tv ,
2009-03-23 18:38:16 -07:00
} ;
2009-12-09 18:25:18 +02:00
static struct omap_dss_device * sdp3430_dss_devices [ ] = {
2009-03-23 18:38:16 -07:00
& sdp3430_lcd_device ,
2009-12-09 18:25:18 +02:00
& sdp3430_dvi_device ,
& sdp3430_tv_device ,
2009-03-23 18:38:16 -07:00
} ;
2009-12-09 18:25:18 +02:00
static struct omap_dss_board_info sdp3430_dss_data = {
. num_devices = ARRAY_SIZE ( sdp3430_dss_devices ) ,
. devices = sdp3430_dss_devices ,
. default_device = & sdp3430_lcd_device ,
} ;
2009-03-23 18:38:16 -07:00
static struct omap_board_config_kernel sdp3430_config [ ] __initdata = {
} ;
2010-02-15 10:03:34 -08:00
static struct omap2_hsmmc_info mmc [ ] = {
2009-03-23 18:38:16 -07:00
{
. mmc = 1 ,
/* 8 bits (default) requires S6.3 == ON,
* so the SIM card isn ' t used ; else 4 bits .
*/
2010-09-15 14:49:23 +00:00
. caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA ,
2009-03-23 18:38:16 -07:00
. gpio_wp = 4 ,
} ,
{
. mmc = 2 ,
2010-09-15 14:49:23 +00:00
. caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA ,
2009-03-23 18:38:16 -07:00
. gpio_wp = 7 ,
} ,
{ } /* Terminator */
} ;
static int sdp3430_twl_gpio_setup ( struct device * dev ,
unsigned gpio , unsigned ngpio )
{
/* gpio + 0 is "mmc0_cd" (input/IRQ),
* gpio + 1 is " mmc1_cd " ( input / IRQ )
*/
mmc [ 0 ] . gpio_cd = gpio + 0 ;
mmc [ 1 ] . gpio_cd = gpio + 1 ;
2010-02-15 10:03:34 -08:00
omap2_hsmmc_init ( mmc ) ;
2009-03-23 18:38:16 -07:00
/* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
2011-05-03 18:22:09 +03:00
gpio_request_one ( gpio + 7 , GPIOF_OUT_INIT_LOW , " sub_lcd_en_bkl " ) ;
2009-03-23 18:38:16 -07:00
/* gpio + 15 is "sub_lcd_nRST" (output) */
2011-05-03 18:22:09 +03:00
gpio_request_one ( gpio + 15 , GPIOF_OUT_INIT_LOW , " sub_lcd_nRST " ) ;
2009-03-23 18:38:16 -07:00
return 0 ;
}
static struct twl4030_gpio_platform_data sdp3430_gpio_data = {
. gpio_base = OMAP_MAX_GPIO_LINES ,
. irq_base = TWL4030_GPIO_IRQ_BASE ,
. irq_end = TWL4030_GPIO_IRQ_END ,
. pulldowns = BIT ( 2 ) | BIT ( 6 ) | BIT ( 8 ) | BIT ( 13 )
| BIT ( 16 ) | BIT ( 17 ) ,
. setup = sdp3430_twl_gpio_setup ,
} ;
2011-02-03 12:45:22 +00:00
/* regulator consumer mappings */
2011-02-03 12:45:21 +00:00
/* ads7846 on SPI */
static struct regulator_consumer_supply sdp3430_vaux3_supplies [ ] = {
REGULATOR_SUPPLY ( " vcc " , " spi1.0 " ) ,
} ;
2011-02-03 12:45:22 +00:00
static struct regulator_consumer_supply sdp3430_vmmc1_supplies [ ] = {
2011-02-28 20:48:05 +05:30
REGULATOR_SUPPLY ( " vmmc " , " omap_hsmmc.0 " ) ,
2011-02-03 12:45:22 +00:00
} ;
static struct regulator_consumer_supply sdp3430_vsim_supplies [ ] = {
2011-02-28 20:48:05 +05:30
REGULATOR_SUPPLY ( " vmmc_aux " , " omap_hsmmc.0 " ) ,
2011-02-03 12:45:22 +00:00
} ;
static struct regulator_consumer_supply sdp3430_vmmc2_supplies [ ] = {
2011-02-28 20:48:05 +05:30
REGULATOR_SUPPLY ( " vmmc " , " omap_hsmmc.1 " ) ,
2011-02-03 12:45:22 +00:00
} ;
2009-03-23 18:38:16 -07:00
/*
* Apply all the fixed voltages since most versions of U - Boot
* don ' t bother with that initialization .
*/
/* VAUX1 for mainboard (irda and sub-lcd) */
static struct regulator_init_data sdp3430_vaux1 = {
. constraints = {
. min_uV = 2800000 ,
. max_uV = 2800000 ,
. apply_uV = true ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
} ;
/* VAUX2 for camera module */
static struct regulator_init_data sdp3430_vaux2 = {
. constraints = {
. min_uV = 2800000 ,
. max_uV = 2800000 ,
. apply_uV = true ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
} ;
/* VAUX3 for LCD board */
static struct regulator_init_data sdp3430_vaux3 = {
. constraints = {
. min_uV = 2800000 ,
. max_uV = 2800000 ,
. apply_uV = true ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
2011-02-03 12:45:21 +00:00
. num_consumer_supplies = ARRAY_SIZE ( sdp3430_vaux3_supplies ) ,
. consumer_supplies = sdp3430_vaux3_supplies ,
2009-03-23 18:38:16 -07:00
} ;
/* VAUX4 for OMAP VDD_CSI2 (camera) */
static struct regulator_init_data sdp3430_vaux4 = {
. constraints = {
. min_uV = 1800000 ,
. max_uV = 1800000 ,
. apply_uV = true ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
} ;
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data sdp3430_vmmc1 = {
. constraints = {
. min_uV = 1850000 ,
. max_uV = 3150000 ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
| REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
2011-02-03 12:45:22 +00:00
. num_consumer_supplies = ARRAY_SIZE ( sdp3430_vmmc1_supplies ) ,
. consumer_supplies = sdp3430_vmmc1_supplies ,
2009-03-23 18:38:16 -07:00
} ;
/* VMMC2 for MMC2 card */
static struct regulator_init_data sdp3430_vmmc2 = {
. constraints = {
. min_uV = 1850000 ,
. max_uV = 1850000 ,
. apply_uV = true ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
2011-02-03 12:45:22 +00:00
. num_consumer_supplies = ARRAY_SIZE ( sdp3430_vmmc2_supplies ) ,
. consumer_supplies = sdp3430_vmmc2_supplies ,
2009-03-23 18:38:16 -07:00
} ;
/* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
static struct regulator_init_data sdp3430_vsim = {
. constraints = {
. min_uV = 1800000 ,
. max_uV = 3000000 ,
. valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY ,
. valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
| REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ,
} ,
2011-02-03 12:45:22 +00:00
. num_consumer_supplies = ARRAY_SIZE ( sdp3430_vsim_supplies ) ,
. consumer_supplies = sdp3430_vsim_supplies ,
2009-03-23 18:38:16 -07:00
} ;
static struct twl4030_platform_data sdp3430_twldata = {
/* platform_data for children goes here */
. gpio = & sdp3430_gpio_data ,
. keypad = & sdp3430_kp_data ,
. vaux1 = & sdp3430_vaux1 ,
. vaux2 = & sdp3430_vaux2 ,
. vaux3 = & sdp3430_vaux3 ,
. vaux4 = & sdp3430_vaux4 ,
. vmmc1 = & sdp3430_vmmc1 ,
. vmmc2 = & sdp3430_vmmc2 ,
. vsim = & sdp3430_vsim ,
} ;
static int __init omap3430_i2c_init ( void )
{
/* i2c1 for PMIC only */
2011-06-07 10:28:54 +03:00
omap3_pmic_get_config ( & sdp3430_twldata ,
2011-06-07 11:38:24 +03:00
TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_BCI |
TWL_COMMON_PDATA_MADC | TWL_COMMON_PDATA_AUDIO ,
TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2 ) ;
sdp3430_twldata . vdac - > constraints . apply_uV = true ;
sdp3430_twldata . vpll2 - > constraints . apply_uV = true ;
sdp3430_twldata . vpll2 - > constraints . name = " VDVI " ;
2011-04-25 01:09:06 +03:00
omap3_pmic_init ( " twl4030 " , & sdp3430_twldata ) ;
2011-06-07 10:28:54 +03:00
2009-03-23 18:38:16 -07:00
/* i2c2 on camera connector (for sensor control) and optional isp1301 */
omap_register_i2c_bus ( 2 , 400 , NULL , 0 ) ;
/* i2c3 on display connector (for DVI, tfp410) */
omap_register_i2c_bus ( 3 , 400 , NULL , 0 ) ;
return 0 ;
}
2009-05-28 13:23:52 -07:00
# if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
static struct omap_smc91x_platform_data board_smc91x_data = {
. cs = 3 ,
. flags = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
IORESOURCE_IRQ_LOWLEVEL ,
} ;
static void __init board_smc91x_init ( void )
{
if ( omap_rev ( ) > OMAP3430_REV_ES1_0 )
board_smc91x_data . gpio_irq = 6 ;
else
board_smc91x_data . gpio_irq = 29 ;
gpmc_smc91x_init ( & board_smc91x_data ) ;
}
# else
static inline void board_smc91x_init ( void )
{
}
# endif
2009-08-24 11:58:59 +05:30
static void enable_board_wakeup_source ( void )
{
2009-12-11 16:16:32 -08:00
/* T2 interrupt line (keypad) */
omap_mux_init_signal ( " sys_nirq " ,
OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP ) ;
2009-08-24 11:58:59 +05:30
}
2011-03-01 20:08:16 +05:30
static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
2009-11-22 10:11:01 -08:00
2011-03-01 20:08:16 +05:30
. port_mode [ 0 ] = OMAP_EHCI_PORT_MODE_PHY ,
. port_mode [ 1 ] = OMAP_EHCI_PORT_MODE_PHY ,
. port_mode [ 2 ] = OMAP_USBHS_PORT_MODE_UNUSED ,
2009-11-22 10:11:01 -08:00
. phy_reset = true ,
. reset_gpio_port [ 0 ] = 57 ,
. reset_gpio_port [ 1 ] = 61 ,
. reset_gpio_port [ 2 ] = - EINVAL
} ;
2009-12-11 16:16:32 -08:00
# ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux [ ] __initdata = {
{ . reg_offset = OMAP_MUX_TERMINATOR } ,
} ;
2011-03-11 06:04:45 +00:00
static struct omap_device_pad serial1_pads [ ] __initdata = {
/*
* Note that off output enable is an active low
* signal . So setting this means pin is a
* input enabled in off mode
*/
OMAP_MUX_STATIC ( " uart1_cts.uart1_cts " ,
OMAP_PIN_INPUT |
OMAP_PIN_OFF_INPUT_PULLDOWN |
OMAP_OFFOUT_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart1_rts.uart1_rts " ,
OMAP_PIN_OUTPUT |
OMAP_OFF_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart1_rx.uart1_rx " ,
OMAP_PIN_INPUT |
OMAP_PIN_OFF_INPUT_PULLDOWN |
OMAP_OFFOUT_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart1_tx.uart1_tx " ,
OMAP_PIN_OUTPUT |
OMAP_OFF_EN |
OMAP_MUX_MODE0 ) ,
} ;
static struct omap_device_pad serial2_pads [ ] __initdata = {
OMAP_MUX_STATIC ( " uart2_cts.uart2_cts " ,
OMAP_PIN_INPUT_PULLUP |
OMAP_PIN_OFF_INPUT_PULLDOWN |
OMAP_OFFOUT_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart2_rts.uart2_rts " ,
OMAP_PIN_OUTPUT |
OMAP_OFF_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart2_rx.uart2_rx " ,
OMAP_PIN_INPUT |
OMAP_PIN_OFF_INPUT_PULLDOWN |
OMAP_OFFOUT_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart2_tx.uart2_tx " ,
OMAP_PIN_OUTPUT |
OMAP_OFF_EN |
OMAP_MUX_MODE0 ) ,
} ;
static struct omap_device_pad serial3_pads [ ] __initdata = {
OMAP_MUX_STATIC ( " uart3_cts_rctx.uart3_cts_rctx " ,
OMAP_PIN_INPUT_PULLDOWN |
OMAP_PIN_OFF_INPUT_PULLDOWN |
OMAP_OFFOUT_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart3_rts_sd.uart3_rts_sd " ,
OMAP_PIN_OUTPUT |
OMAP_OFF_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart3_rx_irrx.uart3_rx_irrx " ,
OMAP_PIN_INPUT |
OMAP_PIN_OFF_INPUT_PULLDOWN |
OMAP_OFFOUT_EN |
OMAP_MUX_MODE0 ) ,
OMAP_MUX_STATIC ( " uart3_tx_irtx.uart3_tx_irtx " ,
OMAP_PIN_OUTPUT |
OMAP_OFF_EN |
OMAP_MUX_MODE0 ) ,
} ;
2011-05-30 00:11:45 -07:00
static struct omap_board_data serial1_data __initdata = {
2011-03-11 06:04:45 +00:00
. id = 0 ,
. pads = serial1_pads ,
. pads_cnt = ARRAY_SIZE ( serial1_pads ) ,
} ;
2011-05-30 00:11:45 -07:00
static struct omap_board_data serial2_data __initdata = {
2011-03-11 06:04:45 +00:00
. id = 1 ,
. pads = serial2_pads ,
. pads_cnt = ARRAY_SIZE ( serial2_pads ) ,
} ;
2011-05-30 00:11:45 -07:00
static struct omap_board_data serial3_data __initdata = {
2011-03-11 06:04:45 +00:00
. id = 2 ,
. pads = serial3_pads ,
. pads_cnt = ARRAY_SIZE ( serial3_pads ) ,
} ;
static inline void board_serial_init ( void )
{
omap_serial_init_port ( & serial1_data ) ;
omap_serial_init_port ( & serial2_data ) ;
omap_serial_init_port ( & serial3_data ) ;
}
# else
# define board_mux NULL
static inline void board_serial_init ( void )
{
omap_serial_init ( ) ;
}
2009-12-11 16:16:32 -08:00
# endif
2010-07-09 14:27:47 +00:00
/*
* SDP3430 V2 Board CS organization
* Different from SDP3430 V1 . Now 4 switches used to specify CS
*
* See also the Switch S8 settings in the comments .
*/
static char chip_sel_3430 [ ] [ GPMC_CS_NUM ] = {
{ PDC_NOR , PDC_NAND , PDC_ONENAND , DBG_MPDB , 0 , 0 , 0 , 0 } , /* S8:1111 */
{ PDC_ONENAND , PDC_NAND , PDC_NOR , DBG_MPDB , 0 , 0 , 0 , 0 } , /* S8:1110 */
{ PDC_NAND , PDC_ONENAND , PDC_NOR , DBG_MPDB , 0 , 0 , 0 , 0 } , /* S8:1101 */
} ;
2010-02-15 10:03:34 -08:00
static struct mtd_partition sdp_nor_partitions [ ] = {
/* bootloader (U-Boot, etc) in first sector */
{
. name = " Bootloader-NOR " ,
. offset = 0 ,
. size = SZ_256K ,
. mask_flags = MTD_WRITEABLE , /* force read-only */
} ,
/* bootloader params in the next sector */
{
. name = " Params-NOR " ,
. offset = MTDPART_OFS_APPEND ,
. size = SZ_256K ,
. mask_flags = 0 ,
} ,
/* kernel */
{
. name = " Kernel-NOR " ,
. offset = MTDPART_OFS_APPEND ,
. size = SZ_2M ,
. mask_flags = 0
} ,
/* file system */
{
. name = " Filesystem-NOR " ,
. offset = MTDPART_OFS_APPEND ,
. size = MTDPART_SIZ_FULL ,
. mask_flags = 0
}
} ;
static struct mtd_partition sdp_onenand_partitions [ ] = {
{
. name = " X-Loader-OneNAND " ,
. offset = 0 ,
. size = 4 * ( 64 * 2048 ) ,
. mask_flags = MTD_WRITEABLE /* force read-only */
} ,
{
. name = " U-Boot-OneNAND " ,
. offset = MTDPART_OFS_APPEND ,
. size = 2 * ( 64 * 2048 ) ,
. mask_flags = MTD_WRITEABLE /* force read-only */
} ,
{
. name = " U-Boot Environment-OneNAND " ,
. offset = MTDPART_OFS_APPEND ,
. size = 1 * ( 64 * 2048 ) ,
} ,
{
. name = " Kernel-OneNAND " ,
. offset = MTDPART_OFS_APPEND ,
. size = 16 * ( 64 * 2048 ) ,
} ,
{
. name = " File System-OneNAND " ,
. offset = MTDPART_OFS_APPEND ,
. size = MTDPART_SIZ_FULL ,
} ,
} ;
static struct mtd_partition sdp_nand_partitions [ ] = {
/* All the partition sizes are listed in terms of NAND block size */
{
. name = " X-Loader-NAND " ,
. offset = 0 ,
. size = 4 * ( 64 * 2048 ) ,
. mask_flags = MTD_WRITEABLE , /* force read-only */
} ,
{
. name = " U-Boot-NAND " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x80000 */
. size = 10 * ( 64 * 2048 ) ,
. mask_flags = MTD_WRITEABLE , /* force read-only */
} ,
{
. name = " Boot Env-NAND " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x1c0000 */
. size = 6 * ( 64 * 2048 ) ,
} ,
{
. name = " Kernel-NAND " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x280000 */
. size = 40 * ( 64 * 2048 ) ,
} ,
{
. name = " File System - NAND " ,
. size = MTDPART_SIZ_FULL ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x780000 */
} ,
} ;
static struct flash_partitions sdp_flash_partitions [ ] = {
{
. parts = sdp_nor_partitions ,
. nr_parts = ARRAY_SIZE ( sdp_nor_partitions ) ,
} ,
{
. parts = sdp_onenand_partitions ,
. nr_parts = ARRAY_SIZE ( sdp_onenand_partitions ) ,
} ,
{
. parts = sdp_nand_partitions ,
. nr_parts = ARRAY_SIZE ( sdp_nand_partitions ) ,
} ,
} ;
2009-03-23 18:38:16 -07:00
static void __init omap_3430sdp_init ( void )
{
2011-04-25 01:09:05 +03:00
int gpio_pendown ;
2009-12-11 16:16:32 -08:00
omap3_mux_init ( board_mux , OMAP_PACKAGE_CBB ) ;
2011-02-24 14:36:03 -08:00
omap_board_config = sdp3430_config ;
omap_board_config_size = ARRAY_SIZE ( sdp3430_config ) ;
2009-03-23 18:38:16 -07:00
omap3430_i2c_init ( ) ;
2011-02-22 11:24:50 +02:00
omap_display_init ( & sdp3430_dss_data ) ;
2009-03-23 18:38:16 -07:00
if ( omap_rev ( ) > OMAP3430_REV_ES1_0 )
2011-04-25 01:09:05 +03:00
gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV2 ;
2009-03-23 18:38:16 -07:00
else
2011-04-25 01:09:05 +03:00
gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1 ;
omap_ads7846_init ( 1 , gpio_pendown , 310 , NULL ) ;
2011-03-11 06:04:45 +00:00
board_serial_init ( ) ;
2011-08-22 23:57:23 -07:00
omap_sdrc_init ( hyb18m512160af6_sdrc_params , NULL ) ;
2011-04-27 11:56:12 +03:00
usb_musb_init ( NULL ) ;
2009-05-28 13:23:52 -07:00
board_smc91x_init ( ) ;
2011-01-28 15:42:03 +05:30
board_flash_init ( sdp_flash_partitions , chip_sel_3430 , 0 ) ;
2009-12-09 18:25:18 +02:00
sdp3430_display_init ( ) ;
2009-08-24 11:58:59 +05:30
enable_board_wakeup_source ( ) ;
2011-03-01 20:08:19 +05:30
usbhs_init ( & usbhs_bdata ) ;
2009-03-23 18:38:16 -07:00
}
MACHINE_START ( OMAP_3430SDP , " OMAP3430 3430SDP board " )
/* Maintainer: Syed Khasim - Texas Instruments Inc */
2011-07-05 22:38:15 -04:00
. atag_offset = 0x100 ,
2010-05-23 10:18:16 +01:00
. reserve = omap_reserve ,
2011-02-14 15:40:20 -08:00
. map_io = omap3_map_io ,
2011-08-22 23:57:24 -07:00
. init_early = omap3430_init_early ,
2011-05-17 03:51:26 -07:00
. init_irq = omap3_init_irq ,
2009-03-23 18:38:16 -07:00
. init_machine = omap_3430sdp_init ,
2011-03-29 15:54:48 -07:00
. timer = & omap3_timer ,
2009-03-23 18:38:16 -07:00
MACHINE_END