dm9601: bring datasheet URL up to date
[pandora-kernel.git] / drivers / net / usb / dm9601.c
index db3377d..49a30bd 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/usb/usbnet.h>
 
 /* datasheet:
- http://www.davicom.com.tw/big5/download/Data%20Sheet/DM9601-DS-P01-930914.pdf
+ http://ptm2.cc.utu.fi/ftp/network/cards/DM9601/From_NET/DM9601-DS-P01-930914.pdf
 */
 
 /* control requests */
@@ -123,10 +123,11 @@ static int dm_write_reg(struct usbnet *dev, u8 reg, u8 value)
 static void dm_write_async_callback(struct urb *urb)
 {
        struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context;
+       int status = urb->status;
 
-       if (urb->status < 0)
+       if (status < 0)
                printk(KERN_DEBUG "dm_write_async_callback() failed with %d\n",
-                      urb->status);
+                      status);
 
        kfree(req);
        usb_free_urb(urb);
@@ -413,6 +414,7 @@ static int dm9601_set_mac_address(struct net_device *net, void *p)
 static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf)
 {
        int ret;
+       u8 mac[ETH_ALEN];
 
        ret = usbnet_get_endpoints(dev, intf);
        if (ret)
@@ -437,12 +439,18 @@ static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf)
        udelay(20);
 
        /* read MAC */
-       if (dm_read(dev, DM_PHY_ADDR, ETH_ALEN, dev->net->dev_addr) < 0) {
+       if (dm_read(dev, DM_PHY_ADDR, ETH_ALEN, mac) < 0) {
                printk(KERN_ERR "Error reading MAC address\n");
                ret = -ENODEV;
                goto out;
        }
 
+       /*
+        * Overwrite the auto-generated address only with good ones.
+        */
+       if (is_valid_ether_addr(mac))
+               memcpy(dev->net->dev_addr, mac, ETH_ALEN);
+
        /* power up phy */
        dm_write_reg(dev, DM_GPR_CTRL, 1);
        dm_write_reg(dev, DM_GPR_DATA, 0);