2008-10-09 17:51:43 +03:00
/*
* board - overo . c ( Gumstix Overo )
*
* Initial code : Steve Sakoman < steve @ sakoman . 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 .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA
* 02110 - 1301 USA
*
*/
# include <linux/clk.h>
# include <linux/delay.h>
# include <linux/err.h>
# include <linux/init.h>
# include <linux/io.h>
2011-05-31 20:55:44 +08:00
# include <linux/gpio.h>
2008-10-09 17:51:43 +03:00
# include <linux/kernel.h>
# include <linux/platform_device.h>
2009-12-13 20:05:51 +01:00
# include <linux/i2c/twl.h>
2009-05-28 14:04:03 -07:00
# include <linux/regulator/machine.h>
2011-03-05 10:12:26 -06:00
# include <linux/regulator/fixed.h>
2011-03-05 07:58:39 -06:00
# include <linux/spi/spi.h>
2008-10-09 17:51:43 +03:00
# include <linux/mtd/mtd.h>
# include <linux/mtd/nand.h>
# include <linux/mtd/partitions.h>
2010-09-15 14:49:23 +00:00
# include <linux/mmc/host.h>
2013-02-06 18:58:50 +05:30
# include <linux/usb/phy.h>
2008-10-09 17:51:43 +03:00
2012-08-24 15:21:06 +02:00
# include <linux/platform_data/mtd-nand-omap2.h>
# include <linux/platform_data/spi-omap2-mcspi.h>
2008-10-09 17:51:43 +03:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/flash.h>
# include <asm/mach/map.h>
2011-05-11 14:05:07 +03:00
# include <video/omapdss.h>
2013-02-12 16:46:46 +05:30
# include <video/omap-panel-data.h>
2008-10-09 17:51:43 +03:00
2012-10-24 15:05:45 -07:00
# include "common.h"
2009-12-11 16:16:32 -08:00
# include "mux.h"
2009-05-28 14:03:59 -07:00
# include "sdram-micron-mt46h32m32lf-6.h"
2012-10-24 15:05:45 -07:00
# include "gpmc.h"
2010-02-15 10:03:34 -08:00
# include "hsmmc.h"
2012-02-29 18:11:56 +05:30
# include "board-flash.h"
2011-04-25 01:09:05 +03:00
# include "common-board-devices.h"
2008-12-10 17:37:17 -08:00
2012-02-29 18:11:56 +05:30
# define NAND_CS 0
2009-03-23 18:07:38 -07:00
# define OVERO_GPIO_BT_XGATE 15
# define OVERO_GPIO_W2W_NRESET 16
2009-07-20 09:09:23 -07:00
# define OVERO_GPIO_PENDOWN 114
2009-03-23 18:07:38 -07:00
# define OVERO_GPIO_BT_NRESET 164
# define OVERO_GPIO_USBH_CPEN 168
# define OVERO_GPIO_USBH_NRESET 183
2009-02-02 06:27:49 +00:00
# define OVERO_SMSC911X_CS 5
# define OVERO_SMSC911X_GPIO 176
2013-05-21 15:47:51 +02:00
# define OVERO_SMSC911X_NRESET 64
2010-05-10 14:29:18 -07:00
# define OVERO_SMSC911X2_CS 4
# define OVERO_SMSC911X2_GPIO 65
2009-02-02 06:27:49 +00:00
2013-05-03 10:50:28 +03:00
/* whether to register LCD35 instead of LCD43 */
static bool overo_use_lcd35 ;
2009-03-23 18:38:16 -07:00
# if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
defined ( CONFIG_TOUCHSCREEN_ADS7846_MODULE )
2011-03-05 10:12:26 -06:00
/* fixed regulator for ads7846 */
2011-06-06 18:57:07 +00:00
static struct regulator_consumer_supply ads7846_supply [ ] = {
REGULATOR_SUPPLY ( " vcc " , " spi1.0 " ) ,
} ;
2011-03-05 10:12:26 -06:00
static struct regulator_init_data vads7846_regulator = {
. constraints = {
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2011-06-06 18:57:07 +00:00
. num_consumer_supplies = ARRAY_SIZE ( ads7846_supply ) ,
. consumer_supplies = ads7846_supply ,
2011-03-05 10:12:26 -06:00
} ;
static struct fixed_voltage_config vads7846 = {
. supply_name = " vads7846 " ,
. microvolts = 3300000 , /* 3.3V */
. gpio = - EINVAL ,
. startup_delay = 0 ,
. init_data = & vads7846_regulator ,
} ;
static struct platform_device vads7846_device = {
. name = " reg-fixed-voltage " ,
. id = 1 ,
. dev = {
. platform_data = & vads7846 ,
} ,
2009-03-23 18:38:16 -07:00
} ;
static void __init overo_ads7846_init ( void )
{
2011-04-25 01:09:05 +03:00
omap_ads7846_init ( 1 , OVERO_GPIO_PENDOWN , 0 , NULL ) ;
2011-03-05 10:12:26 -06:00
platform_device_register ( & vads7846_device ) ;
2009-03-23 18:38:16 -07:00
}
# else
static inline void __init overo_ads7846_init ( void ) { return ; }
# endif
2009-02-02 06:27:49 +00:00
# if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
# include <linux/smsc911x.h>
2012-09-20 11:41:46 -07:00
# include "gpmc-smsc911x.h"
2009-02-02 06:27:49 +00:00
2011-04-16 22:29:30 +00:00
static struct omap_smsc911x_platform_data smsc911x_cfg = {
2010-05-10 14:29:18 -07:00
. id = 0 ,
2011-04-16 22:29:30 +00:00
. cs = OVERO_SMSC911X_CS ,
. gpio_irq = OVERO_SMSC911X_GPIO ,
2013-05-21 15:47:51 +02:00
. gpio_reset = OVERO_SMSC911X_NRESET ,
2011-04-16 22:29:30 +00:00
. flags = SMSC911X_USE_32BIT ,
2009-02-02 06:27:49 +00:00
} ;
2011-04-16 22:29:30 +00:00
static struct omap_smsc911x_platform_data smsc911x2_cfg = {
2010-08-02 14:21:39 +03:00
. id = 1 ,
2011-04-16 22:29:30 +00:00
. cs = OVERO_SMSC911X2_CS ,
. gpio_irq = OVERO_SMSC911X2_GPIO ,
. gpio_reset = - EINVAL ,
. flags = SMSC911X_USE_32BIT ,
2010-08-02 14:21:39 +03:00
} ;
2011-04-16 22:29:30 +00:00
static void __init overo_init_smsc911x ( void )
2009-02-02 06:27:49 +00:00
{
2011-04-16 22:29:30 +00:00
gpmc_smsc911x_init ( & smsc911x_cfg ) ;
gpmc_smsc911x_init ( & smsc911x2_cfg ) ;
2009-02-02 06:27:49 +00:00
}
# else
static inline void __init overo_init_smsc911x ( void ) { return ; }
# endif
2011-03-05 07:58:39 -06:00
/* DSS */
# define OVERO_GPIO_LCD_EN 144
# define OVERO_GPIO_LCD_BL 145
2013-05-03 10:50:28 +03:00
static struct connector_atv_platform_data overo_tv_pdata = {
. name = " tv " ,
. source = " venc.0 " ,
. connector_type = OMAP_DSS_VENC_TYPE_SVIDEO ,
. invert_polarity = false ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static struct platform_device overo_tv_connector_device = {
. name = " connector-analog-tv " ,
. id = 0 ,
. dev . platform_data = & overo_tv_pdata ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static const struct display_timing overo_lcd43_videomode = {
. pixelclock = { 0 , 9200000 , 0 } ,
. hactive = { 0 , 480 , 0 } ,
. hfront_porch = { 0 , 8 , 0 } ,
. hback_porch = { 0 , 4 , 0 } ,
. hsync_len = { 0 , 41 , 0 } ,
. vactive = { 0 , 272 , 0 } ,
. vfront_porch = { 0 , 4 , 0 } ,
. vback_porch = { 0 , 2 , 0 } ,
. vsync_len = { 0 , 10 , 0 } ,
. flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static struct panel_dpi_platform_data overo_lcd43_pdata = {
. name = " lcd43 " ,
. source = " dpi.0 " ,
. data_lines = 24 ,
. display_timing = & overo_lcd43_videomode ,
. enable_gpio = OVERO_GPIO_LCD_EN ,
. backlight_gpio = OVERO_GPIO_LCD_BL ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static struct platform_device overo_lcd43_device = {
. name = " panel-dpi " ,
. id = 0 ,
. dev . platform_data = & overo_lcd43_pdata ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static struct connector_dvi_platform_data overo_dvi_connector_pdata = {
. name = " dvi " ,
. source = " tfp410.0 " ,
. i2c_bus_num = 3 ,
2012-09-17 11:01:35 +03:00
} ;
2013-05-03 10:50:28 +03:00
static struct platform_device overo_dvi_connector_device = {
. name = " connector-dvi " ,
. id = 0 ,
. dev . platform_data = & overo_dvi_connector_pdata ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static struct encoder_tfp410_platform_data overo_tfp410_pdata = {
. name = " tfp410.0 " ,
. source = " dpi.0 " ,
. data_lines = 24 ,
. power_down_gpio = - 1 ,
} ;
static struct platform_device overo_tfp410_device = {
. name = " tfp410 " ,
. id = 0 ,
. dev . platform_data = & overo_tfp410_pdata ,
2011-03-05 07:58:39 -06:00
} ;
static struct omap_dss_board_info overo_dss_data = {
2013-05-03 10:50:28 +03:00
. default_display_name = " lcd43 " ,
2011-03-05 07:58:39 -06:00
} ;
2013-05-03 10:50:28 +03:00
static void __init overo_display_init ( void )
{
omap_display_init ( & overo_dss_data ) ;
if ( ! overo_use_lcd35 )
platform_device_register ( & overo_lcd43_device ) ;
platform_device_register ( & overo_tfp410_device ) ;
platform_device_register ( & overo_dvi_connector_device ) ;
platform_device_register ( & overo_tv_connector_device ) ;
}
2008-10-09 17:51:43 +03:00
static struct mtd_partition overo_nand_partitions [ ] = {
{
. name = " xloader " ,
. offset = 0 , /* Offset = 0x00000 */
. size = 4 * NAND_BLOCK_SIZE ,
. mask_flags = MTD_WRITEABLE
} ,
{
. name = " uboot " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x80000 */
. size = 14 * NAND_BLOCK_SIZE ,
} ,
{
. name = " uboot environment " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x240000 */
. size = 2 * NAND_BLOCK_SIZE ,
} ,
{
. name = " linux " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x280000 */
. size = 32 * NAND_BLOCK_SIZE ,
} ,
{
. name = " rootfs " ,
. offset = MTDPART_OFS_APPEND , /* Offset = 0x680000 */
. size = MTDPART_SIZ_FULL ,
} ,
} ;
2010-02-15 10:03:34 -08:00
static struct omap2_hsmmc_info mmc [ ] = {
2009-05-28 14:04:03 -07:00
{
. mmc = 1 ,
2010-09-15 14:49:23 +00:00
. caps = MMC_CAP_4_BIT_DATA ,
2009-05-28 14:04:03 -07:00
. gpio_cd = - EINVAL ,
. gpio_wp = - EINVAL ,
} ,
{
. mmc = 2 ,
2010-09-15 14:49:23 +00:00
. caps = MMC_CAP_4_BIT_DATA ,
2009-05-28 14:04:03 -07:00
. gpio_cd = - EINVAL ,
. gpio_wp = - EINVAL ,
. transceiver = true ,
. ocr_mask = 0x00100000 , /* 3.3V */
} ,
{ } /* Terminator */
} ;
2011-06-06 18:57:07 +00:00
static struct regulator_consumer_supply overo_vmmc1_supply [ ] = {
REGULATOR_SUPPLY ( " vmmc " , " omap_hsmmc.0 " ) ,
2009-05-28 14:04:03 -07:00
} ;
2011-03-09 18:08:05 -06:00
# if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
# include <linux/leds.h>
static struct gpio_led gpio_leds [ ] = {
{
. name = " overo:red:gpio21 " ,
. default_trigger = " heartbeat " ,
. gpio = 21 ,
. active_low = true ,
} ,
{
. name = " overo:blue:gpio22 " ,
. default_trigger = " none " ,
. gpio = 22 ,
. active_low = true ,
} ,
{
. name = " overo:blue:COM " ,
. default_trigger = " mmc0 " ,
. gpio = - EINVAL , /* gets replaced */
. active_low = true ,
} ,
} ;
static struct gpio_led_platform_data gpio_leds_pdata = {
. leds = gpio_leds ,
. num_leds = ARRAY_SIZE ( gpio_leds ) ,
} ;
static struct platform_device gpio_leds_device = {
. name = " leds-gpio " ,
. id = - 1 ,
. dev = {
. platform_data = & gpio_leds_pdata ,
} ,
} ;
static void __init overo_init_led ( void )
{
platform_device_register ( & gpio_leds_device ) ;
}
# else
static inline void __init overo_init_led ( void ) { return ; }
# endif
2011-03-09 18:08:06 -06:00
# if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
# include <linux/input.h>
# include <linux/gpio_keys.h>
static struct gpio_keys_button gpio_buttons [ ] = {
{
. code = BTN_0 ,
. gpio = 23 ,
. desc = " button0 " ,
. wakeup = 1 ,
} ,
{
. code = BTN_1 ,
. gpio = 14 ,
. desc = " button1 " ,
. wakeup = 1 ,
} ,
} ;
static struct gpio_keys_platform_data gpio_keys_pdata = {
. buttons = gpio_buttons ,
. nbuttons = ARRAY_SIZE ( gpio_buttons ) ,
} ;
static struct platform_device gpio_keys_device = {
. name = " gpio-keys " ,
. id = - 1 ,
. dev = {
. platform_data = & gpio_keys_pdata ,
} ,
} ;
static void __init overo_init_keys ( void )
{
platform_device_register ( & gpio_keys_device ) ;
}
# else
static inline void __init overo_init_keys ( void ) { return ; }
# endif
2009-05-28 14:04:03 -07:00
static int overo_twl_gpio_setup ( struct device * dev ,
unsigned gpio , unsigned ngpio )
{
2011-03-09 18:08:05 -06:00
# if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
gpio_leds [ 2 ] . gpio = gpio + TWL4030_GPIO_MAX + 1 ;
# endif
2009-05-28 14:04:03 -07:00
return 0 ;
}
2008-12-10 17:37:17 -08:00
static struct twl4030_gpio_platform_data overo_gpio_data = {
2011-03-09 18:08:05 -06:00
. use_leds = true ,
2009-05-28 14:04:03 -07:00
. setup = overo_twl_gpio_setup ,
} ;
static struct regulator_init_data overo_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-06-06 18:57:07 +00:00
. num_consumer_supplies = ARRAY_SIZE ( overo_vmmc1_supply ) ,
. consumer_supplies = overo_vmmc1_supply ,
2008-12-10 17:37:17 -08:00
} ;
static struct twl4030_platform_data overo_twldata = {
. gpio = & overo_gpio_data ,
2009-05-28 14:04:03 -07:00
. vmmc1 = & overo_vmmc1 ,
2008-12-10 17:37:17 -08:00
} ;
2008-10-09 17:51:43 +03:00
static int __init overo_i2c_init ( void )
{
2011-06-07 10:28:54 +03:00
omap3_pmic_get_config ( & overo_twldata ,
2011-06-07 11:38:24 +03:00
TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_AUDIO ,
TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2 ) ;
overo_twldata . vpll2 - > constraints . name = " VDVI " ;
2011-04-25 01:09:06 +03:00
omap3_pmic_init ( " tps65950 " , & overo_twldata ) ;
2008-10-09 17:51:43 +03:00
/* i2c2 pins are used for gpio */
omap_register_i2c_bus ( 3 , 400 , NULL , 0 ) ;
return 0 ;
}
2013-05-03 10:50:28 +03:00
static struct panel_lb035q02_platform_data overo_lcd35_pdata = {
. name = " lcd35 " ,
. source = " dpi.0 " ,
. data_lines = 24 ,
. enable_gpio = OVERO_GPIO_LCD_EN ,
. backlight_gpio = OVERO_GPIO_LCD_BL ,
} ;
/*
* NOTE : We need to add either the lgphilips panel , or the lcd43 panel . The
* selection is done based on the overo_use_lcd35 field . If new SPI
* devices are added here , extra work is needed to make only the lgphilips panel
* affected by the overo_use_lcd35 field .
*/
2011-03-05 07:58:39 -06:00
static struct spi_board_info overo_spi_board_info [ ] __initdata = {
{
2013-05-03 10:50:28 +03:00
. modalias = " panel_lgphilips_lb035q02 " ,
2011-03-05 07:58:39 -06:00
. bus_num = 1 ,
. chip_select = 1 ,
. max_speed_hz = 500000 ,
. mode = SPI_MODE_3 ,
2013-05-03 10:50:28 +03:00
. platform_data = & overo_lcd35_pdata ,
2011-03-05 07:58:39 -06:00
} ,
2008-10-09 17:51:43 +03:00
} ;
2011-03-05 07:58:39 -06:00
static int __init overo_spi_init ( void )
{
overo_ads7846_init ( ) ;
2013-05-03 10:50:28 +03:00
if ( overo_use_lcd35 ) {
spi_register_board_info ( overo_spi_board_info ,
ARRAY_SIZE ( overo_spi_board_info ) ) ;
}
2011-03-05 07:58:39 -06:00
return 0 ;
}
2008-10-09 17:51:43 +03:00
2013-03-20 17:44:56 +02:00
static struct usbhs_phy_data phy_data [ ] __initdata = {
{
. port = 2 ,
. reset_gpio = OVERO_GPIO_USBH_NRESET ,
. vcc_gpio = - EINVAL ,
} ,
} ;
2013-02-14 10:13:48 +02:00
static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
2011-03-01 20:08:16 +05:30
. port_mode [ 1 ] = OMAP_EHCI_PORT_MODE_PHY ,
2009-11-22 10:11:01 -08:00
} ;
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 } ,
} ;
# endif
2009-11-22 10:11:01 -08:00
2011-05-03 18:22:09 +03:00
static struct gpio overo_bt_gpios [ ] __initdata = {
{ OVERO_GPIO_BT_XGATE , GPIOF_OUT_INIT_LOW , " lcd enable " } ,
{ OVERO_GPIO_BT_NRESET , GPIOF_OUT_INIT_HIGH , " lcd bl enable " } ,
2010-02-17 14:09:30 -08:00
} ;
2012-03-23 02:21:37 -07:00
static struct regulator_consumer_supply dummy_supplies [ ] = {
REGULATOR_SUPPLY ( " vddvario " , " smsc911x.0 " ) ,
REGULATOR_SUPPLY ( " vdd33a " , " smsc911x.0 " ) ,
REGULATOR_SUPPLY ( " vddvario " , " smsc911x.1 " ) ,
REGULATOR_SUPPLY ( " vdd33a " , " smsc911x.1 " ) ,
} ;
2008-10-09 17:51:43 +03:00
static void __init overo_init ( void )
{
2011-05-03 18:22:09 +03:00
int ret ;
2013-05-03 10:50:28 +03:00
if ( strstr ( boot_command_line , " omapdss.def_disp=lcd35 " ) )
overo_use_lcd35 = true ;
2012-03-23 02:21:37 -07:00
regulator_register_fixed ( 0 , dummy_supplies , ARRAY_SIZE ( dummy_supplies ) ) ;
2009-12-11 16:16:32 -08:00
omap3_mux_init ( board_mux , OMAP_PACKAGE_CBB ) ;
2008-10-09 17:51:43 +03:00
overo_i2c_init ( ) ;
2012-06-28 10:01:31 -07:00
omap_hsmmc_init ( mmc ) ;
2008-10-09 17:51:43 +03:00
omap_serial_init ( ) ;
2011-08-22 23:57:23 -07:00
omap_sdrc_init ( mt46h32m32lf6_sdrc_params ,
mt46h32m32lf6_sdrc_params ) ;
2012-02-29 18:11:56 +05:30
board_nand_init ( overo_nand_partitions ,
ARRAY_SIZE ( overo_nand_partitions ) , NAND_CS , 0 , NULL ) ;
2013-02-06 18:58:50 +05:30
usb_bind_phy ( " musb-hdrc.0.auto " , 0 , " twl4030_usb " ) ;
2011-04-27 11:56:12 +03:00
usb_musb_init ( NULL ) ;
2013-03-20 17:44:56 +02:00
usbhs_init_phys ( phy_data , ARRAY_SIZE ( phy_data ) ) ;
2011-03-01 20:08:19 +05:30
usbhs_init ( & usbhs_bdata ) ;
2011-03-05 07:58:39 -06:00
overo_spi_init ( ) ;
2009-02-02 06:27:49 +00:00
overo_init_smsc911x ( ) ;
2011-03-09 18:08:05 -06:00
overo_init_led ( ) ;
2011-03-09 18:08:06 -06:00
overo_init_keys ( ) ;
2012-12-05 14:45:23 +01:00
omap_twl4030_audio_init ( " overo " , NULL ) ;
2008-10-09 17:51:43 +03:00
2013-05-03 10:50:28 +03:00
overo_display_init ( ) ;
2009-07-24 19:43:25 -06:00
/* Ensure SDRC pins are mux'd for self-refresh */
2009-12-11 16:16:32 -08:00
omap_mux_init_signal ( " sdrc_cke0 " , OMAP_PIN_OUTPUT ) ;
omap_mux_init_signal ( " sdrc_cke1 " , OMAP_PIN_OUTPUT ) ;
2009-07-24 19:43:25 -06:00
2011-05-03 18:22:09 +03:00
ret = gpio_request_one ( OVERO_GPIO_W2W_NRESET , GPIOF_OUT_INIT_HIGH ,
" OVERO_GPIO_W2W_NRESET " ) ;
if ( ret = = 0 ) {
2008-10-09 17:51:43 +03:00
gpio_export ( OVERO_GPIO_W2W_NRESET , 0 ) ;
gpio_set_value ( OVERO_GPIO_W2W_NRESET , 0 ) ;
udelay ( 10 ) ;
gpio_set_value ( OVERO_GPIO_W2W_NRESET , 1 ) ;
} else {
2012-07-26 00:54:26 -06:00
pr_err ( " could not obtain gpio for OVERO_GPIO_W2W_NRESET \n " ) ;
2008-10-09 17:51:43 +03:00
}
2011-05-03 18:22:09 +03:00
ret = gpio_request_array ( overo_bt_gpios , ARRAY_SIZE ( overo_bt_gpios ) ) ;
if ( ret ) {
pr_err ( " %s: could not obtain BT gpios \n " , __func__ ) ;
} else {
2008-10-09 17:51:43 +03:00
gpio_export ( OVERO_GPIO_BT_XGATE , 0 ) ;
gpio_export ( OVERO_GPIO_BT_NRESET , 0 ) ;
gpio_set_value ( OVERO_GPIO_BT_NRESET , 0 ) ;
mdelay ( 6 ) ;
gpio_set_value ( OVERO_GPIO_BT_NRESET , 1 ) ;
}
2011-05-03 18:22:09 +03:00
ret = gpio_request_one ( OVERO_GPIO_USBH_CPEN , GPIOF_OUT_INIT_HIGH ,
" OVERO_GPIO_USBH_CPEN " ) ;
if ( ret = = 0 )
2008-10-09 17:51:43 +03:00
gpio_export ( OVERO_GPIO_USBH_CPEN , 0 ) ;
else
2012-07-26 00:54:26 -06:00
pr_err ( " could not obtain gpio for OVERO_GPIO_USBH_CPEN \n " ) ;
2008-10-09 17:51:43 +03:00
}
MACHINE_START ( OVERO , " Gumstix Overo " )
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 = omap35xx_init_early ,
2011-05-17 03:51:26 -07:00
. init_irq = omap3_init_irq ,
2011-09-06 10:23:45 +01:00
. handle_irq = omap3_intc_handle_irq ,
2008-10-09 17:51:43 +03:00
. init_machine = overo_init ,
2012-04-26 16:06:50 +08:00
. init_late = omap35xx_init_late ,
2012-11-08 12:40:59 -07:00
. init_time = omap3_sync32k_timer_init ,
2012-10-29 20:56:12 -06:00
. restart = omap3xxx_restart ,
2008-10-09 17:51:43 +03:00
MACHINE_END