#include <recv_osdep.h>
 #include <rtw_sreset.h>
 
+#define REALTEK_USB_VENQT_READ (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE)
+#define REALTEK_USB_VENQT_WRITE        (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE)
+
 #define REALTEK_USB_VENQT_CMD_REQ      0x05
 #define REALTEK_USB_VENQT_CMD_IDX      0x00
 
 }
 
 static int
-usbctrl_vendorreq(struct adapter *adapt, u16 value, void *pdata, u16 len, u8 requesttype)
+usbctrl_vendorreq(struct adapter *adapt, u16 value, void *pdata, u16 len, u8 reqtype)
 {
        struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt);
        struct usb_device *udev = dvobjpriv->pusbdev;
        unsigned int pipe;
        int status = 0;
-       u8 reqtype;
        u8 *pIo_buf;
        int vendorreq_times = 0;
 
        while (++vendorreq_times <= MAX_USBCTRL_VENDORREQ_TIMES) {
                memset(pIo_buf, 0, len);
 
-               if (requesttype == 0x01) {
+               if (reqtype == REALTEK_USB_VENQT_READ) {
                        pipe = usb_rcvctrlpipe(udev, 0);/* read_in */
-                       reqtype =  REALTEK_USB_VENQT_READ;
-               } else {
+               } else if (reqtype == REALTEK_USB_VENQT_WRITE) {
                        pipe = usb_sndctrlpipe(udev, 0);/* write_out */
-                       reqtype =  REALTEK_USB_VENQT_WRITE;
                        memcpy(pIo_buf, pdata, len);
+               } else {
+                       status = -EINVAL;
+                       goto free_buf;
                }
 
                status = usb_control_msg(udev, pipe, REALTEK_USB_VENQT_CMD_REQ,
                                         pIo_buf, len, RTW_USB_CONTROL_MSG_TIMEOUT);
 
                if (status == len) {   /*  Success this control transfer. */
-                       if (requesttype == 0x01)
+                       if (reqtype == REALTEK_USB_VENQT_READ)
                                memcpy(pdata, pIo_buf,  len);
                } else { /*  error cases */
                        DBG_88E("reg 0x%x, usb %s %u fail, status:%d value=0x%x, vendorreq_times:%d\n",
-                               value, (requesttype == 0x01) ? "read" : "write",
+                               value, (reqtype == REALTEK_USB_VENQT_READ) ? "read" : "write",
                                len, status, *(u32 *)pdata, vendorreq_times);
 
                        if (status < 0) {
                                        adapt->HalData->srestpriv.wifi_error_status = USB_VEN_REQ_CMD_FAIL;
                        } else { /*  status != len && status >= 0 */
                                if (status > 0) {
-                                       if (requesttype == 0x01) {
+                                       if (reqtype == REALTEK_USB_VENQT_READ) {
                                                /*  For Control read transfer, we have to copy the read data from pIo_buf to pdata. */
                                                memcpy(pdata, pIo_buf,  len);
                                        }
                if ((value >= FW_8188E_START_ADDRESS && value <= FW_8188E_END_ADDRESS) || status == len)
                        break;
        }
-       kfree(pIo_buf);
 
+free_buf:
+       kfree(pIo_buf);
 release_mutex:
        mutex_unlock(&dvobjpriv->usb_vendor_req_mutex);
 exit:
 
 u8 usb_read8(struct adapter *adapter, u32 addr)
 {
-       u8 requesttype;
        u16 wvalue;
        u16 len;
        u8 data = 0;
 
-       requesttype = 0x01;/* read_in */
-
        wvalue = (u16)(addr & 0x0000ffff);
        len = 1;
 
-       usbctrl_vendorreq(adapter, wvalue, &data, len, requesttype);
+       usbctrl_vendorreq(adapter, wvalue, &data, len, REALTEK_USB_VENQT_READ);
 
        return data;
 }
 
 u16 usb_read16(struct adapter *adapter, u32 addr)
 {
-       u8 requesttype;
        u16 wvalue;
        u16 len;
        __le32 data;
 
-       requesttype = 0x01;/* read_in */
        wvalue = (u16)(addr & 0x0000ffff);
        len = 2;
-       usbctrl_vendorreq(adapter, wvalue, &data, len, requesttype);
+       usbctrl_vendorreq(adapter, wvalue, &data, len, REALTEK_USB_VENQT_READ);
 
        return (u16)(le32_to_cpu(data) & 0xffff);
 }
 
 u32 usb_read32(struct adapter *adapter, u32 addr)
 {
-       u8 requesttype;
        u16 wvalue;
        u16 len;
        __le32 data;
 
-       requesttype = 0x01;/* read_in */
-
        wvalue = (u16)(addr & 0x0000ffff);
        len = 4;
 
-       usbctrl_vendorreq(adapter, wvalue, &data, len, requesttype);
+       usbctrl_vendorreq(adapter, wvalue, &data, len, REALTEK_USB_VENQT_READ);
 
        return le32_to_cpu(data);
 }
 
 int usb_write8(struct adapter *adapter, u32 addr, u8 val)
 {
-       u8 requesttype;
        u16 wvalue;
        u16 len;
        u8 data;
 
-       requesttype = 0x00;/* write_out */
        wvalue = (u16)(addr & 0x0000ffff);
        len = 1;
        data = val;
-       return usbctrl_vendorreq(adapter, wvalue, &data, len, requesttype);
+       return usbctrl_vendorreq(adapter, wvalue, &data, len, REALTEK_USB_VENQT_WRITE);
 }
 
 int usb_write16(struct adapter *adapter, u32 addr, u16 val)
 {
-       u8 requesttype;
        u16 wvalue;
        u16 len;
        __le32 data;
 
-       requesttype = 0x00;/* write_out */
-
        wvalue = (u16)(addr & 0x0000ffff);
        len = 2;
 
        data = cpu_to_le32(val & 0x0000ffff);
 
-       return usbctrl_vendorreq(adapter, wvalue, &data, len, requesttype);
+       return usbctrl_vendorreq(adapter, wvalue, &data, len, REALTEK_USB_VENQT_WRITE);
 }
 
 int usb_write32(struct adapter *adapter, u32 addr, u32 val)
 {
-       u8 requesttype;
        u16 wvalue;
        u16 len;
        __le32 data;
 
-       requesttype = 0x00;/* write_out */
-
        wvalue = (u16)(addr & 0x0000ffff);
        len = 4;
        data = cpu_to_le32(val);
 
-       return usbctrl_vendorreq(adapter, wvalue, &data, len, requesttype);
+       return usbctrl_vendorreq(adapter, wvalue, &data, len, REALTEK_USB_VENQT_WRITE);
 }
 
 static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)