Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
fd0dbc83
Commit
fd0dbc83
authored
May 20, 2015
by
Tony Lindgren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'omap-for-v4.2/legacy' into omap-for-v4.2/cleanup
parents
e44be50c
d203c574
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
0 additions
and
1960 deletions
+0
-1960
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/Kconfig
+0
-22
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/Makefile
+0
-3
arch/arm/mach-omap2/board-cm-t35.c
arch/arm/mach-omap2/board-cm-t35.c
+0
-769
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-omap2/board-omap3beagle.c
+0
-595
arch/arm/mach-omap2/board-overo.c
arch/arm/mach-omap2/board-overo.c
+0
-571
No files found.
arch/arm/mach-omap2/Kconfig
View file @
fd0dbc83
...
...
@@ -171,12 +171,6 @@ config MACH_OMAP2_TUSB6010
depends on ARCH_OMAP2 && SOC_OMAP2420
default y if MACH_NOKIA_N8X0
config MACH_OMAP3_BEAGLE
bool "OMAP3 BEAGLE board"
depends on ARCH_OMAP3
default y
select OMAP_PACKAGE_CBB
config MACH_OMAP_LDP
bool "OMAP3 LDP board"
depends on ARCH_OMAP3
...
...
@@ -203,12 +197,6 @@ config MACH_OMAP3_TORPEDO
for full description please see the products webpage at
http://www.logicpd.com/products/development-kits/zoom-omap35x-torpedo-development-kit
config MACH_OVERO
bool "Gumstix Overo board"
depends on ARCH_OMAP3
default y
select OMAP_PACKAGE_CBB
config MACH_OMAP3517EVM
bool "OMAP3517/ AM3517 EVM board"
depends on ARCH_OMAP3
...
...
@@ -240,16 +228,6 @@ config MACH_NOKIA_RX51
default y
select OMAP_PACKAGE_CBB
config MACH_CM_T35
bool "CompuLab CM-T35/CM-T3730 modules"
depends on ARCH_OMAP3
default y
select MACH_CM_T3730
select OMAP_PACKAGE_CUS
config MACH_CM_T3730
bool
config OMAP3_SDRC_AC_TIMING
bool "Enable SDRC AC timing register changes"
depends on ARCH_OMAP3
...
...
arch/arm/mach-omap2/Makefile
View file @
fd0dbc83
...
...
@@ -242,17 +242,14 @@ obj-$(CONFIG_SOC_OMAP2420) += msdi.o
# Specific board support
obj-$(CONFIG_MACH_OMAP_GENERIC)
+=
board-generic.o pdata-quirks.o
obj-$(CONFIG_MACH_OMAP3_BEAGLE)
+=
board-omap3beagle.o
obj-$(CONFIG_MACH_OMAP_LDP)
+=
board-ldp.o
obj-$(CONFIG_MACH_OMAP3530_LV_SOM)
+=
board-omap3logic.o
obj-$(CONFIG_MACH_OMAP3_TORPEDO)
+=
board-omap3logic.o
obj-$(CONFIG_MACH_OVERO)
+=
board-overo.o
obj-$(CONFIG_MACH_OMAP3_PANDORA)
+=
board-omap3pandora.o
obj-$(CONFIG_MACH_NOKIA_N8X0)
+=
board-n8x0.o
obj-$(CONFIG_MACH_NOKIA_RX51)
+=
board-rx51.o sdram-nokia.o
obj-$(CONFIG_MACH_NOKIA_RX51)
+=
board-rx51-peripherals.o
obj-$(CONFIG_MACH_NOKIA_RX51)
+=
board-rx51-video.o
obj-$(CONFIG_MACH_CM_T35)
+=
board-cm-t35.o
# Platform specific device init code
...
...
arch/arm/mach-omap2/board-cm-t35.c
deleted
100644 → 0
View file @
e44be50c
/*
* CompuLab CM-T35/CM-T3730 modules support
*
* Copyright (C) 2009-2011 CompuLab, Ltd.
* Authors: Mike Rapoport <mike@compulab.co.il>
* Igor Grinberg <grinberg@compulab.co.il>
*
* 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.
*
*/
#include <linux/clk-provider.h>
#include <linux/clkdev.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/input.h>
#include <linux/input/matrix_keypad.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/omap-gpmc.h>
#include <linux/platform_data/gpio-omap.h>
#include <linux/platform_data/at24.h>
#include <linux/i2c/twl.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <linux/mmc/host.h>
#include <linux/usb/phy.h>
#include <linux/spi/spi.h>
#include <linux/spi/tdo24m.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <linux/platform_data/mtd-nand-omap2.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
#include <linux/platform_data/spi-omap2-mcspi.h>
#include "common.h"
#include "mux.h"
#include "sdram-micron-mt46h32m32lf-6.h"
#include "hsmmc.h"
#include "common-board-devices.h"
#define CM_T35_GPIO_PENDOWN 57
#define SB_T35_USB_HUB_RESET_GPIO 167
#define CM_T35_SMSC911X_CS 5
#define CM_T35_SMSC911X_GPIO 163
#define SB_T35_SMSC911X_CS 4
#define SB_T35_SMSC911X_GPIO 65
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
#include <linux/smsc911x.h>
#include "gpmc-smsc911x.h"
static
struct
omap_smsc911x_platform_data
cm_t35_smsc911x_cfg
=
{
.
id
=
0
,
.
cs
=
CM_T35_SMSC911X_CS
,
.
gpio_irq
=
CM_T35_SMSC911X_GPIO
,
.
gpio_reset
=
-
EINVAL
,
.
flags
=
SMSC911X_USE_32BIT
|
SMSC911X_SAVE_MAC_ADDRESS
,
};
static
struct
omap_smsc911x_platform_data
sb_t35_smsc911x_cfg
=
{
.
id
=
1
,
.
cs
=
SB_T35_SMSC911X_CS
,
.
gpio_irq
=
SB_T35_SMSC911X_GPIO
,
.
gpio_reset
=
-
EINVAL
,
.
flags
=
SMSC911X_USE_32BIT
|
SMSC911X_SAVE_MAC_ADDRESS
,
};
static
struct
regulator_consumer_supply
cm_t35_smsc911x_supplies
[]
=
{
REGULATOR_SUPPLY
(
"vddvario"
,
"smsc911x.0"
),
REGULATOR_SUPPLY
(
"vdd33a"
,
"smsc911x.0"
),
};
static
struct
regulator_consumer_supply
sb_t35_smsc911x_supplies
[]
=
{
REGULATOR_SUPPLY
(
"vddvario"
,
"smsc911x.1"
),
REGULATOR_SUPPLY
(
"vdd33a"
,
"smsc911x.1"
),
};
static
void
__init
cm_t35_init_ethernet
(
void
)
{
regulator_register_fixed
(
0
,
cm_t35_smsc911x_supplies
,
ARRAY_SIZE
(
cm_t35_smsc911x_supplies
));
regulator_register_fixed
(
1
,
sb_t35_smsc911x_supplies
,
ARRAY_SIZE
(
sb_t35_smsc911x_supplies
));
gpmc_smsc911x_init
(
&
cm_t35_smsc911x_cfg
);
gpmc_smsc911x_init
(
&
sb_t35_smsc911x_cfg
);
}
#else
static
inline
void
__init
cm_t35_init_ethernet
(
void
)
{
return
;
}
#endif
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
#include <linux/leds.h>
static
struct
gpio_led
cm_t35_leds
[]
=
{
[
0
]
=
{
.
gpio
=
186
,
.
name
=
"cm-t35:green"
,
.
default_trigger
=
"heartbeat"
,
.
active_low
=
0
,
},
};
static
struct
gpio_led_platform_data
cm_t35_led_pdata
=
{
.
num_leds
=
ARRAY_SIZE
(
cm_t35_leds
),
.
leds
=
cm_t35_leds
,
};
static
struct
platform_device
cm_t35_led_device
=
{
.
name
=
"leds-gpio"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
cm_t35_led_pdata
,
},
};
static
void
__init
cm_t35_init_led
(
void
)
{
platform_device_register
(
&
cm_t35_led_device
);
}
#else
static
inline
void
cm_t35_init_led
(
void
)
{}
#endif
#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
static
struct
mtd_partition
cm_t35_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
=
15
*
NAND_BLOCK_SIZE
,
},
{
.
name
=
"uboot environment"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x260000 */
.
size
=
2
*
NAND_BLOCK_SIZE
,
},
{
.
name
=
"linux"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x2A0000 */
.
size
=
32
*
NAND_BLOCK_SIZE
,
},
{
.
name
=
"rootfs"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x6A0000 */
.
size
=
MTDPART_SIZ_FULL
,
},
};
static
struct
omap_nand_platform_data
cm_t35_nand_data
=
{
.
parts
=
cm_t35_nand_partitions
,
.
nr_parts
=
ARRAY_SIZE
(
cm_t35_nand_partitions
),
.
cs
=
0
,
};
static
void
__init
cm_t35_init_nand
(
void
)
{
if
(
gpmc_nand_init
(
&
cm_t35_nand_data
,
NULL
)
<
0
)
pr_err
(
"CM-T35: Unable to register NAND device
\n
"
);
}
#else
static
inline
void
cm_t35_init_nand
(
void
)
{}
#endif
#define CM_T35_LCD_EN_GPIO 157
#define CM_T35_LCD_BL_GPIO 58
#define CM_T35_DVI_EN_GPIO 54
static
const
struct
display_timing
cm_t35_lcd_videomode
=
{
.
pixelclock
=
{
0
,
26000000
,
0
},
.
hactive
=
{
0
,
480
,
0
},
.
hfront_porch
=
{
0
,
104
,
0
},
.
hback_porch
=
{
0
,
8
,
0
},
.
hsync_len
=
{
0
,
8
,
0
},
.
vactive
=
{
0
,
640
,
0
},
.
vfront_porch
=
{
0
,
4
,
0
},
.
vback_porch
=
{
0
,
2
,
0
},
.
vsync_len
=
{
0
,
2
,
0
},
.
flags
=
DISPLAY_FLAGS_HSYNC_LOW
|
DISPLAY_FLAGS_VSYNC_LOW
|
DISPLAY_FLAGS_DE_HIGH
|
DISPLAY_FLAGS_PIXDATA_NEGEDGE
,
};
static
struct
panel_dpi_platform_data
cm_t35_lcd_pdata
=
{
.
name
=
"lcd"
,
.
source
=
"dpi.0"
,
.
data_lines
=
18
,
.
display_timing
=
&
cm_t35_lcd_videomode
,
.
enable_gpio
=
-
1
,
.
backlight_gpio
=
CM_T35_LCD_BL_GPIO
,
};
static
struct
platform_device
cm_t35_lcd_device
=
{
.
name
=
"panel-dpi"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
cm_t35_lcd_pdata
,
};
static
struct
connector_dvi_platform_data
cm_t35_dvi_connector_pdata
=
{
.
name
=
"dvi"
,
.
source
=
"tfp410.0"
,
.
i2c_bus_num
=
-
1
,
};
static
struct
platform_device
cm_t35_dvi_connector_device
=
{
.
name
=
"connector-dvi"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
cm_t35_dvi_connector_pdata
,
};
static
struct
encoder_tfp410_platform_data
cm_t35_tfp410_pdata
=
{
.
name
=
"tfp410.0"
,
.
source
=
"dpi.0"
,
.
data_lines
=
24
,
.
power_down_gpio
=
CM_T35_DVI_EN_GPIO
,
};
static
struct
platform_device
cm_t35_tfp410_device
=
{
.
name
=
"tfp410"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
cm_t35_tfp410_pdata
,
};
static
struct
connector_atv_platform_data
cm_t35_tv_pdata
=
{
.
name
=
"tv"
,
.
source
=
"venc.0"
,
.
connector_type
=
OMAP_DSS_VENC_TYPE_SVIDEO
,
.
invert_polarity
=
false
,
};
static
struct
platform_device
cm_t35_tv_connector_device
=
{
.
name
=
"connector-analog-tv"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
cm_t35_tv_pdata
,
};
static
struct
omap_dss_board_info
cm_t35_dss_data
=
{
.
default_display_name
=
"dvi"
,
};
static
struct
omap2_mcspi_device_config
tdo24m_mcspi_config
=
{
.
turbo_mode
=
0
,
};
static
struct
tdo24m_platform_data
tdo24m_config
=
{
.
model
=
TDO35S
,
};
static
struct
spi_board_info
cm_t35_lcd_spi_board_info
[]
__initdata
=
{
{
.
modalias
=
"tdo24m"
,
.
bus_num
=
4
,
.
chip_select
=
0
,
.
max_speed_hz
=
1000000
,
.
controller_data
=
&
tdo24m_mcspi_config
,
.
platform_data
=
&
tdo24m_config
,
},
};
static
void
__init
cm_t35_init_display
(
void
)
{
int
err
;
spi_register_board_info
(
cm_t35_lcd_spi_board_info
,
ARRAY_SIZE
(
cm_t35_lcd_spi_board_info
));
err
=
gpio_request_one
(
CM_T35_LCD_EN_GPIO
,
GPIOF_OUT_INIT_LOW
,
"lcd bl enable"
);
if
(
err
)
{
pr_err
(
"CM-T35: failed to request LCD EN GPIO
\n
"
);
return
;
}
msleep
(
50
);
gpio_set_value
(
CM_T35_LCD_EN_GPIO
,
1
);
err
=
omap_display_init
(
&
cm_t35_dss_data
);
if
(
err
)
{
pr_err
(
"CM-T35: failed to register DSS device
\n
"
);
gpio_free
(
CM_T35_LCD_EN_GPIO
);
}
platform_device_register
(
&
cm_t35_tfp410_device
);
platform_device_register
(
&
cm_t35_dvi_connector_device
);
platform_device_register
(
&
cm_t35_lcd_device
);
platform_device_register
(
&
cm_t35_tv_connector_device
);
}
static
struct
regulator_consumer_supply
cm_t35_vmmc1_supply
[]
=
{
REGULATOR_SUPPLY
(
"vmmc"
,
"omap_hsmmc.0"
),
};
static
struct
regulator_consumer_supply
cm_t35_vsim_supply
[]
=
{
REGULATOR_SUPPLY
(
"vmmc_aux"
,
"omap_hsmmc.0"
),
};
static
struct
regulator_consumer_supply
cm_t35_vio_supplies
[]
=
{
REGULATOR_SUPPLY
(
"vcc"
,
"spi1.0"
),
REGULATOR_SUPPLY
(
"vdds_dsi"
,
"omapdss"
),
REGULATOR_SUPPLY
(
"vdds_dsi"
,
"omapdss_dpi.0"
),
REGULATOR_SUPPLY
(
"vdds_dsi"
,
"omapdss_dsi.0"
),
};
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
static
struct
regulator_init_data
cm_t35_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
(
cm_t35_vmmc1_supply
),
.
consumer_supplies
=
cm_t35_vmmc1_supply
,
};
/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
static
struct
regulator_init_data
cm_t35_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
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
cm_t35_vsim_supply
),
.
consumer_supplies
=
cm_t35_vsim_supply
,
};
static
struct
regulator_init_data
cm_t35_vio
=
{
.
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
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
cm_t35_vio_supplies
),
.
consumer_supplies
=
cm_t35_vio_supplies
,
};
static
uint32_t
cm_t35_keymap
[]
=
{
KEY
(
0
,
0
,
KEY_A
),
KEY
(
0
,
1
,
KEY_B
),
KEY
(
0
,
2
,
KEY_LEFT
),
KEY
(
1
,
0
,
KEY_UP
),
KEY
(
1
,
1
,
KEY_ENTER
),
KEY
(
1
,
2
,
KEY_DOWN
),
KEY
(
2
,
0
,
KEY_RIGHT
),
KEY
(
2
,
1
,
KEY_C
),
KEY
(
2
,
2
,
KEY_D
),
};
static
struct
matrix_keymap_data
cm_t35_keymap_data
=
{
.
keymap
=
cm_t35_keymap
,
.
keymap_size
=
ARRAY_SIZE
(
cm_t35_keymap
),
};
static
struct
twl4030_keypad_data
cm_t35_kp_data
=
{
.
keymap_data
=
&
cm_t35_keymap_data
,
.
rows
=
3
,
.
cols
=
3
,
.
rep
=
1
,
};
static
struct
omap2_hsmmc_info
mmc
[]
=
{
{
.
mmc
=
1
,
.
caps
=
MMC_CAP_4_BIT_DATA
,
.
gpio_cd
=
-
EINVAL
,
.
gpio_wp
=
-
EINVAL
,
.
deferred
=
true
,
},
{
.
mmc
=
2
,
.
caps
=
MMC_CAP_4_BIT_DATA
,
.
transceiver
=
1
,
.
gpio_cd
=
-
EINVAL
,
.
gpio_wp
=
-
EINVAL
,
.
ocr_mask
=
0x00100000
,
/* 3.3V */
},
{}
/* Terminator */
};
static
struct
usbhs_phy_data
phy_data
[]
__initdata
=
{
{
.
port
=
1
,
.
reset_gpio
=
OMAP_MAX_GPIO_LINES
+
6
,
.
vcc_gpio
=
-
EINVAL
,
},
{
.
port
=
2
,
.
reset_gpio
=
OMAP_MAX_GPIO_LINES
+
7
,
.
vcc_gpio
=
-
EINVAL
,
},
};
static
struct
usbhs_omap_platform_data
usbhs_bdata
__initdata
=
{
.
port_mode
[
0
]
=
OMAP_EHCI_PORT_MODE_PHY
,
.
port_mode
[
1
]
=
OMAP_EHCI_PORT_MODE_PHY
,
};
static
void
__init
cm_t35_init_usbh
(
void
)
{
int
err
;
err
=
gpio_request_one
(
SB_T35_USB_HUB_RESET_GPIO
,
GPIOF_OUT_INIT_LOW
,
"usb hub rst"
);
if
(
err
)
{
pr_err
(
"SB-T35: usb hub rst gpio request failed: %d
\n
"
,
err
);
}
else
{
udelay
(
10
);
gpio_set_value
(
SB_T35_USB_HUB_RESET_GPIO
,
1
);
msleep
(
1
);
}
usbhs_init_phys
(
phy_data
,
ARRAY_SIZE
(
phy_data
));
usbhs_init
(
&
usbhs_bdata
);
}
static
int
cm_t35_twl_gpio_setup
(
struct
device
*
dev
,
unsigned
gpio
,
unsigned
ngpio
)
{
int
wlan_rst
=
gpio
+
2
;
if
(
gpio_request_one
(
wlan_rst
,
GPIOF_OUT_INIT_HIGH
,
"WLAN RST"
)
==
0
)
{
gpio_export
(
wlan_rst
,
0
);
udelay
(
10
);
gpio_set_value_cansleep
(
wlan_rst
,
0
);
udelay
(
10
);
gpio_set_value_cansleep
(
wlan_rst
,
1
);
}
else
{
pr_err
(
"CM-T35: could not obtain gpio for WiFi reset
\n
"
);
}
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc
[
0
].
gpio_cd
=
gpio
+
0
;
omap_hsmmc_late_init
(
mmc
);
return
0
;
}
static
struct
twl4030_gpio_platform_data
cm_t35_gpio_data
=
{
.
setup
=
cm_t35_twl_gpio_setup
,
};
static
struct
twl4030_power_data
cm_t35_power_data
=
{
.
use_poweroff
=
true
,
};
static
struct
twl4030_platform_data
cm_t35_twldata
=
{
/* platform_data for children goes here */
.
keypad
=
&
cm_t35_kp_data
,
.
gpio
=
&
cm_t35_gpio_data
,
.
vmmc1
=
&
cm_t35_vmmc1
,
.
vsim
=
&
cm_t35_vsim
,
.
vio
=
&
cm_t35_vio
,
.
power
=
&
cm_t35_power_data
,
};
#if defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE)
#include <media/omap3isp.h>
#include "devices.h"
static
struct
isp_platform_subdev
cm_t35_isp_subdevs
[]
=
{
{
.
board_info
=
&
(
struct
i2c_board_info
){
I2C_BOARD_INFO
(
"mt9t001"
,
0x5d
)
},
.
i2c_adapter_id
=
3
,
.
bus
=
&
(
struct
isp_bus_cfg
){
.
interface
=
ISP_INTERFACE_PARALLEL
,
.
bus
=
{
.
parallel
=
{
.
clk_pol
=
1
,
},
},
},
},
{
.
board_info
=
&
(
struct
i2c_board_info
){
I2C_BOARD_INFO
(
"tvp5150"
,
0x5c
),
},
.
i2c_adapter_id
=
3
,
.
bus
=
&
(
struct
isp_bus_cfg
){
.
interface
=
ISP_INTERFACE_PARALLEL
,
.
bus
=
{
.
parallel
=
{
.
clk_pol
=
0
,
},
},
},
},
{
0
},
};
static
struct
isp_platform_data
cm_t35_isp_pdata
=
{
.
subdevs
=
cm_t35_isp_subdevs
,
};
static
struct
regulator_consumer_supply
cm_t35_camera_supplies
[]
=
{
REGULATOR_SUPPLY
(
"vaa"
,
"3-005d"
),
REGULATOR_SUPPLY
(
"vdd"
,
"3-005d"
),
};
static
void
__init
cm_t35_init_camera
(
void
)
{
struct
clk
*
clk
;
clk
=
clk_register_fixed_rate
(
NULL
,
"mt9t001-clkin"
,
NULL
,
CLK_IS_ROOT
,
48000000
);
clk_register_clkdev
(
clk
,
NULL
,
"3-005d"
);
regulator_register_fixed
(
2
,
cm_t35_camera_supplies
,
ARRAY_SIZE
(
cm_t35_camera_supplies
));
if
(
omap3_init_camera
(
&
cm_t35_isp_pdata
)
<
0
)
pr_warn
(
"CM-T3x: Failed registering camera device!
\n
"
);
}
#else
static
inline
void
cm_t35_init_camera
(
void
)
{}
#endif
/* CONFIG_VIDEO_OMAP3 */
static
void
__init
cm_t35_init_i2c
(
void
)
{
omap3_pmic_get_config
(
&
cm_t35_twldata
,
TWL_COMMON_PDATA_USB
,
TWL_COMMON_REGULATOR_VDAC
|
TWL_COMMON_PDATA_AUDIO
);
omap3_pmic_init
(
"tps65930"
,
&
cm_t35_twldata
);
omap_register_i2c_bus
(
3
,
400
,
NULL
,
0
);
}
#ifdef CONFIG_OMAP_MUX
static
struct
omap_board_mux
board_mux
[]
__initdata
=
{
/* nCS and IRQ for CM-T35 ethernet */
OMAP3_MUX
(
GPMC_NCS5
,
OMAP_MUX_MODE0
),
OMAP3_MUX
(
UART3_CTS_RCTX
,
OMAP_MUX_MODE4
|
OMAP_PIN_INPUT_PULLUP
),
/* nCS and IRQ for SB-T35 ethernet */
OMAP3_MUX
(
GPMC_NCS4
,
OMAP_MUX_MODE0
),
OMAP3_MUX
(
GPMC_WAIT3
,
OMAP_MUX_MODE4
|
OMAP_PIN_INPUT_PULLUP
),
/* PENDOWN GPIO */
OMAP3_MUX
(
GPMC_NCS6
,
OMAP_MUX_MODE4
|
OMAP_PIN_INPUT
),
/* mUSB */
OMAP3_MUX
(
HSUSB0_CLK
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_STP
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
HSUSB0_DIR
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_NXT
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA0
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA1
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA2
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA3
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA4
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA5
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA6
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
HSUSB0_DATA7
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
/* MMC 2 */
OMAP3_MUX
(
SDMMC2_DAT4
,
OMAP_MUX_MODE1
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
SDMMC2_DAT5
,
OMAP_MUX_MODE1
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
SDMMC2_DAT6
,
OMAP_MUX_MODE1
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
SDMMC2_DAT7
,
OMAP_MUX_MODE1
|
OMAP_PIN_INPUT
),
/* McSPI 1 */
OMAP3_MUX
(
MCSPI1_CLK
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCSPI1_SIMO
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCSPI1_SOMI
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCSPI1_CS0
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT_PULLDOWN
),
/* McSPI 4 */
OMAP3_MUX
(
MCBSP1_CLKR
,
OMAP_MUX_MODE1
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCBSP1_DX
,
OMAP_MUX_MODE1
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCBSP1_DR
,
OMAP_MUX_MODE1
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCBSP1_FSX
,
OMAP_MUX_MODE1
|
OMAP_PIN_INPUT_PULLUP
),
/* McBSP 2 */
OMAP3_MUX
(
MCBSP2_FSX
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCBSP2_CLKX
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCBSP2_DR
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
MCBSP2_DX
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
/* serial ports */
OMAP3_MUX
(
MCBSP3_CLKX
,
OMAP_MUX_MODE1
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
MCBSP3_FSX
,
OMAP_MUX_MODE1
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
UART1_TX
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
UART1_RX
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
/* common DSS */
OMAP3_MUX
(
DSS_PCLK
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_HSYNC
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_VSYNC
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_ACBIAS
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA6
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA7
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA8
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA9
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA10
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA11
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA12
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA13
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA14
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA15
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA16
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
DSS_DATA17
,
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
),
/* Camera */
OMAP3_MUX
(
CAM_HS
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_VS
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_XCLKA
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_PCLK
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_FLD
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D0
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D1
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D2
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D3
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D4
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D5
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D6
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D7
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D8
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT_PULLDOWN
),
OMAP3_MUX
(
CAM_D9
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT_PULLDOWN
),
OMAP3_MUX
(
CAM_STROBE
,
OMAP_MUX_MODE0
|
OMAP_PIN_INPUT
),
OMAP3_MUX
(
CAM_D10
,
OMAP_MUX_MODE4
|
OMAP_PIN_INPUT_PULLDOWN
),
OMAP3_MUX
(
CAM_D11
,
OMAP_MUX_MODE4
|
OMAP_PIN_INPUT_PULLDOWN
),
/* display controls */
OMAP3_MUX
(
MCBSP1_FSR
,
OMAP_MUX_MODE4
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
GPMC_NCS7
,
OMAP_MUX_MODE4
|
OMAP_PIN_OUTPUT
),
OMAP3_MUX
(
GPMC_NCS3
,
OMAP_MUX_MODE4
|
OMAP_PIN_OUTPUT
),
/* TPS IRQ */
OMAP3_MUX
(
SYS_NIRQ
,
OMAP_MUX_MODE0
|
OMAP_WAKEUP_EN
|
\
OMAP_PIN_INPUT_PULLUP
),
{
.
reg_offset
=
OMAP_MUX_TERMINATOR
},
};
static
void
__init
cm_t3x_common_dss_mux_init
(
int
mux_mode
)
{
omap_mux_init_signal
(
"dss_data18"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data19"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data20"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data21"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data22"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data23"
,
mux_mode
);
}
static
void
__init
cm_t35_init_mux
(
void
)
{
int
mux_mode
=
OMAP_MUX_MODE0
|
OMAP_PIN_OUTPUT
;
omap_mux_init_signal
(
"dss_data0.dss_data0"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data1.dss_data1"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data2.dss_data2"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data3.dss_data3"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data4.dss_data4"
,
mux_mode
);
omap_mux_init_signal
(
"dss_data5.dss_data5"
,
mux_mode
);
cm_t3x_common_dss_mux_init
(
mux_mode
);
}
static
void
__init
cm_t3730_init_mux
(
void
)
{
int
mux_mode
=
OMAP_MUX_MODE3
|
OMAP_PIN_OUTPUT
;
omap_mux_init_signal
(
"sys_boot0"
,
mux_mode
);
omap_mux_init_signal
(
"sys_boot1"
,
mux_mode
);
omap_mux_init_signal
(
"sys_boot3"
,
mux_mode
);
omap_mux_init_signal
(
"sys_boot4"
,
mux_mode
);
omap_mux_init_signal
(
"sys_boot5"
,
mux_mode
);
omap_mux_init_signal
(
"sys_boot6"
,
mux_mode
);
cm_t3x_common_dss_mux_init
(
mux_mode
);
}
#else
static
inline
void
cm_t35_init_mux
(
void
)
{}
static
inline
void
cm_t3730_init_mux
(
void
)
{}
#endif
static
void
__init
cm_t3x_common_init
(
void
)
{
omap3_mux_init
(
board_mux
,
OMAP_PACKAGE_CUS
);
omap_serial_init
();
omap_sdrc_init
(
mt46h32m32lf6_sdrc_params
,
mt46h32m32lf6_sdrc_params
);
omap_hsmmc_init
(
mmc
);
cm_t35_init_i2c
();
omap_ads7846_init
(
1
,
CM_T35_GPIO_PENDOWN
,
0
,
NULL
);
cm_t35_init_ethernet
();
cm_t35_init_led
();
cm_t35_init_display
();
omap_twl4030_audio_init
(
"cm-t3x"
,
NULL
);
usb_bind_phy
(
"musb-hdrc.0.auto"
,
0
,
"twl4030_usb"
);
usb_musb_init
(
NULL
);
cm_t35_init_usbh
();
cm_t35_init_camera
();
}
static
void
__init
cm_t35_init
(
void
)
{
cm_t3x_common_init
();
cm_t35_init_mux
();
cm_t35_init_nand
();
}
static
void
__init
cm_t3730_init
(
void
)
{
cm_t3x_common_init
();
cm_t3730_init_mux
();
}
MACHINE_START
(
CM_T35
,
"Compulab CM-T35"
)
.
atag_offset
=
0x100
,
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap35xx_init_early
,
.
init_irq
=
omap3_init_irq
,
.
init_machine
=
cm_t35_init
,
.
init_late
=
omap35xx_init_late
,
.
init_time
=
omap3_sync32k_timer_init
,
.
restart
=
omap3xxx_restart
,
MACHINE_END
MACHINE_START
(
CM_T3730
,
"Compulab CM-T3730"
)
.
atag_offset
=
0x100
,
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap3630_init_early
,
.
init_irq
=
omap3_init_irq
,
.
init_machine
=
cm_t3730_init
,
.
init_late
=
omap3630_init_late
,
.
init_time
=
omap3_sync32k_timer_init
,
.
restart
=
omap3xxx_restart
,
MACHINE_END
arch/arm/mach-omap2/board-omap3beagle.c
deleted
100644 → 0
View file @
e44be50c
/*
* linux/arch/arm/mach-omap2/board-omap3beagle.c
*
* Copyright (C) 2008 Texas Instruments
*
* Modified from mach-omap2/board-3430sdp.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/err.h>
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/leds.h>
#include <linux/pwm.h>
#include <linux/leds_pwm.h>
#include <linux/gpio.h>
#include <linux/input.h>
#include <linux/gpio_keys.h>
#include <linux/pm_opp.h>
#include <linux/cpu.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <linux/mmc/host.h>
#include <linux/usb/phy.h>
#include <linux/regulator/machine.h>
#include <linux/i2c/twl.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/flash.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
#include <linux/platform_data/mtd-nand-omap2.h>
#include "common.h"
#include "omap_device.h"
#include "gpmc.h"
#include "soc.h"
#include "mux.h"
#include "hsmmc.h"
#include "pm.h"
#include "board-flash.h"
#include "common-board-devices.h"
#define NAND_CS 0
static
struct
pwm_lookup
pwm_lookup
[]
=
{
/* LEDB -> PMU_STAT */
PWM_LOOKUP
(
"twl-pwmled"
,
1
,
"leds_pwm"
,
"beagleboard::pmu_stat"
,
7812500
,
PWM_POLARITY_NORMAL
),
};
static
struct
led_pwm
pwm_leds
[]
=
{
{
.
name
=
"beagleboard::pmu_stat"
,
.
max_brightness
=
127
,
.
pwm_period_ns
=
7812500
,
},
};
static
struct
led_pwm_platform_data
pwm_data
=
{
.
num_leds
=
ARRAY_SIZE
(
pwm_leds
),
.
leds
=
pwm_leds
,
};
static
struct
platform_device
leds_pwm
=
{
.
name
=
"leds_pwm"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
pwm_data
,
},
};
/*
* OMAP3 Beagle revision
* Run time detection of Beagle revision is done by reading GPIO.
* GPIO ID -
* AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
* C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
* C4 = GPIO173, GPIO172, GPIO171: 1 0 1
* XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
* XMC = GPIO173, GPIO172, GPIO171: 0 1 0
*/
enum
{
OMAP3BEAGLE_BOARD_UNKN
=
0
,
OMAP3BEAGLE_BOARD_AXBX
,
OMAP3BEAGLE_BOARD_C1_3
,
OMAP3BEAGLE_BOARD_C4
,
OMAP3BEAGLE_BOARD_XM
,
OMAP3BEAGLE_BOARD_XMC
,
};
static
u8
omap3_beagle_version
;
/*
* Board-specific configuration
* Defaults to BeagleBoard-xMC
*/
static
struct
{
int
mmc1_gpio_wp
;
bool
usb_pwr_level
;
/* 0 - Active Low, 1 - Active High */
int
dvi_pd_gpio
;
int
usr_button_gpio
;
int
mmc_caps
;
}
beagle_config
=
{
.
mmc1_gpio_wp
=
-
EINVAL
,
.
usb_pwr_level
=
0
,
.
dvi_pd_gpio
=
-
EINVAL
,
.
usr_button_gpio
=
4
,
.
mmc_caps
=
MMC_CAP_4_BIT_DATA
|
MMC_CAP_8_BIT_DATA
,
};
static
struct
gpio
omap3_beagle_rev_gpios
[]
__initdata
=
{
{
171
,
GPIOF_IN
,
"rev_id_0"
},
{
172
,
GPIOF_IN
,
"rev_id_1"
},
{
173
,
GPIOF_IN
,
"rev_id_2"
},
};
static
void
__init
omap3_beagle_init_rev
(
void
)
{
int
ret
;
u16
beagle_rev
=
0
;
omap_mux_init_gpio
(
171
,
OMAP_PIN_INPUT_PULLUP
);
omap_mux_init_gpio
(
172
,
OMAP_PIN_INPUT_PULLUP
);
omap_mux_init_gpio
(
173
,
OMAP_PIN_INPUT_PULLUP
);
ret
=
gpio_request_array
(
omap3_beagle_rev_gpios
,
ARRAY_SIZE
(
omap3_beagle_rev_gpios
));
if
(
ret
<
0
)
{
printk
(
KERN_ERR
"Unable to get revision detection GPIO pins
\n
"
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_UNKN
;
return
;
}
beagle_rev
=
gpio_get_value
(
171
)
|
(
gpio_get_value
(
172
)
<<
1
)
|
(
gpio_get_value
(
173
)
<<
2
);
gpio_free_array
(
omap3_beagle_rev_gpios
,
ARRAY_SIZE
(
omap3_beagle_rev_gpios
));
switch
(
beagle_rev
)
{
case
7
:
printk
(
KERN_INFO
"OMAP3 Beagle Rev: Ax/Bx
\n
"
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_AXBX
;
beagle_config
.
mmc1_gpio_wp
=
29
;
beagle_config
.
dvi_pd_gpio
=
170
;
beagle_config
.
usr_button_gpio
=
7
;
break
;
case
6
:
printk
(
KERN_INFO
"OMAP3 Beagle Rev: C1/C2/C3
\n
"
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_C1_3
;
beagle_config
.
mmc1_gpio_wp
=
23
;
beagle_config
.
dvi_pd_gpio
=
170
;
beagle_config
.
usr_button_gpio
=
7
;
break
;
case
5
:
printk
(
KERN_INFO
"OMAP3 Beagle Rev: C4
\n
"
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_C4
;
beagle_config
.
mmc1_gpio_wp
=
23
;
beagle_config
.
dvi_pd_gpio
=
170
;
beagle_config
.
usr_button_gpio
=
7
;
break
;
case
0
:
printk
(
KERN_INFO
"OMAP3 Beagle Rev: xM Ax/Bx
\n
"
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_XM
;
beagle_config
.
usb_pwr_level
=
1
;
beagle_config
.
mmc_caps
&=
~
MMC_CAP_8_BIT_DATA
;
break
;
case
2
:
printk
(
KERN_INFO
"OMAP3 Beagle Rev: xM C
\n
"
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_XMC
;
beagle_config
.
mmc_caps
&=
~
MMC_CAP_8_BIT_DATA
;
break
;
default:
printk
(
KERN_INFO
"OMAP3 Beagle Rev: unknown %hd
\n
"
,
beagle_rev
);
omap3_beagle_version
=
OMAP3BEAGLE_BOARD_UNKN
;
}
}
static
struct
mtd_partition
omap3beagle_nand_partitions
[]
=
{
/* All the partition sizes are listed in terms of NAND block size */
{
.
name
=
"X-Loader"
,
.
offset
=
0
,
.
size
=
4
*
NAND_BLOCK_SIZE
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
{
.
name
=
"U-Boot"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x80000 */
.
size
=
15
*
NAND_BLOCK_SIZE
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
{
.
name
=
"U-Boot Env"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x260000 */
.
size
=
1
*
NAND_BLOCK_SIZE
,
},
{
.
name
=
"Kernel"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x280000 */
.
size
=
32
*
NAND_BLOCK_SIZE
,
},
{
.
name
=
"File System"
,
.
offset
=
MTDPART_OFS_APPEND
,
/* Offset = 0x680000 */
.
size
=
MTDPART_SIZ_FULL
,
},
};
/* DSS */
static
struct
connector_dvi_platform_data
beagle_dvi_connector_pdata
=
{
.
name
=
"dvi"
,
.
source
=
"tfp410.0"
,
.
i2c_bus_num
=
3
,
};
static
struct
platform_device
beagle_dvi_connector_device
=
{
.
name
=
"connector-dvi"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
beagle_dvi_connector_pdata
,
};
static
struct
encoder_tfp410_platform_data
beagle_tfp410_pdata
=
{
.
name
=
"tfp410.0"
,
.
source
=
"dpi.0"
,
.
data_lines
=
24
,
.
power_down_gpio
=
-
1
,
};
static
struct
platform_device
beagle_tfp410_device
=
{
.
name
=
"tfp410"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
beagle_tfp410_pdata
,
};
static
struct
connector_atv_platform_data
beagle_tv_pdata
=
{
.
name
=
"tv"
,
.
source
=
"venc.0"
,
.
connector_type
=
OMAP_DSS_VENC_TYPE_SVIDEO
,
.
invert_polarity
=
false
,
};
static
struct
platform_device
beagle_tv_connector_device
=
{
.
name
=
"connector-analog-tv"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
beagle_tv_pdata
,
};
static
struct
omap_dss_board_info
beagle_dss_data
=
{
.
default_display_name
=
"dvi"
,
};
#include "sdram-micron-mt46h32m32lf-6.h"
static
struct
omap2_hsmmc_info
mmc
[]
=
{
{
.
mmc
=
1
,
.
caps
=
MMC_CAP_4_BIT_DATA
,
.
gpio_wp
=
-
EINVAL
,
.
deferred
=
true
,
},
{}
/* Terminator */
};
static
struct
regulator_consumer_supply
beagle_vmmc1_supply
[]
=
{
REGULATOR_SUPPLY
(
"vmmc"
,
"omap_hsmmc.0"
),
};
static
struct
regulator_consumer_supply
beagle_vsim_supply
[]
=
{
REGULATOR_SUPPLY
(
"vmmc_aux"
,
"omap_hsmmc.0"
),
};
static
struct
gpio_led
gpio_leds
[];
static
struct
usbhs_phy_data
phy_data
[]
=
{
{
.
port
=
2
,
.
reset_gpio
=
147
,
.
vcc_gpio
=
-
1
,
/* updated in beagle_twl_gpio_setup */
.
vcc_polarity
=
1
,
/* updated in beagle_twl_gpio_setup */
},
};
static
int
beagle_twl_gpio_setup
(
struct
device
*
dev
,
unsigned
gpio
,
unsigned
ngpio
)
{
int
r
;
mmc
[
0
].
gpio_wp
=
beagle_config
.
mmc1_gpio_wp
;
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc
[
0
].
gpio_cd
=
gpio
+
0
;
omap_hsmmc_late_init
(
mmc
);
/*
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
* high / others active low)
* DVI reset GPIO is different between beagle revisions
*/
/* Valid for all -xM revisions */
if
(
cpu_is_omap3630
())
{
/*
* gpio + 1 on Xm controls the TFP410's enable line (active low)
* gpio + 2 control varies depending on the board rev as below:
* P7/P8 revisions(prototype): Camera EN
* A2+ revisions (production): LDO (DVI, serial, led blocks)
*/
r
=
gpio_request_one
(
gpio
+
1
,
GPIOF_OUT_INIT_LOW
,
"nDVI_PWR_EN"
);
if
(
r
)
pr_err
(
"%s: unable to configure nDVI_PWR_EN
\n
"
,
__func__
);
beagle_config
.
dvi_pd_gpio
=
gpio
+
2
;
}
else
{
/*
* REVISIT: need ehci-omap hooks for external VBUS
* power switch and overcurrent detect
*/
if
(
gpio_request_one
(
gpio
+
1
,
GPIOF_IN
,
"EHCI_nOC"
))
pr_err
(
"%s: unable to configure EHCI_nOC
\n
"
,
__func__
);
}
beagle_tfp410_pdata
.
power_down_gpio
=
beagle_config
.
dvi_pd_gpio
;
platform_device_register
(
&
beagle_tfp410_device
);
platform_device_register
(
&
beagle_dvi_connector_device
);
platform_device_register
(
&
beagle_tv_connector_device
);
/* TWL4030_GPIO_MAX i.e. LED_GPO controls HS USB Port 2 power */
phy_data
[
0
].
vcc_gpio
=
gpio
+
TWL4030_GPIO_MAX
;
phy_data
[
0
].
vcc_polarity
=
beagle_config
.
usb_pwr_level
;
usbhs_init_phys
(
phy_data
,
ARRAY_SIZE
(
phy_data
));
return
0
;
}
static
struct
twl4030_gpio_platform_data
beagle_gpio_data
=
{
.
use_leds
=
true
,
.
pullups
=
BIT
(
1
),
.
pulldowns
=
BIT
(
2
)
|
BIT
(
6
)
|
BIT
(
7
)
|
BIT
(
8
)
|
BIT
(
13
)
|
BIT
(
15
)
|
BIT
(
16
)
|
BIT
(
17
),
.
setup
=
beagle_twl_gpio_setup
,
};
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
static
struct
regulator_init_data
beagle_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
(
beagle_vmmc1_supply
),
.
consumer_supplies
=
beagle_vmmc1_supply
,
};
/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
static
struct
regulator_init_data
beagle_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
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
beagle_vsim_supply
),
.
consumer_supplies
=
beagle_vsim_supply
,
};
static
struct
twl4030_platform_data
beagle_twldata
=
{
/* platform_data for children goes here */
.
gpio
=
&
beagle_gpio_data
,
.
vmmc1
=
&
beagle_vmmc1
,
.
vsim
=
&
beagle_vsim
,
};
static
struct
i2c_board_info
__initdata
beagle_i2c_eeprom
[]
=
{
{
I2C_BOARD_INFO
(
"eeprom"
,
0x50
),
},
};
static
int
__init
omap3_beagle_i2c_init
(
void
)
{
omap3_pmic_get_config
(
&
beagle_twldata
,
TWL_COMMON_PDATA_USB
|
TWL_COMMON_PDATA_MADC
|
TWL_COMMON_PDATA_AUDIO
,
TWL_COMMON_REGULATOR_VDAC
|
TWL_COMMON_REGULATOR_VPLL2
);
beagle_twldata
.
vpll2
->
constraints
.
name
=
"VDVI"
;
omap3_pmic_init
(
"twl4030"
,
&
beagle_twldata
);
/* Bus 3 is attached to the DVI port where devices like the pico DLP
* projector don't work reliably with 400kHz */
omap_register_i2c_bus
(
3
,
100
,
beagle_i2c_eeprom
,
ARRAY_SIZE
(
beagle_i2c_eeprom
));
return
0
;
}
static
struct
gpio_led
gpio_leds
[]
=
{
{
.
name
=
"beagleboard::usr0"
,
.
default_trigger
=
"heartbeat"
,
.
gpio
=
150
,
},
{
.
name
=
"beagleboard::usr1"
,
.
default_trigger
=
"mmc0"
,
.
gpio
=
149
,
},
};
static
struct
gpio_led_platform_data
gpio_led_info
=
{
.
leds
=
gpio_leds
,
.
num_leds
=
ARRAY_SIZE
(
gpio_leds
),
};
static
struct
platform_device
leds_gpio
=
{
.
name
=
"leds-gpio"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
gpio_led_info
,
},
};
static
struct
gpio_keys_button
gpio_buttons
[]
=
{
{
.
code
=
BTN_EXTRA
,
/* Dynamically assigned depending on board */
.
gpio
=
-
EINVAL
,
.
desc
=
"user"
,
.
wakeup
=
1
,
},
};
static
struct
gpio_keys_platform_data
gpio_key_info
=
{
.
buttons
=
gpio_buttons
,
.
nbuttons
=
ARRAY_SIZE
(
gpio_buttons
),
};
static
struct
platform_device
keys_gpio
=
{
.
name
=
"gpio-keys"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
gpio_key_info
,
},
};
static
struct
platform_device
madc_hwmon
=
{
.
name
=
"twl4030_madc_hwmon"
,
.
id
=
-
1
,
};
static
struct
platform_device
*
omap3_beagle_devices
[]
__initdata
=
{
&
leds_gpio
,
&
keys_gpio
,
&
madc_hwmon
,
&
leds_pwm
,
};
static
struct
usbhs_omap_platform_data
usbhs_bdata
__initdata
=
{
.
port_mode
[
1
]
=
OMAP_EHCI_PORT_MODE_PHY
,
};
#ifdef CONFIG_OMAP_MUX
static
struct
omap_board_mux
board_mux
[]
__initdata
=
{
{
.
reg_offset
=
OMAP_MUX_TERMINATOR
},
};
#endif
static
int
__init
beagle_opp_init
(
void
)
{
int
r
=
0
;
if
(
!
machine_is_omap3_beagle
())
return
0
;
/* Initialize the omap3 opp table if not already created. */
r
=
omap3_opp_init
();
if
(
r
<
0
&&
(
r
!=
-
EEXIST
))
{
pr_err
(
"%s: opp default init failed
\n
"
,
__func__
);
return
r
;
}
/* Custom OPP enabled for all xM versions */
if
(
cpu_is_omap3630
())
{
struct
device
*
mpu_dev
,
*
iva_dev
;
mpu_dev
=
get_cpu_device
(
0
);
iva_dev
=
omap_device_get_by_hwmod_name
(
"iva"
);
if
(
!
mpu_dev
||
IS_ERR
(
iva_dev
))
{
pr_err
(
"%s: Aiee.. no mpu/dsp devices? %p %p
\n
"
,
__func__
,
mpu_dev
,
iva_dev
);
return
-
ENODEV
;
}
/* Enable MPU 1GHz and lower opps */
r
=
dev_pm_opp_enable
(
mpu_dev
,
800000000
);
/* TODO: MPU 1GHz needs SR and ABB */
/* Enable IVA 800MHz and lower opps */
r
|=
dev_pm_opp_enable
(
iva_dev
,
660000000
);
/* TODO: DSP 800MHz needs SR and ABB */
if
(
r
)
{
pr_err
(
"%s: failed to enable higher opp %d
\n
"
,
__func__
,
r
);
/*
* Cleanup - disable the higher freqs - we dont care
* about the results
*/
dev_pm_opp_disable
(
mpu_dev
,
800000000
);
dev_pm_opp_disable
(
iva_dev
,
660000000
);
}
}
return
0
;
}
omap_device_initcall
(
beagle_opp_init
);
static
void
__init
omap3_beagle_init
(
void
)
{
omap3_mux_init
(
board_mux
,
OMAP_PACKAGE_CBB
);
omap3_beagle_init_rev
();
if
(
gpio_is_valid
(
beagle_config
.
mmc1_gpio_wp
))
omap_mux_init_gpio
(
beagle_config
.
mmc1_gpio_wp
,
OMAP_PIN_INPUT
);
mmc
[
0
].
caps
=
beagle_config
.
mmc_caps
;
omap_hsmmc_init
(
mmc
);
omap3_beagle_i2c_init
();
gpio_buttons
[
0
].
gpio
=
beagle_config
.
usr_button_gpio
;
platform_add_devices
(
omap3_beagle_devices
,
ARRAY_SIZE
(
omap3_beagle_devices
));
if
(
gpio_is_valid
(
beagle_config
.
dvi_pd_gpio
))
omap_mux_init_gpio
(
beagle_config
.
dvi_pd_gpio
,
OMAP_PIN_OUTPUT
);
omap_display_init
(
&
beagle_dss_data
);
omap_serial_init
();
omap_sdrc_init
(
mt46h32m32lf6_sdrc_params
,
mt46h32m32lf6_sdrc_params
);
usb_bind_phy
(
"musb-hdrc.0.auto"
,
0
,
"twl4030_usb"
);
usb_musb_init
(
NULL
);
usbhs_init
(
&
usbhs_bdata
);
board_nand_init
(
omap3beagle_nand_partitions
,
ARRAY_SIZE
(
omap3beagle_nand_partitions
),
NAND_CS
,
NAND_BUSWIDTH_16
,
NULL
);
omap_twl4030_audio_init
(
"omap3beagle"
,
NULL
);
/* Ensure msecure is mux'd to be able to set the RTC. */
omap_mux_init_signal
(
"sys_drm_msecure"
,
OMAP_PIN_OFF_OUTPUT_HIGH
);
/* Ensure SDRC pins are mux'd for self-refresh */
omap_mux_init_signal
(
"sdrc_cke0"
,
OMAP_PIN_OUTPUT
);
omap_mux_init_signal
(
"sdrc_cke1"
,
OMAP_PIN_OUTPUT
);
pwm_add_table
(
pwm_lookup
,
ARRAY_SIZE
(
pwm_lookup
));
}
MACHINE_START
(
OMAP3_BEAGLE
,
"OMAP3 Beagle Board"
)
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
.
atag_offset
=
0x100
,
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap3_init_early
,
.
init_irq
=
omap3_init_irq
,
.
init_machine
=
omap3_beagle_init
,
.
init_late
=
omap3_init_late
,
.
init_time
=
omap3_secure_sync32k_timer_init
,
.
restart
=
omap3xxx_restart
,
MACHINE_END
arch/arm/mach-omap2/board-overo.c
deleted
100644 → 0
View file @
e44be50c
/*
* 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>
#include <linux/gpio.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/i2c/twl.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <linux/spi/spi.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
#include <linux/mmc/host.h>
#include <linux/usb/phy.h>
#include <linux/platform_data/mtd-nand-omap2.h>
#include <linux/platform_data/spi-omap2-mcspi.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
#include <asm/mach/map.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
#include "common.h"
#include "mux.h"
#include "sdram-micron-mt46h32m32lf-6.h"
#include "gpmc.h"
#include "hsmmc.h"
#include "board-flash.h"
#include "common-board-devices.h"
#define NAND_CS 0
#define OVERO_GPIO_BT_XGATE 15
#define OVERO_GPIO_W2W_NRESET 16
#define OVERO_GPIO_PENDOWN 114
#define OVERO_GPIO_BT_NRESET 164
#define OVERO_GPIO_USBH_CPEN 168
#define OVERO_GPIO_USBH_NRESET 183
#define OVERO_SMSC911X_CS 5
#define OVERO_SMSC911X_GPIO 176
#define OVERO_SMSC911X_NRESET 64
#define OVERO_SMSC911X2_CS 4
#define OVERO_SMSC911X2_GPIO 65
/* whether to register LCD35 instead of LCD43 */
static
bool
overo_use_lcd35
;
#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
/* fixed regulator for ads7846 */
static
struct
regulator_consumer_supply
ads7846_supply
[]
=
{
REGULATOR_SUPPLY
(
"vcc"
,
"spi1.0"
),
};
static
struct
regulator_init_data
vads7846_regulator
=
{
.
constraints
=
{
.
valid_ops_mask
=
REGULATOR_CHANGE_STATUS
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
ads7846_supply
),
.
consumer_supplies
=
ads7846_supply
,
};
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
,
},
};
static
void
__init
overo_ads7846_init
(
void
)
{
omap_ads7846_init
(
1
,
OVERO_GPIO_PENDOWN
,
0
,
NULL
);
platform_device_register
(
&
vads7846_device
);
}
#else
static
inline
void
__init
overo_ads7846_init
(
void
)
{
return
;
}
#endif
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
#include <linux/smsc911x.h>
#include "gpmc-smsc911x.h"
static
struct
omap_smsc911x_platform_data
smsc911x_cfg
=
{
.
id
=
0
,
.
cs
=
OVERO_SMSC911X_CS
,
.
gpio_irq
=
OVERO_SMSC911X_GPIO
,
.
gpio_reset
=
OVERO_SMSC911X_NRESET
,
.
flags
=
SMSC911X_USE_32BIT
,
};
static
struct
omap_smsc911x_platform_data
smsc911x2_cfg
=
{
.
id
=
1
,
.
cs
=
OVERO_SMSC911X2_CS
,
.
gpio_irq
=
OVERO_SMSC911X2_GPIO
,
.
gpio_reset
=
-
EINVAL
,
.
flags
=
SMSC911X_USE_32BIT
,
};
static
void
__init
overo_init_smsc911x
(
void
)
{
gpmc_smsc911x_init
(
&
smsc911x_cfg
);
gpmc_smsc911x_init
(
&
smsc911x2_cfg
);
}
#else
static
inline
void
__init
overo_init_smsc911x
(
void
)
{
return
;
}
#endif
/* DSS */
#define OVERO_GPIO_LCD_EN 144
#define OVERO_GPIO_LCD_BL 145
static
struct
connector_atv_platform_data
overo_tv_pdata
=
{
.
name
=
"tv"
,
.
source
=
"venc.0"
,
.
connector_type
=
OMAP_DSS_VENC_TYPE_SVIDEO
,
.
invert_polarity
=
false
,
};
static
struct
platform_device
overo_tv_connector_device
=
{
.
name
=
"connector-analog-tv"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
overo_tv_pdata
,
};
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
,
};
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
,
};
static
struct
platform_device
overo_lcd43_device
=
{
.
name
=
"panel-dpi"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
overo_lcd43_pdata
,
};
static
struct
connector_dvi_platform_data
overo_dvi_connector_pdata
=
{
.
name
=
"dvi"
,
.
source
=
"tfp410.0"
,
.
i2c_bus_num
=
3
,
};
static
struct
platform_device
overo_dvi_connector_device
=
{
.
name
=
"connector-dvi"
,
.
id
=
0
,
.
dev
.
platform_data
=
&
overo_dvi_connector_pdata
,
};
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
,
};
static
struct
omap_dss_board_info
overo_dss_data
=
{
.
default_display_name
=
"lcd43"
,
};
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
);
}
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
,
},
};
static
struct
omap2_hsmmc_info
mmc
[]
=
{
{
.
mmc
=
1
,
.
caps
=
MMC_CAP_4_BIT_DATA
,
.
gpio_cd
=
-
EINVAL
,
.
gpio_wp
=
-
EINVAL
,
},
{
.
mmc
=
2
,
.
caps
=
MMC_CAP_4_BIT_DATA
,
.
gpio_cd
=
-
EINVAL
,
.
gpio_wp
=
-
EINVAL
,
.
transceiver
=
true
,
.
ocr_mask
=
0x00100000
,
/* 3.3V */
},
{}
/* Terminator */
};
static
struct
regulator_consumer_supply
overo_vmmc1_supply
[]
=
{
REGULATOR_SUPPLY
(
"vmmc"
,
"omap_hsmmc.0"
),
};
#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
#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
static
int
overo_twl_gpio_setup
(
struct
device
*
dev
,
unsigned
gpio
,
unsigned
ngpio
)
{
#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
return
0
;
}
static
struct
twl4030_gpio_platform_data
overo_gpio_data
=
{
.
use_leds
=
true
,
.
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
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
overo_vmmc1_supply
),
.
consumer_supplies
=
overo_vmmc1_supply
,
};
static
struct
twl4030_platform_data
overo_twldata
=
{
.
gpio
=
&
overo_gpio_data
,
.
vmmc1
=
&
overo_vmmc1
,
};
static
int
__init
overo_i2c_init
(
void
)
{
omap3_pmic_get_config
(
&
overo_twldata
,
TWL_COMMON_PDATA_USB
|
TWL_COMMON_PDATA_AUDIO
,
TWL_COMMON_REGULATOR_VDAC
|
TWL_COMMON_REGULATOR_VPLL2
);
overo_twldata
.
vpll2
->
constraints
.
name
=
"VDVI"
;
omap3_pmic_init
(
"tps65950"
,
&
overo_twldata
);
/* i2c2 pins are used for gpio */
omap_register_i2c_bus
(
3
,
400
,
NULL
,
0
);
return
0
;
}
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.
*/
static
struct
spi_board_info
overo_spi_board_info
[]
__initdata
=
{
{
.
modalias
=
"panel_lgphilips_lb035q02"
,
.
bus_num
=
1
,
.
chip_select
=
1
,
.
max_speed_hz
=
500000
,
.
mode
=
SPI_MODE_3
,
.
platform_data
=
&
overo_lcd35_pdata
,
},
};
static
int
__init
overo_spi_init
(
void
)
{
overo_ads7846_init
();
if
(
overo_use_lcd35
)
{
spi_register_board_info
(
overo_spi_board_info
,
ARRAY_SIZE
(
overo_spi_board_info
));
}
return
0
;
}
static
struct
usbhs_phy_data
phy_data
[]
__initdata
=
{
{
.
port
=
2
,
.
reset_gpio
=
OVERO_GPIO_USBH_NRESET
,
.
vcc_gpio
=
-
EINVAL
,
},
};
static
struct
usbhs_omap_platform_data
usbhs_bdata
__initdata
=
{
.
port_mode
[
1
]
=
OMAP_EHCI_PORT_MODE_PHY
,
};
#ifdef CONFIG_OMAP_MUX
static
struct
omap_board_mux
board_mux
[]
__initdata
=
{
{
.
reg_offset
=
OMAP_MUX_TERMINATOR
},
};
#endif
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"
},
};
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"
),
};
static
void
__init
overo_init
(
void
)
{
int
ret
;
if
(
strstr
(
boot_command_line
,
"omapdss.def_disp=lcd35"
))
overo_use_lcd35
=
true
;
regulator_register_fixed
(
0
,
dummy_supplies
,
ARRAY_SIZE
(
dummy_supplies
));
omap3_mux_init
(
board_mux
,
OMAP_PACKAGE_CBB
);
overo_i2c_init
();
omap_hsmmc_init
(
mmc
);
omap_serial_init
();
omap_sdrc_init
(
mt46h32m32lf6_sdrc_params
,
mt46h32m32lf6_sdrc_params
);
board_nand_init
(
overo_nand_partitions
,
ARRAY_SIZE
(
overo_nand_partitions
),
NAND_CS
,
0
,
NULL
);
usb_bind_phy
(
"musb-hdrc.0.auto"
,
0
,
"twl4030_usb"
);
usb_musb_init
(
NULL
);
usbhs_init_phys
(
phy_data
,
ARRAY_SIZE
(
phy_data
));
usbhs_init
(
&
usbhs_bdata
);
overo_spi_init
();
overo_init_smsc911x
();
overo_init_led
();
overo_init_keys
();
omap_twl4030_audio_init
(
"overo"
,
NULL
);
overo_display_init
();
/* Ensure SDRC pins are mux'd for self-refresh */
omap_mux_init_signal
(
"sdrc_cke0"
,
OMAP_PIN_OUTPUT
);
omap_mux_init_signal
(
"sdrc_cke1"
,
OMAP_PIN_OUTPUT
);
ret
=
gpio_request_one
(
OVERO_GPIO_W2W_NRESET
,
GPIOF_OUT_INIT_HIGH
,
"OVERO_GPIO_W2W_NRESET"
);
if
(
ret
==
0
)
{
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
{
pr_err
(
"could not obtain gpio for OVERO_GPIO_W2W_NRESET
\n
"
);
}
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
{
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
);
}
ret
=
gpio_request_one
(
OVERO_GPIO_USBH_CPEN
,
GPIOF_OUT_INIT_HIGH
,
"OVERO_GPIO_USBH_CPEN"
);
if
(
ret
==
0
)
gpio_export
(
OVERO_GPIO_USBH_CPEN
,
0
);
else
pr_err
(
"could not obtain gpio for OVERO_GPIO_USBH_CPEN
\n
"
);
}
MACHINE_START
(
OVERO
,
"Gumstix Overo"
)
.
atag_offset
=
0x100
,
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap35xx_init_early
,
.
init_irq
=
omap3_init_irq
,
.
init_machine
=
overo_init
,
.
init_late
=
omap35xx_init_late
,
.
init_time
=
omap3_sync32k_timer_init
,
.
restart
=
omap3xxx_restart
,
MACHINE_END
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment