Merge remote branch 'alsa/devel' into topic/misc
[pandora-kernel.git] / arch / arm / mach-pxa / palmtx.c
index ecc1a40..144dc2b 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/power_supply.h>
 #include <linux/usb/gpio_vbus.h>
 #include <linux/mtd/nand.h>
@@ -46,6 +46,7 @@
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
+#include <mach/palm27x.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -129,6 +130,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
 /******************************************************************************
  * NOR Flash
  ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
 static struct mtd_partition palmtx_partitions[] = {
        {
                .name           = "Flash",
@@ -162,20 +164,18 @@ static struct platform_device palmtx_flash = {
        },
 };
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-static struct pxamci_platform_data palmtx_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_PALMTX_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_PALMTX_SD_READONLY,
-       .gpio_power             = GPIO_NR_PALMTX_SD_POWER,
-       .detect_delay_ms        = 200,
-};
+static void __init palmtx_nor_init(void)
+{
+       platform_device_register(&palmtx_flash);
+}
+#else
+static inline void palmtx_nor_init(void) {}
+#endif
 
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int palmtx_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
@@ -201,9 +201,18 @@ static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
        .debounce_interval      = 30,
 };
 
+static void __init palmtx_kpc_init(void)
+{
+       pxa_set_keypad_info(&palmtx_keypad_platform_data);
+}
+#else
+static inline void palmtx_kpc_init(void) {}
+#endif
+
 /******************************************************************************
  * GPIO keys
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 static struct gpio_keys_button palmtx_pxa_buttons[] = {
        {KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
 };
@@ -221,208 +230,18 @@ static struct platform_device palmtx_pxa_keys = {
        },
 };
 
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int palmtx_backlight_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_PALMTX_BL_POWER, 0);
-       if (ret)
-               goto err2;
-       ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_output(GPIO_NR_PALMTX_LCD_POWER, 0);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMTX_LCD_POWER);
-err2:
-       gpio_free(GPIO_NR_PALMTX_BL_POWER);
-err:
-       return ret;
-}
-
-static int palmtx_backlight_notify(struct device *dev, int brightness)
-{
-       gpio_set_value(GPIO_NR_PALMTX_BL_POWER, brightness);
-       gpio_set_value(GPIO_NR_PALMTX_LCD_POWER, brightness);
-       return brightness;
-}
-
-static void palmtx_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMTX_BL_POWER);
-       gpio_free(GPIO_NR_PALMTX_LCD_POWER);
-}
-
-static struct platform_pwm_backlight_data palmtx_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = PALMTX_MAX_INTENSITY,
-       .dft_brightness = PALMTX_MAX_INTENSITY,
-       .pwm_period_ns  = PALMTX_PERIOD_NS,
-       .init           = palmtx_backlight_init,
-       .notify         = palmtx_backlight_notify,
-       .exit           = palmtx_backlight_exit,
-};
-
-static struct platform_device palmtx_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &palmtx_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data palmtx_ficp_platform_data = {
-       .gpio_pwdown            = GPIO_NR_PALMTX_IR_DISABLE,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
-
-/******************************************************************************
- * UDC
- ******************************************************************************/
-static struct gpio_vbus_mach_info palmtx_udc_info = {
-       .gpio_vbus              = GPIO_NR_PALMTX_USB_DETECT_N,
-       .gpio_vbus_inverted     = 1,
-       .gpio_pullup            = GPIO_NR_PALMTX_USB_PULLUP,
-};
-
-static struct platform_device palmtx_gpio_vbus = {
-       .name   = "gpio-vbus",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &palmtx_udc_info,
-       },
-};
-
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_PALMTX_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       return 0;
-
-err2:
-       gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int palmtx_is_ac_online(void)
-{
-       return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT);
-}
-
-static void power_supply_exit(struct device *dev)
+static void __init palmtx_keys_init(void)
 {
-       gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
+       platform_device_register(&palmtx_pxa_keys);
 }
