Re: [PATCH] USB: option: add support for SIM7100E

Johan Hovold
2016-01-25T11:10:44Z

On Wed, Jan 20, 2016 at 03:05:56PM +0300, Andrey Skvortsov wrote:
> $ lsusb:
> Bus 001 Device 101: ID 1e0e:9001 Qualcomm / Option
>
> $ usb-devices:
> T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=101 Spd=480 MxCh= 0
> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 2
> P: Vendor=1e0e ProdID=9001 Rev= 2.32
> S: Manufacturer=SimTech, Incorporated
> S: Product=SimTech, Incorporated
> S: SerialNumber=0123456789ABCDEF
> C:* #Ifs= 7 Cfg#= 1 Atr=80 MxPwr=500mA
> I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
> I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
> I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
> I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
> I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
> I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
> I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
>
> The last interface (6) is used for Android Composite ADB interface.
>
> Serial port layout:
> 0: QCDM/DIAG
> 1: NMEA
> 2: AT
> 3: AT/PPP
> 4: audio
>
> Signed-off-by: Andrey Skvortsov <andrej.skvortzov@gmail.com>

This one no longer applies to my tree due to some recent changes to the
option driver. Would you mind respinning it?

git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git

> ---
> 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 f228060..2366f8a 100644
> --- a/drivers/usb/serial/option.c
> +++ b/drivers/usb/serial/option.c
> @@ -510,6 +510,9 @@ static void option_instat_callback(struct urb *urb);
> #define VIATELECOM_VENDOR_ID 0x15eb
> #define VIATELECOM_PRODUCT_CDS7 0x0001
>
> +/* SIMCom Wireless Solutions products */
> +#define SIMCOM_PRODUCT_SIM7100E 0x9001
> +

Please also place this one under the ALINK section and mention that
that's the VID that is used.

> struct option_blacklist_info {
> /* bitmask of interface numbers blacklisted for send_setup */
> const unsigned long sendsetup;
> @@ -615,6 +618,10 @@ static const struct option_blacklist_info telit_le920_blacklist = {
> .reserved = BIT(1) | BIT(5),
> };
>
> +static const struct option_blacklist_info simcom_sim7100e_blacklist = {
> + .reserved = BIT(5) | BIT(6),
> +};
> +
> static const struct usb_device_id option_ids[] = {
> { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
> { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
> @@ -1619,6 +1626,8 @@ static const struct usb_device_id option_ids[] = {
> { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
> { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */
> { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5A) },
> + { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E),
> + .driver_info = (kernel_ulong_t)&simcom_sim7100e_blacklist },

And perhaps you should put this one after the other ALINK entries
(including PID 0x9000) instead of with the DLINK ones.

> { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
> { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
> { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },

Thanks,
Johan