struct usbtmc_ctrlrequest request;
        u8 *buffer = NULL;
        int rv;
+       unsigned int is_in, pipe;
        unsigned long res;
 
        res = copy_from_user(&request, arg, sizeof(struct usbtmc_ctrlrequest));
        if (request.req.wLength > USBTMC_BUFSIZE)
                return -EMSGSIZE;
 
+       is_in = request.req.bRequestType & USB_DIR_IN;
+
        if (request.req.wLength) {
                buffer = kmalloc(request.req.wLength, GFP_KERNEL);
                if (!buffer)
                        return -ENOMEM;
 
-               if ((request.req.bRequestType & USB_DIR_IN) == 0) {
+               if (!is_in) {
                        /* Send control data to device */
                        res = copy_from_user(buffer, request.data,
                                             request.req.wLength);
                }
        }
 
+       if (is_in)
+               pipe = usb_rcvctrlpipe(data->usb_dev, 0);
+       else
+               pipe = usb_sndctrlpipe(data->usb_dev, 0);
        rv = usb_control_msg(data->usb_dev,
-                       usb_rcvctrlpipe(data->usb_dev, 0),
+                       pipe,
                        request.req.bRequest,
                        request.req.bRequestType,
                        request.req.wValue,
                goto exit;
        }
 
-       if (rv && (request.req.bRequestType & USB_DIR_IN)) {
+       if (rv && is_in) {
                /* Read control data from device */
                res = copy_to_user(request.data, buffer, rv);
                if (res)