From df174c9663b843caadb8383198d41292f0e1e763 Mon Sep 17 00:00:00 2001 From: Pavankumar Kondeti Date: Tue, 7 Dec 2010 17:54:04 +0530 Subject: [PATCH] --- yaml --- r: 226975 b: refs/heads/master c: c036019ed2b729cb9517806c2b388b4f4323a904 h: refs/heads/master i: 226973: e7a6b93fcd25bdec26ca3e11c9bee5b6e9a1c8ff 226971: cb4712490900e335dc6d1e73bbdec6af2f1ee718 226967: d09fdac18f8ed356013203347a11ced593698172 226959: 16de3f8d31ae02de47c756699a17698b932e37f0 226943: 1485e352de431985409e54ef9558fadfec5dcc72 v: v3 --- [refs] | 2 +- trunk/drivers/usb/gadget/ci13xxx_udc.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index abf72c271826..a65e9bf0b726 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 33f82f387b9cb27bc903e1368fce88b73213910a +refs/heads/master: c036019ed2b729cb9517806c2b388b4f4323a904 diff --git a/trunk/drivers/usb/gadget/ci13xxx_udc.c b/trunk/drivers/usb/gadget/ci13xxx_udc.c index c10d1aee5230..f200e472e476 100644 --- a/trunk/drivers/usb/gadget/ci13xxx_udc.c +++ b/trunk/drivers/usb/gadget/ci13xxx_udc.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #include #include @@ -2348,6 +2349,7 @@ static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active) if (gadget_ready) { if (is_active) { + pm_runtime_get_sync(&_gadget->dev); hw_device_reset(udc); hw_device_state(udc->ci13xxx_ep[0].qh[RX].dma); } else { @@ -2356,6 +2358,7 @@ static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active) udc->udc_driver->notify_event(udc, CI13XXX_CONTROLLER_STOPPED_EVENT); _gadget_stop_activity(&udc->gadget); + pm_runtime_put_sync(&_gadget->dev); } } @@ -2473,16 +2476,20 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, goto done; } + pm_runtime_get_sync(&udc->gadget.dev); if (udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS) { if (udc->vbus_active) { if (udc->udc_driver->flags & CI13XXX_REGS_SHARED) hw_device_reset(udc); } else { + pm_runtime_put_sync(&udc->gadget.dev); goto done; } } retval = hw_device_state(udc->ci13xxx_ep[0].qh[RX].dma); + if (retval) + pm_runtime_put_sync(&udc->gadget.dev); done: spin_unlock_irqrestore(udc->lock, flags); @@ -2522,6 +2529,7 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) udc->udc_driver->notify_event(udc, CI13XXX_CONTROLLER_STOPPED_EVENT); _gadget_stop_activity(&udc->gadget); + pm_runtime_put(&udc->gadget.dev); } /* unbind gadget */ @@ -2723,6 +2731,8 @@ static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev, if (retval) goto remove_dbg; } + pm_runtime_no_callbacks(&udc->gadget.dev); + pm_runtime_enable(&udc->gadget.dev); _udc = udc; return retval;