diff options
Diffstat (limited to 'drivers/net/usb/plusb.c')
-rw-r--r-- | drivers/net/usb/plusb.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c index 08555f8b15f4..217aec8a768f 100644 --- a/drivers/net/usb/plusb.c +++ b/drivers/net/usb/plusb.c | |||
@@ -32,7 +32,7 @@ | |||
32 | 32 | ||
33 | 33 | ||
34 | /* | 34 | /* |
35 | * Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com | 35 | * Prolific PL-2301/PL-2302 driver ... http://www.prolific.com.tw/ |
36 | * | 36 | * |
37 | * The protocol and handshaking used here should be bug-compatible | 37 | * The protocol and handshaking used here should be bug-compatible |
38 | * with the Linux 2.2 "plusb" driver, by Deti Fliegl. | 38 | * with the Linux 2.2 "plusb" driver, by Deti Fliegl. |
@@ -45,6 +45,14 @@ | |||
45 | * seems to get wedged under load. Prolific docs are weak, and | 45 | * seems to get wedged under load. Prolific docs are weak, and |
46 | * don't identify differences between PL2301 and PL2302, much less | 46 | * don't identify differences between PL2301 and PL2302, much less |
47 | * anything to explain the different PL2302 versions observed. | 47 | * anything to explain the different PL2302 versions observed. |
48 | * | ||
49 | * NOTE: pl2501 has several modes, including pl2301 and pl2302 | ||
50 | * compatibility. Some docs suggest the difference between 2301 | ||
51 | * and 2302 is only to make MS-Windows use a different driver... | ||
52 | * | ||
53 | * pl25a1 glue based on patch from Tony Gibbs. Prolific "docs" on | ||
54 | * this chip are as usual incomplete about what control messages | ||
55 | * are supported. | ||
48 | */ | 56 | */ |
49 | 57 | ||
50 | /* | 58 | /* |
@@ -86,17 +94,21 @@ pl_set_QuickLink_features(struct usbnet *dev, int val) | |||
86 | 94 | ||
87 | static int pl_reset(struct usbnet *dev) | 95 | static int pl_reset(struct usbnet *dev) |
88 | { | 96 | { |
97 | int status; | ||
98 | |||
89 | /* some units seem to need this reset, others reject it utterly. | 99 | /* some units seem to need this reset, others reject it utterly. |
90 | * FIXME be more like "naplink" or windows drivers. | 100 | * FIXME be more like "naplink" or windows drivers. |
91 | */ | 101 | */ |
92 | (void) pl_set_QuickLink_features(dev, | 102 | status = pl_set_QuickLink_features(dev, |
93 | PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E); | 103 | PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E); |
104 | if (status != 0 && netif_msg_probe(dev)) | ||
105 | netif_dbg(dev, link, dev->net, "pl_reset --> %d\n", status); | ||
94 | return 0; | 106 | return 0; |
95 | } | 107 | } |
96 | 108 | ||
97 | static const struct driver_info prolific_info = { | 109 | static const struct driver_info prolific_info = { |
98 | .description = "Prolific PL-2301/PL-2302", | 110 | .description = "Prolific PL-2301/PL-2302/PL-25A1", |
99 | .flags = FLAG_NO_SETINT, | 111 | .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT, |
100 | /* some PL-2302 versions seem to fail usb_set_interface() */ | 112 | /* some PL-2302 versions seem to fail usb_set_interface() */ |
101 | .reset = pl_reset, | 113 | .reset = pl_reset, |
102 | }; | 114 | }; |
@@ -111,6 +123,7 @@ static const struct driver_info prolific_info = { | |||
111 | 123 | ||
112 | static const struct usb_device_id products [] = { | 124 | static const struct usb_device_id products [] = { |
113 | 125 | ||
126 | /* full speed cables */ | ||
114 | { | 127 | { |
115 | USB_DEVICE(0x067b, 0x0000), // PL-2301 | 128 | USB_DEVICE(0x067b, 0x0000), // PL-2301 |
116 | .driver_info = (unsigned long) &prolific_info, | 129 | .driver_info = (unsigned long) &prolific_info, |
@@ -119,6 +132,15 @@ static const struct usb_device_id products [] = { | |||
119 | .driver_info = (unsigned long) &prolific_info, | 132 | .driver_info = (unsigned long) &prolific_info, |
120 | }, | 133 | }, |
121 | 134 | ||
135 | /* high speed cables */ | ||
136 | { | ||
137 | USB_DEVICE(0x067b, 0x25a1), /* PL-25A1, no eeprom */ | ||
138 | .driver_info = (unsigned long) &prolific_info, | ||
139 | }, { | ||
140 | USB_DEVICE(0x050d, 0x258a), /* Belkin F5U258/F5U279 (PL-25A1) */ | ||
141 | .driver_info = (unsigned long) &prolific_info, | ||
142 | }, | ||
143 | |||
122 | { }, // END | 144 | { }, // END |
123 | }; | 145 | }; |
124 | MODULE_DEVICE_TABLE(usb, products); | 146 | MODULE_DEVICE_TABLE(usb, products); |
@@ -134,16 +156,16 @@ static struct usb_driver plusb_driver = { | |||
134 | 156 | ||
135 | static int __init plusb_init(void) | 157 | static int __init plusb_init(void) |
136 | { | 158 | { |
137 | return usb_register(&plusb_driver); | 159 | return usb_register(&plusb_driver); |
138 | } | 160 | } |
139 | module_init(plusb_init); | 161 | module_init(plusb_init); |
140 | 162 | ||
141 | static void __exit plusb_exit(void) | 163 | static void __exit plusb_exit(void) |
142 | { | 164 | { |
143 | usb_deregister(&plusb_driver); | 165 | usb_deregister(&plusb_driver); |
144 | } | 166 | } |
145 | module_exit(plusb_exit); | 167 | module_exit(plusb_exit); |
146 | 168 | ||
147 | MODULE_AUTHOR("David Brownell"); | 169 | MODULE_AUTHOR("David Brownell"); |
148 | MODULE_DESCRIPTION("Prolific PL-2301/2302 USB Host to Host Link Driver"); | 170 | MODULE_DESCRIPTION("Prolific PL-2301/2302/25A1 USB Host to Host Link Driver"); |
149 | MODULE_LICENSE("GPL"); | 171 | MODULE_LICENSE("GPL"); |