2019-04-24 18:01:35

by Guenter Roeck

[permalink] [raw]
Subject: [PATCH] usbnet: ipheth: Simplify device detection

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 <[email protected]>
---
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


2019-04-26 11:28:17

by Simon Horman

[permalink] [raw]
Subject: Re: [PATCH] usbnet: ipheth: Simplify device detection

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 <[email protected]>
> ---
> 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
>

2019-04-26 12:14:32

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] usbnet: ipheth: Simplify device detection

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 <[email protected]>
>> ---
>> 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
>>
>

2019-04-26 13:00:26

by Simon Horman

[permalink] [raw]
Subject: Re: [PATCH] usbnet: ipheth: Simplify device detection

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.

...

2019-04-26 15:36:24

by David Miller

[permalink] [raw]
Subject: Re: [PATCH] usbnet: ipheth: Simplify device detection

From: Guenter Roeck <[email protected]>
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 <[email protected]>

Applied to net-next, thanks.