You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
* 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6: (33 commits) OMAP3: PM: Boot message is not an error, and not helpful, remove it OMAP3: cpuidle: change the power domains modes determination logic OMAP3: cpuidle: code rework for improved readability OMAP3: cpuidle: re-organize the C-states data OMAP3: clean-up mach specific cpuidle data structures OMAP3 cpuidle: remove useless SDP specific timings usb: otg: OMAP4430: Powerdown the internal PHY when USB is disabled usb: otg: OMAP4430: Fixing the omap4430_phy_init function usb: musb: am35x: fix compile error when building am35x usb: musb: OMAP4430: Power down the PHY during board init omap: drop board-igep0030.c omap: igep0020: add support for IGEP3 omap: igep0020: minor refactoring omap: igep0020: name refactoring for future merge with IGEP3 omap: Remove support for omap2evm arm: omap2plus: GPIO cleanup omap: musb: introduce default board config omap: move detection of NAND CS to common-board-devices omap: use common initialization for PMIC i2c bus omap: consolidate touch screen initialization among different boards ...
This commit is contained in:
@@ -21,58 +21,22 @@ CONFIG_MODVERSIONS=y
|
||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP2=y
|
||||
CONFIG_ARCH_OMAP3=y
|
||||
CONFIG_ARCH_OMAP4=y
|
||||
CONFIG_OMAP_RESET_CLOCKS=y
|
||||
CONFIG_OMAP_MUX_DEBUG=y
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
CONFIG_ARCH_OMAP2420=y
|
||||
CONFIG_ARCH_OMAP2430=y
|
||||
CONFIG_ARCH_OMAP3430=y
|
||||
CONFIG_MACH_OMAP_H4=y
|
||||
CONFIG_MACH_OMAP_APOLLON=y
|
||||
CONFIG_MACH_OMAP_2430SDP=y
|
||||
CONFIG_MACH_OMAP3_BEAGLE=y
|
||||
CONFIG_MACH_DEVKIT8000=y
|
||||
CONFIG_MACH_OMAP_LDP=y
|
||||
CONFIG_MACH_OVERO=y
|
||||
CONFIG_MACH_OMAP3EVM=y
|
||||
CONFIG_MACH_OMAP3517EVM=y
|
||||
CONFIG_MACH_OMAP3_PANDORA=y
|
||||
CONFIG_MACH_OMAP3_TOUCHBOOK=y
|
||||
CONFIG_MACH_OMAP_3430SDP=y
|
||||
CONFIG_MACH_NOKIA_N8X0=y
|
||||
CONFIG_MACH_NOKIA_RX51=y
|
||||
CONFIG_MACH_OMAP_ZOOM2=y
|
||||
CONFIG_MACH_OMAP_ZOOM3=y
|
||||
CONFIG_MACH_CM_T35=y
|
||||
CONFIG_MACH_IGEP0020=y
|
||||
CONFIG_MACH_SBC3530=y
|
||||
CONFIG_MACH_OMAP_3630SDP=y
|
||||
CONFIG_MACH_OMAP_4430SDP=y
|
||||
CONFIG_ARM_THUMBEE=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_ERRATA_411920=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
# CONFIG_LOCAL_TIMERS is not set
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200"
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEBUG=y
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
@@ -89,14 +53,6 @@ CONFIG_IP_PNP_RARP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_L2CAP=m
|
||||
CONFIG_BT_SCO=m
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=m
|
||||
CONFIG_BT_BNEP_MC_FILTER=y
|
||||
CONFIG_BT_BNEP_PROTO_FILTER=y
|
||||
CONFIG_BT_HIDP=m
|
||||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_BCSP=y
|
||||
@@ -107,11 +63,9 @@ CONFIG_CFG80211=m
|
||||
CONFIG_MAC80211=m
|
||||
CONFIG_MAC80211_RC_PID=y
|
||||
CONFIG_MAC80211_RC_DEFAULT_PID=y
|
||||
CONFIG_MAC80211_LEDS=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_CONNECTOR=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CONCAT=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
@@ -127,7 +81,6 @@ CONFIG_MTD_UBI=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_EEPROM_LEGACY=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
@@ -158,19 +111,15 @@ CONFIG_TOUCHSCREEN_ADS7846=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_TWL4030_PWRBUTTON=y
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_8250_NR_UARTS=32
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_OMAP=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_OMAP24XX=y
|
||||
CONFIG_DEBUG_GPIO=y
|
||||
@@ -181,10 +130,6 @@ CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_OMAP_WATCHDOG=y
|
||||
CONFIG_TWL4030_WATCHDOG=y
|
||||
CONFIG_MENELAUS=y
|
||||
CONFIG_TWL4030_CORE=y
|
||||
CONFIG_TWL4030_POWER=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_TWL4030=y
|
||||
CONFIG_REGULATOR_TPS65023=y
|
||||
CONFIG_REGULATOR_TPS6507X=y
|
||||
@@ -208,7 +153,6 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_LCD_PLATFORM=y
|
||||
CONFIG_DISPLAY_SUPPORT=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FONTS=y
|
||||
@@ -217,25 +161,20 @@ CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_USB_AUDIO=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_OMAP_SOC=y
|
||||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=y
|
||||
CONFIG_SND_USB_AUDIO=m
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_OMAP_SOC=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
CONFIG_USB_SUSPEND=y
|
||||
# CONFIG_USB_OTG_WHITELIST is not set
|
||||
CONFIG_USB_MON=y
|
||||
# CONFIG_USB_MUSB_HDRC is not set
|
||||
# CONFIG_USB_MUSB_OTG is not set
|
||||
# CONFIG_USB_GADGET_MUSB_HDRC is not set
|
||||
CONFIG_USB_MUSB_DEBUG=y
|
||||
CONFIG_USB_WDM=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_LIBUSUAL=y
|
||||
@@ -250,18 +189,12 @@ CONFIG_MMC_UNSAFE_RESUME=y
|
||||
CONFIG_SDIO_UART=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_MMC_OMAP_HS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_TWL92330=y
|
||||
CONFIG_RTC_DRV_TWL4030=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_QUOTA=y
|
||||
CONFIG_QFMT_V2=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
@@ -285,12 +218,10 @@ CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_SCHEDSTATS=y
|
||||
CONFIG_TIMER_STATS=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_DEBUG_INFO=y
|
||||
|
||||
@@ -288,6 +288,7 @@ config MACH_IGEP0030
|
||||
depends on ARCH_OMAP3
|
||||
default y
|
||||
select OMAP_PACKAGE_CBB
|
||||
select MACH_IGEP0020
|
||||
|
||||
config MACH_SBC3530
|
||||
bool "OMAP3 SBC STALKER board"
|
||||
|
||||
@@ -229,8 +229,6 @@ obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o \
|
||||
obj-$(CONFIG_MACH_CM_T3517) += board-cm-t3517.o
|
||||
obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o \
|
||||
hsmmc.o
|
||||
obj-$(CONFIG_MACH_IGEP0030) += board-igep0030.o \
|
||||
hsmmc.o
|
||||
obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o \
|
||||
hsmmc.o
|
||||
obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \
|
||||
@@ -270,3 +268,5 @@ obj-$(CONFIG_ARCH_OMAP4) += hwspinlock.o
|
||||
|
||||
disp-$(CONFIG_OMAP2_DSS) := display.o
|
||||
obj-y += $(disp-m) $(disp-y)
|
||||
|
||||
obj-y += common-board-devices.o
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
|
||||
#include "mux.h"
|
||||
#include "hsmmc.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define SDP2430_CS0_BASE 0x04000000
|
||||
#define SECONDARY_LCD_GPIO 147
|
||||
@@ -180,15 +181,6 @@ static struct twl4030_platform_data sdp2430_twldata = {
|
||||
.vmmc1 = &sdp2430_vmmc1,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata sdp2430_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_24XX_SYS_NIRQ,
|
||||
.platform_data = &sdp2430_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("isp1301_omap", 0x2D),
|
||||
@@ -201,8 +193,7 @@ static int __init omap2430_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo,
|
||||
ARRAY_SIZE(sdp2430_i2c1_boardinfo));
|
||||
omap_register_i2c_bus(2, 2600, sdp2430_i2c_boardinfo,
|
||||
ARRAY_SIZE(sdp2430_i2c_boardinfo));
|
||||
omap2_pmic_init("twl4030", &sdp2430_twldata);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -217,11 +208,6 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
|
||||
{} /* Terminator */
|
||||
};
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
static struct omap_usb_config sdp2430_usb_config __initdata = {
|
||||
.otg = 1,
|
||||
#ifdef CONFIG_USB_GADGET_OMAP
|
||||
@@ -240,8 +226,6 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
|
||||
static void __init omap_2430sdp_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
|
||||
|
||||
omap_board_config = sdp2430_config;
|
||||
@@ -255,14 +239,13 @@ static void __init omap_2430sdp_init(void)
|
||||
omap2_usbfs_init(&sdp2430_usb_config);
|
||||
|
||||
omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
|
||||
board_smc91x_init();
|
||||
|
||||
/* Turn off secondary LCD backlight */
|
||||
ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight");
|
||||
if (ret == 0)
|
||||
gpio_direction_output(SECONDARY_LCD_GPIO, 0);
|
||||
gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
|
||||
"Secondary LCD backlight");
|
||||
}
|
||||
|
||||
static void __init omap_2430sdp_map_io(void)
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/io.h>
|
||||
@@ -48,6 +47,7 @@
|
||||
#include "hsmmc.h"
|
||||
#include "pm.h"
|
||||
#include "control.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define CONFIG_DISABLE_HFCLK 1
|
||||
|
||||
@@ -59,24 +59,6 @@
|
||||
|
||||
#define TWL4030_MSECURE_GPIO 22
|
||||
|
||||
/* FIXME: These values need to be updated based on more profiling on 3430sdp*/
|
||||
static struct cpuidle_params omap3_cpuidle_params_table[] = {
|
||||
/* C1 */
|
||||
{1, 2, 2, 5},
|
||||
/* C2 */
|
||||
{1, 10, 10, 30},
|
||||
/* C3 */
|
||||
{1, 50, 50, 300},
|
||||
/* C4 */
|
||||
{1, 1500, 1800, 4000},
|
||||
/* C5 */
|
||||
{1, 2500, 7500, 12000},
|
||||
/* C6 */
|
||||
{1, 3000, 8500, 15000},
|
||||
/* C7 */
|
||||
{1, 10000, 30000, 300000},
|
||||
};
|
||||
|
||||
static uint32_t board_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
@@ -123,63 +105,14 @@ static struct twl4030_keypad_data sdp3430_kp_data = {
|
||||
.rep = 1,
|
||||
};
|
||||
|
||||
static int ts_gpio; /* Needed for ads7846_get_pendown_state */
|
||||
|
||||
/**
|
||||
* @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
|
||||
*
|
||||
* @return - void. If request gpio fails then Flag KERN_ERR.
|
||||
*/
|
||||
static void ads7846_dev_init(void)
|
||||
{
|
||||
if (gpio_request(ts_gpio, "ADS7846 pendown") < 0) {
|
||||
printk(KERN_ERR "can't get ads746 pen down GPIO\n");
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_input(ts_gpio);
|
||||
gpio_set_debounce(ts_gpio, 310);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
{
|
||||
return !gpio_get_value(ts_gpio);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data tsc2046_config __initdata = {
|
||||
.get_pendown_state = ads7846_get_pendown_state,
|
||||
.keep_vref_on = 1,
|
||||
.wakeup = true,
|
||||
};
|
||||
|
||||
|
||||
static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
.single_channel = 1, /* 0: slave, 1: master */
|
||||
};
|
||||
|
||||
static struct spi_board_info sdp3430_spi_board_info[] __initdata = {
|
||||
[0] = {
|
||||
/*
|
||||
* TSC2046 operates at a max freqency of 2MHz, so
|
||||
* operate slightly below at 1.5MHz
|
||||
*/
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &tsc2046_mcspi_config,
|
||||
.irq = 0,
|
||||
.platform_data = &tsc2046_config,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
|
||||
#define SDP3430_LCD_PANEL_ENABLE_GPIO 5
|
||||
|
||||
static unsigned backlight_gpio;
|
||||
static unsigned enable_gpio;
|
||||
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"},
|
||||
};
|
||||
|
||||
static int lcd_enabled;
|
||||
static int dvi_enabled;
|
||||
|
||||
@@ -187,29 +120,11 @@ static void __init sdp3430_display_init(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
enable_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO;
|
||||
backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO;
|
||||
r = gpio_request_array(sdp3430_dss_gpios,
|
||||
ARRAY_SIZE(sdp3430_dss_gpios));
|
||||
if (r)
|
||||
printk(KERN_ERR "failed to get LCD control GPIOs\n");
|
||||
|
||||
r = gpio_request(enable_gpio, "LCD reset");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get LCD reset GPIO\n");
|
||||
goto err0;
|
||||
}
|
||||
|
||||
r = gpio_request(backlight_gpio, "LCD Backlight");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get LCD backlight GPIO\n");
|
||||
goto err1;
|
||||
}
|
||||
|
||||
gpio_direction_output(enable_gpio, 0);
|
||||
gpio_direction_output(backlight_gpio, 0);
|
||||
|
||||
return;
|
||||
err1:
|
||||
gpio_free(enable_gpio);
|
||||
err0:
|
||||
return;
|
||||
}
|
||||
|
||||
static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
|
||||
@@ -219,8 +134,8 @@ static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
gpio_direction_output(enable_gpio, 1);
|
||||
gpio_direction_output(backlight_gpio, 1);
|
||||
gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 1);
|
||||
gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 1);
|
||||
|
||||
lcd_enabled = 1;
|
||||
|
||||
@@ -231,8 +146,8 @@ static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
|
||||
{
|
||||
lcd_enabled = 0;
|
||||
|
||||
gpio_direction_output(enable_gpio, 0);
|
||||
gpio_direction_output(backlight_gpio, 0);
|
||||
gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 0);
|
||||
gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 0);
|
||||
}
|
||||
|
||||
static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
|
||||
@@ -360,12 +275,10 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
|
||||
omap2_hsmmc_init(mmc);
|
||||
|
||||
/* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
|
||||
gpio_request(gpio + 7, "sub_lcd_en_bkl");
|
||||
gpio_direction_output(gpio + 7, 0);
|
||||
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
|
||||
|
||||
/* gpio + 15 is "sub_lcd_nRST" (output) */
|
||||
gpio_request(gpio + 15, "sub_lcd_nRST");
|
||||
gpio_direction_output(gpio + 15, 0);
|
||||
gpio_request_one(gpio + 15, GPIOF_OUT_INIT_LOW, "sub_lcd_nRST");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -580,20 +493,10 @@ static struct twl4030_platform_data sdp3430_twldata = {
|
||||
.vpll2 = &sdp3430_vpll2,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata sdp3430_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &sdp3430_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init omap3430_i2c_init(void)
|
||||
{
|
||||
/* i2c1 for PMIC only */
|
||||
omap_register_i2c_bus(1, 2600, sdp3430_i2c_boardinfo,
|
||||
ARRAY_SIZE(sdp3430_i2c_boardinfo));
|
||||
omap3_pmic_init("twl4030", &sdp3430_twldata);
|
||||
/* 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) */
|
||||
@@ -872,30 +775,22 @@ static struct flash_partitions sdp_flash_partitions[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static void __init omap_3430sdp_init(void)
|
||||
{
|
||||
int gpio_pendown;
|
||||
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
omap_board_config = sdp3430_config;
|
||||
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
|
||||
omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
|
||||
omap3430_i2c_init();
|
||||
omap_display_init(&sdp3430_dss_data);
|
||||
if (omap_rev() > OMAP3430_REV_ES1_0)
|
||||
ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
|
||||
gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV2;
|
||||
else
|
||||
ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV1;
|
||||
sdp3430_spi_board_info[0].irq = gpio_to_irq(ts_gpio);
|
||||
spi_register_board_info(sdp3430_spi_board_info,
|
||||
ARRAY_SIZE(sdp3430_spi_board_info));
|
||||
ads7846_dev_init();
|
||||
gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1;
|
||||
omap_ads7846_init(1, gpio_pendown, 310, NULL);
|
||||
board_serial_init();
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
board_smc91x_init();
|
||||
board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
|
||||
sdp3430_display_init();
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "hsmmc.h"
|
||||
#include "timer-gp.h"
|
||||
#include "control.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define ETH_KS8851_IRQ 34
|
||||
#define ETH_KS8851_POWER_ON 48
|
||||
@@ -251,58 +252,22 @@ static struct spi_board_info sdp4430_spi_board_info[] __initdata = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio sdp4430_eth_gpios[] __initdata = {
|
||||
{ ETH_KS8851_POWER_ON, GPIOF_OUT_INIT_HIGH, "eth_power" },
|
||||
{ ETH_KS8851_QUART, GPIOF_OUT_INIT_HIGH, "quart" },
|
||||
{ ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },
|
||||
};
|
||||
|
||||
static int omap_ethernet_init(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
/* Request of GPIO lines */
|
||||
status = gpio_request_array(sdp4430_eth_gpios,
|
||||
ARRAY_SIZE(sdp4430_eth_gpios));
|
||||
if (status)
|
||||
pr_err("Cannot request ETH GPIOs\n");
|
||||
|
||||
status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = gpio_request(ETH_KS8851_QUART, "quart");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", ETH_KS8851_QUART);
|
||||
goto error1;
|
||||
}
|
||||
|
||||
status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
|
||||
goto error2;
|
||||
}
|
||||
|
||||
/* Configuration of requested GPIO lines */
|
||||
|
||||
status = gpio_direction_output(ETH_KS8851_POWER_ON, 1);
|
||||
if (status) {
|
||||
pr_err("Cannot set output GPIO %d\n", ETH_KS8851_IRQ);
|
||||
goto error3;
|
||||
}
|
||||
|
||||
status = gpio_direction_output(ETH_KS8851_QUART, 1);
|
||||
if (status) {
|
||||
pr_err("Cannot set output GPIO %d\n", ETH_KS8851_QUART);
|
||||
goto error3;
|
||||
}
|
||||
|
||||
status = gpio_direction_input(ETH_KS8851_IRQ);
|
||||
if (status) {
|
||||
pr_err("Cannot set input GPIO %d\n", ETH_KS8851_IRQ);
|
||||
goto error3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error3:
|
||||
gpio_free(ETH_KS8851_IRQ);
|
||||
error2:
|
||||
gpio_free(ETH_KS8851_QUART);
|
||||
error1:
|
||||
gpio_free(ETH_KS8851_POWER_ON);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -575,14 +540,6 @@ static struct twl4030_platform_data sdp4430_twldata = {
|
||||
.usb = &omap4_usbphy_data
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata sdp4430_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl6030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = OMAP44XX_IRQ_SYS_1N,
|
||||
.platform_data = &sdp4430_twldata,
|
||||
},
|
||||
};
|
||||
static struct i2c_board_info __initdata sdp4430_i2c_3_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tmp105", 0x48),
|
||||
@@ -598,12 +555,7 @@ static struct i2c_board_info __initdata sdp4430_i2c_4_boardinfo[] = {
|
||||
};
|
||||
static int __init omap4_i2c_init(void)
|
||||
{
|
||||
/*
|
||||
* Phoenix Audio IC needs I2C1 to
|
||||
* start with 400 KHz or less
|
||||
*/
|
||||
omap_register_i2c_bus(1, 400, sdp4430_i2c_boardinfo,
|
||||
ARRAY_SIZE(sdp4430_i2c_boardinfo));
|
||||
omap4_pmic_init("twl6030", &sdp4430_twldata);
|
||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||
omap_register_i2c_bus(3, 400, sdp4430_i2c_3_boardinfo,
|
||||
ARRAY_SIZE(sdp4430_i2c_3_boardinfo));
|
||||
@@ -614,21 +566,13 @@ static int __init omap4_i2c_init(void)
|
||||
|
||||
static void __init omap_sfh7741prox_init(void)
|
||||
{
|
||||
int error;
|
||||
int error;
|
||||
|
||||
error = gpio_request(OMAP4_SFH7741_ENABLE_GPIO, "sfh7741");
|
||||
if (error < 0) {
|
||||
error = gpio_request_one(OMAP4_SFH7741_ENABLE_GPIO,
|
||||
GPIOF_OUT_INIT_LOW, "sfh7741");
|
||||
if (error < 0)
|
||||
pr_err("%s:failed to request GPIO %d, error %d\n",
|
||||
__func__, OMAP4_SFH7741_ENABLE_GPIO, error);
|
||||
return;
|
||||
}
|
||||
|
||||
error = gpio_direction_output(OMAP4_SFH7741_ENABLE_GPIO , 0);
|
||||
if (error < 0) {
|
||||
pr_err("%s: GPIO configuration failed: GPIO %d,error %d\n",
|
||||
__func__, OMAP4_SFH7741_ENABLE_GPIO, error);
|
||||
gpio_free(OMAP4_SFH7741_ENABLE_GPIO);
|
||||
}
|
||||
}
|
||||
|
||||
static void sdp4430_hdmi_mux_init(void)
|
||||
@@ -645,27 +589,19 @@ static void sdp4430_hdmi_mux_init(void)
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
}
|
||||
|
||||
static struct gpio sdp4430_hdmi_gpios[] = {
|
||||
{ HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
|
||||
{ HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
|
||||
};
|
||||
|
||||
static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
|
||||
"hdmi_gpio_hpd");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
|
||||
return status;
|
||||
}
|
||||
status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
|
||||
"hdmi_gpio_ls_oe");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
|
||||
goto error1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error1:
|
||||
gpio_free(HDMI_GPIO_HPD);
|
||||
status = gpio_request_array(sdp4430_hdmi_gpios,
|
||||
ARRAY_SIZE(sdp4430_hdmi_gpios));
|
||||
if (status)
|
||||
pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -89,19 +89,13 @@ static void __init am3517_crane_init(void)
|
||||
return;
|
||||
}
|
||||
|
||||
ret = gpio_request(GPIO_USB_POWER, "usb_ehci_enable");
|
||||
ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH,
|
||||
"usb_ehci_enable");
|
||||
if (ret < 0) {
|
||||
pr_err("Can not request GPIO %d\n", GPIO_USB_POWER);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = gpio_direction_output(GPIO_USB_POWER, 1);
|
||||
if (ret < 0) {
|
||||
gpio_free(GPIO_USB_POWER);
|
||||
pr_err("Unable to initialize EHCI power\n");
|
||||
return;
|
||||
}
|
||||
|
||||
usbhs_init(&usbhs_bdata);
|
||||
}
|
||||
|
||||
|
||||
@@ -174,19 +174,14 @@ static void __init am3517_evm_rtc_init(void)
|
||||
int r;
|
||||
|
||||
omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP);
|
||||
r = gpio_request(GPIO_RTCS35390A_IRQ, "rtcs35390a-irq");
|
||||
|
||||
r = gpio_request_one(GPIO_RTCS35390A_IRQ, GPIOF_IN, "rtcs35390a-irq");
|
||||
if (r < 0) {
|
||||
printk(KERN_WARNING "failed to request GPIO#%d\n",
|
||||
GPIO_RTCS35390A_IRQ);
|
||||
return;
|
||||
}
|
||||
r = gpio_direction_input(GPIO_RTCS35390A_IRQ);
|
||||
if (r < 0) {
|
||||
printk(KERN_WARNING "GPIO#%d cannot be configured as input\n",
|
||||
GPIO_RTCS35390A_IRQ);
|
||||
gpio_free(GPIO_RTCS35390A_IRQ);
|
||||
return;
|
||||
}
|
||||
|
||||
am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ);
|
||||
}
|
||||
|
||||
@@ -242,6 +237,15 @@ static int dvi_enabled;
|
||||
|
||||
#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
|
||||
defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
|
||||
static struct gpio am3517_evm_dss_gpios[] __initdata = {
|
||||
/* GPIO 182 = LCD Backlight Power */
|
||||
{ LCD_PANEL_BKLIGHT_PWR, GPIOF_OUT_INIT_HIGH, "lcd_backlight_pwr" },
|
||||
/* GPIO 181 = LCD Panel PWM */
|
||||
{ LCD_PANEL_PWM, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
|
||||
/* GPIO 176 = LCD Panel Power enable pin */
|
||||
{ LCD_PANEL_PWR, GPIOF_OUT_INIT_HIGH, "dvi enable" },
|
||||
};
|
||||
|
||||
static void __init am3517_evm_display_init(void)
|
||||
{
|
||||
int r;
|
||||
@@ -249,41 +253,15 @@ static void __init am3517_evm_display_init(void)
|
||||
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");
|
||||
|
||||
r = gpio_request_array(am3517_evm_dss_gpios,
|
||||
ARRAY_SIZE(am3517_evm_dss_gpios));
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_backlight_pwr\n");
|
||||
printk(KERN_ERR "failed to get DSS panel control GPIOs\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);
|
||||
}
|
||||
#else
|
||||
static void __init am3517_evm_display_init(void) {}
|
||||
@@ -396,7 +374,7 @@ static struct omap_musb_board_data musb_board_data = {
|
||||
.power = 500,
|
||||
.set_phy_power = am35x_musb_phy_power,
|
||||
.clear_irq = am35x_musb_clear_irq,
|
||||
.set_mode = am35x_musb_set_mode,
|
||||
.set_mode = am35x_set_mode,
|
||||
.reset = am35x_musb_reset,
|
||||
};
|
||||
|
||||
|
||||
@@ -202,6 +202,7 @@ static inline void __init apollon_init_smc91x(void)
|
||||
unsigned int rate;
|
||||
struct clk *gpmc_fck;
|
||||
int eth_cs;
|
||||
int err;
|
||||
|
||||
gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
|
||||
if (IS_ERR(gpmc_fck)) {
|
||||
@@ -245,15 +246,13 @@ static inline void __init apollon_init_smc91x(void)
|
||||
apollon_smc91x_resources[0].end = base + 0x30f;
|
||||
udelay(100);
|
||||
|
||||
omap_mux_init_gpio(74, 0);
|
||||
if (gpio_request(APOLLON_ETHR_GPIO_IRQ, "SMC91x irq") < 0) {
|
||||
omap_mux_init_gpio(APOLLON_ETHR_GPIO_IRQ, 0);
|
||||
err = gpio_request_one(APOLLON_ETHR_GPIO_IRQ, GPIOF_IN, "SMC91x irq");
|
||||
if (err) {
|
||||
printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
|
||||
APOLLON_ETHR_GPIO_IRQ);
|
||||
gpmc_cs_free(APOLLON_ETH_CS);
|
||||
goto out;
|
||||
}
|
||||
gpio_direction_input(APOLLON_ETHR_GPIO_IRQ);
|
||||
|
||||
out:
|
||||
clk_disable(gpmc_fck);
|
||||
clk_put(gpmc_fck);
|
||||
@@ -280,20 +279,19 @@ static void __init omap_apollon_init_early(void)
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
}
|
||||
|
||||
static struct gpio apollon_gpio_leds[] __initdata = {
|
||||
{ LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
|
||||
{ LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
|
||||
{ LED2_GPIO15, GPIOF_OUT_INIT_LOW, "LED2" }, /* LED2 - AA4 */
|
||||
};
|
||||
|
||||
static void __init apollon_led_init(void)
|
||||
{
|
||||
/* LED0 - AA10 */
|
||||
omap_mux_init_signal("vlynq_clk.gpio_13", 0);
|
||||
gpio_request(LED0_GPIO13, "LED0");
|
||||
gpio_direction_output(LED0_GPIO13, 0);
|
||||
/* LED1 - AA6 */
|
||||
omap_mux_init_signal("vlynq_rx1.gpio_14", 0);
|
||||
gpio_request(LED1_GPIO14, "LED1");
|
||||
gpio_direction_output(LED1_GPIO14, 0);
|
||||
/* LED2 - AA4 */
|
||||
omap_mux_init_signal("vlynq_rx0.gpio_15", 0);
|
||||
gpio_request(LED2_GPIO15, "LED2");
|
||||
gpio_direction_output(LED2_GPIO15, 0);
|
||||
|
||||
gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds));
|
||||
}
|
||||
|
||||
static void __init apollon_usb_init(void)
|
||||
@@ -301,8 +299,7 @@ static void __init apollon_usb_init(void)
|
||||
/* USB device */
|
||||
/* DEVICE_SUSPEND */
|
||||
omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0);
|
||||
gpio_request(12, "USB suspend");
|
||||
gpio_direction_output(12, 0);
|
||||
gpio_request_one(12, GPIOF_OUT_INIT_LOW, "USB suspend");
|
||||
omap2_usbfs_init(&apollon_usb_config);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
#include "mux.h"
|
||||
#include "sdram-micron-mt46h32m32lf-6.h"
|
||||
#include "hsmmc.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define CM_T35_GPIO_PENDOWN 57
|
||||
|
||||
@@ -66,86 +67,28 @@
|
||||
|
||||
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
|
||||
#include <linux/smsc911x.h>
|
||||
#include <plat/gpmc-smsc911x.h>
|
||||
|
||||
static struct smsc911x_platform_config cm_t35_smsc911x_config = {
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
};
|
||||
|
||||
static struct resource cm_t35_smsc911x_resources[] = {
|
||||
{
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = OMAP_GPIO_IRQ(CM_T35_SMSC911X_GPIO),
|
||||
.end = OMAP_GPIO_IRQ(CM_T35_SMSC911X_GPIO),
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device cm_t35_smsc911x_device = {
|
||||
.name = "smsc911x",
|
||||
static struct omap_smsc911x_platform_data cm_t35_smsc911x_cfg = {
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(cm_t35_smsc911x_resources),
|
||||
.resource = cm_t35_smsc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &cm_t35_smsc911x_config,
|
||||
},
|
||||
.cs = CM_T35_SMSC911X_CS,
|
||||
.gpio_irq = CM_T35_SMSC911X_GPIO,
|
||||
.gpio_reset = -EINVAL,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
};
|
||||
|
||||
static struct resource sb_t35_smsc911x_resources[] = {
|
||||
{
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = OMAP_GPIO_IRQ(SB_T35_SMSC911X_GPIO),
|
||||
.end = OMAP_GPIO_IRQ(SB_T35_SMSC911X_GPIO),
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device sb_t35_smsc911x_device = {
|
||||
.name = "smsc911x",
|
||||
static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = {
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(sb_t35_smsc911x_resources),
|
||||
.resource = sb_t35_smsc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &cm_t35_smsc911x_config,
|
||||
},
|
||||
.cs = SB_T35_SMSC911X_CS,
|
||||
.gpio_irq = SB_T35_SMSC911X_GPIO,
|
||||
.gpio_reset = -EINVAL,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
};
|
||||
|
||||
static void __init cm_t35_init_smsc911x(struct platform_device *dev,
|
||||
int cs, int irq_gpio)
|
||||
{
|
||||
unsigned long cs_mem_base;
|
||||
|
||||
if (gpmc_cs_request(cs, SZ_16M, &cs_mem_base) < 0) {
|
||||
pr_err("CM-T35: Failed request for GPMC mem for smsc911x\n");
|
||||
return;
|
||||
}
|
||||
|
||||
dev->resource[0].start = cs_mem_base + 0x0;
|
||||
dev->resource[0].end = cs_mem_base + 0xff;
|
||||
|
||||
if ((gpio_request(irq_gpio, "ETH IRQ") == 0) &&
|
||||
(gpio_direction_input(irq_gpio) == 0)) {
|
||||
gpio_export(irq_gpio, 0);
|
||||
} else {
|
||||
pr_err("CM-T35: could not obtain gpio for SMSC911X IRQ\n");
|
||||
return;
|
||||
}
|
||||
|
||||
platform_device_register(dev);
|
||||
}
|
||||
|
||||
static void __init cm_t35_init_ethernet(void)
|
||||
{
|
||||
cm_t35_init_smsc911x(&cm_t35_smsc911x_device,
|
||||
CM_T35_SMSC911X_CS, CM_T35_SMSC911X_GPIO);
|
||||
cm_t35_init_smsc911x(&sb_t35_smsc911x_device,
|
||||
SB_T35_SMSC911X_CS, SB_T35_SMSC911X_GPIO);
|
||||
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; }
|
||||
@@ -235,69 +178,10 @@ static void __init cm_t35_init_nand(void)
|
||||
static inline void cm_t35_init_nand(void) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
|
||||
defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
|
||||
#include <linux/spi/ads7846.h>
|
||||
|
||||
static struct omap2_mcspi_device_config ads7846_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
.single_channel = 1, /* 0: slave, 1: master */
|
||||
};
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
{
|
||||
return !gpio_get_value(CM_T35_GPIO_PENDOWN);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data ads7846_config = {
|
||||
.x_max = 0x0fff,
|
||||
.y_max = 0x0fff,
|
||||
.x_plate_ohms = 180,
|
||||
.pressure_max = 255,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 3,
|
||||
.debounce_rep = 1,
|
||||
.get_pendown_state = ads7846_get_pendown_state,
|
||||
.keep_vref_on = 1,
|
||||
};
|
||||
|
||||
static struct spi_board_info cm_t35_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &ads7846_mcspi_config,
|
||||
.irq = OMAP_GPIO_IRQ(CM_T35_GPIO_PENDOWN),
|
||||
.platform_data = &ads7846_config,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init cm_t35_init_ads7846(void)
|
||||
{
|
||||
if ((gpio_request(CM_T35_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) &&
|
||||
(gpio_direction_input(CM_T35_GPIO_PENDOWN) == 0)) {
|
||||
gpio_export(CM_T35_GPIO_PENDOWN, 0);
|
||||
} else {
|
||||
pr_err("CM-T35: could not obtain gpio for ADS7846_PENDOWN\n");
|
||||
return;
|
||||
}
|
||||
|
||||
spi_register_board_info(cm_t35_spi_board_info,
|
||||
ARRAY_SIZE(cm_t35_spi_board_info));
|
||||
}
|
||||
#else
|
||||
static inline void cm_t35_init_ads7846(void) {}
|
||||
#endif
|
||||
|
||||
#define CM_T35_LCD_EN_GPIO 157
|
||||
#define CM_T35_LCD_BL_GPIO 58
|
||||
#define CM_T35_DVI_EN_GPIO 54
|
||||
|
||||
static int lcd_bl_gpio;
|
||||
static int lcd_en_gpio;
|
||||
static int dvi_en_gpio;
|
||||
|
||||
static int lcd_enabled;
|
||||
static int dvi_enabled;
|
||||
|
||||
@@ -308,8 +192,8 @@ static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
gpio_set_value(lcd_en_gpio, 1);
|
||||
gpio_set_value(lcd_bl_gpio, 1);
|
||||
gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
|
||||
gpio_set_value(CM_T35_LCD_BL_GPIO, 1);
|
||||
|
||||
lcd_enabled = 1;
|
||||
|
||||
@@ -320,8 +204,8 @@ static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
|
||||
{
|
||||
lcd_enabled = 0;
|
||||
|
||||
gpio_set_value(lcd_bl_gpio, 0);
|
||||
gpio_set_value(lcd_en_gpio, 0);
|
||||
gpio_set_value(CM_T35_LCD_BL_GPIO, 0);
|
||||
gpio_set_value(CM_T35_LCD_EN_GPIO, 0);
|
||||
}
|
||||
|
||||
static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
|
||||
@@ -331,7 +215,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
gpio_set_value(dvi_en_gpio, 0);
|
||||
gpio_set_value(CM_T35_DVI_EN_GPIO, 0);
|
||||
dvi_enabled = 1;
|
||||
|
||||
return 0;
|
||||
@@ -339,7 +223,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
|
||||
|
||||
static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
|
||||
{
|
||||
gpio_set_value(dvi_en_gpio, 1);
|
||||
gpio_set_value(CM_T35_DVI_EN_GPIO, 1);
|
||||
dvi_enabled = 0;
|
||||
}
|
||||
|
||||
@@ -421,62 +305,38 @@ static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio cm_t35_dss_gpios[] __initdata = {
|
||||
{ CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, "lcd enable" },
|
||||
{ CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW, "lcd bl enable" },
|
||||
{ CM_T35_DVI_EN_GPIO, GPIOF_OUT_INIT_HIGH, "dvi enable" },
|
||||
};
|
||||
|
||||
static void __init cm_t35_init_display(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
lcd_en_gpio = CM_T35_LCD_EN_GPIO;
|
||||
lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
|
||||
dvi_en_gpio = CM_T35_DVI_EN_GPIO;
|
||||
|
||||
spi_register_board_info(cm_t35_lcd_spi_board_info,
|
||||
ARRAY_SIZE(cm_t35_lcd_spi_board_info));
|
||||
|
||||
err = gpio_request(lcd_en_gpio, "LCD RST");
|
||||
err = gpio_request_array(cm_t35_dss_gpios,
|
||||
ARRAY_SIZE(cm_t35_dss_gpios));
|
||||
if (err) {
|
||||
pr_err("CM-T35: failed to get LCD reset GPIO\n");
|
||||
goto out;
|
||||
pr_err("CM-T35: failed to request DSS control GPIOs\n");
|
||||
return;
|
||||
}
|
||||
|
||||
err = gpio_request(lcd_bl_gpio, "LCD BL");
|
||||
if (err) {
|
||||
pr_err("CM-T35: failed to get LCD backlight control GPIO\n");
|
||||
goto err_lcd_bl;
|
||||
}
|
||||
|
||||
err = gpio_request(dvi_en_gpio, "DVI EN");
|
||||
if (err) {
|
||||
pr_err("CM-T35: failed to get DVI reset GPIO\n");
|
||||
goto err_dvi_en;
|
||||
}
|
||||
|
||||
gpio_export(lcd_en_gpio, 0);
|
||||
gpio_export(lcd_bl_gpio, 0);
|
||||
gpio_export(dvi_en_gpio, 0);
|
||||
gpio_direction_output(lcd_en_gpio, 0);
|
||||
gpio_direction_output(lcd_bl_gpio, 0);
|
||||
gpio_direction_output(dvi_en_gpio, 1);
|
||||
gpio_export(CM_T35_LCD_EN_GPIO, 0);
|
||||
gpio_export(CM_T35_LCD_BL_GPIO, 0);
|
||||
gpio_export(CM_T35_DVI_EN_GPIO, 0);
|
||||
|
||||
msleep(50);
|
||||
gpio_set_value(lcd_en_gpio, 1);
|
||||
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");
|
||||
goto err_dev_reg;
|
||||
gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios));
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
err_dev_reg:
|
||||
gpio_free(dvi_en_gpio);
|
||||
err_dvi_en:
|
||||
gpio_free(lcd_bl_gpio);
|
||||
err_lcd_bl:
|
||||
gpio_free(lcd_en_gpio);
|
||||
out:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
|
||||
@@ -609,10 +469,8 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
|
||||
{
|
||||
int wlan_rst = gpio + 2;
|
||||
|
||||
if ((gpio_request(wlan_rst, "WLAN RST") == 0) &&
|
||||
(gpio_direction_output(wlan_rst, 1) == 0)) {
|
||||
if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
|
||||
gpio_export(wlan_rst, 0);
|
||||
|
||||
udelay(10);
|
||||
gpio_set_value(wlan_rst, 0);
|
||||
udelay(10);
|
||||
@@ -653,19 +511,9 @@ static struct twl4030_platform_data cm_t35_twldata = {
|
||||
.vpll2 = &cm_t35_vpll2,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata cm_t35_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps65930", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &cm_t35_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init cm_t35_init_i2c(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, cm_t35_i2c_boardinfo,
|
||||
ARRAY_SIZE(cm_t35_i2c_boardinfo));
|
||||
omap3_pmic_init("tps65930", &cm_t35_twldata);
|
||||
}
|
||||
|
||||
static void __init cm_t35_init_early(void)
|
||||
@@ -775,12 +623,6 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel cm_t35_config[] __initdata = {
|
||||
};
|
||||
|
||||
@@ -792,12 +634,12 @@ static void __init cm_t35_init(void)
|
||||
omap_serial_init();
|
||||
cm_t35_init_i2c();
|
||||
cm_t35_init_nand();
|
||||
cm_t35_init_ads7846();
|
||||
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
|
||||
cm_t35_init_ethernet();
|
||||
cm_t35_init_led();
|
||||
cm_t35_init_display();
|
||||
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
usbhs_init(&usbhs_bdata);
|
||||
}
|
||||
|
||||
|
||||
@@ -148,14 +148,13 @@ static void __init cm_t3517_init_rtc(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(RTC_CS_EN_GPIO, "rtc cs en");
|
||||
err = gpio_request_one(RTC_CS_EN_GPIO, GPIOF_OUT_INIT_HIGH,
|
||||
"rtc cs en");
|
||||
if (err) {
|
||||
pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_output(RTC_CS_EN_GPIO, 1);
|
||||
|
||||
platform_device_register(&cm_t3517_rtc_device);
|
||||
}
|
||||
#else
|
||||
@@ -182,11 +181,11 @@ static int cm_t3517_init_usbh(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(USB_HUB_RESET_GPIO, "usb hub rst");
|
||||
err = gpio_request_one(USB_HUB_RESET_GPIO, GPIOF_OUT_INIT_LOW,
|
||||
"usb hub rst");
|
||||
if (err) {
|
||||
pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err);
|
||||
} else {
|
||||
gpio_direction_output(USB_HUB_RESET_GPIO, 0);
|
||||
udelay(10);
|
||||
gpio_set_value(USB_HUB_RESET_GPIO, 1);
|
||||
msleep(1);
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
#include <plat/mcspi.h>
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
#include <linux/dm9000.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
@@ -60,6 +59,7 @@
|
||||
#include "mux.h"
|
||||
#include "hsmmc.h"
|
||||
#include "timer-gp.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define NAND_BLOCK_SIZE SZ_128K
|
||||
|
||||
@@ -97,13 +97,6 @@ static struct mtd_partition devkit8000_nand_partitions[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_nand_platform_data devkit8000_nand_data = {
|
||||
.options = NAND_BUSWIDTH_16,
|
||||
.parts = devkit8000_nand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(devkit8000_nand_partitions),
|
||||
.dma_channel = -1, /* disable DMA in OMAP NAND driver */
|
||||
};
|
||||
|
||||
static struct omap2_hsmmc_info mmc[] = {
|
||||
{
|
||||
.mmc = 1,
|
||||
@@ -249,7 +242,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
|
||||
/* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
|
||||
devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
|
||||
ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
|
||||
GPIOF_DIR_OUT | GPIOF_INIT_LOW, "LCD_PWREN");
|
||||
GPIOF_OUT_INIT_LOW, "LCD_PWREN");
|
||||
if (ret < 0) {
|
||||
devkit8000_lcd_device.reset_gpio = -EINVAL;
|
||||
printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
|
||||
@@ -258,7 +251,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
|
||||
/* gpio + 7 is "DVI_PD" (out, active low) */
|
||||
devkit8000_dvi_device.reset_gpio = gpio + 7;
|
||||
ret = gpio_request_one(devkit8000_dvi_device.reset_gpio,
|
||||
GPIOF_DIR_OUT | GPIOF_INIT_LOW, "DVI PowerDown");
|
||||
GPIOF_OUT_INIT_LOW, "DVI PowerDown");
|
||||
if (ret < 0) {
|
||||
devkit8000_dvi_device.reset_gpio = -EINVAL;
|
||||
printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n");
|
||||
@@ -366,19 +359,9 @@ static struct twl4030_platform_data devkit8000_twldata = {
|
||||
.keypad = &devkit8000_kp_data,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata devkit8000_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps65930", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &devkit8000_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init devkit8000_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, devkit8000_i2c_boardinfo,
|
||||
ARRAY_SIZE(devkit8000_i2c_boardinfo));
|
||||
omap3_pmic_init("tps65930", &devkit8000_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, 400, NULL, 0);
|
||||
@@ -463,56 +446,6 @@ static void __init devkit8000_init_irq(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __init devkit8000_ads7846_init(void)
|
||||
{
|
||||
int gpio = OMAP3_DEVKIT_TS_GPIO;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(gpio, "ads7846_pen_down");
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "Failed to request GPIO %d for "
|
||||
"ads7846 pen down IRQ\n", gpio);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_input(gpio);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
{
|
||||
return !gpio_get_value(OMAP3_DEVKIT_TS_GPIO);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data ads7846_config = {
|
||||
.x_max = 0x0fff,
|
||||
.y_max = 0x0fff,
|
||||
.x_plate_ohms = 180,
|
||||
.pressure_max = 255,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 5,
|
||||
.debounce_rep = 1,
|
||||
.get_pendown_state = ads7846_get_pendown_state,
|
||||
.keep_vref_on = 1,
|
||||
.settle_delay_usecs = 150,
|
||||
};
|
||||
|
||||
static struct omap2_mcspi_device_config ads7846_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
.single_channel = 1, /* 0: slave, 1: master */
|
||||
};
|
||||
|
||||
static struct spi_board_info devkit8000_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 2,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &ads7846_mcspi_config,
|
||||
.irq = OMAP_GPIO_IRQ(OMAP3_DEVKIT_TS_GPIO),
|
||||
.platform_data = &ads7846_config,
|
||||
}
|
||||
};
|
||||
|
||||
#define OMAP_DM9000_BASE 0x2c000000
|
||||
|
||||
static struct resource omap_dm9000_resources[] = {
|
||||
@@ -550,14 +483,14 @@ static void __init omap_dm9000_init(void)
|
||||
{
|
||||
unsigned char *eth_addr = omap_dm9000_platdata.dev_addr;
|
||||
struct omap_die_id odi;
|
||||
int ret;
|
||||
|
||||
if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) {
|
||||
ret = gpio_request_one(OMAP_DM9000_GPIO_IRQ, GPIOF_IN, "dm9000 irq");
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n",
|
||||
OMAP_DM9000_GPIO_IRQ);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_input(OMAP_DM9000_GPIO_IRQ);
|
||||
}
|
||||
|
||||
/* init the mac address using DIE id */
|
||||
omap_get_die_id(&odi);
|
||||
@@ -576,45 +509,6 @@ static struct platform_device *devkit8000_devices[] __initdata = {
|
||||
&omap_dm9000_dev,
|
||||
};
|
||||
|
||||
static void __init devkit8000_flash_init(void)
|
||||
{
|
||||
u8 cs = 0;
|
||||
u8 nandcs = GPMC_CS_NUM + 1;
|
||||
|
||||
/* find out the chip-select on which NAND exists */
|
||||
while (cs < GPMC_CS_NUM) {
|
||||
u32 ret = 0;
|
||||
ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
|
||||
|
||||
if ((ret & 0xC00) == 0x800) {
|
||||
printk(KERN_INFO "Found NAND on CS%d\n", cs);
|
||||
if (nandcs > GPMC_CS_NUM)
|
||||
nandcs = cs;
|
||||
}
|
||||
cs++;
|
||||
}
|
||||
|
||||
if (nandcs > GPMC_CS_NUM) {
|
||||
printk(KERN_INFO "NAND: Unable to find configuration "
|
||||
"in GPMC\n ");
|
||||
return;
|
||||
}
|
||||
|
||||
if (nandcs < GPMC_CS_NUM) {
|
||||
devkit8000_nand_data.cs = nandcs;
|
||||
|
||||
printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
|
||||
if (gpmc_nand_init(&devkit8000_nand_data) < 0)
|
||||
printk(KERN_ERR "Unable to register NAND device\n");
|
||||
}
|
||||
}
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
|
||||
|
||||
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
|
||||
@@ -795,14 +689,13 @@ static void __init devkit8000_init(void)
|
||||
ARRAY_SIZE(devkit8000_devices));
|
||||
|
||||
omap_display_init(&devkit8000_dss_data);
|
||||
spi_register_board_info(devkit8000_spi_board_info,
|
||||
ARRAY_SIZE(devkit8000_spi_board_info));
|
||||
|
||||
devkit8000_ads7846_init();
|
||||
omap_ads7846_init(2, OMAP3_DEVKIT_TS_GPIO, 0, NULL);
|
||||
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
usbhs_init(&usbhs_bdata);
|
||||
devkit8000_flash_init();
|
||||
omap_nand_flash_init(NAND_BUSWIDTH_16, devkit8000_nand_partitions,
|
||||
ARRAY_SIZE(devkit8000_nand_partitions));
|
||||
|
||||
/* Ensure SDRC pins are mux'd for self-refresh */
|
||||
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,458 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2010 - ISEE 2007 SL
|
||||
*
|
||||
* Modified from mach-omap2/board-generic.c
|
||||
*
|
||||
* 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/gpio.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/mmc/host.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <plat/board.h>
|
||||
#include <plat/common.h>
|
||||
#include <plat/gpmc.h>
|
||||
#include <plat/usb.h>
|
||||
#include <plat/onenand.h>
|
||||
|
||||
#include "mux.h"
|
||||
#include "hsmmc.h"
|
||||
#include "sdram-numonyx-m65kxxxxam.h"
|
||||
|
||||
#define IGEP3_GPIO_LED0_GREEN 54
|
||||
#define IGEP3_GPIO_LED0_RED 53
|
||||
#define IGEP3_GPIO_LED1_RED 16
|
||||
|
||||
#define IGEP3_GPIO_WIFI_NPD 138
|
||||
#define IGEP3_GPIO_WIFI_NRESET 139
|
||||
#define IGEP3_GPIO_BT_NRESET 137
|
||||
|
||||
#define IGEP3_GPIO_USBH_NRESET 183
|
||||
|
||||
|
||||
#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
|
||||
defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
|
||||
|
||||
#define ONENAND_MAP 0x20000000
|
||||
|
||||
/*
|
||||
* x2 Flash built-in COMBO POP MEMORY
|
||||
* Since the device is equipped with two DataRAMs, and two-plane NAND
|
||||
* Flash memory array, these two component enables simultaneous program
|
||||
* of 4KiB. Plane1 has only even blocks such as block0, block2, block4
|
||||
* while Plane2 has only odd blocks such as block1, block3, block5.
|
||||
* So MTD regards it as 4KiB page size and 256KiB block size 64*(2*2048)
|
||||
*/
|
||||
|
||||
static struct mtd_partition igep3_onenand_partitions[] = {
|
||||
{
|
||||
.name = "X-Loader",
|
||||
.offset = 0,
|
||||
.size = 2 * (64*(2*2048))
|
||||
},
|
||||
{
|
||||
.name = "U-Boot",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 6 * (64*(2*2048)),
|
||||
},
|
||||
{
|
||||
.name = "Environment",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 2 * (64*(2*2048)),
|
||||
},
|
||||
{
|
||||
.name = "Kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 12 * (64*(2*2048)),
|
||||
},
|
||||
{
|
||||
.name = "File System",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_onenand_platform_data igep3_onenand_pdata = {
|
||||
.parts = igep3_onenand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(igep3_onenand_partitions),
|
||||
.onenand_setup = NULL,
|
||||
.dma_channel = -1, /* disable DMA in OMAP OneNAND driver */
|
||||
};
|
||||
|
||||
static struct platform_device igep3_onenand_device = {
|
||||
.name = "omap2-onenand",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &igep3_onenand_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init igep3_flash_init(void)
|
||||
{
|
||||
u8 cs = 0;
|
||||
u8 onenandcs = GPMC_CS_NUM + 1;
|
||||
|
||||
for (cs = 0; cs < GPMC_CS_NUM; cs++) {
|
||||
u32 ret;
|
||||
ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
|
||||
|
||||
/* Check if NAND/oneNAND is configured */
|
||||
if ((ret & 0xC00) == 0x800)
|
||||
/* NAND found */
|
||||
pr_err("IGEP3: Unsupported NAND found\n");
|
||||
else {
|
||||
ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7);
|
||||
|
||||
if ((ret & 0x3F) == (ONENAND_MAP >> 24))
|
||||
/* OneNAND found */
|
||||
onenandcs = cs;
|
||||
}
|
||||
}
|
||||
|
||||
if (onenandcs > GPMC_CS_NUM) {
|
||||
pr_err("IGEP3: Unable to find configuration in GPMC\n");
|
||||
return;
|
||||
}
|
||||
|
||||
igep3_onenand_pdata.cs = onenandcs;
|
||||
|
||||
if (platform_device_register(&igep3_onenand_device) < 0)
|
||||
pr_err("IGEP3: Unable to register OneNAND device\n");
|
||||
}
|
||||
|
||||
#else
|
||||
static void __init igep3_flash_init(void) {}
|
||||
#endif
|
||||
|
||||
static struct regulator_consumer_supply igep3_vmmc1_supply =
|
||||
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
|
||||
|
||||
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
|
||||
static struct regulator_init_data igep3_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 = 1,
|
||||
.consumer_supplies = &igep3_vmmc1_supply,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply igep3_vio_supply =
|
||||
REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
|
||||
|
||||
static struct regulator_init_data igep3_vio = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.apply_uV = 1,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
||||
| REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = 1,
|
||||
.consumer_supplies = &igep3_vio_supply,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply igep3_vmmc2_supply =
|
||||
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
|
||||
|
||||
static struct regulator_init_data igep3_vmmc2 = {
|
||||
.constraints = {
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.always_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = 1,
|
||||
.consumer_supplies = &igep3_vmmc2_supply,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config igep3_vwlan = {
|
||||
.supply_name = "vwlan",
|
||||
.microvolts = 3300000,
|
||||
.gpio = -EINVAL,
|
||||
.enabled_at_boot = 1,
|
||||
.init_data = &igep3_vmmc2,
|
||||
};
|
||||
|
||||
static struct platform_device igep3_vwlan_device = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &igep3_vwlan,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap2_hsmmc_info mmc[] = {
|
||||
[0] = {
|
||||
.mmc = 1,
|
||||
.caps = MMC_CAP_4_BIT_DATA,
|
||||
.gpio_cd = -EINVAL,
|
||||
.gpio_wp = -EINVAL,
|
||||
},
|
||||
#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
|
||||
[1] = {
|
||||
.mmc = 2,
|
||||
.caps = MMC_CAP_4_BIT_DATA,
|
||||
.gpio_cd = -EINVAL,
|
||||
.gpio_wp = -EINVAL,
|
||||
},
|
||||
#endif
|
||||
{} /* Terminator */
|
||||
};
|
||||
|
||||
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||
#include <linux/leds.h>
|
||||
|
||||
static struct gpio_led igep3_gpio_leds[] = {
|
||||
[0] = {
|
||||
.name = "gpio-led:red:d0",
|
||||
.gpio = IGEP3_GPIO_LED0_RED,
|
||||
.default_trigger = "default-off"
|
||||
},
|
||||
[1] = {
|
||||
.name = "gpio-led:green:d0",
|
||||
.gpio = IGEP3_GPIO_LED0_GREEN,
|
||||
.default_trigger = "default-off",
|
||||
},
|
||||
[2] = {
|
||||
.name = "gpio-led:red:d1",
|
||||
.gpio = IGEP3_GPIO_LED1_RED,
|
||||
.default_trigger = "default-off",
|
||||
},
|
||||
[3] = {
|
||||
.name = "gpio-led:green:d1",
|
||||
.default_trigger = "heartbeat",
|
||||
.gpio = -EINVAL, /* gets replaced */
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data igep3_led_pdata = {
|
||||
.leds = igep3_gpio_leds,
|
||||
.num_leds = ARRAY_SIZE(igep3_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device igep3_led_device = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &igep3_led_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init igep3_leds_init(void)
|
||||
{
|
||||
platform_device_register(&igep3_led_device);
|
||||
}
|
||||
|
||||
#else
|
||||
static inline void igep3_leds_init(void)
|
||||
{
|
||||
if ((gpio_request(IGEP3_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
|
||||
(gpio_direction_output(IGEP3_GPIO_LED0_RED, 1) == 0)) {
|
||||
gpio_export(IGEP3_GPIO_LED0_RED, 0);
|
||||
gpio_set_value(IGEP3_GPIO_LED0_RED, 1);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_RED\n");
|
||||
|
||||
if ((gpio_request(IGEP3_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
|
||||
(gpio_direction_output(IGEP3_GPIO_LED0_GREEN, 1) == 0)) {
|
||||
gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
|
||||
gpio_set_value(IGEP3_GPIO_LED0_GREEN, 1);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_GREEN\n");
|
||||
|
||||
if ((gpio_request(IGEP3_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
|
||||
(gpio_direction_output(IGEP3_GPIO_LED1_RED, 1) == 0)) {
|
||||
gpio_export(IGEP3_GPIO_LED1_RED, 0);
|
||||
gpio_set_value(IGEP3_GPIO_LED1_RED, 1);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_RED\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
static int igep3_twl4030_gpio_setup(struct device *dev,
|
||||
unsigned gpio, unsigned ngpio)
|
||||
{
|
||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
mmc[0].gpio_cd = gpio + 0;
|
||||
omap2_hsmmc_init(mmc);
|
||||
|
||||
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
||||
#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
|
||||
if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
|
||||
&& (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) {
|
||||
gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
|
||||
gpio_set_value(gpio + TWL4030_GPIO_MAX + 1, 0);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_GREEN\n");
|
||||
#else
|
||||
igep3_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
static struct twl4030_gpio_platform_data igep3_twl4030_gpio_pdata = {
|
||||
.gpio_base = OMAP_MAX_GPIO_LINES,
|
||||
.irq_base = TWL4030_GPIO_IRQ_BASE,
|
||||
.irq_end = TWL4030_GPIO_IRQ_END,
|
||||
.use_leds = true,
|
||||
.setup = igep3_twl4030_gpio_setup,
|
||||
};
|
||||
|
||||
static struct twl4030_usb_data igep3_twl4030_usb_data = {
|
||||
.usb_mode = T2_USB_MODE_ULPI,
|
||||
};
|
||||
|
||||
static struct platform_device *igep3_devices[] __initdata = {
|
||||
&igep3_vwlan_device,
|
||||
};
|
||||
|
||||
static void __init igep3_init_early(void)
|
||||
{
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(m65kxxxxam_sdrc_params,
|
||||
m65kxxxxam_sdrc_params);
|
||||
}
|
||||
|
||||
static struct twl4030_platform_data igep3_twl4030_pdata = {
|
||||
.irq_base = TWL4030_IRQ_BASE,
|
||||
.irq_end = TWL4030_IRQ_END,
|
||||
|
||||
/* platform_data for children goes here */
|
||||
.usb = &igep3_twl4030_usb_data,
|
||||
.gpio = &igep3_twl4030_gpio_pdata,
|
||||
.vmmc1 = &igep3_vmmc1,
|
||||
.vio = &igep3_vio,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata igep3_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &igep3_twl4030_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init igep3_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, igep3_i2c_boardinfo,
|
||||
ARRAY_SIZE(igep3_i2c_boardinfo));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
|
||||
|
||||
static void __init igep3_wifi_bt_init(void)
|
||||
{
|
||||
/* Configure MUX values for W-LAN + Bluetooth GPIO's */
|
||||
omap_mux_init_gpio(IGEP3_GPIO_WIFI_NPD, OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_gpio(IGEP3_GPIO_WIFI_NRESET, OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_gpio(IGEP3_GPIO_BT_NRESET, OMAP_PIN_OUTPUT);
|
||||
|
||||
/* Set GPIO's for W-LAN + Bluetooth combo module */
|
||||
if ((gpio_request(IGEP3_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
|
||||
(gpio_direction_output(IGEP3_GPIO_WIFI_NPD, 1) == 0)) {
|
||||
gpio_export(IGEP3_GPIO_WIFI_NPD, 0);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NPD\n");
|
||||
|
||||
if ((gpio_request(IGEP3_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) &&
|
||||
(gpio_direction_output(IGEP3_GPIO_WIFI_NRESET, 1) == 0)) {
|
||||
gpio_export(IGEP3_GPIO_WIFI_NRESET, 0);
|
||||
gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0);
|
||||
udelay(10);
|
||||
gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NRESET\n");
|
||||
|
||||
if ((gpio_request(IGEP3_GPIO_BT_NRESET, "GPIO_BT_NRESET") == 0) &&
|
||||
(gpio_direction_output(IGEP3_GPIO_BT_NRESET, 1) == 0)) {
|
||||
gpio_export(IGEP3_GPIO_BT_NRESET, 0);
|
||||
} else
|
||||
pr_warning("IGEP3: Could not obtain gpio GPIO_BT_NRESET\n");
|
||||
}
|
||||
#else
|
||||
void __init igep3_wifi_bt_init(void) {}
|
||||
#endif
|
||||
|
||||
static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
|
||||
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
|
||||
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
|
||||
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
|
||||
|
||||
.phy_reset = true,
|
||||
.reset_gpio_port[0] = -EINVAL,
|
||||
.reset_gpio_port[1] = IGEP3_GPIO_USBH_NRESET,
|
||||
.reset_gpio_port[2] = -EINVAL,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_OMAP_MUX
|
||||
static struct omap_board_mux board_mux[] __initdata = {
|
||||
OMAP3_MUX(I2C2_SDA, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
|
||||
{ .reg_offset = OMAP_MUX_TERMINATOR },
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init igep3_init(void)
|
||||
{
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
|
||||
/* Register I2C busses and drivers */
|
||||
igep3_i2c_init();
|
||||
platform_add_devices(igep3_devices, ARRAY_SIZE(igep3_devices));
|
||||
omap_serial_init();
|
||||
usb_musb_init(&musb_board_data);
|
||||
usbhs_init(&usbhs_bdata);
|
||||
|
||||
igep3_flash_init();
|
||||
igep3_leds_init();
|
||||
|
||||
/*
|
||||
* WLAN-BT combo module from MuRata which has a Marvell WLAN
|
||||
* (88W8686) + CSR Bluetooth chipset. Uses SDIO interface.
|
||||
*/
|
||||
igep3_wifi_bt_init();
|
||||
|
||||
}
|
||||
|
||||
MACHINE_START(IGEP0030, "IGEP OMAP3 module")
|
||||
.boot_params = 0x80000100,
|
||||
.reserve = omap_reserve,
|
||||
.map_io = omap3_map_io,
|
||||
.init_early = igep3_init_early,
|
||||
.init_irq = omap_init_irq,
|
||||
.init_machine = igep3_init,
|
||||
.timer = &omap_timer,
|
||||
MACHINE_END
|
||||
+11
-127
@@ -22,7 +22,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/io.h>
|
||||
@@ -43,47 +42,19 @@
|
||||
|
||||
#include <asm/delay.h>
|
||||
#include <plat/usb.h>
|
||||
#include <plat/gpmc-smsc911x.h>
|
||||
|
||||
#include "board-flash.h"
|
||||
#include "mux.h"
|
||||
#include "hsmmc.h"
|
||||
#include "control.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define LDP_SMSC911X_CS 1
|
||||
#define LDP_SMSC911X_GPIO 152
|
||||
#define DEBUG_BASE 0x08000000
|
||||
#define LDP_ETHR_START DEBUG_BASE
|
||||
|
||||
static struct resource ldp_smsc911x_resources[] = {
|
||||
[0] = {
|
||||
.start = LDP_ETHR_START,
|
||||
.end = LDP_ETHR_START + SZ_4K,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config ldp_smsc911x_config = {
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = SMSC911X_USE_32BIT,
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
};
|
||||
|
||||
static struct platform_device ldp_smsc911x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(ldp_smsc911x_resources),
|
||||
.resource = ldp_smsc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &ldp_smsc911x_config,
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t board_keymap[] = {
|
||||
KEY(0, 0, KEY_1),
|
||||
KEY(1, 0, KEY_2),
|
||||
@@ -197,82 +168,16 @@ static struct platform_device ldp_gpio_keys_device = {
|
||||
},
|
||||
};
|
||||
|
||||
static int ts_gpio;
|
||||
|
||||
/**
|
||||
* @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
|
||||
*
|
||||
* @return - void. If request gpio fails then Flag KERN_ERR.
|
||||
*/
|
||||
static void ads7846_dev_init(void)
|
||||
{
|
||||
if (gpio_request(ts_gpio, "ads7846 irq") < 0) {
|
||||
printk(KERN_ERR "can't get ads746 pen down GPIO\n");
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_input(ts_gpio);
|
||||
gpio_set_debounce(ts_gpio, 310);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
{
|
||||
return !gpio_get_value(ts_gpio);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data tsc2046_config __initdata = {
|
||||
.get_pendown_state = ads7846_get_pendown_state,
|
||||
.keep_vref_on = 1,
|
||||
};
|
||||
|
||||
static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
.single_channel = 1, /* 0: slave, 1: master */
|
||||
};
|
||||
|
||||
static struct spi_board_info ldp_spi_board_info[] __initdata = {
|
||||
[0] = {
|
||||
/*
|
||||
* TSC2046 operates at a max freqency of 2MHz, so
|
||||
* operate slightly below at 1.5MHz
|
||||
*/
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &tsc2046_mcspi_config,
|
||||
.irq = 0,
|
||||
.platform_data = &tsc2046_config,
|
||||
},
|
||||
static struct omap_smsc911x_platform_data smsc911x_cfg = {
|
||||
.cs = LDP_SMSC911X_CS,
|
||||
.gpio_irq = LDP_SMSC911X_GPIO,
|
||||
.gpio_reset = -EINVAL,
|
||||
.flags = SMSC911X_USE_32BIT,
|
||||
};
|
||||
|
||||
static inline void __init ldp_init_smsc911x(void)
|
||||
{
|
||||
int eth_cs;
|
||||
unsigned long cs_mem_base;
|
||||
int eth_gpio = 0;
|
||||
|
||||
eth_cs = LDP_SMSC911X_CS;
|
||||
|
||||
if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) {
|
||||
printk(KERN_ERR "Failed to request GPMC mem for smsc911x\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ldp_smsc911x_resources[0].start = cs_mem_base + 0x0;
|
||||
ldp_smsc911x_resources[0].end = cs_mem_base + 0xff;
|
||||
udelay(100);
|
||||
|
||||
eth_gpio = LDP_SMSC911X_GPIO;
|
||||
|
||||
ldp_smsc911x_resources[1].start = OMAP_GPIO_IRQ(eth_gpio);
|
||||
|
||||
if (gpio_request(eth_gpio, "smsc911x irq") < 0) {
|
||||
printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
|
||||
eth_gpio);
|
||||
return;
|
||||
}
|
||||
gpio_direction_input(eth_gpio);
|
||||
gpmc_smsc911x_init(&smsc911x_cfg);
|
||||
}
|
||||
|
||||
static struct platform_device ldp_lcd_device = {
|
||||
@@ -360,19 +265,9 @@ static struct twl4030_platform_data ldp_twldata = {
|
||||
.keypad = &ldp_kp_twl4030_data,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata ldp_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &ldp_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init omap_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, ldp_i2c_boardinfo,
|
||||
ARRAY_SIZE(ldp_i2c_boardinfo));
|
||||
omap3_pmic_init("twl4030", &ldp_twldata);
|
||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||
omap_register_i2c_bus(3, 400, NULL, 0);
|
||||
return 0;
|
||||
@@ -389,7 +284,6 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
|
||||
};
|
||||
|
||||
static struct platform_device *ldp_devices[] __initdata = {
|
||||
&ldp_smsc911x_device,
|
||||
&ldp_lcd_device,
|
||||
&ldp_gpio_keys_device,
|
||||
};
|
||||
@@ -400,12 +294,6 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static struct mtd_partition ldp_nand_partitions[] = {
|
||||
/* All the partition sizes are listed in terms of NAND block size */
|
||||
{
|
||||
@@ -446,13 +334,9 @@ static void __init omap_ldp_init(void)
|
||||
ldp_init_smsc911x();
|
||||
omap_i2c_init();
|
||||
platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
|
||||
ts_gpio = 54;
|
||||
ldp_spi_board_info[0].irq = gpio_to_irq(ts_gpio);
|
||||
spi_register_board_info(ldp_spi_board_info,
|
||||
ARRAY_SIZE(ldp_spi_board_info));
|
||||
ads7846_dev_init();
|
||||
omap_ads7846_init(1, 54, 310, NULL);
|
||||
omap_serial_init();
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
board_nand_init(ldp_nand_partitions,
|
||||
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
|
||||
|
||||
|
||||
@@ -106,14 +106,13 @@ static void __init n8x0_usb_init(void)
|
||||
static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
|
||||
|
||||
/* PM companion chip power control pin */
|
||||
ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable");
|
||||
ret = gpio_request_one(TUSB6010_GPIO_ENABLE, GPIOF_OUT_INIT_LOW,
|
||||
"TUSB6010 enable");
|
||||
if (ret != 0) {
|
||||
printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
|
||||
TUSB6010_GPIO_ENABLE);
|
||||
return;
|
||||
}
|
||||
gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
|
||||
|
||||
tusb_set_power(0);
|
||||
|
||||
ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
|
||||
@@ -494,8 +493,12 @@ static struct omap_mmc_platform_data mmc1_data = {
|
||||
|
||||
static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
|
||||
|
||||
static void __init n8x0_mmc_init(void)
|
||||
static struct gpio n810_emmc_gpios[] __initdata = {
|
||||
{ N810_EMMC_VSD_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vddf" },
|
||||
{ N810_EMMC_VIO_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vdd" },
|
||||
};
|
||||
|
||||
static void __init n8x0_mmc_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
@@ -512,27 +515,18 @@ static void __init n8x0_mmc_init(void)
|
||||
mmc1_data.slots[1].ban_openended = 1;
|
||||
}
|
||||
|
||||
err = gpio_request(N8X0_SLOT_SWITCH_GPIO, "MMC slot switch");
|
||||
err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW,
|
||||
"MMC slot switch");
|
||||
if (err)
|
||||
return;
|
||||
|
||||
gpio_direction_output(N8X0_SLOT_SWITCH_GPIO, 0);
|
||||
|
||||
if (machine_is_nokia_n810()) {
|
||||
err = gpio_request(N810_EMMC_VSD_GPIO, "MMC slot 2 Vddf");
|
||||
err = gpio_request_array(n810_emmc_gpios,
|
||||
ARRAY_SIZE(n810_emmc_gpios));
|
||||
if (err) {
|
||||
gpio_free(N8X0_SLOT_SWITCH_GPIO);
|
||||
return;
|
||||
}
|
||||
gpio_direction_output(N810_EMMC_VSD_GPIO, 0);
|
||||
|
||||
err = gpio_request(N810_EMMC_VIO_GPIO, "MMC slot 2 Vdd");
|
||||
if (err) {
|
||||
gpio_free(N8X0_SLOT_SWITCH_GPIO);
|
||||
gpio_free(N810_EMMC_VSD_GPIO);
|
||||
return;
|
||||
}
|
||||
gpio_direction_output(N810_EMMC_VIO_GPIO, 0);
|
||||
}
|
||||
|
||||
mmc_data[0] = &mmc1_data;
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "hsmmc.h"
|
||||
#include "timer-gp.h"
|
||||
#include "pm.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define NAND_BLOCK_SIZE SZ_128K
|
||||
|
||||
@@ -79,6 +80,12 @@ static u8 omap3_beagle_get_rev(void)
|
||||
return omap3_beagle_version;
|
||||
}
|
||||
|
||||
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;
|
||||
@@ -88,21 +95,13 @@ static void __init omap3_beagle_init_rev(void)
|
||||
omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
|
||||
|
||||
ret = gpio_request(171, "rev_id_0");
|
||||
if (ret < 0)
|
||||
goto fail0;
|
||||
|
||||
ret = gpio_request(172, "rev_id_1");
|
||||
if (ret < 0)
|
||||
goto fail1;
|
||||
|
||||
ret = gpio_request(173, "rev_id_2");
|
||||
if (ret < 0)
|
||||
goto fail2;
|
||||
|
||||
gpio_direction_input(171);
|
||||
gpio_direction_input(172);
|
||||
gpio_direction_input(173);
|
||||
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);
|
||||
@@ -128,18 +127,6 @@ static void __init omap3_beagle_init_rev(void)
|
||||
printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
|
||||
omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
fail2:
|
||||
gpio_free(172);
|
||||
fail1:
|
||||
gpio_free(171);
|
||||
fail0:
|
||||
printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
|
||||
omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static struct mtd_partition omap3beagle_nand_partitions[] = {
|
||||
@@ -173,15 +160,6 @@ static struct mtd_partition omap3beagle_nand_partitions[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_nand_platform_data omap3beagle_nand_data = {
|
||||
.options = NAND_BUSWIDTH_16,
|
||||
.parts = omap3beagle_nand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(omap3beagle_nand_partitions),
|
||||
.dma_channel = -1, /* disable DMA in OMAP NAND driver */
|
||||
.nand_setup = NULL,
|
||||
.dev_ready = NULL,
|
||||
};
|
||||
|
||||
/* DSS */
|
||||
|
||||
static int beagle_enable_dvi(struct omap_dss_device *dssdev)
|
||||
@@ -243,13 +221,10 @@ static void __init beagle_display_init(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
|
||||
if (r < 0) {
|
||||
r = gpio_request_one(beagle_dvi_device.reset_gpio, GPIOF_OUT_INIT_LOW,
|
||||
"DVI reset");
|
||||
if (r < 0)
|
||||
printk(KERN_ERR "Unable to get DVI reset GPIO\n");
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_output(beagle_dvi_device.reset_gpio, 0);
|
||||
}
|
||||
|
||||
#include "sdram-micron-mt46h32m32lf-6.h"
|
||||
@@ -276,7 +251,7 @@ static struct gpio_led gpio_leds[];
|
||||
static int beagle_twl_gpio_setup(struct device *dev,
|
||||
unsigned gpio, unsigned ngpio)
|
||||
{
|
||||
int r;
|
||||
int r, usb_pwr_level;
|
||||
|
||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
|
||||
mmc[0].gpio_wp = -EINVAL;
|
||||
@@ -295,66 +270,46 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
||||
beagle_vmmc1_supply.dev = mmc[0].dev;
|
||||
beagle_vsim_supply.dev = mmc[0].dev;
|
||||
|
||||
/* REVISIT: need ehci-omap hooks for external VBUS
|
||||
* power switch and overcurrent detect
|
||||
*/
|
||||
if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
|
||||
r = gpio_request(gpio + 1, "EHCI_nOC");
|
||||
if (!r) {
|
||||
r = gpio_direction_input(gpio + 1);
|
||||
if (r)
|
||||
gpio_free(gpio + 1);
|
||||
}
|
||||
if (r)
|
||||
pr_err("%s: unable to configure EHCI_nOC\n", __func__);
|
||||
}
|
||||
|
||||
/*
|
||||
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
|
||||
* high / others active low)
|
||||
*/
|
||||
gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
|
||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
|
||||
gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
|
||||
else
|
||||
gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
|
||||
|
||||
/* DVI reset GPIO is different between beagle revisions */
|
||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
|
||||
beagle_dvi_device.reset_gpio = 129;
|
||||
else
|
||||
beagle_dvi_device.reset_gpio = 170;
|
||||
|
||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||
|
||||
/*
|
||||
* gpio + 1 on Xm controls the TFP410's enable line (active low)
|
||||
* gpio + 2 control varies depending on the board rev as follows:
|
||||
* P7/P8 revisions(prototype): Camera EN
|
||||
* A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
|
||||
* DVI reset GPIO is different between beagle revisions
|
||||
*/
|
||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
|
||||
r = gpio_request(gpio + 1, "nDVI_PWR_EN");
|
||||
if (!r) {
|
||||
r = gpio_direction_output(gpio + 1, 0);
|
||||
if (r)
|
||||
gpio_free(gpio + 1);
|
||||
}
|
||||
usb_pwr_level = GPIOF_OUT_INIT_HIGH;
|
||||
beagle_dvi_device.reset_gpio = 129;
|
||||
/*
|
||||
* 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__);
|
||||
r = gpio_request(gpio + 2, "DVI_LDO_EN");
|
||||
if (!r) {
|
||||
r = gpio_direction_output(gpio + 2, 1);
|
||||
if (r)
|
||||
gpio_free(gpio + 2);
|
||||
}
|
||||
r = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
|
||||
"DVI_LDO_EN");
|
||||
if (r)
|
||||
pr_err("%s: unable to configure DVI_LDO_EN\n",
|
||||
__func__);
|
||||
} else {
|
||||
usb_pwr_level = GPIOF_OUT_INIT_LOW;
|
||||
beagle_dvi_device.reset_gpio = 170;
|
||||
/*
|
||||
* 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__);
|
||||
}
|
||||
|
||||
gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
|
||||
|
||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -453,15 +408,6 @@ static struct twl4030_platform_data beagle_twldata = {
|
||||
.vpll2 = &beagle_vpll2,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &beagle_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("eeprom", 0x50),
|
||||
@@ -470,8 +416,7 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
|
||||
|
||||
static int __init omap3_beagle_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
|
||||
ARRAY_SIZE(beagle_i2c_boardinfo));
|
||||
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));
|
||||
@@ -551,39 +496,6 @@ static struct platform_device *omap3_beagle_devices[] __initdata = {
|
||||
&keys_gpio,
|
||||
};
|
||||
|
||||
static void __init omap3beagle_flash_init(void)
|
||||
{
|
||||
u8 cs = 0;
|
||||
u8 nandcs = GPMC_CS_NUM + 1;
|
||||
|
||||
/* find out the chip-select on which NAND exists */
|
||||
while (cs < GPMC_CS_NUM) {
|
||||
u32 ret = 0;
|
||||
ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
|
||||
|
||||
if ((ret & 0xC00) == 0x800) {
|
||||
printk(KERN_INFO "Found NAND on CS%d\n", cs);
|
||||
if (nandcs > GPMC_CS_NUM)
|
||||
nandcs = cs;
|
||||
}
|
||||
cs++;
|
||||
}
|
||||
|
||||
if (nandcs > GPMC_CS_NUM) {
|
||||
printk(KERN_INFO "NAND: Unable to find configuration "
|
||||
"in GPMC\n ");
|
||||
return;
|
||||
}
|
||||
|
||||
if (nandcs < GPMC_CS_NUM) {
|
||||
omap3beagle_nand_data.cs = nandcs;
|
||||
|
||||
printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
|
||||
if (gpmc_nand_init(&omap3beagle_nand_data) < 0)
|
||||
printk(KERN_ERR "Unable to register NAND device\n");
|
||||
}
|
||||
}
|
||||
|
||||
static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
|
||||
|
||||
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
|
||||
@@ -602,12 +514,6 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static void __init beagle_opp_init(void)
|
||||
{
|
||||
int r = 0;
|
||||
@@ -665,13 +571,13 @@ static void __init omap3_beagle_init(void)
|
||||
omap_serial_init();
|
||||
|
||||
omap_mux_init_gpio(170, OMAP_PIN_INPUT);
|
||||
gpio_request(170, "DVI_nPD");
|
||||
/* REVISIT leave DVI powered down until it's needed ... */
|
||||
gpio_direction_output(170, true);
|
||||
gpio_request_one(170, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
|
||||
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
usbhs_init(&usbhs_bdata);
|
||||
omap3beagle_flash_init();
|
||||
omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions,
|
||||
ARRAY_SIZE(omap3beagle_nand_partitions));
|
||||
|
||||
/* Ensure SDRC pins are mux'd for self-refresh */
|
||||
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "mux.h"
|
||||
#include "sdram-micron-mt46h32m32lf-6.h"
|
||||
#include "hsmmc.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define OMAP3_EVM_TS_GPIO 175
|
||||
#define OMAP3_EVM_EHCI_VBUS 22
|
||||
@@ -101,49 +102,20 @@ static void __init omap3_evm_get_revision(void)
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
|
||||
static struct resource omap3evm_smsc911x_resources[] = {
|
||||
[0] = {
|
||||
.start = OMAP3EVM_ETHR_START,
|
||||
.end = (OMAP3EVM_ETHR_START + OMAP3EVM_ETHR_SIZE - 1),
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ),
|
||||
.end = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ),
|
||||
.flags = (IORESOURCE_IRQ | IRQF_TRIGGER_LOW),
|
||||
},
|
||||
};
|
||||
#include <plat/gpmc-smsc911x.h>
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_config = {
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = (SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS),
|
||||
};
|
||||
|
||||
static struct platform_device omap3evm_smsc911x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(omap3evm_smsc911x_resources),
|
||||
.resource = &omap3evm_smsc911x_resources[0],
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
},
|
||||
static struct omap_smsc911x_platform_data smsc911x_cfg = {
|
||||
.cs = OMAP3EVM_SMSC911X_CS,
|
||||
.gpio_irq = OMAP3EVM_ETHR_GPIO_IRQ,
|
||||
.gpio_reset = -EINVAL,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
};
|
||||
|
||||
static inline void __init omap3evm_init_smsc911x(void)
|
||||
{
|
||||
int eth_cs, eth_rst;
|
||||
struct clk *l3ck;
|
||||
unsigned int rate;
|
||||
|
||||
if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
|
||||
eth_rst = OMAP3EVM_GEN1_ETHR_GPIO_RST;
|
||||
else
|
||||
eth_rst = OMAP3EVM_GEN2_ETHR_GPIO_RST;
|
||||
|
||||
eth_cs = OMAP3EVM_SMSC911X_CS;
|
||||
|
||||
l3ck = clk_get(NULL, "l3_ck");
|
||||
if (IS_ERR(l3ck))
|
||||
rate = 100000000;
|
||||
@@ -152,33 +124,13 @@ static inline void __init omap3evm_init_smsc911x(void)
|
||||
|
||||
/* Configure ethernet controller reset gpio */
|
||||
if (cpu_is_omap3430()) {
|
||||
if (gpio_request(eth_rst, "SMSC911x gpio") < 0) {
|
||||
pr_err(KERN_ERR "Failed to request %d for smsc911x\n",
|
||||
eth_rst);
|
||||
return;
|
||||
}
|
||||
|
||||
if (gpio_direction_output(eth_rst, 1) < 0) {
|
||||
pr_err(KERN_ERR "Failed to set direction of %d for" \
|
||||
" smsc911x\n", eth_rst);
|
||||
return;
|
||||
}
|
||||
/* reset pulse to ethernet controller*/
|
||||
usleep_range(150, 220);
|
||||
gpio_set_value(eth_rst, 0);
|
||||
usleep_range(150, 220);
|
||||
gpio_set_value(eth_rst, 1);
|
||||
usleep_range(1, 2);
|
||||
if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
|
||||
smsc911x_cfg.gpio_reset = OMAP3EVM_GEN1_ETHR_GPIO_RST;
|
||||
else
|
||||
smsc911x_cfg.gpio_reset = OMAP3EVM_GEN2_ETHR_GPIO_RST;
|
||||
}
|
||||
|
||||
if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMSC911x irq") < 0) {
|
||||
printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
|
||||
OMAP3EVM_ETHR_GPIO_IRQ);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ);
|
||||
platform_device_register(&omap3evm_smsc911x_device);
|
||||
gpmc_smsc911x_init(&smsc911x_cfg);
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -197,6 +149,15 @@ static inline void __init omap3evm_init_smsc911x(void) { return; }
|
||||
#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
|
||||
#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
|
||||
|
||||
static struct gpio omap3_evm_dss_gpios[] __initdata = {
|
||||
{ OMAP3EVM_LCD_PANEL_RESB, GPIOF_OUT_INIT_HIGH, "lcd_panel_resb" },
|
||||
{ OMAP3EVM_LCD_PANEL_INI, GPIOF_OUT_INIT_HIGH, "lcd_panel_ini" },
|
||||
{ OMAP3EVM_LCD_PANEL_QVGA, GPIOF_OUT_INIT_LOW, "lcd_panel_qvga" },
|
||||
{ OMAP3EVM_LCD_PANEL_LR, GPIOF_OUT_INIT_HIGH, "lcd_panel_lr" },
|
||||
{ OMAP3EVM_LCD_PANEL_UD, GPIOF_OUT_INIT_HIGH, "lcd_panel_ud" },
|
||||
{ OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, "lcd_panel_envdd" },
|
||||
};
|
||||
|
||||
static int lcd_enabled;
|
||||
static int dvi_enabled;
|
||||
|
||||
@@ -204,61 +165,10 @@ static void __init omap3_evm_display_init(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_panel_resb\n");
|
||||
return;
|
||||
}
|
||||
gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
|
||||
|
||||
r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_panel_ini\n");
|
||||
goto err_1;
|
||||
}
|
||||
gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
|
||||
|
||||
r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_panel_qvga\n");
|
||||
goto err_2;
|
||||
}
|
||||
gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
|
||||
|
||||
r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_panel_lr\n");
|
||||
goto err_3;
|
||||
}
|
||||
gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
|
||||
|
||||
r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_panel_ud\n");
|
||||
goto err_4;
|
||||
}
|
||||
gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
|
||||
|
||||
r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
|
||||
if (r) {
|
||||
printk(KERN_ERR "failed to get lcd_panel_envdd\n");
|
||||
goto err_5;
|
||||
}
|
||||
gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
|
||||
|
||||
return;
|
||||
|
||||
err_5:
|
||||
gpio_free(OMAP3EVM_LCD_PANEL_UD);
|
||||
err_4:
|
||||
gpio_free(OMAP3EVM_LCD_PANEL_LR);
|
||||
err_3:
|
||||
gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
|
||||
err_2:
|
||||
gpio_free(OMAP3EVM_LCD_PANEL_INI);
|
||||
err_1:
|
||||
gpio_free(OMAP3EVM_LCD_PANEL_RESB);
|
||||
|
||||
r = gpio_request_array(omap3_evm_dss_gpios,
|
||||
ARRAY_SIZE(omap3_evm_dss_gpios));
|
||||
if (r)
|
||||
printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
|
||||
}
|
||||
|
||||
static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
|
||||
@@ -448,7 +358,7 @@ static struct platform_device leds_gpio = {
|
||||
static int omap3evm_twl_gpio_setup(struct device *dev,
|
||||
unsigned gpio, unsigned ngpio)
|
||||
{
|
||||
int r;
|
||||
int r, lcd_bl_en;
|
||||
|
||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
omap_mux_init_gpio(63, OMAP_PIN_INPUT);
|
||||
@@ -465,16 +375,14 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
|
||||
*/
|
||||
|
||||
/* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
|
||||
r = gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
|
||||
if (!r)
|
||||
r = gpio_direction_output(gpio + TWL4030_GPIO_MAX,
|
||||
(get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) ? 1 : 0);
|
||||
lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
|
||||
GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
|
||||
r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
|
||||
if (r)
|
||||
printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
|
||||
|
||||
/* gpio + 7 == DVI Enable */
|
||||
gpio_request(gpio + 7, "EN_DVI");
|
||||
gpio_direction_output(gpio + 7, 0);
|
||||
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
|
||||
|
||||
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||
@@ -652,78 +560,18 @@ static struct twl4030_platform_data omap3evm_twldata = {
|
||||
.vdac = &omap3_evm_vdac,
|
||||
.vpll2 = &omap3_evm_vpll2,
|
||||
.vio = &omap3evm_vio,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &omap3evm_twldata,
|
||||
},
|
||||
.vmmc1 = &omap3evm_vmmc1,
|
||||
.vsim = &omap3evm_vsim,
|
||||
};
|
||||
|
||||
static int __init omap3_evm_i2c_init(void)
|
||||
{
|
||||
/*
|
||||
* REVISIT: These entries can be set in omap3evm_twl_data
|
||||
* after a merge with MFD tree
|
||||
*/
|
||||
omap3evm_twldata.vmmc1 = &omap3evm_vmmc1;
|
||||
omap3evm_twldata.vsim = &omap3evm_vsim;
|
||||
|
||||
omap_register_i2c_bus(1, 2600, omap3evm_i2c_boardinfo,
|
||||
ARRAY_SIZE(omap3evm_i2c_boardinfo));
|
||||
omap3_pmic_init("twl4030", &omap3evm_twldata);
|
||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||
omap_register_i2c_bus(3, 400, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ads7846_dev_init(void)
|
||||
{
|
||||
if (gpio_request(OMAP3_EVM_TS_GPIO, "ADS7846 pendown") < 0)
|
||||
printk(KERN_ERR "can't get ads7846 pen down GPIO\n");
|
||||
|
||||
gpio_direction_input(OMAP3_EVM_TS_GPIO);
|
||||
gpio_set_debounce(OMAP3_EVM_TS_GPIO, 310);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
{
|
||||
return !gpio_get_value(OMAP3_EVM_TS_GPIO);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data ads7846_config = {
|
||||
.x_max = 0x0fff,
|
||||
.y_max = 0x0fff,
|
||||
.x_plate_ohms = 180,
|
||||
.pressure_max = 255,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 3,
|
||||
.debounce_rep = 1,
|
||||
.get_pendown_state = ads7846_get_pendown_state,
|
||||
.keep_vref_on = 1,
|
||||
.settle_delay_usecs = 150,
|
||||
.wakeup = true,
|
||||
};
|
||||
|
||||
static struct omap2_mcspi_device_config ads7846_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
.single_channel = 1, /* 0: slave, 1: master */
|
||||
};
|
||||
|
||||
static struct spi_board_info omap3evm_spi_board_info[] = {
|
||||
[0] = {
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &ads7846_mcspi_config,
|
||||
.irq = OMAP_GPIO_IRQ(OMAP3_EVM_TS_GPIO),
|
||||
.platform_data = &ads7846_config,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
|
||||
};
|
||||
|
||||
@@ -825,6 +673,11 @@ static struct omap_musb_board_data musb_board_data = {
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static struct gpio omap3_evm_ehci_gpios[] __initdata = {
|
||||
{ OMAP3_EVM_EHCI_VBUS, GPIOF_OUT_INIT_HIGH, "enable EHCI VBUS" },
|
||||
{ OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" },
|
||||
};
|
||||
|
||||
static void __init omap3_evm_init(void)
|
||||
{
|
||||
omap3_evm_get_revision();
|
||||
@@ -841,9 +694,6 @@ static void __init omap3_evm_init(void)
|
||||
|
||||
omap_display_init(&omap3_evm_dss_data);
|
||||
|
||||
spi_register_board_info(omap3evm_spi_board_info,
|
||||
ARRAY_SIZE(omap3evm_spi_board_info));
|
||||
|
||||
omap_serial_init();
|
||||
|
||||
/* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
|
||||
@@ -851,16 +701,12 @@ static void __init omap3_evm_init(void)
|
||||
|
||||
if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
|
||||
/* enable EHCI VBUS using GPIO22 */
|
||||
omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP);
|
||||
gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
|
||||
gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
|
||||
gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
|
||||
|
||||
omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP);
|
||||
/* Select EHCI port on main board */
|
||||
omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP);
|
||||
gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port");
|
||||
gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0);
|
||||
gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0);
|
||||
omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT,
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
gpio_request_array(omap3_evm_ehci_gpios,
|
||||
ARRAY_SIZE(omap3_evm_ehci_gpios));
|
||||
|
||||
/* setup EHCI phy reset config */
|
||||
omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
|
||||
@@ -876,7 +722,7 @@ static void __init omap3_evm_init(void)
|
||||
}
|
||||
usb_musb_init(&musb_board_data);
|
||||
usbhs_init(&usbhs_bdata);
|
||||
ads7846_dev_init();
|
||||
omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL);
|
||||
omap3evm_init_smsc911x();
|
||||
omap3_evm_display_init();
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "hsmmc.h"
|
||||
#include "timer-gp.h"
|
||||
#include "control.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#include <plat/mux.h>
|
||||
#include <plat/board.h>
|
||||
@@ -93,19 +94,9 @@ static struct twl4030_platform_data omap3logic_twldata = {
|
||||
.vmmc1 = &omap3logic_vmmc1,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata omap3logic_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("twl4030", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &omap3logic_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init omap3logic_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, omap3logic_i2c_boardinfo,
|
||||
ARRAY_SIZE(omap3logic_i2c_boardinfo));
|
||||
omap3_pmic_init("twl4030", &omap3logic_twldata);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -147,7 +138,6 @@ static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
|
||||
.cs = OMAP3LOGIC_SMSC911X_CS,
|
||||
.gpio_irq = -EINVAL,
|
||||
.gpio_reset = -EINVAL,
|
||||
.flags = IORESOURCE_IRQ_LOWLEVEL,
|
||||
};
|
||||
|
||||
/* TODO/FIXME (comment by Peter Barada, LogicPD):
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/wl12xx.h>
|
||||
@@ -52,6 +51,7 @@
|
||||
#include "mux.h"
|
||||
#include "sdram-micron-mt46h32m32lf-6.h"
|
||||
#include "hsmmc.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#define PANDORA_WIFI_IRQ_GPIO 21
|
||||
#define PANDORA_WIFI_NRESET_GPIO 23
|
||||
@@ -305,24 +305,13 @@ static int omap3pandora_twl_gpio_setup(struct device *dev,
|
||||
|
||||
/* gpio + 13 drives 32kHz buffer for wifi module */
|
||||
gpio_32khz = gpio + 13;
|
||||
ret = gpio_request(gpio_32khz, "wifi 32kHz");
|
||||
ret = gpio_request_one(gpio_32khz, GPIOF_OUT_INIT_HIGH, "wifi 32kHz");
|
||||
if (ret < 0) {
|
||||
pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ret = gpio_direction_output(gpio_32khz, 1);
|
||||
if (ret < 0) {
|
||||
pr_err("Cannot set GPIO line %d, ret=%d\n", gpio_32khz, ret);
|
||||
goto fail_direction;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
fail_direction:
|
||||
gpio_free(gpio_32khz);
|
||||
fail:
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
|
||||
@@ -544,15 +533,6 @@ static struct twl4030_platform_data omap3pandora_twldata = {
|
||||
.bci = &pandora_bci_data,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata omap3pandora_i2c_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps65950", 0x48),
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
.irq = INT_34XX_SYS_NIRQ,
|
||||
.platform_data = &omap3pandora_twldata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("bq27500", 0x55),
|
||||
@@ -562,61 +542,15 @@ static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = {
|
||||
|
||||
static int __init omap3pandora_i2c_init(void)
|
||||
{
|
||||
omap_register_i2c_bus(1, 2600, omap3pandora_i2c_boardinfo,
|
||||
ARRAY_SIZE(omap3pandora_i2c_boardinfo));
|
||||
omap3_pmic_init("tps65950", &omap3pandora_twldata);
|
||||
/* i2c2 pins are not connected */
|
||||
omap_register_i2c_bus(3, 100, omap3pandora_i2c3_boardinfo,
|
||||
ARRAY_SIZE(omap3pandora_i2c3_boardinfo));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init omap3pandora_ads7846_init(void)
|
||||
{
|
||||
int gpio = OMAP3_PANDORA_TS_GPIO;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(gpio, "ads7846_pen_down");
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "Failed to request GPIO %d for "
|
||||
"ads7846 pen down IRQ\n", gpio);
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_direction_input(gpio);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
{
|
||||
return !gpio_get_value(OMAP3_PANDORA_TS_GPIO);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data ads7846_config = {
|
||||
.x_max = 0x0fff,
|
||||
.y_max = 0x0fff,
|
||||
.x_plate_ohms = 180,
|
||||
.pressure_max = 255,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 3,
|
||||
.debounce_rep = 1,
|
||||
.get_pendown_state = ads7846_get_pendown_state,
|
||||
.keep_vref_on = 1,
|
||||
};
|
||||
|
||||
static struct omap2_mcspi_device_config ads7846_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
.single_channel = 1, /* 0: slave, 1: master */
|
||||
};
|
||||
|
||||
static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "ads7846",
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &ads7846_mcspi_config,
|
||||
.irq = OMAP_GPIO_IRQ(OMAP3_PANDORA_TS_GPIO),
|
||||
.platform_data = &ads7846_config,
|
||||
}, {
|
||||
.modalias = "tpo_td043mtea1_panel_spi",
|
||||
.bus_num = 1,
|
||||
.chip_select = 1,
|
||||
@@ -639,14 +573,10 @@ static void __init pandora_wl1251_init(void)
|
||||
|
||||
memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
|
||||
|
||||
ret = gpio_request(PANDORA_WIFI_IRQ_GPIO, "wl1251 irq");
|
||||
ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
ret = gpio_direction_input(PANDORA_WIFI_IRQ_GPIO);
|
||||
if (ret < 0)
|
||||
goto fail_irq;
|
||||
|
||||
pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
|
||||
if (pandora_wl1251_pdata.irq < 0)
|
||||
goto fail_irq;
|
||||
@@ -688,12 +618,6 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct omap_musb_board_data musb_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
static void __init omap3pandora_init(void)
|
||||
{
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
@@ -705,9 +629,9 @@ static void __init omap3pandora_init(void)
|
||||
omap_serial_init();
|
||||
spi_register_board_info(omap3pandora_spi_board_info,
|
||||
ARRAY_SIZE(omap3pandora_spi_board_info));
|
||||
omap3pandora_ads7846_init();
|
||||
omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL);
|
||||
usbhs_init(&usbhs_bdata);
|
||||
usb_musb_init(&musb_board_data);
|
||||
usb_musb_init(NULL);
|
||||
gpmc_nand_init(&pandora_nand_data);
|
||||
|
||||
/* Ensure SDRC pins are mux'd for self-refresh */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user