From patchwork Tue Dec 13 04:33:03 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Bj=C3=B8rn_Mork?= X-Patchwork-Id: 130983 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 273681007D3 for ; Tue, 13 Dec 2011 15:33:31 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754783Ab1LMEd1 (ORCPT ); Mon, 12 Dec 2011 23:33:27 -0500 Received: from canardo.mork.no ([148.122.252.1]:57651 "EHLO canardo.mork.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754562Ab1LMEdU (ORCPT ); Mon, 12 Dec 2011 23:33:20 -0500 Received: from nemi.mork.no (nemi.mork.no [IPv6:2001:4620:9:2:216:eaff:feb3:788]) (authenticated bits=0) by canardo.mork.no (8.14.3/8.14.3) with ESMTP id pBD4XJ87004107 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT); Tue, 13 Dec 2011 05:33:19 +0100 Received: from bjorn by nemi.mork.no with local (Exim 4.77) (envelope-from ) id 1RaK3L-0008UX-A3; Tue, 13 Dec 2011 05:33:19 +0100 From: Bjorn Mork To: netdev@vger.kernel.org, linux-usb@vger.kernel.org Cc: =?UTF-8?q?Bj=C3=B8rn=20Mork?= Subject: [PATCH 2/3] cdc_ether: allow vendor specific data interface if control interface is vendor specific Date: Tue, 13 Dec 2011 05:33:03 +0100 Message-Id: <1323750784-32608-3-git-send-email-bjorn@mork.no> X-Mailer: git-send-email 1.7.7.3 In-Reply-To: <1323750784-32608-1-git-send-email-bjorn@mork.no> References: <1323750784-32608-1-git-send-email-bjorn@mork.no> MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 0.97.3 at canardo X-Virus-Status: Clean Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Bjørn Mork Some vendors, like Huawei, use the vendor specific class code all over the place even for devices which otherwise conform pretty well to the CDC ECM specification. This allows such devices to be supported merely by adding them to the device specific whitelist. Signed-off-by: Bjørn Mork --- drivers/net/usb/cdc_ether.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 99ed6eb..84840dd 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -211,8 +211,12 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf) /* a data interface altsetting does the real i/o */ d = &info->data->cur_altsetting->desc; - if (d->bInterfaceClass != USB_CLASS_CDC_DATA) { - dev_dbg(&intf->dev, "slave class %u\n", + if ((d->bInterfaceClass != USB_CLASS_CDC_DATA) && + /* Allow vendor specific data interface iff + control interface is vendor specific */ + !(info->control->cur_altsetting->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC && + d->bInterfaceClass == USB_CLASS_VENDOR_SPEC)) { + dev_dbg(&intf->dev, "xslave class %u\n", d->bInterfaceClass); goto bad_desc; }