[ARM] pxa/palm: Flip Palm LD,TX,T5,Z72 to Palm27x
[pandora-kernel.git] / arch / arm / mach-pxa / palmt5.c
index 0b36d7d..731ee7b 100644 (file)
@@ -41,6 +41,7 @@
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
+#include <mach/palm27x.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -102,20 +103,10 @@ static unsigned long palmt5_pin_config[] __initdata = {
        GPIO107_GPIO,   /* earphone detect */
 };
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-static struct pxamci_platform_data palmt5_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_PALMT5_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_PALMT5_SD_READONLY,
-       .gpio_power             = GPIO_NR_PALMT5_SD_POWER,
-       .detect_delay_ms        = 200,
-};
-
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int palmt5_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
@@ -141,9 +132,18 @@ static struct pxa27x_keypad_platform_data palmt5_keypad_platform_data = {
        .debounce_interval      = 30,
 };
 
+static void __init palmt5_kpc_init(void)
+{
+       pxa_set_keypad_info(&palmt5_keypad_platform_data);
+}
+#else
+static inline void palmt5_kpc_init(void) {}
+#endif
+
 /******************************************************************************
  * GPIO keys
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 static struct gpio_keys_button palmt5_pxa_buttons[] = {
        {KEY_F8, GPIO_NR_PALMT5_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
 };
@@ -161,260 +161,38 @@ static struct platform_device palmt5_pxa_keys = {
        },
 };
 
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int palmt5_backlight_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMT5_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_PALMT5_BL_POWER, 0);
-       if (ret)
-               goto err2;
-       ret = gpio_request(GPIO_NR_PALMT5_LCD_POWER, "LCD POWER");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_output(GPIO_NR_PALMT5_LCD_POWER, 0);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMT5_LCD_POWER);
-err2:
-       gpio_free(GPIO_NR_PALMT5_BL_POWER);
-err:
-       return ret;
-}
-
-static int palmt5_backlight_notify(struct device *dev, int brightness)
-{
-       gpio_set_value(GPIO_NR_PALMT5_BL_POWER, brightness);
-       gpio_set_value(GPIO_NR_PALMT5_LCD_POWER, brightness);
-       return brightness;
-}
-
-static void palmt5_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMT5_BL_POWER);
-       gpio_free(GPIO_NR_PALMT5_LCD_POWER);
-}
-
-static struct platform_pwm_backlight_data palmt5_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = PALMT5_MAX_INTENSITY,
-       .dft_brightness = PALMT5_MAX_INTENSITY,
-       .pwm_period_ns  = PALMT5_PERIOD_NS,
-       .init           = palmt5_backlight_init,
-       .notify         = palmt5_backlight_notify,
-       .exit           = palmt5_backlight_exit,
-};
-
-static struct platform_device palmt5_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &palmt5_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data palmt5_ficp_platform_data = {
-       .gpio_pwdown            = GPIO_NR_PALMT5_IR_DISABLE,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
-
-/******************************************************************************
- * UDC
- ******************************************************************************/
-static struct gpio_vbus_mach_info palmt5_udc_info = {
-       .gpio_vbus              = GPIO_NR_PALMT5_USB_DETECT_N,
-       .gpio_vbus_inverted     = 1,
-       .gpio_pullup            = GPIO_NR_PALMT5_USB_PULLUP,
-};
-
-static struct platform_device palmt5_gpio_vbus = {
-       .name   = "gpio-vbus",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &palmt5_udc_info,
-       },
-};
-
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMT5_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_PALMT5_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       return 0;
-err2:
-       gpio_free(GPIO_NR_PALMT5_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int palmt5_is_ac_online(void)
-{
-       return gpio_get_value(GPIO_NR_PALMT5_POWER_DETECT);
-}
-
-static void power_supply_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMT5_POWER_DETECT);
-}
-
-static char *palmt5_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = palmt5_is_ac_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = palmt5_supplicants,
-       .num_supplicants = ARRAY_SIZE(palmt5_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
-
-/******************************************************************************
- * WM97xx audio, battery
- ******************************************************************************/
-static struct wm97xx_batt_pdata palmt5_batt_pdata = {
-       .batt_aux       = WM97XX_AUX_ID3,
-       .temp_aux       = WM97XX_AUX_ID2,
-       .charge_gpio    = -1,
-       .max_voltage    = PALMT5_BAT_MAX_VOLTAGE,
-       .min_voltage    = PALMT5_BAT_MIN_VOLTAGE,
-       .batt_mult      = 1000,
-       .batt_div       = 414,
-       .temp_mult      = 1,
-       .temp_div       = 1,
-       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
-       .batt_name      = "main-batt",
-};
-
-static struct wm97xx_pdata palmt5_wm97xx_pdata = {
-       .batt_pdata     = &palmt5_batt_pdata,
-};
-
-static pxa2xx_audio_ops_t palmt5_ac97_pdata = {
-       .reset_gpio     = 95,
-       .codec_pdata    = { &palmt5_wm97xx_pdata, },
-};
-
-static struct palm27x_asoc_info palmt5_asoc_pdata = {
-       .jack_gpio      = GPIO_NR_PALMT5_EARPHONE_DETECT,
-};
-
-static struct platform_device palmt5_asoc = {
-       .name = "palm27x-asoc",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &palmt5_asoc_pdata,
-       },
-};
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-static struct pxafb_mode_info palmt5_lcd_modes[] = {
-{
-       .pixclock       = 57692,
-       .xres           = 320,
-       .yres           = 480,
-       .bpp            = 16,
-
-       .left_margin    = 32,
-       .right_margin   = 1,
-       .upper_margin   = 7,
-       .lower_margin   = 1,
-
-       .hsync_len      = 4,
-       .vsync_len      = 1,
-},
-};
-
-static struct pxafb_mach_info palmt5_lcd_screen = {
-       .modes          = palmt5_lcd_modes,
-       .num_modes      = ARRAY_SIZE(palmt5_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
-
-/******************************************************************************
- * Power management - standby
- ******************************************************************************/
-static void __init palmt5_pm_init(void)
+static void __init palmt5_keys_init(void)
 {
-       static u32 resume[] = {
-               0xe3a00101,     /* mov  r0,     #0x40000000 */
-               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
-               0xe590f008,     /* ldr  pc, [r0, #0x08] */
-       };
-
-       /* copy the bootloader */
-       memcpy(phys_to_virt(PALMT5_STR_BASE), resume, sizeof(resume));
+       platform_device_register(&palmt5_pxa_keys);
 }
+#else
+static inline void palmt5_keys_init(void) {}
+#endif
 
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *devices[] __initdata = {
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-       &palmt5_pxa_keys,
-#endif
-       &palmt5_backlight,
-       &power_supply,
-       &palmt5_asoc,
-       &palmt5_gpio_vbus,
-};
-
-/* setup udc GPIOs initial state */
-static void __init palmt5_udc_init(void)
-{
-       if (!gpio_request(GPIO_NR_PALMT5_USB_PULLUP, "UDC Vbus")) {
-               gpio_direction_output(GPIO_NR_PALMT5_USB_PULLUP, 1);
-               gpio_free(GPIO_NR_PALMT5_USB_PULLUP);
-       }
-}
-
 static void __init palmt5_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
-
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palmt5_pm_init();
-       set_pxa_fb_info(&palmt5_lcd_screen);
-       pxa_set_mci_info(&palmt5_mci_platform_data);
-       palmt5_udc_init();
-       pxa_set_ac97_info(&palmt5_ac97_pdata);
-       pxa_set_ficp_info(&palmt5_ficp_platform_data);
-       pxa_set_keypad_info(&palmt5_keypad_platform_data);
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
+       palm27x_mmc_init(GPIO_NR_PALMT5_SD_DETECT_N, GPIO_NR_PALMT5_SD_READONLY,
+                       GPIO_NR_PALMT5_SD_POWER, 0);
+       palm27x_pm_init(PALMT5_STR_BASE);
+       palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
+       palm27x_udc_init(GPIO_NR_PALMT5_USB_DETECT_N,
+                       GPIO_NR_PALMT5_USB_PULLUP, 1);
+       palm27x_irda_init(GPIO_NR_PALMT5_IR_DISABLE);
+       palm27x_ac97_init(PALMT5_BAT_MIN_VOLTAGE, PALMT5_BAT_MAX_VOLTAGE,
+                       GPIO_NR_PALMT5_EARPHONE_DETECT, 95);
+       palm27x_pwm_init(GPIO_NR_PALMT5_BL_POWER, GPIO_NR_PALMT5_LCD_POWER);
+       palm27x_power_init(GPIO_NR_PALMT5_POWER_DETECT, -1);
+       palm27x_pmic_init();
+       palmt5_kpc_init();
+       palmt5_keys_init();
 }
 
 MACHINE_START(PALMT5, "Palm Tungsten|T5")