struct aiptek {
        struct input_dev *inputdev;             /* input device struct           */
-       struct usb_device *usbdev;              /* usb device struct             */
        struct usb_interface *intf;             /* usb interface struct          */
        struct urb *urb;                        /* urb for incoming reports      */
        dma_addr_t data_dma;                    /* our dma stuffage              */
 {
        struct aiptek *aiptek = input_get_drvdata(inputdev);
 
-       aiptek->urb->dev = aiptek->usbdev;
+       aiptek->urb->dev = interface_to_usbdev(aiptek->intf);
        if (usb_submit_urb(aiptek->urb, GFP_KERNEL) != 0)
                return -EIO;
 
                  unsigned char report_type,
                  unsigned char report_id, void *buffer, int size)
 {
-       return usb_control_msg(aiptek->usbdev,
-                              usb_sndctrlpipe(aiptek->usbdev, 0),
+       struct usb_device *udev = interface_to_usbdev(aiptek->intf);
+
+       return usb_control_msg(udev,
+                              usb_sndctrlpipe(udev, 0),
                               USB_REQ_SET_REPORT,
                               USB_TYPE_CLASS | USB_RECIP_INTERFACE |
                               USB_DIR_OUT, (report_type << 8) + report_id,
                  unsigned char report_type,
                  unsigned char report_id, void *buffer, int size)
 {
-       return usb_control_msg(aiptek->usbdev,
-                              usb_rcvctrlpipe(aiptek->usbdev, 0),
+       struct usb_device *udev = interface_to_usbdev(aiptek->intf);
+
+       return usb_control_msg(udev,
+                              usb_rcvctrlpipe(udev, 0),
                               USB_REQ_GET_REPORT,
                               USB_TYPE_CLASS | USB_RECIP_INTERFACE |
                               USB_DIR_IN, (report_type << 8) + report_id,
        }
 
        aiptek->inputdev = inputdev;
-       aiptek->usbdev = usbdev;
        aiptek->intf = intf;
        aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber;
        aiptek->inDelay = 0;
         * input.
         */
        usb_fill_int_urb(aiptek->urb,
-                        aiptek->usbdev,
-                        usb_rcvintpipe(aiptek->usbdev,
+                        usbdev,
+                        usb_rcvintpipe(usbdev,
                                        endpoint->bEndpointAddress),
                         aiptek->data, 8, aiptek_irq, aiptek,
                         endpoint->bInterval);