Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH 0/2] *** SUBJECT HERE ***

7 views
Skip to first unread message

Anders Hammarquist

unread,
Jun 18, 2013, 8:18:09 PM6/18/13
to gre...@linuxfoundation.org, linux-...@vger.kernel.org
The USB cable to read out data from the Abbott FreeStyle Precision
meters, known as the Abbott stip port cable, uses the TI 3410 chip,
just as the already added stereo port cable. They are essestially
the same cable, just with different connectors at the end.

This patch set adds the product id to the driver, and makes the
product type more explicit. Arguably, the ABBOTT_PRODUCT_ID
define could be removed, but I left it on the off chance that
someone other that the TI 3410 driver uses it.

/Anders

Anders Hammarquist (2):
Add product id for Abbott strip port cable for Precision meter
which uses the TI 3410 chip.
Be explicit about the Abbott product ids being product ids.

drivers/usb/serial/ti_usb_3410_5052.c | 3 ++-
drivers/usb/serial/ti_usb_3410_5052.h | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)

--
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Greg KH

unread,
Jun 19, 2013, 6:52:47 PM6/19/13
to Anders Hammarquist, linux-...@vger.kernel.org
I think you forgot a Subject :)

On Wed, Jun 19, 2013 at 02:05:07AM +0200, Anders Hammarquist wrote:
> The USB cable to read out data from the Abbott FreeStyle Precision
> meters, known as the Abbott stip port cable, uses the TI 3410 chip,
> just as the already added stereo port cable. They are essestially
> the same cable, just with different connectors at the end.
>
> This patch set adds the product id to the driver, and makes the
> product type more explicit. Arguably, the ABBOTT_PRODUCT_ID
> define could be removed, but I left it on the off chance that
> someone other that the TI 3410 driver uses it.

No, it doesn't, please fix up that last patch and resend it.

thanks,

greg k-h

Anders Hammarquist

unread,
Jun 21, 2013, 7:08:29 PM6/21/13
to Greg KH, linux-...@vger.kernel.org
In a message of Wed, 19 Jun 2013 15:53:15 -0700, Greg KH writes:
>I think you forgot a Subject :)

Indeed. I blame it on my first fight with git format-patch ;-)

>On Wed, Jun 19, 2013 at 02:05:07AM +0200, Anders Hammarquist wrote:
>> This patch set adds the product id to the driver, and makes the
>> product type more explicit. Arguably, the ABBOTT_PRODUCT_ID
>> define could be removed, but I left it on the off chance that
>> someone other that the TI 3410 driver uses it.
>
>No, it doesn't, please fix up that last patch and resend it.

Right, and in removing it I actually found that it was used in
two places in the driver. I lost my second fight with format-patch
so I'll just enclose the fixed patch below.

/Anders

---8<---
ti_usb_3410_5052:
* Remove unspecific ABBOTT_PRODUCT_ID
* Fix size of statically sized arrays

Signed-off-by: Anders Hammarquist <i...@iko.pp.se>

diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index e581c25..26c1161 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -158,7 +158,7 @@ static unsigned int product_5052_count;
/* the array dimension is the number of default entries plus */
/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
/* null entry */
-static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -172,8 +172,8 @@ static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
- { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_ID) },
- { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
};

@@ -184,7 +184,7 @@ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
};

