Commit bb2ae8f0 authored by Tomáš Čech's avatar Tomáš Čech Committed by Eric Miao

[ARM] pxa/treo: generalisation of Treo680 code

Signed-off-by: default avatarTomáš Čech <sleep_walker@suse.cz>
Acked-by: default avatarMarek Vasut <marek.vasut@gmail.com>
Signed-off-by: default avatarEric Miao <eric.y.miao@gmail.com>
parent d6223871
...@@ -421,12 +421,17 @@ config MACH_PALMZ72 ...@@ -421,12 +421,17 @@ config MACH_PALMZ72
Say Y here if you intend to run this kernel on Palm Zire 72 Say Y here if you intend to run this kernel on Palm Zire 72
handheld computer. handheld computer.
config PALM_TREO
bool
depends on ARCH_PXA_PALM
config MACH_TREO680 config MACH_TREO680
bool "Palm Treo 680" bool "Palm Treo 680"
default y default y
depends on ARCH_PXA_PALM depends on ARCH_PXA_PALM
select PXA27x select PXA27x
select IWMMXT select IWMMXT
select PALM_TREO
help help
Say Y here if you intend to run this kernel on Palm Treo 680 Say Y here if you intend to run this kernel on Palm Treo 680
smartphone. smartphone.
......
...@@ -64,7 +64,7 @@ obj-$(CONFIG_MACH_PALMT5) += palmt5.o ...@@ -64,7 +64,7 @@ obj-$(CONFIG_MACH_PALMT5) += palmt5.o
obj-$(CONFIG_MACH_PALMTX) += palmtx.o obj-$(CONFIG_MACH_PALMTX) += palmtx.o
obj-$(CONFIG_MACH_PALMLD) += palmld.o obj-$(CONFIG_MACH_PALMLD) += palmld.o
obj-$(CONFIG_MACH_PALMZ72) += palmz72.o obj-$(CONFIG_MACH_PALMZ72) += palmz72.o
obj-$(CONFIG_MACH_TREO680) += treo680.o obj-$(CONFIG_PALM_TREO) += palmtreo.o
obj-$(CONFIG_ARCH_VIPER) += viper.o obj-$(CONFIG_ARCH_VIPER) += viper.o
ifeq ($(CONFIG_MACH_ZYLONITE),y) ifeq ($(CONFIG_MACH_ZYLONITE),y)
......
/*
* GPIOs and interrupts for Palm Treo smartphones
*
* currently supported:
* Palm Treo 680 (GSM)
*
* Author: Tomas Cech <sleep_walker@suse.cz>
*
* 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.
*
* find more info at www.hackndev.com
*
*/
#ifndef _INCLUDE_TREO_H_
#define _INCLUDE_TREO_H_
/* GPIOs */
#define GPIO_NR_TREO_POWER_DETECT 0
#define GPIO_NR_TREO_AMP_EN 27
#define GPIO_NR_TREO_GREEN_LED 20
#define GPIO_NR_TREO_RED_LED 79
#define GPIO_NR_TREO_SD_DETECT_N 113
#define GPIO_NR_TREO_EP_DETECT_N 116
#define GPIO_NR_TREO_USB_DETECT 1
#define GPIO_NR_TREO_USB_PULLUP 114
#define GPIO_NR_TREO_GSM_POWER 40
#define GPIO_NR_TREO_GSM_RESET 87
#define GPIO_NR_TREO_GSM_WAKE 57
#define GPIO_NR_TREO_GSM_HOST_WAKE 14
#define GPIO_NR_TREO_GSM_TRIGGER 10
#define GPIO_NR_TREO_IR_EN 115
#define GPIO_NR_TREO_IR_TXD 47
#define GPIO_NR_TREO_BL_POWER 38
#define GPIO_NR_TREO_LCD_POWER 25
/* Treo680 specific GPIOs */
#ifdef CONFIG_MACH_TREO680
#define GPIO_NR_TREO680_SD_READONLY 33
#define GPIO_NR_TREO680_SD_POWER 42
#define GPIO_NR_TREO680_VIBRATE_EN 44
#define GPIO_NR_TREO680_KEYB_BL 24
#define GPIO_NR_TREO680_BT_EN 43
#endif /* CONFIG_MACH_TREO680 */
/* Various addresses */
#define TREO_PHYS_RAM_START 0xa0000000
#define TREO_PHYS_IO_START 0x40000000
#define TREO_STR_BASE 0xa2000000
/* BACKLIGHT */
#define TREO_MAX_INTENSITY 254
#define TREO_DEFAULT_INTENSITY 160
#define TREO_LIMIT_MASK 0x7F
#define TREO_PRESCALER 63
#define TREO_PERIOD_NS 3500
#endif
/*
* GPIOs and interrupts for Palm Treo 680 smartphone
*
* 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.
*
*/
#ifndef _INCLUDE_TREO680_H_
#define _INCLUDE_TREO680_H_
/* GPIOs */
#define GPIO_NR_TREO680_POWER_DETECT 0
#define GPIO_NR_TREO680_AMP_EN 27
#define GPIO_NR_TREO680_KEYB_BL 24
#define GPIO_NR_TREO680_VIBRATE_EN 44
#define GPIO_NR_TREO680_GREEN_LED 20
#define GPIO_NR_TREO680_RED_LED 79
#define GPIO_NR_TREO680_SD_DETECT_N 113
#define GPIO_NR_TREO680_SD_READONLY 33
#define GPIO_NR_TREO680_EP_DETECT_N 116
#define GPIO_NR_TREO680_SD_POWER 42
#define GPIO_NR_TREO680_USB_DETECT 1
#define GPIO_NR_TREO680_USB_PULLUP 114
#define GPIO_NR_TREO680_GSM_POWER 40
#define GPIO_NR_TREO680_GSM_RESET 87
#define GPIO_NR_TREO680_GSM_WAKE 57
#define GPIO_NR_TREO680_GSM_HOST_WAKE 14
#define GPIO_NR_TREO680_GSM_TRIGGER 10
#define GPIO_NR_TREO680_BT_EN 43
#define GPIO_NR_TREO680_IR_EN 115
#define GPIO_NR_TREO680_IR_TXD 47
#define GPIO_NR_TREO680_BL_POWER 38
#define GPIO_NR_TREO680_LCD_POWER 25
/* Various addresses */
#define TREO680_PHYS_RAM_START 0xa0000000
#define TREO680_PHYS_IO_START 0x40000000
#define TREO680_STR_BASE 0xa2000000
/* BACKLIGHT */
#define TREO680_MAX_INTENSITY 254
#define TREO680_DEFAULT_INTENSITY 160
#define TREO680_LIMIT_MASK 0x7F
#define TREO680_PRESCALER 63
#define TREO680_PERIOD_NS 3500
#endif
/* /*
* Hardware definitions for Palm Treo 680 * Hardware definitions for Palm Treo smartphones
*
* currently supported:
* Palm Treo 680 (GSM)
* *
* Author: Tomas Cech <sleep_walker@suse.cz> * Author: Tomas Cech <sleep_walker@suse.cz>
* *
...@@ -31,7 +34,7 @@ ...@@ -31,7 +34,7 @@
#include <mach/pxa27x.h> #include <mach/pxa27x.h>
#include <mach/pxa27x-udc.h> #include <mach/pxa27x-udc.h>
#include <mach/audio.h> #include <mach/audio.h>
#include <mach/treo680.h> #include <mach/palmtreo.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/irda.h> #include <mach/irda.h>
...@@ -50,7 +53,7 @@ ...@@ -50,7 +53,7 @@
/****************************************************************************** /******************************************************************************
* Pin configuration * Pin configuration
******************************************************************************/ ******************************************************************************/
static unsigned long treo680_pin_config[] __initdata = { static unsigned long treo_pin_config[] __initdata = {
/* MMC */ /* MMC */
GPIO32_MMC_CLK, GPIO32_MMC_CLK,
GPIO92_MMC_DAT_0, GPIO92_MMC_DAT_0,
...@@ -58,7 +61,6 @@ static unsigned long treo680_pin_config[] __initdata = { ...@@ -58,7 +61,6 @@ static unsigned long treo680_pin_config[] __initdata = {
GPIO110_MMC_DAT_2, GPIO110_MMC_DAT_2,
GPIO111_MMC_DAT_3, GPIO111_MMC_DAT_3,
GPIO112_MMC_CMD, GPIO112_MMC_CMD,
GPIO33_GPIO, /* SD read only */
GPIO113_GPIO, /* SD detect */ GPIO113_GPIO, /* SD detect */
/* AC97 */ /* AC97 */
...@@ -80,12 +82,10 @@ static unsigned long treo680_pin_config[] __initdata = { ...@@ -80,12 +82,10 @@ static unsigned long treo680_pin_config[] __initdata = {
GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, /* usb detect */ GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, /* usb detect */
/* MATRIX KEYPAD */ /* MATRIX KEYPAD */
GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
GPIO101_KP_MKIN_1, GPIO101_KP_MKIN_1,
GPIO102_KP_MKIN_2, GPIO102_KP_MKIN_2,
GPIO97_KP_MKIN_3, GPIO97_KP_MKIN_3,
GPIO98_KP_MKIN_4, GPIO98_KP_MKIN_4,
GPIO99_KP_MKIN_5,
GPIO91_KP_MKIN_6, GPIO91_KP_MKIN_6,
GPIO13_KP_MKIN_7, GPIO13_KP_MKIN_7,
GPIO103_KP_MKOUT_0 | MFP_LPM_DRIVE_HIGH, GPIO103_KP_MKOUT_0 | MFP_LPM_DRIVE_HIGH,
...@@ -150,19 +150,32 @@ static unsigned long treo680_pin_config[] __initdata = { ...@@ -150,19 +150,32 @@ static unsigned long treo680_pin_config[] __initdata = {
GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH, /* bluetooth host wake up */ GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH, /* bluetooth host wake up */
}; };
#ifdef CONFIG_MACH_TREO680
static unsigned long treo680_pin_config[] __initdata = {
GPIO33_GPIO, /* SD read only */
/* MATRIX KEYPAD - different wake up source */
GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
GPIO99_KP_MKIN_5,
};
#endif /* CONFIG_MACH_TREO680 */
/****************************************************************************** /******************************************************************************
* SD/MMC card controller * SD/MMC card controller
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_MACH_TREO680
static struct pxamci_platform_data treo680_mci_platform_data = { static struct pxamci_platform_data treo680_mci_platform_data = {
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
.gpio_card_detect = GPIO_NR_TREO680_SD_DETECT_N, .gpio_card_detect = GPIO_NR_TREO_SD_DETECT_N,
.gpio_card_ro = GPIO_NR_TREO680_SD_READONLY, .gpio_card_ro = GPIO_NR_TREO680_SD_READONLY,
.gpio_power = GPIO_NR_TREO680_SD_POWER, .gpio_power = GPIO_NR_TREO680_SD_POWER,
}; };
#endif /* CONFIG_MACH_TREO680 */
/****************************************************************************** /******************************************************************************
* GPIO keyboard * GPIO keyboard
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_MACH_TREO680
static unsigned int treo680_matrix_keys[] = { static unsigned int treo680_matrix_keys[] = {
KEY(0, 0, KEY_F8), /* Red/Off/Power */ KEY(0, 0, KEY_F8), /* Red/Off/Power */
KEY(0, 1, KEY_LEFT), KEY(0, 1, KEY_LEFT),
...@@ -232,92 +245,95 @@ static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = { ...@@ -232,92 +245,95 @@ static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = {
.debounce_interval = 30, .debounce_interval = 30,
}; };
#endif /* CONFIG_MACH_TREO680 */
/****************************************************************************** /******************************************************************************
* aSoC audio * aSoC audio
******************************************************************************/ ******************************************************************************/
static pxa2xx_audio_ops_t treo680_ac97_pdata = { static pxa2xx_audio_ops_t treo_ac97_pdata = {
.reset_gpio = 95, .reset_gpio = 95,
}; };
/****************************************************************************** /******************************************************************************
* Backlight * Backlight
******************************************************************************/ ******************************************************************************/
static int treo680_backlight_init(struct device *dev) static int treo_backlight_init(struct device *dev)
{ {
int ret; int ret;
ret = gpio_request(GPIO_NR_TREO680_BL_POWER, "BL POWER"); ret = gpio_request(GPIO_NR_TREO_BL_POWER, "BL POWER");
if (ret) if (ret)
goto err; goto err;
ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0); ret = gpio_direction_output(GPIO_NR_TREO_BL_POWER, 0);
if (ret) if (ret)
goto err2; goto err2;
return 0; return 0;
err2: err2:
gpio_free(GPIO_NR_TREO680_BL_POWER); gpio_free(GPIO_NR_TREO_BL_POWER);
err: err:
return ret; return ret;
} }
static int treo680_backlight_notify(int brightness) static int treo_backlight_notify(int brightness)
{ {
gpio_set_value(GPIO_NR_TREO680_BL_POWER, brightness); gpio_set_value(GPIO_NR_TREO_BL_POWER, brightness);
return TREO680_MAX_INTENSITY - brightness; return TREO_MAX_INTENSITY - brightness;
}; };
static void treo680_backlight_exit(struct device *dev) static void treo_backlight_exit(struct device *dev)
{ {
gpio_free(GPIO_NR_TREO680_BL_POWER); gpio_free(GPIO_NR_TREO_BL_POWER);
} }
static struct platform_pwm_backlight_data treo680_backlight_data = { static struct platform_pwm_backlight_data treo_backlight_data = {
.pwm_id = 0, .pwm_id = 0,
.max_brightness = TREO680_MAX_INTENSITY, .max_brightness = TREO_MAX_INTENSITY,
.dft_brightness = TREO680_DEFAULT_INTENSITY, .dft_brightness = TREO_DEFAULT_INTENSITY,
.pwm_period_ns = TREO680_PERIOD_NS, .pwm_period_ns = TREO_PERIOD_NS,
.init = treo680_backlight_init, .init = treo_backlight_init,
.notify = treo680_backlight_notify, .notify = treo_backlight_notify,
.exit = treo680_backlight_exit, .exit = treo_backlight_exit,
}; };
static struct platform_device treo680_backlight = { static struct platform_device treo_backlight = {
.name = "pwm-backlight", .name = "pwm-backlight",
.dev = { .dev = {
.parent = &pxa27x_device_pwm0.dev, .parent = &pxa27x_device_pwm0.dev,
.platform_data = &treo680_backlight_data, .platform_data = &treo_backlight_data,
}, },
}; };
/****************************************************************************** /******************************************************************************
* IrDA * IrDA
******************************************************************************/ ******************************************************************************/
static struct pxaficp_platform_data treo680_ficp_info = { static struct pxaficp_platform_data treo_ficp_info = {
.gpio_pwdown = GPIO_NR_TREO680_IR_EN, .gpio_pwdown = GPIO_NR_TREO_IR_EN,
.transceiver_cap = IR_SIRMODE | IR_OFF, .transceiver_cap = IR_SIRMODE | IR_OFF,
}; };
/****************************************************************************** /******************************************************************************
* UDC * UDC
******************************************************************************/ ******************************************************************************/
static struct pxa2xx_udc_mach_info treo680_udc_info __initdata = { static struct pxa2xx_udc_mach_info treo_udc_info __initdata = {
.gpio_vbus = GPIO_NR_TREO680_USB_DETECT, .gpio_vbus = GPIO_NR_TREO_USB_DETECT,
.gpio_vbus_inverted = 1, .gpio_vbus_inverted = 1,
.gpio_pullup = GPIO_NR_TREO680_USB_PULLUP, .gpio_pullup = GPIO_NR_TREO_USB_PULLUP,
}; };
/****************************************************************************** /******************************************************************************
* USB host * USB host
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_MACH_TREO680
static struct pxaohci_platform_data treo680_ohci_info = { static struct pxaohci_platform_data treo680_ohci_info = {
.port_mode = PMM_PERPORT_MODE, .port_mode = PMM_PERPORT_MODE,
.flags = ENABLE_PORT1 | ENABLE_PORT3, .flags = ENABLE_PORT1 | ENABLE_PORT3,
.power_budget = 0, .power_budget = 0,
}; };
#endif /* CONFIG_MACH_TREO680 */
/****************************************************************************** /******************************************************************************
* Power supply * Power supply
...@@ -326,41 +342,41 @@ static int power_supply_init(struct device *dev) ...@@ -326,41 +342,41 @@ static int power_supply_init(struct device *dev)
{ {
int ret; int ret;
ret = gpio_request(GPIO_NR_TREO680_POWER_DETECT, "CABLE_STATE_AC"); ret = gpio_request(GPIO_NR_TREO_POWER_DETECT, "CABLE_STATE_AC");
if (ret) if (ret)
goto err1; goto err1;
ret = gpio_direction_input(GPIO_NR_TREO680_POWER_DETECT); ret = gpio_direction_input(GPIO_NR_TREO_POWER_DETECT);
if (ret) if (ret)
goto err2; goto err2;
return 0; return 0;
err2: err2:
gpio_free(GPIO_NR_TREO680_POWER_DETECT); gpio_free(GPIO_NR_TREO_POWER_DETECT);
err1: err1:
return ret; return ret;
} }
static int treo680_is_ac_online(void) static int treo_is_ac_online(void)
{ {
return gpio_get_value(GPIO_NR_TREO680_POWER_DETECT); return gpio_get_value(GPIO_NR_TREO_POWER_DETECT);
} }
static void power_supply_exit(struct device *dev) static void power_supply_exit(struct device *dev)
{ {
gpio_free(GPIO_NR_TREO680_POWER_DETECT); gpio_free(GPIO_NR_TREO_POWER_DETECT);
} }
static char *treo680_supplicants[] = { static char *treo_supplicants[] = {
"main-battery", "main-battery",
}; };
static struct pda_power_pdata power_supply_info = { static struct pda_power_pdata power_supply_info = {
.init = power_supply_init, .init = power_supply_init,
.is_ac_online = treo680_is_ac_online, .is_ac_online = treo_is_ac_online,
.exit = power_supply_exit, .exit = power_supply_exit,
.supplied_to = treo680_supplicants, .supplied_to = treo_supplicants,
.num_supplicants = ARRAY_SIZE(treo680_supplicants), .num_supplicants = ARRAY_SIZE(treo_supplicants),
}; };
static struct platform_device power_supply = { static struct platform_device power_supply = {
...@@ -374,7 +390,8 @@ static struct platform_device power_supply = { ...@@ -374,7 +390,8 @@ static struct platform_device power_supply = {
/****************************************************************************** /******************************************************************************
* Vibra and LEDs * Vibra and LEDs
******************************************************************************/ ******************************************************************************/
static struct gpio_led gpio_leds[] = { #ifdef CONFIG_MACH_TREO680
static struct gpio_led treo680_gpio_leds[] = {
{ {
.name = "treo680:vibra:vibra", .name = "treo680:vibra:vibra",
.default_trigger = "none", .default_trigger = "none",
...@@ -383,34 +400,34 @@ static struct gpio_led gpio_leds[] = { ...@@ -383,34 +400,34 @@ static struct gpio_led gpio_leds[] = {
{ {
.name = "treo680:green:led", .name = "treo680:green:led",
.default_trigger = "mmc0", .default_trigger = "mmc0",
.gpio = GPIO_NR_TREO680_GREEN_LED, .gpio = GPIO_NR_TREO_GREEN_LED,
}, },
{ {
.name = "treo680:keybbl:keybbl", .name = "treo680:white:keybbl",
.default_trigger = "none", .default_trigger = "none",
.gpio = GPIO_NR_TREO680_KEYB_BL, .gpio = GPIO_NR_TREO680_KEYB_BL,
}, },
}; };
static struct gpio_led_platform_data gpio_led_info = { static struct gpio_led_platform_data treo680_gpio_led_info = {
.leds = gpio_leds, .leds = treo680_gpio_leds,
.num_leds = ARRAY_SIZE(gpio_leds), .num_leds = ARRAY_SIZE(treo680_gpio_leds),
}; };
static struct platform_device treo680_leds = { static struct platform_device treo680_leds = {
.name = "leds-gpio", .name = "leds-gpio",
.id = -1, .id = -1,
.dev = { .dev = {
.platform_data = &gpio_led_info, .platform_data = &treo680_gpio_led_info,
} }
}; };
#endif /* CONFIG_MACH_TREO680 */
/****************************************************************************** /******************************************************************************
* Framebuffer * Framebuffer
******************************************************************************/ ******************************************************************************/
/* TODO: add support for 324x324 */ /* TODO: add support for 324x324 */
static struct pxafb_mode_info treo680_lcd_modes[] = { static struct pxafb_mode_info treo_lcd_modes[] = {
{ {
.pixclock = 86538, .pixclock = 86538,
.xres = 320, .xres = 320,
...@@ -427,21 +444,21 @@ static struct pxafb_mode_info treo680_lcd_modes[] = { ...@@ -427,21 +444,21 @@ static struct pxafb_mode_info treo680_lcd_modes[] = {
}, },
}; };
static void treo680_lcd_power(int on, struct fb_var_screeninfo *info) static void treo_lcd_power(int on, struct fb_var_screeninfo *info)
{ {
gpio_set_value(GPIO_NR_TREO680_BL_POWER, on); gpio_set_value(GPIO_NR_TREO_BL_POWER, on);
} }
static struct pxafb_mach_info treo680_lcd_screen = { static struct pxafb_mach_info treo_lcd_screen = {
.modes = treo680_lcd_modes, .modes = treo_lcd_modes,
.num_modes = ARRAY_SIZE(treo680_lcd_modes), .num_modes = ARRAY_SIZE(treo_lcd_modes),
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL, .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
}; };
/****************************************************************************** /******************************************************************************
* Power management - standby * Power management - standby
******************************************************************************/ ******************************************************************************/
static void __init treo680_pm_init(void) static void __init treo_pm_init(void)
{ {
static u32 resume[] = { static u32 resume[] = {
0xe3a00101, /* mov r0, #0x40000000 */ 0xe3a00101, /* mov r0, #0x40000000 */
...@@ -450,70 +467,85 @@ static void __init treo680_pm_init(void) ...@@ -450,70 +467,85 @@ static void __init treo680_pm_init(void)
}; };
/* this is where the bootloader jumps */ /* this is where the bootloader jumps */
memcpy(phys_to_virt(TREO680_STR_BASE), resume, sizeof(resume)); memcpy(phys_to_virt(TREO_STR_BASE), resume, sizeof(resume));
} }
/****************************************************************************** /******************************************************************************
* Machine init * Machine init
******************************************************************************/ ******************************************************************************/
static struct platform_device *devices[] __initdata = { static struct platform_device *treo_devices[] __initdata = {
&treo680_backlight, &treo_backlight,
&treo680_leds,
&power_supply, &power_supply,
}; };
#ifdef CONFIG_MACH_TREO680
static struct platform_device *treo680_devices[] __initdata = {
&treo680_leds,
};
#endif /* CONFIG_MACH_TREO680 */
/* setup udc GPIOs initial state */ /* setup udc GPIOs initial state */
static void __init treo680_udc_init(void) static void __init treo_udc_init(void)
{ {
if (!gpio_request(GPIO_NR_TREO680_USB_PULLUP, "UDC Vbus")) { if (!gpio_request(GPIO_NR_TREO_USB_PULLUP, "UDC Vbus")) {
gpio_direction_output(GPIO_NR_TREO680_USB_PULLUP, 1); gpio_direction_output(GPIO_NR_TREO_USB_PULLUP, 1);
gpio_free(GPIO_NR_TREO680_USB_PULLUP); gpio_free(GPIO_NR_TREO_USB_PULLUP);
} }
} }
static void __init treo680_lcd_power_init(void) static void __init treo_lcd_power_init(void)
{ {
int ret; int ret;
ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER"); ret = gpio_request(GPIO_NR_TREO_LCD_POWER, "LCD POWER");
if (ret) { if (ret) {
pr_err("Treo680: LCD power GPIO request failed!\n"); pr_err("Treo680: LCD power GPIO request failed!\n");
return; return;
} }
ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0); ret = gpio_direction_output(GPIO_NR_TREO_LCD_POWER, 0);
if (ret) { if (ret) {
pr_err("Treo680: setting LCD power GPIO direction failed!\n"); pr_err("Treo680: setting LCD power GPIO direction failed!\n");
gpio_free(GPIO_NR_TREO680_LCD_POWER); gpio_free(GPIO_NR_TREO_LCD_POWER);
return; return;
} }
treo680_lcd_screen.pxafb_lcd_power = treo680_lcd_power; treo_lcd_screen.pxafb_lcd_power = treo_lcd_power;
} }
static void __init treo_init(void)
{
treo_pm_init();
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo_pin_config));
treo_lcd_power_init();
set_pxa_fb_info(&treo_lcd_screen);
treo_udc_init();
pxa_set_udc_info(&treo_udc_info);
pxa_set_ac97_info(&treo_ac97_pdata);
pxa_set_ficp_info(&treo_ficp_info);
platform_add_devices(ARRAY_AND_SIZE(treo_devices));
}
#ifdef CONFIG_MACH_TREO680
static void __init treo680_init(void) static void __init treo680_init(void)
{ {
treo680_pm_init(); treo_init();
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
pxa_set_keypad_info(&treo680_keypad_platform_data);
treo680_lcd_power_init();
set_pxa_fb_info(&treo680_lcd_screen);
pxa_set_mci_info(&treo680_mci_platform_data); pxa_set_mci_info(&treo680_mci_platform_data);
treo680_udc_init(); pxa_set_keypad_info(&treo680_keypad_platform_data);
pxa_set_udc_info(&treo680_udc_info);
pxa_set_ac97_info(&treo680_ac97_pdata);
pxa_set_ficp_info(&treo680_ficp_info);
pxa_set_ohci_info(&treo680_ohci_info); pxa_set_ohci_info(&treo680_ohci_info);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(treo680_devices));
} }
MACHINE_START(TREO680, "Palm Treo 680") MACHINE_START(TREO680, "Palm Treo 680")
.phys_io = TREO680_PHYS_IO_START, .phys_io = TREO_PHYS_IO_START,
.io_pg_offst = io_p2v(0x40000000), .io_pg_offst = io_p2v(0x40000000),
.boot_params = 0xa0000100, .boot_params = 0xa0000100,
.map_io = pxa_map_io, .map_io = pxa_map_io,
.init_irq = pxa27x_init_irq, .init_irq = pxa27x_init_irq,
.timer = &pxa_timer, .timer = &pxa_timer,
.init_machine = treo680_init, .init_machine = treo680_init,
MACHINE_END MACHINE_END
#endif /* CONFIG_MACH_TREO680 */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment