Adds support for 'Windows Easy Transfer' cables based around the
Prolific PL-25A1 chip (includes Belkin F5U258 & F5U279)
Patch originally suggested by David Brownell here:
http://www.mail-archive.com/[email protected]/msg61926.html
Modified to work with latest kernel, tested with F5U279.
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/Kconfig | 2 +-
drivers/net/usb/plusb.c | 33 ++++++++++++++++++++++++++-------
2 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 6f600cc..85fec06 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -258,7 +258,7 @@ config USB_NET_NET1080
optionally with LEDs that indicate traffic
config USB_NET_PLUSB
- tristate "Prolific PL-2301/2302 based cables"
+ tristate "Prolific PL-2301/2302/25A1 based cables"
# if the handshake/init/reset problems, from original 'plusb',
# are ever resolved ... then remove "experimental"
depends on USB_USBNET && EXPERIMENTAL
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index 08ad269..a20afac 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -45,6 +45,14 @@
* seems to get wedged under load. Prolific docs are weak, and
* don't identify differences between PL2301 and PL2302, much less
* anything to explain the different PL2302 versions observed.
+ *
+ * NOTE: pl2501 has several modes, including pl2301 and pl2302
+ * compatibility. Some docs suggest the difference between 2301
+ * and 2302 is only to make MS-Windows use a different driver...
+ *
+ * pl25a1 glue based on patch from Tony Gibbs. Prolific "docs" on
+ * this chip are as usual incomplete about what control messages
+ * are supported.
*/
/*
@@ -89,13 +97,17 @@ static int pl_reset(struct usbnet *dev)
/* some units seem to need this reset, others reject it utterly.
* FIXME be more like "naplink" or windows drivers.
*/
- (void) pl_set_QuickLink_features(dev,
+ int status;
+
+ status = pl_set_QuickLink_features(dev,
PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
+ if (status != 0 && netif_msg_probe(dev))
+ netif_dbg(dev, link, dev->net, "pl_reset --> %d\n", status);
return 0;
}
static const struct driver_info prolific_info = {
- .description = "Prolific PL-2301/PL-2302",
+ .description = "Prolific PL-2301/PL-2302/PL-25A1",
.flags = FLAG_NO_SETINT,
/* some PL-2302 versions seem to fail usb_set_interface() */
.reset = pl_reset,
@@ -110,7 +122,7 @@ static const struct driver_info prolific_info = {
*/
static const struct usb_device_id products [] = {
-
+/* full speed cables */
{
USB_DEVICE(0x067b, 0x0000), // PL-2301
.driver_info = (unsigned long) &prolific_info,
@@ -118,7 +130,14 @@ static const struct usb_device_id products [] = {
USB_DEVICE(0x067b, 0x0001), // PL-2302
.driver_info = (unsigned long) &prolific_info,
},
-
+/* high speed cables */
+{
+ USB_DEVICE(0x067b, 0x25a1), /* PL-25A1, no eeprom */
+ .driver_info = (unsigned long) &prolific_info,
+}, {
+ USB_DEVICE(0x050d, 0x258a), /* Belkin F5U258/F5U279 (PL-25A1) */
+ .driver_info = (unsigned long) &prolific_info,
+},
{ }, // END
};
MODULE_DEVICE_TABLE(usb, products);
@@ -134,16 +153,16 @@ static struct usb_driver plusb_driver = {
static int __init plusb_init(void)
{
- return usb_register(&plusb_driver);
+ return usb_register(&plusb_driver);
}
module_init(plusb_init);
static void __exit plusb_exit(void)
{
- usb_deregister(&plusb_driver);
+ usb_deregister(&plusb_driver);
}
module_exit(plusb_exit);
MODULE_AUTHOR("David Brownell");
-MODULE_DESCRIPTION("Prolific PL-2301/2302 USB Host to Host Link Driver");
+MODULE_DESCRIPTION("Prolific PL-2301/2302/25A1 USB Host to Host Link Driver");
MODULE_LICENSE("GPL");
--
1.7.0.4
From: Simon Wood <[email protected]>
Date: Tue, 29 Mar 2011 21:44:27 -0600
> @@ -89,13 +97,17 @@ static int pl_reset(struct usbnet *dev)
> /* some units seem to need this reset, others reject it utterly.
> * FIXME be more like "naplink" or windows drivers.
> */
> - (void) pl_set_QuickLink_features(dev,
> + int status;
> +
> + status = pl_set_QuickLink_features(dev,
> PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
Poor indentation here in the status assignment, there should be
only a single TAB character before "status =".
Also, declare the local variable at the beginning of the function,
before the function, not after it. And get rid of that tab between
"int" and "status, like this:
int status;
/* some units seem to need this reset, others reject it utterly.
* FIXME be more like "naplink" or windows drivers.
*/
Hello.
On 30-03-2011 7:44, Simon Wood wrote:
> Adds support for 'Windows Easy Transfer' cables based around the
> Prolific PL-25A1 chip (includes Belkin F5U258& F5U279)
> Patch originally suggested by David Brownell here:
> http://www.mail-archive.com/[email protected]/msg61926.html
> Modified to work with latest kernel, tested with F5U279.
>
> Signed-off-by: Simon Wood<[email protected]>
[...]
> diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
> index 08ad269..a20afac 100644
> --- a/drivers/net/usb/plusb.c
> +++ b/drivers/net/usb/plusb.c
[...]
> @@ -89,13 +97,17 @@ static int pl_reset(struct usbnet *dev)
> /* some units seem to need this reset, others reject it utterly.
> * FIXME be more like "naplink" or windows drivers.
> */
> - (void) pl_set_QuickLink_features(dev,
> + int status;
> +
> + status = pl_set_QuickLink_features(dev,
This line is indented with spaces ISO tab.
> + if (status != 0 && netif_msg_probe(dev))
> + netif_dbg(dev, link, dev->net, "pl_reset --> %d\n", status);
> return 0;
> }
Also, the above change doesn't seem to be related to the declared purpose
of the patch, so seems to be a matter of another patch...
> @@ -134,16 +153,16 @@ static struct usb_driver plusb_driver = {
>
> static int __init plusb_init(void)
> {
> - return usb_register(&plusb_driver);
> + return usb_register(&plusb_driver);
> }
> module_init(plusb_init);
>
> static void __exit plusb_exit(void)
> {
> - usb_deregister(&plusb_driver);
> + usb_deregister(&plusb_driver);
> }
Likewise, the whitespace fixes should be a matgter of a separate patch...
WBR, Sergei
This patch adds the USB ID's for the PL25A1, which is used in the
Belkin 'Windows Easy Transfer' cables.
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/Kconfig | 2 +-
drivers/net/usb/plusb.c | 22 ++++++++++++++++++++--
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 6f600cc..85fec06 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -258,7 +258,7 @@ config USB_NET_NET1080
optionally with LEDs that indicate traffic
config USB_NET_PLUSB
- tristate "Prolific PL-2301/2302 based cables"
+ tristate "Prolific PL-2301/2302/25A1 based cables"
# if the handshake/init/reset problems, from original 'plusb',
# are ever resolved ... then remove "experimental"
depends on USB_USBNET && EXPERIMENTAL
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index 30578ea..b9649e0 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -45,6 +45,14 @@
* seems to get wedged under load. Prolific docs are weak, and
* don't identify differences between PL2301 and PL2302, much less
* anything to explain the different PL2302 versions observed.
+ *
+ * NOTE: pl2501 has several modes, including pl2301 and pl2302
+ * compatibility. Some docs suggest the difference between 2301
+ * and 2302 is only to make MS-Windows use a different driver...
+ *
+ * pl25a1 glue based on patch from Tony Gibbs. Prolific "docs" on
+ * this chip are as usual incomplete about what control messages
+ * are supported.
*/
/*
@@ -95,7 +103,7 @@ static int pl_reset(struct usbnet *dev)
}
static const struct driver_info prolific_info = {
- .description = "Prolific PL-2301/PL-2302",
+ .description = "Prolific PL-2301/PL-2302/PL-25A1",
.flags = FLAG_NO_SETINT,
/* some PL-2302 versions seem to fail usb_set_interface() */
.reset = pl_reset,
@@ -111,6 +119,7 @@ static const struct driver_info prolific_info = {
static const struct usb_device_id products [] = {
+/* full speed cables */
{
USB_DEVICE(0x067b, 0x0000), // PL-2301
.driver_info = (unsigned long) &prolific_info,
@@ -119,6 +128,15 @@ static const struct usb_device_id products [] = {
.driver_info = (unsigned long) &prolific_info,
},
+/* high speed cables */
+{
+ USB_DEVICE(0x067b, 0x25a1), /* PL-25A1, no eeprom */
+ .driver_info = (unsigned long) &prolific_info,
+}, {
+ USB_DEVICE(0x050d, 0x258a), /* Belkin F5U258/F5U279 (PL-25A1) */
+ .driver_info = (unsigned long) &prolific_info,
+},
+
{ }, // END
};
MODULE_DEVICE_TABLE(usb, products);
@@ -145,5 +163,5 @@ static void __exit plusb_exit(void)
module_exit(plusb_exit);
MODULE_AUTHOR("David Brownell");
-MODULE_DESCRIPTION("Prolific PL-2301/2302 USB Host to Host Link Driver");
+MODULE_DESCRIPTION("Prolific PL-2301/2302/25A1 USB Host to Host Link Driver");
MODULE_LICENSE("GPL");
--
1.7.0.4
Clear up a couple of instances of incorrect whitespace
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/plusb.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index 08ad269..30578ea 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -134,13 +134,13 @@ static struct usb_driver plusb_driver = {
static int __init plusb_init(void)
{
- return usb_register(&plusb_driver);
+ return usb_register(&plusb_driver);
}
module_init(plusb_init);
static void __exit plusb_exit(void)
{
- usb_deregister(&plusb_driver);
+ usb_deregister(&plusb_driver);
}
module_exit(plusb_exit);
--
1.7.0.4
Adds some debug in the event that reseting chip fails for some reason
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/plusb.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index b9649e0..11ff297 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -94,11 +94,15 @@ pl_set_QuickLink_features(struct usbnet *dev, int val)
static int pl_reset(struct usbnet *dev)
{
+ int status;
+
/* some units seem to need this reset, others reject it utterly.
* FIXME be more like "naplink" or windows drivers.
*/
- (void) pl_set_QuickLink_features(dev,
+ status = pl_set_QuickLink_features(dev,
PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
+ if (status != 0 && netif_msg_probe(dev))
+ netif_dbg(dev, link, dev->net, "pl_reset --> %d\n", status);
return 0;
}
--
1.7.0.4
There are some problems with this patch series:
1) Please compose your subject lines more correctly. When I such these
patches into GIT, everything in the initial "[]" brackets is removed
and the commit header line for this patch (for example) ends up being
just "whitespace".
We want more than that.
Try something like:
Subject: [PATCH v2 1/3] usb: plusb: Whitespace.
Subject: [PATCH v2 2/3] usb: plusb: Add PL25A1 support.
Subject: [PATCH v2 3/3] usb: plusb: Add reset debugging.
2) Patch 2 doesn't apply cleanly to the current tree, you'll need to
refresh these patches.
Thanks.
From: simon <simon@ubuntu.(none)>
This patch adds support for the PL-25A1 by adding the appropriate
USB ID's. This chip is used in the Belkin 'Windows Easy Transfer'
Cables.
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/Kconfig | 2 +-
drivers/net/usb/plusb.c | 22 ++++++++++++++++++++--
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 3ec22c3..9d4f911 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -258,7 +258,7 @@ config USB_NET_NET1080
optionally with LEDs that indicate traffic
config USB_NET_PLUSB
- tristate "Prolific PL-2301/2302 based cables"
+ tristate "Prolific PL-2301/2302/25A1 based cables"
# if the handshake/init/reset problems, from original 'plusb',
# are ever resolved ... then remove "experimental"
depends on USB_USBNET && EXPERIMENTAL
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index 2fe1bb5..f46aa07 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -45,6 +45,14 @@
* seems to get wedged under load. Prolific docs are weak, and
* don't identify differences between PL2301 and PL2302, much less
* anything to explain the different PL2302 versions observed.
+ *
+ * NOTE: pl2501 has several modes, including pl2301 and pl2302
+ * compatibility. Some docs suggest the difference between 2301
+ * and 2302 is only to make MS-Windows use a different driver...
+ *
+ * pl25a1 glue based on patch from Tony Gibbs. Prolific "docs" on
+ * this chip are as usual incomplete about what control messages
+ * are supported.
*/
/*
@@ -95,7 +103,7 @@ static int pl_reset(struct usbnet *dev)
}
static const struct driver_info prolific_info = {
- .description = "Prolific PL-2301/PL-2302",
+ .description = "Prolific PL-2301/PL-2302/PL-25A1",
.flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT,
/* some PL-2302 versions seem to fail usb_set_interface() */
.reset = pl_reset,
@@ -111,6 +119,7 @@ static const struct driver_info prolific_info = {
static const struct usb_device_id products [] = {
+/* full speed cables */
{
USB_DEVICE(0x067b, 0x0000), // PL-2301
.driver_info = (unsigned long) &prolific_info,
@@ -119,6 +128,15 @@ static const struct usb_device_id products [] = {
.driver_info = (unsigned long) &prolific_info,
},
+/* high speed cables */
+{
+ USB_DEVICE(0x067b, 0x25a1), /* PL-25A1, no eeprom */
+ .driver_info = (unsigned long) &prolific_info,
+}, {
+ USB_DEVICE(0x050d, 0x258a), /* Belkin F5U258/F5U279 (PL-25A1) */
+ .driver_info = (unsigned long) &prolific_info,
+},
+
{ }, // END
};
MODULE_DEVICE_TABLE(usb, products);
@@ -145,5 +163,5 @@ static void __exit plusb_exit(void)
module_exit(plusb_exit);
MODULE_AUTHOR("David Brownell");
-MODULE_DESCRIPTION("Prolific PL-2301/2302 USB Host to Host Link Driver");
+MODULE_DESCRIPTION("Prolific PL-2301/2302/25A1 USB Host to Host Link Driver");
MODULE_LICENSE("GPL");
--
1.7.4.1
From: simon <simon@ubuntu.(none)>
This patch cleans up a couple of instances of incorrect whitespace
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/plusb.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index 823c537..2fe1bb5 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -134,13 +134,13 @@ static struct usb_driver plusb_driver = {
static int __init plusb_init(void)
{
- return usb_register(&plusb_driver);
+ return usb_register(&plusb_driver);
}
module_init(plusb_init);
static void __exit plusb_exit(void)
{
- usb_deregister(&plusb_driver);
+ usb_deregister(&plusb_driver);
}
module_exit(plusb_exit);
--
1.7.4.1
From: simon <simon@ubuntu.(none)>
This patch adds some debug to the reset function to print out the
reason why it fails.
Signed-off-by: Simon Wood <[email protected]>
---
drivers/net/usb/plusb.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
index f46aa07..217aec8 100644
--- a/drivers/net/usb/plusb.c
+++ b/drivers/net/usb/plusb.c
@@ -94,11 +94,15 @@ pl_set_QuickLink_features(struct usbnet *dev, int val)
static int pl_reset(struct usbnet *dev)
{
+ int status;
+
/* some units seem to need this reset, others reject it utterly.
* FIXME be more like "naplink" or windows drivers.
*/
- (void) pl_set_QuickLink_features(dev,
+ status = pl_set_QuickLink_features(dev,
PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
+ if (status != 0 && netif_msg_probe(dev))
+ netif_dbg(dev, link, dev->net, "pl_reset --> %d\n", status);
return 0;
}
--
1.7.4.1
From: Simon Wood <[email protected]>
Date: Thu, 7 Apr 2011 00:40:13 -0700
> From: simon <simon@ubuntu.(none)>
>
> This patch cleans up a couple of instances of incorrect whitespace
>
> Signed-off-by: Simon Wood <[email protected]>
Applied.
From: Simon Wood <[email protected]>
Date: Thu, 7 Apr 2011 00:40:14 -0700
> From: simon <simon@ubuntu.(none)>
>
> This patch adds support for the PL-25A1 by adding the appropriate
> USB ID's. This chip is used in the Belkin 'Windows Easy Transfer'
> Cables.
>
> Signed-off-by: Simon Wood <[email protected]>
Applied.
From: Simon Wood <[email protected]>
Date: Thu, 7 Apr 2011 00:40:15 -0700
> From: simon <simon@ubuntu.(none)>
>
> This patch adds some debug to the reset function to print out the
> reason why it fails.
>
> Signed-off-by: Simon Wood <[email protected]>
Applied.