diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index 9380df3..77a9bc3 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -1572,7 +1572,9 @@ static void udc_disable(struct pxa27x_udc *dev)
 
 	ep0_idle(dev);
 	dev->gadget.speed = USB_SPEED_UNKNOWN;
-	if (dev->mach->udc_command)
+	if (dev->mach->gpio_pullup)
+		udc_gpio_set(dev->mach->gpio_pullup, 0);
+	else if (dev->mach->udc_command)
 		dev->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
 }
 
@@ -1630,7 +1632,9 @@ static void udc_enable(struct pxa27x_udc *dev)
 
 	/* enable ep0 irqs */
 	UDCICR0 = UDCICR_INT(0,UDCICR_INT_MASK);
-	if (dev->mach->udc_command)
+	if (dev->mach->gpio_pullup)
+		udc_gpio_set(dev->mach->gpio_pullup, 1);
+	else if (dev->mach->udc_command)
 		dev->mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
 }
 

