Index: openezx/drivers/char/ezx-bp.c
===================================================================
--- openezx.orig/drivers/char/ezx-bp.c	2008-11-15 22:31:49.000000000 +0800
+++ openezx/drivers/char/ezx-bp.c	2008-11-15 22:31:54.000000000 +0800
@@ -135,12 +135,17 @@
 static int __init ezxbp_probe(struct platform_device *pdev)
 {
 	bp = pdev->dev.platform_data;
+	step = bp->first_step;
 
 	set_irq_type(gpio_to_irq(bp->bp_wdi), IRQ_TYPE_EDGE_FALLING);
 	request_irq(gpio_to_irq(bp->bp_wdi), bp_wdi_handler, IRQF_DISABLED,
 		    "bp wdi", bp);
 
-	set_irq_type(gpio_to_irq(bp->bp_rdy), IRQ_TYPE_EDGE_BOTH);
+	if (bp->bp_wdi2 >= 0) {
+		set_irq_type(gpio_to_irq(bp->bp_rdy), IRQ_TYPE_EDGE_BOTH);
+	} else {
+		set_irq_type(gpio_to_irq(bp->bp_rdy), IRQ_TYPE_EDGE_RISING);
+	}
 	request_irq(gpio_to_irq(bp->bp_rdy), bp_rdy_handler, IRQF_DISABLED,
 			"bp rdy", bp);
 
@@ -150,8 +155,6 @@
 				IRQF_DISABLED, "bp wdi2", bp);
 	}
 
-	step = bp->first_step;
-
 	if (bp->bp_reset >= 0)
 		gpio_direction_output(bp->bp_reset, 1);
 
Index: openezx/drivers/char/ts0710_mux.c
===================================================================
--- openezx.orig/drivers/char/ts0710_mux.c	2008-11-15 22:31:49.000000000 +0800
+++ openezx/drivers/char/ts0710_mux.c	2008-11-15 22:31:54.000000000 +0800
@@ -3160,12 +3160,12 @@
 
  	while (1) {
  		tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf);
- 		TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
+ 		//TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
  		tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free);
  		if (tbuf_read == 0) {
  			break;
  		} else {
- 			TS0710_PRINTK("Read %i bytes.\n", tbuf_read);
+ 			//TS0710_PRINTK("Read %i bytes.\n", tbuf_read);
  		};
  		tbuf_ptr += tbuf_read;
  	};
Index: openezx/drivers/usb/core/hub.c
===================================================================
--- openezx.orig/drivers/usb/core/hub.c	2008-11-15 22:31:49.000000000 +0800
+++ openezx/drivers/usb/core/hub.c	2008-11-15 22:31:54.000000000 +0800
@@ -123,7 +123,7 @@
  * otherwise the new scheme is used.  If that fails and "use_both_schemes"
  * is set, then the driver will make another attempt, using the other scheme.
  */
-static int old_scheme_first = 0;
+static int old_scheme_first = 1;
 module_param(old_scheme_first, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(old_scheme_first,
 		 "start with the old device initialization scheme");
Index: openezx/drivers/char/ts0710_mux_usb.c
===================================================================
--- openezx.orig/drivers/char/ts0710_mux_usb.c	2008-11-15 22:31:49.000000000 +0800
+++ openezx/drivers/char/ts0710_mux_usb.c	2008-11-15 22:32:57.000000000 +0800
@@ -48,6 +48,9 @@
 #include <linux/tty_flip.h>
 #include <linux/circ_buf.h>
 #include <linux/usb.h>
+#include <mach/mfp-pxa27x.h>
+#include <linux/gpio.h>
+
 
 #include "ts0710_mux_usb.h"
 
@@ -68,6 +71,8 @@
 #define ICL_EVENT_INTERVAL	(HZ)
 #undef BVD_DEBUG
 
+#define WAKE_UP_BP_UDELAY	125
+
 #define IS_EP_BULK(ep)  ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0)
 #define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
 #define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)
@@ -408,10 +413,33 @@
 			static int ret;
 			int time = 0;
 
+			if(!gpio_get_value(0))
+			{
+				printk("try to wake up bp\n");
+				if(gpio_get_value(96))
+				{
+					gpio_direction_output(96, 0);
+					udelay(WAKE_UP_BP_UDELAY);
+					gpio_direction_output(96, 1);
+				}else {
+					gpio_direction_output(96, 1);
+					udelay(WAKE_UP_BP_UDELAY);
+					gpio_direction_output(96, 0);
+				}
+				time = jiffies;
+				while(!gpio_get_value(0) && (jiffies < (time+HZ)))					;
+
+				if(!gpio_get_value(0))
+				{
+					printk("%s: Wakeup BP timeout! BP is still in sleep state!\n", __FUNCTION__);		
+					return;
+				}				
+			}
 
 			/* Resume BP */
 			__raw_writel(0x8, UHCRHPS3);
 			mdelay(40);
+
 			bvd_dbg("ipcusb_xmit_data: Send RESUME signal! UHCRHPS3=0x%x",
 				 __raw_readl(UHCRHPS3));
 			/*send IN token*/

