Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751590AbbLUMJ5 (ORCPT ); Mon, 21 Dec 2015 07:09:57 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:48927 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751299AbbLUMJm (ORCPT ); Mon, 21 Dec 2015 07:09:42 -0500 X-AuditID: cbfee691-f79766d0000012b6-71-5677ec046e51 From: Vikas Bansal To: oneukum@suse.de, netdev@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Cc: sumit.batra@samsung.com, Vikas Bansal Subject: [PATCH] Adding Reset resume support for CDC-EEM driver. Date: Mon, 21 Dec 2015 17:38:51 +0530 Message-id: <1450699731-4666-1-git-send-email-vikas.bansal@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrELMWRmVeSWpSXmKPExsWyRsSkRpflTXmYwZyjihaXd81hs1i0rJXZ 4tgCMYvFF2ezWrTt+cFi8ez5TDYHNo++LasYPTafrvb4vEkugDmKyyYlNSezLLVI3y6BK+Pz tdWsBa94K14/m8bewLiMu4uRk0NCwETi5s02JghbTOLCvfVsILaQwApGiUWnOGFqLh+Yx9LF yAUUn8Uo8eBNDzuE851RYsfqDrAONgFdiTXHv4FNEhFIk9i+bTULiM0s4CJx5vpysLiwgIPE urP9jCA2i4CqxP+rV8FqeAXcJf5cXQF1hZzEyWOTWUEWSAi8ZpM4P+sDO0SDgMS3yYeAGjiA ErISmw4wQ9RLShxccYNlAqPgAkaGVYyiqQXJBcVJ6UWmesWJucWleel6yfm5mxiBQXn637OJ OxjvH7A+xCjAwajEw+vxqixMiDWxrLgy9xCjKdCGicxSosn5wNDPK4k3NDYzsjA1MTU2Mrc0 UxLn1ZH+GSwkkJ5YkpqdmlqQWhRfVJqTWnyIkYmDU6qBMdmo89a8shvPxT9LfGWbtOZy7NWM uxc3l56tPPtf6NqktQXyt84Xbsn6VMMSIa1TpNI/h0Xm6ZX/W1b3saVb9sm+7BOVzFByeXHG 9mFDaqL+EReJ2lfn95Qu2taSyndizrwJMTbnrNL8njlOc/vlI5ax9OSmjtfVtnEcKR/zkq5u W6mf9iJeUImlOCPRUIu5qDgRAIvzY39FAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpgkeLIzCtJLcpLzFFi42I5/e+xoC7Lm/Iwg4VnxS0u75rDZrFoWSuz xbEFYhaLL85mtWjb84PF4tnzmWwObB59W1Yxemw+Xe3xeZNcAHNUA6NNRmpiSmqRQmpecn5K Zl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtBaJYWyxJxSoFBAYnGxkr4dpgmh IW66FjCNEbq+IUFwPUYGaCBhDWPG52urWQte8Va8fjaNvYFxGXcXIyeHhICJxOUD81ggbDGJ C/fWs3UxcnEICcxilHjwpocdwvnOKLFjdQcbSBWbgK7EmuPfmEBsEYE0ie3bVoN1Mwu4SJy5 vhwsLizgILHubD8jiM0ioCrx/+pVsBpeAXeJP1dXMEFsk5M4eWwy6wRG7gWMDKsYJVILkguK k9JzjfJSy/WKE3OLS/PS9ZLzczcxgkP/mfQOxsO73A8xCnAwKvHwerwqCxNiTSwrrsw9xCjB wawkwtt4vjxMiDclsbIqtSg/vqg0J7X4EKMp0AETmaVEk/OBcZlXEm9obGJuamxqaWJhYmap JM6771JkmJBAemJJanZqakFqEUwfEwenVANjc/D8VffmlXsfOZQ/zUBi04E17yqTK9+FZr0J TrR4fnChpMP/pSeLZP4/nJes4aHUVThfTuvG2m82HCzPVzvdjX75YNGBr1WKWyabn+jQ9VNe mWsaZyvdO+X165pdu4t2cyh5O+/l9pzy3sv2yuejJrM2PZ2cLSO3UdfaWn3TpHkTjuxpuXa+ WomlOCPRUIu5qDgRADjYukiTAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1969 Lines: 51 Pre-Condition At the time of reset resume of a USB device, both self and bus powered devices might go to a low power state or power off state depending on the acceptable suspend time power of the system. In case the device experiences a power glitch or completely powers off during suspend-resume, the device will lose its internal state and hence it'll again need a set interface from class driver on reset resume operation. Issue So far our experiments were based on a USB gadget working on cdc_eem protocol. We have seen that device is unable to continue the packet transfer on bulk endpoints after the reset resume operation. Solution We have added a .reset_resume function for cdc_eem protocol which sends a set interface command on the Control endpoint. And calls the existing usbnet_resume thereafter Signed-off-by: Vikas Bansal Signed-off-by: Sumit Batra diff --git a/drivers/net/usb/cdc_eem.c b/drivers/net/usb/cdc_eem.c index f7180f8..1f6f7ea 100644 --- a/drivers/net/usb/cdc_eem.c +++ b/drivers/net/usb/cdc_eem.c @@ -342,6 +342,19 @@ next: return 1; } +static int cdc_eem_resume(struct usb_interface *intf) +{ + int ret = 0; + struct usbnet *dev = usb_get_intfdata(intf); + + ret = usbnet_get_endpoints(dev, intf); + if(ret < 0) + goto err; + ret = usbnet_resume(intf); +err: + return ret; +} + static const struct driver_info eem_info = { .description = "CDC EEM Device", .flags = FLAG_ETHER | FLAG_POINTTOPOINT, @@ -371,6 +384,7 @@ static struct usb_driver eem_driver = { .disconnect = usbnet_disconnect, .suspend = usbnet_suspend, .resume = usbnet_resume, + .reset_resume = cdc_eem_resume, .disable_hub_initiated_lpm = 1, }; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/