Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751566AbbLUNFe (ORCPT ); Mon, 21 Dec 2015 08:05:34 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:40162 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751069AbbLUNFb (ORCPT ); Mon, 21 Dec 2015 08:05:31 -0500 X-AuditID: cbfee68f-f793a6d000001364-83-5677f919fbe5 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 18:34:37 +0530 Message-id: <1450703077-5467-1-git-send-email-vikas.bansal@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrELMWRmVeSWpSXmKPExsWyRsSkWlfyZ3mYwa81hhaXd81hs1i0rJXZ 4tgCMYvFF2ezWrTt+cFi8ez5TDYHNo++LasYPTafrvb4vEkugDmKyyYlNSezLLVI3y6BK2Pj 2uksBX94K14/m8bewLiMu4uRg0NCwETi2l/9LkZOIFNM4sK99WxdjFwcQgIrGCVuPtvFBJEw kbj05xE7RGIpo8TuvacZIZzvjBI/NzxiBaliE9CVWHP8G1iHiECaxPZtq1lAbGYBF4kz15eD xYUFHCTWne1nBLFZBFQl7ky/DtbLK+Au8Wv/EUaIbXISJ49NZgVZICHwmk2i9dpBFogGAYlv kw+xQJwtK7HpADNEvaTEwRU3WCYwCi5gZFjFKJpakFxQnJReZKxXnJhbXJqXrpecn7uJERiU p/8969/BePeA9SFGAQ5GJR5eS/XyMCHWxLLiytxDjKZAGyYyS4km5wNDP68k3tDYzMjC1MTU 2Mjc0kxJnHeh1M9gIYH0xJLU7NTUgtSi+KLSnNTiQ4xMHJxSDYwHjEyUH6e/9037XKNuLCzx 3459fUxvhI7CK4lVG5aF3W68+67JnS9LK0nA/p7EZPkAIeHOBmcT/Rm12X8PzY6+8zhq3i6+ M54/wz/Vrv9jLFs1SVXh1xmRTxMnRj6ICJjUaJ+9OEHIZU+T/tKTE2ozsg3uSN3cLm6VtftK iNyBhWdOFTD4qimxFGckGmoxFxUnAgCyog9vRQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpgkeLIzCtJLcpLzFFi42I5/e+xgK7kz/Iwg133tSwu75rDZrFoWSuz xbEFYhaLL85mtWjb84PF4tnzmWwObB59W1Yxemw+Xe3xeZNcAHNUA6NNRmpiSmqRQmpecn5K Zl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtBaJYWyxJxSoFBAYnGxkr4dpgmh IW66FjCNEbq+IUFwPUYGaCBhDWPGxrXTWQr+8Fa8fjaNvYFxGXcXIyeHhICJxKU/j9ghbDGJ C/fWs3UxcnEICSxllNi99zQjhPOdUeLnhkesIFVsAroSa45/YwKxRQTSJLZvW80CYjMLuEic ub4cLC4s4CCx7mw/I4jNIqAqcWf6dbBeXgF3iV/7jzBCbJOTOHlsMusERu4FjAyrGCVSC5IL ipPSc43yUsv1ihNzi0vz0vWS83M3MYJD/5n0DsbDu9wPMQpwMCrx8Hq8KgsTYk0sK67MPcQo wcGsJMKb9Kk8TIg3JbGyKrUoP76oNCe1+BCjKdABE5mlRJPzgXGZVxJvaGxibmpsamliYWJm qSTOu+9SZJiQQHpiSWp2ampBahFMHxMHp1QDY75+rnye1udcdsYPvzk473SbBnjdbXb9t3jm jMKAg21/79badDxfcPa/y3r23M/TjV+mLe/a//KqctUdrZiT4u5TTi+9s2fitq+T+Leor7qY l9DiFySxu1z2Usy1lItXG/iWdPy/fHhb9ek4XlvnxpgDh1yMC/W+G5hcyfqSqGE362finCd2 nEosxRmJhlrMRcWJAAm7fBWTAgAA 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: 1978 Lines: 60 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/