diff options
Diffstat (limited to 'drivers/usb/serial/option.c')
| -rw-r--r-- | drivers/usb/serial/option.c | 31 | 
1 files changed, 28 insertions, 3 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index a9688940543d..54a8120897a6 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c @@ -275,8 +275,12 @@ static void option_instat_callback(struct urb *urb);  #define ZTE_PRODUCT_MF622			0x0001  #define ZTE_PRODUCT_MF628			0x0015  #define ZTE_PRODUCT_MF626			0x0031 -#define ZTE_PRODUCT_MC2718			0xffe8  #define ZTE_PRODUCT_AC2726			0xfff1 +#define ZTE_PRODUCT_CDMA_TECH			0xfffe +#define ZTE_PRODUCT_AC8710T			0xffff +#define ZTE_PRODUCT_MC2718			0xffe8 +#define ZTE_PRODUCT_AD3812			0xffeb +#define ZTE_PRODUCT_MC2716			0xffed  #define BENQ_VENDOR_ID				0x04a5  #define BENQ_PRODUCT_H10			0x4068 @@ -494,6 +498,10 @@ static void option_instat_callback(struct urb *urb);  #define INOVIA_VENDOR_ID			0x20a6  #define INOVIA_SEW858				0x1105 +/* VIA Telecom */ +#define VIATELECOM_VENDOR_ID			0x15eb +#define VIATELECOM_PRODUCT_CDS7			0x0001 +  /* some devices interfaces need special handling due to a number of reasons */  enum option_blacklist_reason {  		OPTION_BLACKLIST_NONE = 0, @@ -527,10 +535,18 @@ static const struct option_blacklist_info zte_k3765_z_blacklist = {  	.reserved = BIT(4),  }; +static const struct option_blacklist_info zte_ad3812_z_blacklist = { +	.sendsetup = BIT(0) | BIT(1) | BIT(2), +}; +  static const struct option_blacklist_info zte_mc2718_z_blacklist = {  	.sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4),  }; +static const struct option_blacklist_info zte_mc2716_z_blacklist = { +	.sendsetup = BIT(1) | BIT(2) | BIT(3), +}; +  static const struct option_blacklist_info huawei_cdc12_blacklist = {  	.reserved = BIT(1) | BIT(2),  }; @@ -1070,6 +1086,7 @@ static const struct usb_device_id option_ids[] = {  	{ USB_DEVICE_INTERFACE_CLASS(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012, 0xff) },  	{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },  	{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, +	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */  	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */  	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */  	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ @@ -1544,13 +1561,18 @@ static const struct usb_device_id option_ids[] = {  	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },  	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) }, -	/* NOTE: most ZTE CDMA devices should be driven by zte_ev, not option */ +	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) }, +	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) }, +	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },  	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff),  	 .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist }, +	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff), +	 .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist }, +	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff), +	 .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist },  	{ USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) },  	{ USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) },  	{ USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) }, -	{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },  	{ USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },  	{ USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, @@ -1724,6 +1746,7 @@ static const struct usb_device_id option_ids[] = {  	{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */  	{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */  	{ USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) }, +	{ USB_DEVICE(VIATELECOM_VENDOR_ID, VIATELECOM_PRODUCT_CDS7) },  	{ } /* Terminating entry */  };  MODULE_DEVICE_TABLE(usb, option_ids); @@ -1916,6 +1939,8 @@ static void option_instat_callback(struct urb *urb)  			dev_dbg(dev, "%s: type %x req %x\n", __func__,  				req_pkt->bRequestType, req_pkt->bRequest);  		} +	} else if (status == -ENOENT || status == -ESHUTDOWN) { +		dev_dbg(dev, "%s: urb stopped: %d\n", __func__, status);  	} else  		dev_err(dev, "%s: error %d\n", __func__, status);  |