-
-static char *palmtx_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = palmtx_is_ac_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = palmtx_supplicants,
-       .num_supplicants = ARRAY_SIZE(palmtx_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
-
-/******************************************************************************
- * WM97xx battery
- ******************************************************************************/
-static struct wm97xx_batt_info wm97xx_batt_pdata = {
-       .batt_aux       = WM97XX_AUX_ID3,
-       .temp_aux       = WM97XX_AUX_ID2,
-       .charge_gpio    = -1,
-       .max_voltage    = PALMTX_BAT_MAX_VOLTAGE,
-       .min_voltage    = PALMTX_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",
-};
-
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
-static struct palm27x_asoc_info palmtx_asoc_pdata = {
-       .jack_gpio      = GPIO_NR_PALMTX_EARPHONE_DETECT,
-};
-
-static pxa2xx_audio_ops_t palmtx_ac97_pdata = {
-       .reset_gpio     = 95,
-};
-
-static struct platform_device palmtx_asoc = {
-       .name = "palm27x-asoc",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &palmtx_asoc_pdata,
-       },
-};
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-static struct pxafb_mode_info palmtx_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 palmtx_lcd_screen = {
-       .modes          = palmtx_lcd_modes,
-       .num_modes      = ARRAY_SIZE(palmtx_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
+#else
+static inline void palmtx_keys_init(void) {}
+#endif
 
 /******************************************************************************
  * NAND Flash
  ******************************************************************************/
+#if defined(CONFIG_MTD_NAND_GPIO) || defined(CONFIG_MTD_NAND_GPIO_MODULE)
 static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
                                 unsigned int ctrl)
 {
@@ -482,36 +301,17 @@ static struct platform_device palmtx_nand = {
        }
 };
 
-/******************************************************************************
- * Power management - standby
- ******************************************************************************/
-static void __init palmtx_pm_init(void)
+static void __init palmtx_nand_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(PALMTX_STR_BASE), resume, sizeof(resume));
+       platform_device_register(&palmtx_nand);
 }
+#else
+static inline void palmtx_nand_init(void) {}
+#endif
 
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *devices[] __initdata = {
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-       &palmtx_pxa_keys,
-#endif
-       &palmtx_backlight,
-       &power_supply,
-       &palmtx_asoc,
-       &palmtx_gpio_vbus,
-       &palmtx_flash,
-       &palmtx_nand,
-};
-
 static struct map_desc palmtx_io_desc[] __initdata = {
 {
        .virtual        = PALMTX_PCMCIA_VIRT,
@@ -537,34 +337,29 @@ static void __init palmtx_map_io(void)
        iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
 }
 
-/* setup udc GPIOs initial state */
-static void __init palmtx_udc_init(void)
-{
-       if (!gpio_request(GPIO_NR_PALMTX_USB_PULLUP, "UDC Vbus")) {
-               gpio_direction_output(GPIO_NR_PALMTX_USB_PULLUP, 1);
-               gpio_free(GPIO_NR_PALMTX_USB_PULLUP);
-       }
-}
-
-
 static void __init palmtx_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
-
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palmtx_pm_init();
-       set_pxa_fb_info(&palmtx_lcd_screen);
-       pxa_set_mci_info(&palmtx_mci_platform_data);
-       palmtx_udc_init();
-       pxa_set_ac97_info(&palmtx_ac97_pdata);
-       pxa_set_ficp_info(&palmtx_ficp_platform_data);
-       pxa_set_keypad_info(&palmtx_keypad_platform_data);
-       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
+       palm27x_mmc_init(GPIO_NR_PALMTX_SD_DETECT_N, GPIO_NR_PALMTX_SD_READONLY,
+                       GPIO_NR_PALMTX_SD_POWER, 0);
+       palm27x_pm_init(PALMTX_STR_BASE);
+       palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
+       palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
+                       GPIO_NR_PALMTX_USB_PULLUP, 1);
+       palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
+       palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
+                       GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
+       palm27x_pwm_init(GPIO_NR_PALMTX_BL_POWER, GPIO_NR_PALMTX_LCD_POWER);
+       palm27x_power_init(GPIO_NR_PALMTX_POWER_DETECT, -1);
+       palm27x_pmic_init();
+       palmtx_kpc_init();
+       palmtx_keys_init();
+       palmtx_nor_init();
+       palmtx_nand_init();
 }
 
 MACHINE_START(PALMTX, "Palm T|X")