2006-12-06 17:14:05 -08:00
/*
* linux / arch / arm / mach - omap2 / board - 2430 sdp . c
*
* Copyright ( C ) 2006 Texas Instruments
*
* Modified from mach - omap2 / board - generic . c
*
* Initial Code : Based on a patch from Komal Shah and Richard Woodruff
* Updated the Code for 2430 SDP : 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/mtd/mtd.h>
# include <linux/mtd/partitions.h>
2010-02-15 10:03:32 -08:00
# include <linux/mtd/physmap.h>
2010-09-15 14:49:23 +00:00
# include <linux/mmc/host.h>
2006-12-06 17:14:05 -08:00
# include <linux/delay.h>
2009-12-13 20:05:51 +01:00
# include <linux/i2c/twl.h>
2011-02-07 16:08:47 +00:00
# include <linux/regulator/machine.h>
2006-12-06 17:14:05 -08:00
# include <linux/err.h>
# include <linux/clk.h>
2008-09-06 12:10:45 +01:00
# include <linux/io.h>
2011-05-31 20:55:44 +08:00
# include <linux/gpio.h>
2006-12-06 17:14:05 -08:00
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
2006-12-06 17:14:05 -08:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2011-11-10 22:45:17 +01:00
# include "common.h"
2009-10-20 09:40:47 -07:00
# include <plat/gpmc.h>
# include <plat/usb.h>
# include <plat/gpmc-smc91x.h>
2006-12-06 17:14:05 -08:00
2011-04-19 19:23:05 +03:00
# include <video/omapdss.h>
# include <video/omap-panel-generic-dpi.h>
2010-07-05 16:31:38 +03:00
# include "mux.h"
2010-02-15 10:03:34 -08:00
# include "hsmmc.h"
2011-04-25 01:09:06 +03:00
# include "common-board-devices.h"
2006-12-06 17:14:05 -08:00
2009-03-23 18:07:35 -07:00
# define SDP2430_CS0_BASE 0x04000000
2009-05-28 13:23:53 -07:00
# define SECONDARY_LCD_GPIO 147
2009-03-23 18:07:35 -07:00
2006-12-06 17:14:05 -08:00
static struct mtd_partition sdp2430_partitions [ ] = {
/* bootloader (U-Boot, etc) in first sector */
{
. name = " bootloader " ,
. offset = 0 ,
. size = SZ_256K ,
. mask_flags = MTD_WRITEABLE , /* force read-only */
} ,
/* bootloader params in the next sector */
{
. name = " params " ,
. offset = MTDPART_OFS_APPEND ,
. size = SZ_128K ,
. mask_flags = 0 ,
} ,
/* kernel */
{
. name = " kernel " ,
. offset = MTDPART_OFS_APPEND ,
. size = SZ_2M ,
. mask_flags = 0
} ,
/* file system */
{
. name = " filesystem " ,
. offset = MTDPART_OFS_APPEND ,
. size = MTDPART_SIZ_FULL ,
. mask_flags = 0
}
} ;
2010-02-15 10:03:32 -08:00
static struct physmap_flash_data sdp2430_flash_data = {
2006-12-06 17:14:05 -08:00
. width = 2 ,
. parts = sdp2430_partitions ,
. nr_parts = ARRAY_SIZE ( sdp2430_partitions ) ,
} ;
static struct resource sdp2430_flash_resource = {
. start = SDP2430_CS0_BASE ,
. end = SDP2430_CS0_BASE + SZ_64M - 1 ,
. flags = IORESOURCE_MEM ,
} ;
static struct platform_device sdp2430_flash_device = {
2010-02-15 10:03:32 -08:00
. name = " physmap-flash " ,
2006-12-06 17:14:05 -08:00
. id = 0 ,
. dev = {
. platform_data = & sdp2430_flash_data ,
} ,
. num_resources = 1 ,
. resource = & sdp2430_flash_resource ,
} ;
static struct platform_device * sdp2430_devices [ ] __initdata = {
& sdp2430_flash_device ,
2011-04-19 19:23:05 +03:00
} ;
/* LCD */
# define SDP2430_LCD_PANEL_BACKLIGHT_GPIO 91
# define SDP2430_LCD_PANEL_ENABLE_GPIO 154
static int sdp2430_panel_enable_lcd ( struct omap_dss_device * dssdev )
{
gpio_direction_output ( SDP2430_LCD_PANEL_ENABLE_GPIO , 1 ) ;
gpio_direction_output ( SDP2430_LCD_PANEL_BACKLIGHT_GPIO , 1 ) ;
return 0 ;
}
static void sdp2430_panel_disable_lcd ( struct omap_dss_device * dssdev )
{
gpio_direction_output ( SDP2430_LCD_PANEL_ENABLE_GPIO , 0 ) ;
gpio_direction_output ( SDP2430_LCD_PANEL_BACKLIGHT_GPIO , 0 ) ;
}
static struct panel_generic_dpi_data sdp2430_panel_data = {
. name = " nec_nl2432dr22-11b " ,
. platform_enable = sdp2430_panel_enable_lcd ,
. platform_disable = sdp2430_panel_disable_lcd ,
} ;
static struct omap_dss_device sdp2430_lcd_device = {
. name = " lcd " ,
. driver_name = " generic_dpi_panel " ,
. type = OMAP_DISPLAY_TYPE_DPI ,
. phy . dpi . data_lines = 16 ,
. data = & sdp2430_panel_data ,
} ;
static struct omap_dss_device * sdp2430_dss_devices [ ] = {
2009-05-28 13:23:53 -07:00
& sdp2430_lcd_device ,
} ;
2011-04-19 19:23:05 +03:00
static struct omap_dss_board_info sdp2430_dss_data = {
. num_devices = ARRAY_SIZE ( sdp2430_dss_devices ) ,
. devices = sdp2430_dss_devices ,
. default_device = & sdp2430_lcd_device ,
2006-12-06 17:14:05 -08:00
} ;
2011-04-19 19:23:05 +03:00
static void __init sdp2430_display_init ( void )
{
int r ;
static struct gpio gpios [ ] __initdata = {
{ SDP2430_LCD_PANEL_ENABLE_GPIO , GPIOF_OUT_INIT_LOW ,
" LCD reset " } ,
{ SDP2430_LCD_PANEL_BACKLIGHT_GPIO , GPIOF_OUT_INIT_LOW ,
" LCD Backlight " } ,
} ;
r = gpio_request_array ( gpios , ARRAY_SIZE ( gpios ) ) ;
if ( r ) {
pr_err ( " Cannot request LCD GPIOs, error %d \n " , r ) ;
return ;
}
omap_display_init ( & sdp2430_dss_data ) ;
}
2009-05-28 13:23:52 -07:00
# if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
2006-12-06 17:14:05 -08:00
2009-05-28 13:23:52 -07:00
static struct omap_smc91x_platform_data board_smc91x_data = {
. cs = 5 ,
. gpio_irq = 149 ,
. flags = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
IORESOURCE_IRQ_LOWLEVEL ,
2008-03-18 10:04:51 +02:00
2009-05-28 13:23:52 -07:00
} ;
2006-12-06 17:14:05 -08:00
2009-05-28 13:23:52 -07:00
static void __init board_smc91x_init ( void )
{
2010-08-02 14:21:39 +03:00
omap_mux_init_gpio ( 149 , OMAP_PIN_INPUT ) ;
2009-05-28 13:23:52 -07:00
gpmc_smc91x_init ( & board_smc91x_data ) ;
}
2006-12-06 17:14:05 -08:00
2009-05-28 13:23:52 -07:00
# else
2006-12-06 17:14:05 -08:00
2009-05-28 13:23:52 -07:00
static inline void board_smc91x_init ( void )
{
2006-12-06 17:14:05 -08:00
}
2009-05-28 13:23:52 -07:00
# endif
2011-02-07 16:08:47 +00:00
static struct regulator_consumer_supply sdp2430_vmmc1_supplies [ ] = {
2011-02-28 20:48:05 +05:30
REGULATOR_SUPPLY ( " vmmc " , " omap_hsmmc.0 " ) ,
2011-02-07 16:08:47 +00:00
} ;
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data sdp2430_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 ,
} ,
. num_consumer_supplies = ARRAY_SIZE ( sdp2430_vmmc1_supplies ) ,
. consumer_supplies = & sdp2430_vmmc1_supplies [ 0 ] ,
} ;
2008-12-10 17:37:17 -08:00
static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
} ;
static struct twl4030_platform_data sdp2430_twldata = {
/* platform_data for children goes here */
. gpio = & sdp2430_gpio_data ,
2011-02-07 16:08:47 +00:00
. vmmc1 = & sdp2430_vmmc1 ,
2008-12-10 17:37:17 -08:00
} ;
2010-05-10 14:29:15 -07:00
static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo [ ] = {
{
I2C_BOARD_INFO ( " isp1301_omap " , 0x2D ) ,
. flags = I2C_CLIENT_WAKE ,
} ,
} ;
2008-12-10 17:37:17 -08:00
static int __init omap2430_i2c_init ( void )
{
2012-03-29 08:41:01 -07:00
sdp2430_i2c1_boardinfo [ 0 ] . irq = gpio_to_irq ( 78 ) ;
2010-05-10 14:29:15 -07:00
omap_register_i2c_bus ( 1 , 100 , sdp2430_i2c1_boardinfo ,
ARRAY_SIZE ( sdp2430_i2c1_boardinfo ) ) ;
2012-08-27 17:43:01 -07:00
omap_pmic_init ( 2 , 100 , " twl4030 " , 7 + OMAP_INTC_START ,
2011-09-30 11:05:55 -07:00
& sdp2430_twldata ) ;
2008-12-10 17:37:17 -08:00
return 0 ;
}
2010-02-15 10:03:34 -08:00
static struct omap2_hsmmc_info mmc [ ] __initdata = {
2008-12-10 17:37:17 -08:00
{
. mmc = 1 ,
2010-09-15 14:49:23 +00:00
. caps = MMC_CAP_4_BIT_DATA ,
2008-12-10 17:37:17 -08:00
. gpio_cd = - EINVAL ,
. gpio_wp = - EINVAL ,
. ext_clock = 1 ,
} ,
{ } /* Terminator */
} ;
2010-07-05 16:31:38 +03:00
# ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux [ ] __initdata = {
{ . reg_offset = OMAP_MUX_TERMINATOR } ,
} ;
# endif
2006-12-06 17:14:05 -08:00
static void __init omap_2430sdp_init ( void )
{
2010-07-05 16:31:38 +03:00
omap2430_mux_init ( board_mux , OMAP_PACKAGE_ZAC ) ;
2008-12-10 17:37:17 -08:00
omap2430_i2c_init ( ) ;
2006-12-06 17:14:05 -08:00
platform_add_devices ( sdp2430_devices , ARRAY_SIZE ( sdp2430_devices ) ) ;
omap_serial_init ( ) ;
2011-08-22 23:57:23 -07:00
omap_sdrc_init ( NULL , NULL ) ;
2012-02-20 09:43:29 -08:00
omap_hsmmc_init ( mmc ) ;
2010-07-05 16:31:39 +03:00
omap_mux_init_signal ( " usb0hs_stp " , OMAP_PULL_ENA | OMAP_PULL_UP ) ;
2011-04-27 11:56:12 +03:00
usb_musb_init ( NULL ) ;
2010-07-05 16:31:39 +03:00
2009-05-28 13:23:52 -07:00
board_smc91x_init ( ) ;
2009-05-28 13:23:53 -07:00
/* Turn off secondary LCD backlight */
2011-05-03 18:22:09 +03:00
gpio_request_one ( SECONDARY_LCD_GPIO , GPIOF_OUT_INIT_LOW ,
" Secondary LCD backlight " ) ;
2011-04-19 19:23:05 +03:00
sdp2430_display_init ( ) ;
2006-12-06 17:14:05 -08:00
}
MACHINE_START ( OMAP_2430SDP , " OMAP2430 sdp2430 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-09-26 14:52:55 -07:00
. map_io = omap243x_map_io ,
2011-08-22 23:57:24 -07:00
. init_early = omap2430_init_early ,
2011-05-17 03:51:26 -07:00
. init_irq = omap2_init_irq ,
2011-09-06 10:23:45 +01:00
. handle_irq = omap2_intc_handle_irq ,
2006-12-06 17:14:05 -08:00
. init_machine = omap_2430sdp_init ,
2012-04-26 16:06:50 +08:00
. init_late = omap2430_init_late ,
2011-03-29 15:54:48 -07:00
. timer = & omap2_timer ,
2011-11-05 17:06:28 +00:00
. restart = omap_prcm_restart ,
2006-12-06 17:14:05 -08:00
MACHINE_END