diff mbox series

usbnet: ipheth: Simplify device detection

Message ID 1556128704-10831-1-git-send-email-linux@roeck-us.net
State Accepted
Delegated to: David Miller
Headers show
Series usbnet: ipheth: Simplify device detection | expand

Commit Message

Guenter Roeck April 24, 2019, 5:58 p.m. UTC
All Apple products use the same protocol for tethering over USB.
To simplify the code and make it future proof, use
USB_VENDOR_AND_INTERFACE_INFO() instead of
USB_DEVICE_AND_INTERFACE_INFO() to automatically detect and support
all existing and future Apple products using the same interface.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
Tested with various iPads and iPhones up to X. iPhone 6 and later
up to and including X all use product ID 0x12a8, so this patch is
not strictly required, but it does simplify the code.

 drivers/net/usb/ipheth.c | 58 +++---------------------------------------------
 1 file changed, 3 insertions(+), 55 deletions(-)

Comments

Simon Horman April 26, 2019, 11:27 a.m. UTC | #1
On Wed, Apr 24, 2019 at 10:58:24AM -0700, Guenter Roeck wrote:
> All Apple products use the same protocol for tethering over USB.
> To simplify the code and make it future proof, use
> USB_VENDOR_AND_INTERFACE_INFO() instead of
> USB_DEVICE_AND_INTERFACE_INFO() to automatically detect and support
> all existing and future Apple products using the same interface.

What if future Apple products behave differently?

> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
> Tested with various iPads and iPhones up to X. iPhone 6 and later
> up to and including X all use product ID 0x12a8, so this patch is
> not strictly required, but it does simplify the code.
> 
>  drivers/net/usb/ipheth.c | 58 +++---------------------------------------------
>  1 file changed, 3 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
> index 3d8a70d3ea9b..a01a71a7e48d 100644
> --- a/drivers/net/usb/ipheth.c
> +++ b/drivers/net/usb/ipheth.c
> @@ -54,17 +54,6 @@
>  #include <linux/workqueue.h>
>  
>  #define USB_VENDOR_APPLE        0x05ac
> -#define USB_PRODUCT_IPHONE      0x1290
> -#define USB_PRODUCT_IPHONE_3G   0x1292
> -#define USB_PRODUCT_IPHONE_3GS  0x1294
> -#define USB_PRODUCT_IPHONE_4	0x1297
> -#define USB_PRODUCT_IPAD 0x129a
> -#define USB_PRODUCT_IPAD_2	0x12a2
> -#define USB_PRODUCT_IPAD_3	0x12a6
> -#define USB_PRODUCT_IPAD_MINI    0x12ab
> -#define USB_PRODUCT_IPHONE_4_VZW 0x129c
> -#define USB_PRODUCT_IPHONE_4S	0x12a0
> -#define USB_PRODUCT_IPHONE_5	0x12a8
>  
>  #define IPHETH_USBINTF_CLASS    255
>  #define IPHETH_USBINTF_SUBCLASS 253
> @@ -88,50 +77,9 @@
>  #define IPHETH_CARRIER_ON       0x04
>  
>  static const struct usb_device_id ipheth_table[] = {
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3G,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3GS,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_2,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_3,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_MINI,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4_VZW,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> -	{ USB_DEVICE_AND_INTERFACE_INFO(
> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_5,
> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
> -		IPHETH_USBINTF_PROTO) },
> +	{ USB_VENDOR_AND_INTERFACE_INFO(USB_VENDOR_APPLE, IPHETH_USBINTF_CLASS,
> +					IPHETH_USBINTF_SUBCLASS,
> +					IPHETH_USBINTF_PROTO) },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(usb, ipheth_table);
> -- 
> 2.7.4
>
Guenter Roeck April 26, 2019, 12:13 p.m. UTC | #2
On 4/26/19 4:27 AM, Simon Horman wrote:
> On Wed, Apr 24, 2019 at 10:58:24AM -0700, Guenter Roeck wrote:
>> All Apple products use the same protocol for tethering over USB.
>> To simplify the code and make it future proof, use
>> USB_VENDOR_AND_INTERFACE_INFO() instead of
>> USB_DEVICE_AND_INTERFACE_INFO() to automatically detect and support
>> all existing and future Apple products using the same interface.
> 
> What if future Apple products behave differently?
> 

Sure, Apple may decide to use the same device/class/subclass/protocol
identifier for a different protocol. That is unlikely but possible.

If the associated risk is considered higher than the benefit of supporting
new devices announcing the same protocol with a different product id,
please feel free to ignore (or nack) this patch.

Thanks,
Guenter

>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>> Tested with various iPads and iPhones up to X. iPhone 6 and later
>> up to and including X all use product ID 0x12a8, so this patch is
>> not strictly required, but it does simplify the code.
>>
>>   drivers/net/usb/ipheth.c | 58 +++---------------------------------------------
>>   1 file changed, 3 insertions(+), 55 deletions(-)
>>
>> diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
>> index 3d8a70d3ea9b..a01a71a7e48d 100644
>> --- a/drivers/net/usb/ipheth.c
>> +++ b/drivers/net/usb/ipheth.c
>> @@ -54,17 +54,6 @@
>>   #include <linux/workqueue.h>
>>   
>>   #define USB_VENDOR_APPLE        0x05ac
>> -#define USB_PRODUCT_IPHONE      0x1290
>> -#define USB_PRODUCT_IPHONE_3G   0x1292
>> -#define USB_PRODUCT_IPHONE_3GS  0x1294
>> -#define USB_PRODUCT_IPHONE_4	0x1297
>> -#define USB_PRODUCT_IPAD 0x129a
>> -#define USB_PRODUCT_IPAD_2	0x12a2
>> -#define USB_PRODUCT_IPAD_3	0x12a6
>> -#define USB_PRODUCT_IPAD_MINI    0x12ab
>> -#define USB_PRODUCT_IPHONE_4_VZW 0x129c
>> -#define USB_PRODUCT_IPHONE_4S	0x12a0
>> -#define USB_PRODUCT_IPHONE_5	0x12a8
>>   
>>   #define IPHETH_USBINTF_CLASS    255
>>   #define IPHETH_USBINTF_SUBCLASS 253
>> @@ -88,50 +77,9 @@
>>   #define IPHETH_CARRIER_ON       0x04
>>   
>>   static const struct usb_device_id ipheth_table[] = {
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3G,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3GS,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_2,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_3,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_MINI,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4_VZW,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> -	{ USB_DEVICE_AND_INTERFACE_INFO(
>> -		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_5,
>> -		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
>> -		IPHETH_USBINTF_PROTO) },
>> +	{ USB_VENDOR_AND_INTERFACE_INFO(USB_VENDOR_APPLE, IPHETH_USBINTF_CLASS,
>> +					IPHETH_USBINTF_SUBCLASS,
>> +					IPHETH_USBINTF_PROTO) },
>>   	{ }
>>   };
>>   MODULE_DEVICE_TABLE(usb, ipheth_table);
>> -- 
>> 2.7.4
>>
>
Simon Horman April 26, 2019, 12:59 p.m. UTC | #3
On Fri, Apr 26, 2019 at 05:13:17AM -0700, Guenter Roeck wrote:
> On 4/26/19 4:27 AM, Simon Horman wrote:
> > On Wed, Apr 24, 2019 at 10:58:24AM -0700, Guenter Roeck wrote:
> > > All Apple products use the same protocol for tethering over USB.
> > > To simplify the code and make it future proof, use
> > > USB_VENDOR_AND_INTERFACE_INFO() instead of
> > > USB_DEVICE_AND_INTERFACE_INFO() to automatically detect and support
> > > all existing and future Apple products using the same interface.
> > 
> > What if future Apple products behave differently?
> > 
> 
> Sure, Apple may decide to use the same device/class/subclass/protocol
> identifier for a different protocol. That is unlikely but possible.
> 
> If the associated risk is considered higher than the benefit of supporting
> new devices announcing the same protocol with a different product id,
> please feel free to ignore (or nack) this patch.

My experience with hardware vendors would lead me to err on the side of
caution. But my experience does not extend to Apple and the benefit you
describe may well be worth the risk in this case.

...
David Miller April 26, 2019, 3:34 p.m. UTC | #4
From: Guenter Roeck <linux@roeck-us.net>
Date: Wed, 24 Apr 2019 10:58:24 -0700

> All Apple products use the same protocol for tethering over USB.
> To simplify the code and make it future proof, use
> USB_VENDOR_AND_INTERFACE_INFO() instead of
> USB_DEVICE_AND_INTERFACE_INFO() to automatically detect and support
> all existing and future Apple products using the same interface.
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>

Applied to net-next, thanks.
diff mbox series

Patch

diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
index 3d8a70d3ea9b..a01a71a7e48d 100644
--- a/drivers/net/usb/ipheth.c
+++ b/drivers/net/usb/ipheth.c
@@ -54,17 +54,6 @@ 
 #include <linux/workqueue.h>
 
 #define USB_VENDOR_APPLE        0x05ac
-#define USB_PRODUCT_IPHONE      0x1290
-#define USB_PRODUCT_IPHONE_3G   0x1292
-#define USB_PRODUCT_IPHONE_3GS  0x1294
-#define USB_PRODUCT_IPHONE_4	0x1297
-#define USB_PRODUCT_IPAD 0x129a
-#define USB_PRODUCT_IPAD_2	0x12a2
-#define USB_PRODUCT_IPAD_3	0x12a6
-#define USB_PRODUCT_IPAD_MINI    0x12ab
-#define USB_PRODUCT_IPHONE_4_VZW 0x129c
-#define USB_PRODUCT_IPHONE_4S	0x12a0
-#define USB_PRODUCT_IPHONE_5	0x12a8
 
 #define IPHETH_USBINTF_CLASS    255
 #define IPHETH_USBINTF_SUBCLASS 253
@@ -88,50 +77,9 @@ 
 #define IPHETH_CARRIER_ON       0x04
 
 static const struct usb_device_id ipheth_table[] = {
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3G,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3GS,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPAD,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_2,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_3,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPAD_MINI,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4_VZW,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(
-		USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_5,
-		IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
-		IPHETH_USBINTF_PROTO) },
+	{ USB_VENDOR_AND_INTERFACE_INFO(USB_VENDOR_APPLE, IPHETH_USBINTF_CLASS,
+					IPHETH_USBINTF_SUBCLASS,
+					IPHETH_USBINTF_PROTO) },
 	{ }
 };
 MODULE_DEVICE_TABLE(usb, ipheth_table);