2009-11-18 18:41:09 -08:00
/*
* linux / arch / arm / mach - omap2 / board - am3517evm . c
*
* Copyright ( C ) 2009 Texas Instruments Incorporated
* Author : Ranjith Lohithakshan < ranjithl @ ti . com >
*
* Based on mach - omap2 / board - omap3evm . c
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation version 2.
*
* This program is distributed " as is " WITHOUT ANY WARRANTY of any kind ,
* whether express or implied ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/gpio.h>
# include <mach/hardware.h>
2010-02-15 10:03:35 -08:00
# include <mach/am35xx.h>
2009-11-18 18:41:09 -08:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
# include <plat/board.h>
# include <plat/common.h>
# include <plat/usb.h>
2010-01-13 17:17:10 +05:30
# include <plat/display.h>
2009-11-18 18:41:09 -08:00
2009-12-11 16:16:32 -08:00
# include "mux.h"
2010-01-13 17:17:10 +05:30
# define LCD_PANEL_PWR 176
# define LCD_PANEL_BKLIGHT_PWR 182
# define LCD_PANEL_PWM 181
static int lcd_enabled ;
static int dvi_enabled ;
static void __init am3517_evm_display_init ( void )
{
int r ;
omap_mux_init_gpio ( LCD_PANEL_PWR , OMAP_PIN_INPUT_PULLUP ) ;
omap_mux_init_gpio ( LCD_PANEL_BKLIGHT_PWR , OMAP_PIN_INPUT_PULLDOWN ) ;
omap_mux_init_gpio ( LCD_PANEL_PWM , OMAP_PIN_INPUT_PULLDOWN ) ;
/*
* Enable GPIO 182 = LCD Backlight Power
*/
r = gpio_request ( LCD_PANEL_BKLIGHT_PWR , " lcd_backlight_pwr " ) ;
if ( r ) {
printk ( KERN_ERR " failed to get lcd_backlight_pwr \n " ) ;
return ;
}
gpio_direction_output ( LCD_PANEL_BKLIGHT_PWR , 1 ) ;
/*
* Enable GPIO 181 = LCD Panel PWM
*/
r = gpio_request ( LCD_PANEL_PWM , " lcd_pwm " ) ;
if ( r ) {
printk ( KERN_ERR " failed to get lcd_pwm \n " ) ;
goto err_1 ;
}
gpio_direction_output ( LCD_PANEL_PWM , 1 ) ;
/*
* Enable GPIO 176 = LCD Panel Power enable pin
*/
r = gpio_request ( LCD_PANEL_PWR , " lcd_panel_pwr " ) ;
if ( r ) {
printk ( KERN_ERR " failed to get lcd_panel_pwr \n " ) ;
goto err_2 ;
}
gpio_direction_output ( LCD_PANEL_PWR , 1 ) ;
printk ( KERN_INFO " Display initialized successfully \n " ) ;
return ;
err_2 :
gpio_free ( LCD_PANEL_PWM ) ;
err_1 :
gpio_free ( LCD_PANEL_BKLIGHT_PWR ) ;
}
static int am3517_evm_panel_enable_lcd ( struct omap_dss_device * dssdev )
{
if ( dvi_enabled ) {
printk ( KERN_ERR " cannot enable LCD, DVI is enabled \n " ) ;
return - EINVAL ;
}
gpio_set_value ( LCD_PANEL_PWR , 1 ) ;
lcd_enabled = 1 ;
return 0 ;
}
static void am3517_evm_panel_disable_lcd ( struct omap_dss_device * dssdev )
{
gpio_set_value ( LCD_PANEL_PWR , 0 ) ;
lcd_enabled = 0 ;
}
static struct omap_dss_device am3517_evm_lcd_device = {
. type = OMAP_DISPLAY_TYPE_DPI ,
. name = " lcd " ,
. driver_name = " sharp_lq_panel " ,
. phy . dpi . data_lines = 16 ,
. platform_enable = am3517_evm_panel_enable_lcd ,
. platform_disable = am3517_evm_panel_disable_lcd ,
} ;
static int am3517_evm_panel_enable_tv ( struct omap_dss_device * dssdev )
{
return 0 ;
}
static void am3517_evm_panel_disable_tv ( struct omap_dss_device * dssdev )
{
}
static struct omap_dss_device am3517_evm_tv_device = {
. type = OMAP_DISPLAY_TYPE_VENC ,
. name = " tv " ,
. driver_name = " venc " ,
. phy . venc . type = OMAP_DSS_VENC_TYPE_SVIDEO ,
. platform_enable = am3517_evm_panel_enable_tv ,
. platform_disable = am3517_evm_panel_disable_tv ,
} ;
static int am3517_evm_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 am3517_evm_panel_disable_dvi ( struct omap_dss_device * dssdev )
{
dvi_enabled = 0 ;
}
static struct omap_dss_device am3517_evm_dvi_device = {
. type = OMAP_DISPLAY_TYPE_DPI ,
. name = " dvi " ,
. driver_name = " generic_panel " ,
. phy . dpi . data_lines = 24 ,
. platform_enable = am3517_evm_panel_enable_dvi ,
. platform_disable = am3517_evm_panel_disable_dvi ,
} ;
static struct omap_dss_device * am3517_evm_dss_devices [ ] = {
& am3517_evm_lcd_device ,
& am3517_evm_tv_device ,
& am3517_evm_dvi_device ,
} ;
static struct omap_dss_board_info am3517_evm_dss_data = {
. num_devices = ARRAY_SIZE ( am3517_evm_dss_devices ) ,
. devices = am3517_evm_dss_devices ,
. default_device = & am3517_evm_lcd_device ,
} ;
struct platform_device am3517_evm_dss_device = {
. name = " omapdss " ,
. id = - 1 ,
. dev = {
. platform_data = & am3517_evm_dss_data ,
} ,
} ;
2009-11-18 18:41:09 -08:00
/*
* Board initialization
*/
static struct omap_board_config_kernel am3517_evm_config [ ] __initdata = {
} ;
static struct platform_device * am3517_evm_devices [ ] __initdata = {
2010-01-13 17:17:10 +05:30
& am3517_evm_dss_device ,
2009-11-18 18:41:09 -08:00
} ;
static void __init am3517_evm_init_irq ( void )
{
omap_board_config = am3517_evm_config ;
omap_board_config_size = ARRAY_SIZE ( am3517_evm_config ) ;
omap2_init_common_hw ( NULL , NULL ) ;
omap_init_irq ( ) ;
omap_gpio_init ( ) ;
}
static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
. port_mode [ 0 ] = EHCI_HCD_OMAP_MODE_PHY ,
. port_mode [ 1 ] = EHCI_HCD_OMAP_MODE_PHY ,
. port_mode [ 2 ] = EHCI_HCD_OMAP_MODE_UNKNOWN ,
. phy_reset = true ,
. reset_gpio_port [ 0 ] = 57 ,
. reset_gpio_port [ 1 ] = - EINVAL ,
. 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 } ,
} ;
# else
# define board_mux NULL
# endif
2009-11-18 18:41:09 -08:00
static void __init am3517_evm_init ( void )
{
2009-12-11 16:16:32 -08:00
omap3_mux_init ( board_mux , OMAP_PACKAGE_CBB ) ;
2009-11-18 18:41:09 -08:00
platform_add_devices ( am3517_evm_devices ,
ARRAY_SIZE ( am3517_evm_devices ) ) ;
omap_serial_init ( ) ;
usb_ehci_init ( & ehci_pdata ) ;
2010-01-13 17:17:10 +05:30
/* DSS */
am3517_evm_display_init ( ) ;
2009-11-18 18:41:09 -08:00
}
static void __init am3517_evm_map_io ( void )
{
omap2_set_globals_343x ( ) ;
2010-02-12 12:26:47 -08:00
omap34xx_map_common_io ( ) ;
2009-11-18 18:41:09 -08:00
}
MACHINE_START ( OMAP3517EVM , " OMAP3517/AM3517 EVM " )
. phys_io = 0x48000000 ,
. io_pg_offst = ( ( 0xd8000000 ) > > 18 ) & 0xfffc ,
. boot_params = 0x80000100 ,
. map_io = am3517_evm_map_io ,
. init_irq = am3517_evm_init_irq ,
. init_machine = am3517_evm_init ,
. timer = & omap_timer ,
MACHINE_END