]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-pxa/mioa701.c
Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa...
[linux-2.6-omap-h63xx.git] / arch / arm / mach-pxa / mioa701.c
index 2b427e015b6fac9be73fc6d6b19c4279d8486914..97c93a7a285c12b70a7249c25cd9f47ee1b2f493 100644 (file)
 #include <linux/power_supply.h>
 #include <linux/wm97xx_batt.h>
 #include <linux/mtd/physmap.h>
+#include <linux/usb/gpio_vbus.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
-#include <mach/mfp-pxa27x.h>
+
+#include <mach/pxa27x.h>
+#include <mach/regs-rtc.h>
 #include <mach/pxa27x_keypad.h>
 #include <mach/pxafb.h>
-#include <mach/pxa2xx-regs.h>
 #include <mach/mmc.h>
 #include <mach/udc.h>
 #include <mach/pxa27x-udc.h>
@@ -411,21 +413,6 @@ static void gsm_exit(void)
 /*
  * USB UDC
  */
-static void udc_power_command(int cmd)
-{
-       switch (cmd) {
-       case PXA2XX_UDC_CMD_DISCONNECT:
-               gpio_set_value(GPIO22_USB_ENABLE, 0);
-               break;
-       case PXA2XX_UDC_CMD_CONNECT:
-               gpio_set_value(GPIO22_USB_ENABLE, 1);
-               break;
-       default:
-               printk(KERN_INFO "udc_control: unknown command (0x%x)!\n", cmd);
-               break;
-       }
-}
-
 static int is_usb_connected(void)
 {
        return !gpio_get_value(GPIO13_nUSB_DETECT);
@@ -433,24 +420,15 @@ static int is_usb_connected(void)
 
 static struct pxa2xx_udc_mach_info mioa701_udc_info = {
        .udc_is_connected = is_usb_connected,
-       .udc_command      = udc_power_command,
+       .gpio_pullup      = GPIO22_USB_ENABLE,
 };
 
-struct gpio_ress udc_gpios[] = {
-       MIO_GPIO_OUT(GPIO22_USB_ENABLE, 0, "USB Vbus enable")
+struct gpio_vbus_mach_info gpio_vbus_data = {
+       .gpio_vbus = GPIO13_nUSB_DETECT,
+       .gpio_vbus_inverted = 1,
+       .gpio_pullup = -1,
 };
 
-static int __init udc_init(void)
-{
-       pxa_set_udc_info(&mioa701_udc_info);
-       return mio_gpio_request(ARRAY_AND_SIZE(udc_gpios));
-}
-
-static void udc_exit(void)
-{
-       mio_gpio_free(ARRAY_AND_SIZE(udc_gpios));
-}
-
 /*
  * SDIO/MMC Card controller
  */
@@ -789,6 +767,7 @@ MIO_SIMPLE_DEV(pxa2xx_ac97,   "pxa2xx-ac97",    NULL)
 MIO_PARENT_DEV(mio_wm9713_codec,  "wm9713-codec",   &pxa2xx_ac97.dev, NULL)
 MIO_SIMPLE_DEV(mioa701_sound,    "mioa701-wm9713", NULL)
 MIO_SIMPLE_DEV(mioa701_board,    "mioa701-board",  NULL)
+MIO_SIMPLE_DEV(gpio_vbus,        "gpio-vbus",      &gpio_vbus_data);
 
 static struct platform_device *devices[] __initdata = {
        &mioa701_gpio_keys,
@@ -800,7 +779,8 @@ static struct platform_device *devices[] __initdata = {
        &mioa701_sound,
        &power_dev,
        &strataflash,
-       &mioa701_board
+       &gpio_vbus,
+       &mioa701_board,
 };
 
 static void mioa701_machine_exit(void);
@@ -808,13 +788,13 @@ static void mioa701_machine_exit(void);
 static void mioa701_poweroff(void)
 {
        mioa701_machine_exit();
-       arm_machine_restart('s');
+       arm_machine_restart('s', NULL);
 }
 
-static void mioa701_restart(char c)
+static void mioa701_restart(char c, const char *cmd)
 {
        mioa701_machine_exit();
-       arm_machine_restart('s');
+       arm_machine_restart('s', cmd);
 }
 
 struct gpio_ress global_gpios[] = {
@@ -837,7 +817,7 @@ static void __init mioa701_machine_init(void)
        pxa_set_mci_info(&mioa701_mci_info);
        pxa_set_keypad_info(&mioa701_keypad_info);
        wm97xx_bat_set_pdata(&mioa701_battery_data);
-       udc_init();
+       pxa_set_udc_info(&mioa701_udc_info);
        pm_power_off = mioa701_poweroff;
        arm_pm_restart = mioa701_restart;
        platform_add_devices(devices, ARRAY_SIZE(devices));
@@ -850,7 +830,6 @@ static void __init mioa701_machine_init(void)
 
 static void mioa701_machine_exit(void)
 {
-       udc_exit();
        bootstrap_exit();
        gsm_exit();
 }