rk3188: usb_detect: support bvalid irq wake up system
author黄涛 <huangtao@rock-chips.com>
Mon, 21 Jan 2013 06:08:50 +0000 (14:08 +0800)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jan 2013 06:11:55 +0000 (14:11 +0800)
arch/arm/plat-rk/Kconfig
arch/arm/plat-rk/usb_detect.c

index fd7ac3b5e421428ff5b8bf0738963dcd6763657b..3624aa91109f7a4c0cb45eefe9c7f0dda22499a9 100755 (executable)
@@ -198,4 +198,9 @@ config RK_CONFIG
 config RK_TIMER
        bool
 
+config RK_USB_DETECT_BY_OTG_BVALID
+       bool "Wakeup system by OTG BVALID interrupt when USB OTG conneted"
+       depends on USB_GADGET && (ARCH_RK2928 || ARCH_RK3188)
+       default y if ARCH_RK2928
+
 endif
index 85bdded7bc74d0c2a528407ba885d04dacd2d60e..a3e2e7fabcbfc2645a6d52f07a9e7853787be6c4 100755 (executable)
@@ -76,7 +76,7 @@ int __init board_usb_detect_init(unsigned gpio)
        return 0;
 }
 
-#if defined(CONFIG_ARCH_RK2928)
+#ifdef CONFIG_RK_USB_DETECT_BY_OTG_BVALID
 #include <linux/io.h>
 #include <mach/iomux.h>
 
@@ -85,10 +85,12 @@ static irqreturn_t bvalid_irq_handler(int irq, void *dev_id)
        /* clear irq */
 #ifdef CONFIG_ARCH_RK2928
        writel_relaxed((1 << 31) | (1 << 15), RK2928_GRF_BASE + GRF_UOC0_CON5);
+#ifdef CONFIG_RK_USB_UART
+       /* usb otg dp/dm switch to usb phy */
+       writel_relaxed((3 << (12 + 16)),RK2928_GRF_BASE + GRF_UOC1_CON4);
 #endif
-#ifdef CONFIG_RK_USB_UART 
-    /* usb otg dp/dm switch to usb phy */
-    writel_relaxed((3 << (12 + 16)),RK2928_GRF_BASE + GRF_UOC1_CON4);
+#elif defined(CONFIG_ARCH_RK3188)
+       writel_relaxed((1 << 31) | (1 << 15), RK30_GRF_BASE + GRF_UOC0_CON3);
 #endif
 
        wake_lock_timeout(&usb_wakelock, WAKE_LOCK_TIMEOUT);
@@ -121,6 +123,8 @@ static int __init bvalid_init(void)
        /* clear & enable bvalid irq */
 #ifdef CONFIG_ARCH_RK2928
        writel_relaxed((3 << 30) | (3 << 14), RK2928_GRF_BASE + GRF_UOC0_CON5);
+#elif defined(CONFIG_ARCH_RK3188)
+       writel_relaxed((3 << 30) | (3 << 14), RK30_GRF_BASE + GRF_UOC0_CON3);
 #endif
 
        enable_irq_wake(irq);