-static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_combined[20+2*TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -202,7 +202,8 @@ static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1]
{ USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
- { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
{ }
};
diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h
index 4a2423e..d3ff470 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.h
+++ b/drivers/usb/serial/ti_usb_3410_5052.h
@@ -52,9 +52,8 @@

/* Abbott Diabetics vendor and product ids */
#define ABBOTT_VENDOR_ID 0x1a61
-#define ABBOTT_STEREO_PLUG_ID 0x3410
-#define ABBOTT_PRODUCT_ID ABBOTT_STEREO_PLUG_ID
-#define ABBOTT_STRIP_PORT_ID 0x3420
+#define ABBOTT_STEREO_PLUG_PRODUCT_ID 0x3410
+#define ABBOTT_STRIP_PORT_PRODUCT_ID 0x3420

/* Commands */
#define TI_GET_VERSION 0x01

Greg KH

unread,
Jun 21, 2013, 7:55:29 PM6/21/13
to Anders Hammarquist, linux-...@vger.kernel.org
On Sat, Jun 22, 2013 at 01:08:12AM +0200, Anders Hammarquist wrote:
> In a message of Wed, 19 Jun 2013 15:53:15 -0700, Greg KH writes:
> >I think you forgot a Subject :)
>
> Indeed. I blame it on my first fight with git format-patch ;-)
>
> >On Wed, Jun 19, 2013 at 02:05:07AM +0200, Anders Hammarquist wrote:
> >> This patch set adds the product id to the driver, and makes the
> >> product type more explicit. Arguably, the ABBOTT_PRODUCT_ID
> >> define could be removed, but I left it on the off chance that
> >> someone other that the TI 3410 driver uses it.
> >
> >No, it doesn't, please fix up that last patch and resend it.
>
> Right, and in removing it I actually found that it was used in
> two places in the driver. I lost my second fight with format-patch
> so I'll just enclose the fixed patch below.
>
> /Anders
>
> ---8<---
> ti_usb_3410_5052:
> * Remove unspecific ABBOTT_PRODUCT_ID
> * Fix size of statically sized arrays
>
> Signed-off-by: Anders Hammarquist <i...@iko.pp.se>

Please resend this in a format that I can apply it in (i.e. one that
does not require me to edit it by hand...)

Also, please cc: the linu...@vger.kernel.org mailing list for usb
patches.

> diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
> index e581c25..26c1161 100644
> --- a/drivers/usb/serial/ti_usb_3410_5052.c
> +++ b/drivers/usb/serial/ti_usb_3410_5052.c
> @@ -158,7 +158,7 @@ static unsigned int product_5052_count;
> /* the array dimension is the number of default entries plus */
> /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
> /* null entry */
> -static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
> +static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {

That's a mess, why have it be a static array at all? Just include an
empty one at the end.


> { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
> { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
> { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
> @@ -172,8 +172,8 @@ static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
> { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
> { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
> { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
> - { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_ID) },
> - { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) },
> + { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
> + { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
> { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
> };
>
> @@ -184,7 +184,7 @@ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
> { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
> };
>
> -static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1] = {
> +static struct usb_device_id ti_id_table_combined[20+2*TI_EXTRA_VID_PID_COUNT+1] = {

Same here. Although that might take another patch, to handle it all
correctly, separate from this "change the device id names" patch.

thanks,

greg k-h

Anders Hammarquist

unread,
Jun 22, 2013, 2:55:05 PM6/22/13
to Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
In a message of Fri, 21 Jun 2013 16:56:03 -0700, Greg KH writes:
>Please resend this in a format that I can apply it in (i.e. one that
>does not require me to edit it by hand...)

After more fighting with git, I belive I now made it spit out what I
wanted. Patch 1/2 ahead.

>> -static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
>> +static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {
>
>That's a mess, why have it be a static array at all? Just include an
>empty one at the end.

Indeed. I'd already had some (failed) thoughts about how to handle it
nicely. Now I've had another think through, and I have something which
deals with it and at least complains if TI_EXTRA_VID_PID_COUNT is changed
without changing the initializer. Patch 2/2

/Anders

Anders Hammarquist

unread,
Jun 22, 2013, 2:56:48 PM6/22/13
to Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org, Anders Hammarquist

Signed-off-by: Anders Hammarquist <i...@iko.pp.se>
---
drivers/usb/serial/ti_usb_3410_5052.c | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 26c1161..441c788 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -60,7 +60,20 @@
#define TI_READ_URB_STOPPED 2

#define TI_EXTRA_VID_PID_COUNT 5
-
+#define TI_EXTRA_VID_PID_INITALIZER {0}, {0}, {0}, {0}, {0}
+
+/* Check that TI_EXTRA_VID_PID_COUNT and TI_EXTRA_VID_PID_INITALIZER match.
+ On x86, this wastes one byte of __init space to provide a compile-time
+ error if you do not match up the definitions of TI_EXTRA_VID_PID_COUNT and
+ TI_EXTRA_VID_PID_INITIALIZER. Expect space waste up to sizeof(void *) for
+ other architectures. */
+__init void __ti_extra_vid_pid_test(void)
+{
+ struct { char a; } ti_extra_vid_pid_initializer[] =
+ { TI_EXTRA_VID_PID_INITALIZER };
+ BUILD_BUG_ON(ARRAY_SIZE(ti_extra_vid_pid_initializer) !=
+ TI_EXTRA_VID_PID_COUNT);
+}

/* Structures */

@@ -158,7 +171,7 @@ static unsigned int product_5052_count;
/* the array dimension is the number of default entries plus */
/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
/* null entry */
-static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_3410[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -175,16 +188,20 @@ static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
+ TI_EXTRA_VID_PID_INITALIZER, /* space for run-time VID-PID pairs */
+ {0} /* End of array maker */
};

-static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_5052[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
+ TI_EXTRA_VID_PID_INITALIZER, /* space for run-time VID-PID pairs */
+ {0} /* End of array maker */
};

-static struct usb_device_id ti_id_table_combined[20+2*TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_combined[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -205,7 +222,9 @@ static struct usb_device_id ti_id_table_combined[20+2*TI_EXTRA_VID_PID_COUNT+1]
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
- { }
+ TI_EXTRA_VID_PID_INITALIZER, /* space for run-time VID-PID pairs */
+ TI_EXTRA_VID_PID_INITALIZER, /* Two needed, combined 3410 and 5052 */
+ {0} /* End of array maker */
};

static struct usb_serial_driver ti_1port_device = {
--
1.7.10.4

Anders Hammarquist

unread,
Jun 22, 2013, 2:57:14 PM6/22/13
to Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org, Anders Hammarquist

Signed-off-by: Anders Hammarquist <i...@iko.pp.se>
---
drivers/usb/serial/ti_usb_3410_5052.c | 11 ++++++-----
drivers/usb/serial/ti_usb_3410_5052.h | 5 ++---
2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index e581c25..26c1161 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -158,7 +158,7 @@ static unsigned int product_5052_count;
/* the array dimension is the number of default entries plus */
/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
/* null entry */
-static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -172,8 +172,8 @@ static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
- { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_ID) },
- { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
};

@@ -184,7 +184,7 @@ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
};

-static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_combined[20+2*TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -202,7 +202,8 @@ static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1]
{ USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
- { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_PRODUCT_ID) },
+ { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
{ }
};
diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h
index 4a2423e..d3ff470 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.h
+++ b/drivers/usb/serial/ti_usb_3410_5052.h
@@ -52,9 +52,8 @@

/* Abbott Diabetics vendor and product ids */
#define ABBOTT_VENDOR_ID 0x1a61
-#define ABBOTT_STEREO_PLUG_ID 0x3410
-#define ABBOTT_PRODUCT_ID ABBOTT_STEREO_PLUG_ID
-#define ABBOTT_STRIP_PORT_ID 0x3420
+#define ABBOTT_STEREO_PLUG_PRODUCT_ID 0x3410
+#define ABBOTT_STRIP_PORT_PRODUCT_ID 0x3420

/* Commands */
#define TI_GET_VERSION 0x01
--
1.7.10.4

Anders Hammarquist

unread,
Jun 25, 2013, 5:39:58 PM6/25/13
to Greg Kroah-Hartman, linux-...@vger.kernel.org, sta...@vger.kernel.org
In a message of Tue, 25 Jun 2013 11:39:32 -0700, Greg Kroah-Hartman writes:
>3.0-stable review patch. If anyone has any objections, please let me know.
>
>From: Anders Hammarquist <i...@iko.pp.se>
>
>commit 35a2fbc941accd0e9f1bfadd669311786118d874 upstream.
>
>Add product id for Abbott strip port cable for Precision meter which
>uses the TI 3410 chip.

Given the statically sized arrays, I think this patch should not go in
alone. It needs to go together with the later patches I sent you that
fix the array sizing.

(this applies to all trees)

/Anders

Greg KH

unread,
Jun 25, 2013, 7:39:19 PM6/25/13
to Anders Hammarquist, linux-...@vger.kernel.org, linu...@vger.kernel.org
On Sat, Jun 22, 2013 at 08:54:43PM +0200, Anders Hammarquist wrote:
> In a message of Fri, 21 Jun 2013 16:56:03 -0700, Greg KH writes:
> >Please resend this in a format that I can apply it in (i.e. one that
> >does not require me to edit it by hand...)
>
> After more fighting with git, I belive I now made it spit out what I
> wanted. Patch 1/2 ahead.
>
> >> -static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
> >> +static struct usb_device_id ti_id_table_3410[16+TI_EXTRA_VID_PID_COUNT+1] = {
> >
> >That's a mess, why have it be a static array at all? Just include an
> >empty one at the end.
>
> Indeed. I'd already had some (failed) thoughts about how to handle it
> nicely. Now I've had another think through, and I have something which
> deals with it and at least complains if TI_EXTRA_VID_PID_COUNT is changed
> without changing the initializer. Patch 2/2

Why don't we just drop the extra id thing entirely? The usb-serial
subsystem handles new device ids being added dynamically from sysfs for
a long time now. Removing this module option would clean up the code a
lot, and prevent these errors from ever happening again.

thanks,

greg k-h

Anders Hammarquist

unread,
Jun 26, 2013, 4:30:41 AM6/26/13
to Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
In a message of Tue, 25 Jun 2013 16:39:11 -0700, Greg KH writes:
>> Indeed. I'd already had some (failed) thoughts about how to handle it
>> nicely. Now I've had another think through, and I have something which
>> deals with it and at least complains if TI_EXTRA_VID_PID_COUNT is changed
>> without changing the initializer. Patch 2/2
>
>Why don't we just drop the extra id thing entirely? The usb-serial
>subsystem handles new device ids being added dynamically from sysfs for
>a long time now. Removing this module option would clean up the code a
>lot, and prevent these errors from ever happening again.

Aha, yes, I'm all for that (had I only known I'd have done that to start
with). I'll look in to it.

/Anders

Johan Hovold

unread,
Jun 26, 2013, 6:39:45 AM6/26/13
to Anders Hammarquist, Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
On Wed, Jun 26, 2013 at 10:29:59AM +0200, Anders Hammarquist wrote:
> In a message of Tue, 25 Jun 2013 16:39:11 -0700, Greg KH writes:
> >> Indeed. I'd already had some (failed) thoughts about how to handle it
> >> nicely. Now I've had another think through, and I have something which
> >> deals with it and at least complains if TI_EXTRA_VID_PID_COUNT is changed
> >> without changing the initializer. Patch 2/2
> >
> >Why don't we just drop the extra id thing entirely? The usb-serial
> >subsystem handles new device ids being added dynamically from sysfs for
> >a long time now. Removing this module option would clean up the code a
> >lot, and prevent these errors from ever happening again.
>
> Aha, yes, I'm all for that (had I only known I'd have done that to start
> with). I'll look in to it.

I already have a few patches here (part of a larger 3.11 clean-up series)
which removes the vid/pid module parameters from all usb-serial modules
including ti_usb_3410_5052.

I hope to be able to submit the whole series a later tonight, but here's
the ti_usb_3410_5052 part if anyone's interested.

Thanks,
Johan


From: Johan Hovold <jho...@gmail.com>
Subject: [PATCH] USB: ti_usb_3410_5052: remove vendor/product module parameters

Remove the vendor and product module parameters which were added a long
time ago when we did not have the dynamic sysfs interface to add
new device ids (and which isn't limited to five new vid/pid pair).

A vid/pid pair can be added dynamically using sysfs, for example:

echo 0451 1234 >/sys/bus/usb-serial/drivers/ti_usb_3410_5052_1/new_id

for 1-port adapters, or

echo 0451 1234 >/sys/bus/usb-serial/drivers/ti_usb_3410_5052_2/new_id

for 2-port adapters.

Signed-off-by: Johan Hovold <jho...@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 72 ++++-------------------------------
1 file changed, 7 insertions(+), 65 deletions(-)

diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index f3e21f5..5585b20 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -141,20 +141,9 @@ static int ti_download_firmware(struct ti_device *tdev);

/* module parameters */
static int closing_wait = TI_DEFAULT_CLOSING_WAIT;
-static ushort vendor_3410[TI_EXTRA_VID_PID_COUNT];
-static unsigned int vendor_3410_count;
-static ushort product_3410[TI_EXTRA_VID_PID_COUNT];
-static unsigned int product_3410_count;
-static ushort vendor_5052[TI_EXTRA_VID_PID_COUNT];
-static unsigned int vendor_5052_count;
-static ushort product_5052[TI_EXTRA_VID_PID_COUNT];
-static unsigned int product_5052_count;

/* supported devices */
-/* the array dimension is the number of default entries plus */
-/* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
-/* null entry */
-static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_3410[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -171,16 +160,18 @@ static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_ID) },
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
+ { } /* terminator */
};

-static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_5052[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
+ { } /* terminator */
};

-static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1] = {
+static struct usb_device_id ti_id_table_combined[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
@@ -200,7 +191,7 @@ static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1]
{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
- { }
+ { } /* terminator */
};

static struct usb_serial_driver ti_1port_device = {
@@ -289,61 +280,12 @@ module_param(closing_wait, int, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(closing_wait,
"Maximum wait for data to drain in close, in .01 secs, default is 4000");

-module_param_array(vendor_3410, ushort, &vendor_3410_count, S_IRUGO);
-MODULE_PARM_DESC(vendor_3410,
- "Vendor ids for 3410 based devices, 1-5 short integers");
-module_param_array(product_3410, ushort, &product_3410_count, S_IRUGO);
-MODULE_PARM_DESC(product_3410,
- "Product ids for 3410 based devices, 1-5 short integers");
-module_param_array(vendor_5052, ushort, &vendor_5052_count, S_IRUGO);
-MODULE_PARM_DESC(vendor_5052,
- "Vendor ids for 5052 based devices, 1-5 short integers");
-module_param_array(product_5052, ushort, &product_5052_count, S_IRUGO);
-MODULE_PARM_DESC(product_5052,
- "Product ids for 5052 based devices, 1-5 short integers");
-
MODULE_DEVICE_TABLE(usb, ti_id_table_combined);

+module_usb_serial_driver(serial_drivers, ti_id_table_combined);

/* Functions */

-static int __init ti_init(void)
-{
- int i, j, c;
-
- /* insert extra vendor and product ids */
- c = ARRAY_SIZE(ti_id_table_combined) - 2 * TI_EXTRA_VID_PID_COUNT - 1;
- j = ARRAY_SIZE(ti_id_table_3410) - TI_EXTRA_VID_PID_COUNT - 1;
- for (i = 0; i < min(vendor_3410_count, product_3410_count); i++, j++, c++) {
- ti_id_table_3410[j].idVendor = vendor_3410[i];
- ti_id_table_3410[j].idProduct = product_3410[i];
- ti_id_table_3410[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
- ti_id_table_combined[c].idVendor = vendor_3410[i];
- ti_id_table_combined[c].idProduct = product_3410[i];
- ti_id_table_combined[c].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
- }
- j = ARRAY_SIZE(ti_id_table_5052) - TI_EXTRA_VID_PID_COUNT - 1;
- for (i = 0; i < min(vendor_5052_count, product_5052_count); i++, j++, c++) {
- ti_id_table_5052[j].idVendor = vendor_5052[i];
- ti_id_table_5052[j].idProduct = product_5052[i];
- ti_id_table_5052[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
- ti_id_table_combined[c].idVendor = vendor_5052[i];
- ti_id_table_combined[c].idProduct = product_5052[i];
- ti_id_table_combined[c].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
- }
-
- return usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, ti_id_table_combined);
-}
-
-static void __exit ti_exit(void)
-{
- usb_serial_deregister_drivers(serial_drivers);
-}
-
-module_init(ti_init);
-module_exit(ti_exit);
-
-
static int ti_startup(struct usb_serial *serial)
{
struct ti_device *tdev;
--
1.8.2.1

Greg Kroah-Hartman

unread,
Jun 26, 2013, 1:21:30 PM6/26/13
to Anders Hammarquist, linux-...@vger.kernel.org, sta...@vger.kernel.org
On Tue, Jun 25, 2013 at 11:39:26PM +0200, Anders Hammarquist wrote:
> In a message of Tue, 25 Jun 2013 11:39:32 -0700, Greg Kroah-Hartman writes:
> >3.0-stable review patch. If anyone has any objections, please let me know.
> >
> >From: Anders Hammarquist <i...@iko.pp.se>
> >
> >commit 35a2fbc941accd0e9f1bfadd669311786118d874 upstream.
> >
> >Add product id for Abbott strip port cable for Precision meter which
> >uses the TI 3410 chip.
>
> Given the statically sized arrays, I think this patch should not go in
> alone. It needs to go together with the later patches I sent you that
> fix the array sizing.
>
> (this applies to all trees)

Yes, but, thanks to the fact that you are only adding one more device
id, I don't think we are overflowing anything with this patch alone,
right? The only "bad" thing that could happen here is if a user
specifies a device/vendor id on the module command line, is it would
replace the device id you added, so all should be fine.

Or am I reading the code wrong?

thanks,

greg k-h

Anders Hammarquist

unread,
Jun 26, 2013, 8:28:41 PM6/26/13
to Greg Kroah-Hartman, linux-...@vger.kernel.org, sta...@vger.kernel.org
In a message of Wed, 26 Jun 2013 10:21:22 -0700, Greg Kroah-Hartman writes:
>On Tue, Jun 25, 2013 at 11:39:26PM +0200, Anders Hammarquist wrote:
>> In a message of Tue, 25 Jun 2013 11:39:32 -0700, Greg Kroah-Hartman writes:
>> >3.0-stable review patch. If anyone has any objections, please let me know.
>> >
>> >From: Anders Hammarquist <i...@iko.pp.se>
>> >
>> >commit 35a2fbc941accd0e9f1bfadd669311786118d874 upstream.
>> >
>> >Add product id for Abbott strip port cable for Precision meter which
>> >uses the TI 3410 chip.
>>
>> Given the statically sized arrays, I think this patch should not go in
>> alone. It needs to go together with the later patches I sent you that
>> fix the array sizing.
>>
>> (this applies to all trees)
>
>Yes, but, thanks to the fact that you are only adding one more device
>id, I don't think we are overflowing anything with this patch alone,
>right? The only "bad" thing that could happen here is if a user
>specifies a device/vendor id on the module command line, is it would
>replace the device id you added, so all should be fine.
>
>Or am I reading the code wrong?

I'm reading the code the same way you are. From what I can see there
is no place that counts on there enough space beyond the last entry,
so nothing truly bad should happen.

/Anders

Anders Hammarquist

unread,
Jun 27, 2013, 5:51:15 PM6/27/13
to Johan Hovold, Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
In a message of Wed, 26 Jun 2013 12:39:24 +0200, Johan Hovold writes:
>On Wed, Jun 26, 2013 at 10:29:59AM +0200, Anders Hammarquist wrote:
>> In a message of Tue, 25 Jun 2013 16:39:11 -0700, Greg KH writes:
>> >> Indeed. I'd already had some (failed) thoughts about how to handle it
>> >> nicely. Now I've had another think through, and I have something which
>> >> deals with it and at least complains if TI_EXTRA_VID_PID_COUNT is changed
>> >> without changing the initializer. Patch 2/2
>> >
>> >Why don't we just drop the extra id thing entirely? The usb-serial
>> >subsystem handles new device ids being added dynamically from sysfs for
>> >a long time now. Removing this module option would clean up the code a
>> >lot, and prevent these errors from ever happening again.
>>
>> Aha, yes, I'm all for that (had I only known I'd have done that to start
>> with). I'll look in to it.
>
>I already have a few patches here (part of a larger 3.11 clean-up series)
>which removes the vid/pid module parameters from all usb-serial modules
>including ti_usb_3410_5052.
>
>I hope to be able to submit the whole series a later tonight, but here's
>the ti_usb_3410_5052 part if anyone's interested.

I did a quick check of adding the device id though sysfs, and although
it partly works, it doesn't find the correct firmware (it ends up trying
to load 5052 firmware for a 3410 device. Looking at the code it seems
(struct ti_device) td_is_3410 isn't set properly.)

I can take a stab at fixing it in the next few days.

/Anders

Johan Hovold

unread,
Jun 28, 2013, 6:23:53 AM6/28/13
to Anders Hammarquist, Johan Hovold, Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
On Thu, Jun 27, 2013 at 11:50:52PM +0200, Anders Hammarquist wrote:
> In a message of Wed, 26 Jun 2013 12:39:24 +0200, Johan Hovold writes:
> >On Wed, Jun 26, 2013 at 10:29:59AM +0200, Anders Hammarquist wrote:
> >> In a message of Tue, 25 Jun 2013 16:39:11 -0700, Greg KH writes:
> >> >> Indeed. I'd already had some (failed) thoughts about how to handle it
> >> >> nicely. Now I've had another think through, and I have something which
> >> >> deals with it and at least complains if TI_EXTRA_VID_PID_COUNT is changed
> >> >> without changing the initializer. Patch 2/2
> >> >
> >> >Why don't we just drop the extra id thing entirely? The usb-serial
> >> >subsystem handles new device ids being added dynamically from sysfs for
> >> >a long time now. Removing this module option would clean up the code a
> >> >lot, and prevent these errors from ever happening again.
> >>
> >> Aha, yes, I'm all for that (had I only known I'd have done that to start
> >> with). I'll look in to it.
> >
> >I already have a few patches here (part of a larger 3.11 clean-up series)
> >which removes the vid/pid module parameters from all usb-serial modules
> >including ti_usb_3410_5052.
> >
> >I hope to be able to submit the whole series a later tonight, but here's
> >the ti_usb_3410_5052 part if anyone's interested.
>
> I did a quick check of adding the device id though sysfs, and although
> it partly works, it doesn't find the correct firmware (it ends up trying
> to load 5052 firmware for a 3410 device. Looking at the code it seems
> (struct ti_device) td_is_3410 isn't set properly.)

Turns out that the drivers device-type detection has never worked with
the dynamic id interface (all devices were detected as 2-port devices).

I'm responding to this mail with a fix. Care to give it a try?

Thanks,
Johan

Johan Hovold

unread,
Jun 28, 2013, 6:24:58 AM6/28/13
to Greg KH, Anders Hammarquist, linux-...@vger.kernel.org, linu...@vger.kernel.org, Johan Hovold, stable
The driver failed to take the dynamic ids into account when determining
the device type and therefore all devices were detected as 2-port
devices when using the dynamic-id interface.

Match on the usb-serial-driver field instead of doing redundant id-table
searches.

Reported-by: Anders Hammarquist <i...@iko.pp.se>
Cc: stable <sta...@vger.kernel.org>
Signed-off-by: Johan Hovold <jho...@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 5585b20..5c07d55 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -309,7 +309,7 @@ static int ti_startup(struct usb_serial *serial)
usb_set_serial_data(serial, tdev);

/* determine device type */
- if (usb_match_id(serial->interface, ti_id_table_3410))
+ if (serial->type == &ti_1port_device)
tdev->td_is_3410 = 1;
dev_dbg(&dev->dev, "%s - device type is %s\n", __func__,
tdev->td_is_3410 ? "3410" : "5052");
--
1.8.2.1

Anders Hammarquist

unread,
Jul 1, 2013, 7:22:26 PM7/1/13
to Johan Hovold, Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
In a message of Fri, 28 Jun 2013 12:23:33 +0200, Johan Hovold writes:
>> I did a quick check of adding the device id though sysfs, and although
>> it partly works, it doesn't find the correct firmware (it ends up trying
>> to load 5052 firmware for a 3410 device. Looking at the code it seems
>> (struct ti_device) td_is_3410 isn't set properly.)
>
>Turns out that the drivers device-type detection has never worked with
>the dynamic id interface (all devices were detected as 2-port devices).
>
>I'm responding to this mail with a fix. Care to give it a try?

Yes, this works fine.

/Anders

Johan Hovold

unread,
Jul 2, 2013, 5:46:28 AM7/2/13
to Anders Hammarquist, Johan Hovold, Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
On Tue, Jul 02, 2013 at 01:22:01AM +0200, Anders Hammarquist wrote:
> In a message of Fri, 28 Jun 2013 12:23:33 +0200, Johan Hovold writes:
> >> I did a quick check of adding the device id though sysfs, and although
> >> it partly works, it doesn't find the correct firmware (it ends up trying
> >> to load 5052 firmware for a 3410 device. Looking at the code it seems
> >> (struct ti_device) td_is_3410 isn't set properly.)
> >
> >Turns out that the drivers device-type detection has never worked with
> >the dynamic id interface (all devices were detected as 2-port devices).
> >
> >I'm responding to this mail with a fix. Care to give it a try?
>
> Yes, this works fine.

Thanks for testing.

Johan

Greg KH

unread,
Jul 24, 2013, 6:52:18 PM7/24/13
to Anders Hammarquist, linux-...@vger.kernel.org, linu...@vger.kernel.org
On Sat, Jun 22, 2013 at 08:55:59PM +0200, Anders Hammarquist wrote:
>
> Signed-off-by: Anders Hammarquist <i...@iko.pp.se>
> ---
> drivers/usb/serial/ti_usb_3410_5052.c | 29 ++++++++++++++++++++++++-----
> 1 file changed, 24 insertions(+), 5 deletions(-)

This patch, and your previous one, are no longer needed, right?

thanks,

greg k-h

Anders Hammarquist

unread,
Jul 25, 2013, 10:16:12 AM7/25/13
to Greg KH, linux-...@vger.kernel.org, linu...@vger.kernel.org
In a message of Wed, 24 Jul 2013 15:52:08 -0700, Greg KH writes:
>On Sat, Jun 22, 2013 at 08:55:59PM +0200, Anders Hammarquist wrote:
>>
>> Signed-off-by: Anders Hammarquist <i...@iko.pp.se>
>> ---
>> drivers/usb/serial/ti_usb_3410_5052.c | 29 ++++++++++++++++++++++++-----
>> 1 file changed, 24 insertions(+), 5 deletions(-)
>
>This patch, and your previous one, are no longer needed, right?

They are needed until the module params for adding vendor and
product ids are removed, and it sounded like the consensus was
to keep them for a while.

/Anders

Greg KH

unread,
Jul 25, 2013, 10:36:23 AM7/25/13
to Anders Hammarquist, linux-...@vger.kernel.org, linu...@vger.kernel.org
On Thu, Jul 25, 2013 at 04:15:49PM +0200, Anders Hammarquist wrote:
> In a message of Wed, 24 Jul 2013 15:52:08 -0700, Greg KH writes:
> >On Sat, Jun 22, 2013 at 08:55:59PM +0200, Anders Hammarquist wrote:
> >>
> >> Signed-off-by: Anders Hammarquist <i...@iko.pp.se>
> >> ---
> >> drivers/usb/serial/ti_usb_3410_5052.c | 29 ++++++++++++++++++++++++-----
> >> 1 file changed, 24 insertions(+), 5 deletions(-)
> >
> >This patch, and your previous one, are no longer needed, right?
>
> They are needed until the module params for adding vendor and
> product ids are removed, and it sounded like the consensus was
> to keep them for a while.

No, they will be removed for 3.12, the patches are already queued up.

thanks,

greg k-h
0 new messages