diff options
Diffstat (limited to 'drivers/net/usb/plusb.c')
| -rw-r--r-- | drivers/net/usb/plusb.c | 58 | 
1 files changed, 33 insertions, 25 deletions
diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c index 08ad269f6b4..3d18bb0eee8 100644 --- a/drivers/net/usb/plusb.c +++ b/drivers/net/usb/plusb.c @@ -13,15 +13,13 @@   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * along with this program; if not, see <http://www.gnu.org/licenses/>.   */  // #define	DEBUG			// error path messages, extra info  // #define	VERBOSE			// more; success messages  #include <linux/module.h> -#include <linux/init.h>  #include <linux/netdevice.h>  #include <linux/etherdevice.h>  #include <linux/ethtool.h> @@ -45,6 +43,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.   */  /* @@ -63,13 +69,10 @@  static inline int  pl_vendor_req(struct usbnet *dev, u8 req, u8 val, u8 index)  { -	return usb_control_msg(dev->udev, -		usb_rcvctrlpipe(dev->udev, 0), -		req, -		USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, -		val, index, -		NULL, 0, -		USB_CTRL_GET_TIMEOUT); +	return usbnet_read_cmd(dev, req, +				USB_DIR_IN | USB_TYPE_VENDOR | +				USB_RECIP_DEVICE, +				val, index, NULL, 0);  }  static inline int @@ -86,17 +89,21 @@ 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;  }  static const struct driver_info	prolific_info = { -	.description =	"Prolific PL-2301/PL-2302", -	.flags =	FLAG_NO_SETINT, +	.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 +118,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 +127,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); @@ -130,20 +147,11 @@ static struct usb_driver plusb_driver = {  	.disconnect =	usbnet_disconnect,  	.suspend =	usbnet_suspend,  	.resume =	usbnet_resume, +	.disable_hub_initiated_lpm = 1,  }; -static int __init plusb_init(void) -{ - 	return usb_register(&plusb_driver); -} -module_init(plusb_init); - -static void __exit plusb_exit(void) -{ - 	usb_deregister(&plusb_driver); -} -module_exit(plusb_exit); +module_usb_driver(plusb_driver);  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");  | 
