From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from wolverine02.qualcomm.com ([199.106.114.251]:36298 "EHLO wolverine02.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753161Ab0LGMYz (ORCPT ); Tue, 7 Dec 2010 07:24:55 -0500 From: Pavankumar Kondeti Subject: [PATCH V3 10/11] USB: gadget: Implement runtime PM for ci13xxx gadget Date: Tue, 7 Dec 2010 17:54:04 +0530 Message-Id: <1291724645-26074-11-git-send-email-pkondeti@codeaurora.org> In-Reply-To: <1291724645-26074-1-git-send-email-pkondeti@codeaurora.org> References: <1291724645-26074-1-git-send-email-pkondeti@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org List-ID: To: linux-usb@vger.kernel.org, greg@kroah.com Cc: linux-arm-msm@vger.kernel.org, swetland@google.com, arve@google.com, benoitgoby@google.com, lockwood@android.com, dima@android.com, Pavankumar Kondeti The actual suspend/resume work is delegated to bus glue driver, which is responsible for putting hardware in low power mode. Signed-off-by: Pavankumar Kondeti --- drivers/usb/gadget/ci13xxx_udc.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c index c10d1ae..f200e47 100644 --- a/drivers/usb/gadget/ci13xxx_udc.c +++ b/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; -- 1.7.1 -- Sent by a consultant of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.