struct sierra_net_data *priv = sierra_net_get_private(dev);
        int  status;
 
-       status = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
-                       USB_CDC_SEND_ENCAPSULATED_COMMAND,
-                       USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE, 0,
-                       priv->ifnum, cmd, cmdlen, USB_CTRL_SET_TIMEOUT);
+       status = usbnet_write_cmd(dev, USB_CDC_SEND_ENCAPSULATED_COMMAND,
+                                 USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE,
+                                 0, priv->ifnum, cmd, cmdlen);
 
        if (status != cmdlen && status != -ENODEV)
                netdev_err(dev->net, "Submit %s failed %d\n", cmd_name, status);
 static int sierra_net_get_fw_attr(struct usbnet *dev, u16 *datap)
 {
        int result = 0;
-       u16 *attrdata;
-
-       attrdata = kmalloc(sizeof(*attrdata), GFP_KERNEL);
-       if (!attrdata)
-               return -ENOMEM;
-
-       result = usb_control_msg(
-                       dev->udev,
-                       usb_rcvctrlpipe(dev->udev, 0),
-                       /* _u8 vendor specific request */
-                       SWI_USB_REQUEST_GET_FW_ATTR,
-                       USB_DIR_IN | USB_TYPE_VENDOR,   /* __u8 request type */
-                       0x0000,         /* __u16 value not used */
-                       0x0000,         /* __u16 index  not used */
-                       attrdata,       /* char *data */
-                       sizeof(*attrdata),              /* __u16 size */
-                       USB_CTRL_SET_TIMEOUT);  /* int timeout */
-
-       if (result < 0) {
-               kfree(attrdata);
+       u16 attrdata;
+
+       result = usbnet_read_cmd(dev,
+                               /* _u8 vendor specific request */
+                               SWI_USB_REQUEST_GET_FW_ATTR,
+                               USB_DIR_IN | USB_TYPE_VENDOR,   /* __u8 request type */
+                               0x0000,         /* __u16 value not used */
+                               0x0000,         /* __u16 index  not used */
+                               &attrdata,      /* char *data */
+                               sizeof(attrdata)        /* __u16 size */
+                               );
+
+       if (result < 0)
                return -EIO;
-       }
-
-       *datap = le16_to_cpu(*attrdata);
 
-       kfree(attrdata);
+       *datap = le16_to_cpu(attrdata);
        return result;
 }