Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936793AbdLRQw7 (ORCPT ); Mon, 18 Dec 2017 11:52:59 -0500 Received: from mail-lf0-f45.google.com ([209.85.215.45]:36114 "EHLO mail-lf0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935950AbdLRQww (ORCPT ); Mon, 18 Dec 2017 11:52:52 -0500 X-Google-Smtp-Source: ACJfBovu7v6PnL2oPI67LoHEifd0b4s7ZmS8bYhb3Qov4oNKnofMIuv3G+V4PYHeS2rffB2CMm72xA== Date: Mon, 18 Dec 2017 17:52:48 +0100 From: Johan Hovold To: SZ Lin Cc: Taiyi Wu , Johan Hovold , Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, =?iso-8859-1?Q?Bj=F8rn?= Mork Subject: Re: [PATCH] USB: serial: option: adding support for YUGA CLM920-NC5 Message-ID: <20171218165248.GF3374@localhost> References: <20171215103203.2579-1-sz.lin@moxa.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171215103203.2579-1-sz.lin@moxa.com> User-Agent: Mutt/1.7.2 (2016-11-26) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 10943 Lines: 294 [ +CC: Bj?rn ] On Fri, Dec 15, 2017 at 06:32:03PM +0800, SZ Lin wrote: > This patch adds support for YUGA CLM920-NC5 PID 0x9625 USB modem to option > driver. Could you specify what each interface is used for here? > Signed-off-by: Taiyi Wu > Signed-off-by: SZ Lin Is SZ your legal name? > --- > > Please refer to following lsusb output: > > Bus 001 Device 003: ID 05c6:9625 Qualcomm, Inc. > Device Descriptor: > bLength 18 > bDescriptorType 1 > bcdUSB 2.00 > bDeviceClass 0 (Defined at Interface level) > bDeviceSubClass 0 > bDeviceProtocol 0 > bMaxPacketSize0 64 > idVendor 0x05c6 Qualcomm, Inc. > idProduct 0x9625 > bcdDevice 3.18 > iManufacturer 1 Shanghai Yuge > iProduct 2 YUGA Incorporated > iSerial 3 0123456789ABCDEF > bNumConfigurations 1 > Configuration Descriptor: > bLength 9 > bDescriptorType 2 > wTotalLength 183 > bNumInterfaces 5 > bConfigurationValue 1 > iConfiguration 0 > bmAttributes 0xa0 > (Bus Powered) > Remote Wakeup > MaxPower 500mA > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 0 > bAlternateSetting 0 > bNumEndpoints 2 > bInterfaceClass 255 Vendor Specific Class > bInterfaceSubClass 255 Vendor Specific Subclass > bInterfaceProtocol 255 Vendor Specific Protocol > iInterface 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x81 EP 1 IN > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x01 EP 1 OUT > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 1 > bAlternateSetting 0 > bNumEndpoints 2 > bInterfaceClass 255 Vendor Specific Class > bInterfaceSubClass 66 > bInterfaceProtocol 1 > iInterface 6 ADB Interface > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x02 EP 2 OUT > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x82 EP 2 IN > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 2 > bAlternateSetting 0 > bNumEndpoints 3 > bInterfaceClass 255 Vendor Specific Class > bInterfaceSubClass 0 > bInterfaceProtocol 0 > iInterface 0 > ** UNRECOGNIZED: 05 24 00 10 01 > ** UNRECOGNIZED: 05 24 01 00 00 > ** UNRECOGNIZED: 04 24 02 02 > ** UNRECOGNIZED: 05 24 06 00 00 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x84 EP 4 IN > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x000a 1x 10 bytes > bInterval 9 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x83 EP 3 IN > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x03 EP 3 OUT > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 3 > bAlternateSetting 0 > bNumEndpoints 3 > bInterfaceClass 255 Vendor Specific Class > bInterfaceSubClass 0 > bInterfaceProtocol 0 > iInterface 0 > ** UNRECOGNIZED: 05 24 00 10 01 > ** UNRECOGNIZED: 05 24 01 00 00 > ** UNRECOGNIZED: 04 24 02 02 > ** UNRECOGNIZED: 05 24 06 00 00 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x86 EP 6 IN > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x000a 1x 10 bytes > bInterval 9 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x85 EP 5 IN > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x04 EP 4 OUT > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 4 > bAlternateSetting 0 > bNumEndpoints 3 > bInterfaceClass 255 Vendor Specific Class > bInterfaceSubClass 255 Vendor Specific Subclass > bInterfaceProtocol 255 Vendor Specific Protocol > iInterface 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x88 EP 8 IN > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x0008 1x 8 bytes > bInterval 9 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x87 EP 7 IN > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x05 EP 5 OUT > bmAttributes 2 > Transfer Type Bulk > Synch Type None > Usage Type Data > wMaxPacketSize 0x0200 1x 512 bytes > bInterval 0 > Device Qualifier (for other device speed): > bLength 10 > bDescriptorType 6 > bcdUSB 2.00 > bDeviceClass 0 (Defined at Interface level) > bDeviceSubClass 0 > bDeviceProtocol 0 > bMaxPacketSize0 64 > bNumConfigurations 1 > Device Status: 0x0000 > (Bus Powered) > > --- > drivers/usb/serial/option.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c > index 3b3513874cfd..370a0342072f 100644 > --- a/drivers/usb/serial/option.c > +++ b/drivers/usb/serial/option.c > @@ -233,6 +233,8 @@ static void option_instat_callback(struct urb *urb); > /* These Quectel products use Qualcomm's vendor ID */ > #define QUECTEL_PRODUCT_UC20 0x9003 > #define QUECTEL_PRODUCT_UC15 0x9090 > +/* These Yuga products use Qualcomm's vendor ID */ > +#define YUGA_PROFUCT_CLM920_NC5 0x9625 s/PROFUCT/PRODUCT/ > > #define QUECTEL_VENDOR_ID 0x2c7c > /* These Quectel products use Quectel's vendor ID */ > @@ -674,6 +676,10 @@ static const struct option_blacklist_info cinterion_rmnet2_blacklist = { > .reserved = BIT(4) | BIT(5), > }; > > +static const struct option_blacklist_info yuga_clm920_nc5_blacklist = { > + .reserved = BIT(0) | BIT(1) | BIT(4), > +}; Do you really need to blacklist the first interface? If so it looks like you could use USB_DEVICE_AND_INTERFACE_INFO() to avoid the blacklist altogether. > + > static const struct usb_device_id option_ids[] = { > { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, > { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, > @@ -1178,6 +1184,9 @@ static const struct usb_device_id option_ids[] = { > { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)}, > { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20), > .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, > + /* Yuga products use Qualcomm vendor ID */ > + { USB_DEVICE(QUALCOMM_VENDOR_ID, YUGA_PROFUCT_CLM920_NC5), > + .driver_info = (kernel_ulong_t)&yuga_clm920_nc5_blacklist }, > /* Quectel products using Quectel vendor ID */ > { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21), > .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, Thanks, Johan