]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
usbnet: asix: apply introduced usb command APIs
authorMing Lei <ming.lei@canonical.com>
Wed, 24 Oct 2012 19:46:55 +0000 (19:46 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Oct 2012 07:36:50 +0000 (03:36 -0400)
Acked-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/asix_common.c

index 774d9ce2dafcefa699311c8f33532cebd3187dc8..50d167330d384e76b8d3ebfe9cd15cd26dd45c87 100644 (file)
 int asix_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
                  u16 size, void *data)
 {
-       void *buf;
-       int err = -ENOMEM;
-
-       netdev_dbg(dev->net, "asix_read_cmd() cmd=0x%02x value=0x%04x index=0x%04x size=%d\n",
-                  cmd, value, index, size);
-
-       buf = kmalloc(size, GFP_KERNEL);
-       if (!buf)
-               goto out;
-
-       err = usb_control_msg(
-               dev->udev,
-               usb_rcvctrlpipe(dev->udev, 0),
-               cmd,
-               USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
-               value,
-               index,
-               buf,
-               size,
-               USB_CTRL_GET_TIMEOUT);
-       if (err == size)
-               memcpy(data, buf, size);
-       else if (err >= 0)
-               err = -EINVAL;
-       kfree(buf);
+       int ret;
+       ret = usbnet_read_cmd(dev, cmd,
+                              USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                              value, index, data, size);
 
-out:
-       return err;
+       if (ret != size && ret >= 0)
+               return -EINVAL;
+       return ret;
 }
 
 int asix_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
                   u16 size, void *data)
 {
-       void *buf = NULL;
-       int err = -ENOMEM;
-
-       netdev_dbg(dev->net, "asix_write_cmd() cmd=0x%02x value=0x%04x index=0x%04x size=%d\n",
-                  cmd, value, index, size);
-
-       if (data) {
-               buf = kmemdup(data, size, GFP_KERNEL);
-               if (!buf)
-                       goto out;
-       }
-
-       err = usb_control_msg(
-               dev->udev,
-               usb_sndctrlpipe(dev->udev, 0),
-               cmd,
-               USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
-               value,
-               index,
-               buf,
-               size,
-               USB_CTRL_SET_TIMEOUT);
-       kfree(buf);
-
-out:
-       return err;
-}
-
-static void asix_async_cmd_callback(struct urb *urb)
-{
-       struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context;
-       int status = urb->status;
-
-       if (status < 0)
-               printk(KERN_DEBUG "asix_async_cmd_callback() failed with %d",
-                       status);
-
-       kfree(req);
-       usb_free_urb(urb);
+       return usbnet_write_cmd(dev, cmd,
+                               USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                               value, index, data, size);
 }
 
 void asix_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
                          u16 size, void *data)
 {
-       struct usb_ctrlrequest *req;
-       int status;
-       struct urb *urb;
-
-       netdev_dbg(dev->net, "asix_write_cmd_async() cmd=0x%02x value=0x%04x index=0x%04x size=%d\n",
-                  cmd, value, index, size);
-
-       urb = usb_alloc_urb(0, GFP_ATOMIC);
-       if (!urb) {
-               netdev_err(dev->net, "Error allocating URB in write_cmd_async!\n");
-               return;
-       }
-
-       req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
-       if (!req) {
-               netdev_err(dev->net, "Failed to allocate memory for control request\n");
-               usb_free_urb(urb);
-               return;
-       }
-
-       req->bRequestType = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE;
-       req->bRequest = cmd;
-       req->wValue = cpu_to_le16(value);
-       req->wIndex = cpu_to_le16(index);
-       req->wLength = cpu_to_le16(size);
-
-       usb_fill_control_urb(urb, dev->udev,
-                            usb_sndctrlpipe(dev->udev, 0),
-                            (void *)req, data, size,
-                            asix_async_cmd_callback, req);
-
-       status = usb_submit_urb(urb, GFP_ATOMIC);
-       if (status < 0) {
-               netdev_err(dev->net, "Error submitting the control message: status=%d\n",
-                          status);
-               kfree(req);
-               usb_free_urb(urb);
-       }
+       usbnet_write_cmd_async(dev, cmd,
+                              USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                              value, index, data, size);
 }
 
 int asix_rx_fixup(struct usbnet *dev, struct sk_buff *skb)