struct bas_cardstate {
        struct usb_device       *udev;          /* USB device pointer */
+       struct cardstate        *cs;
        struct usb_interface    *interface;     /* interface for this device */
        unsigned char           minor;          /* starting minor number */
 
 static void cmd_in_timeout(struct timer_list *t)
 {
        struct bas_cardstate *ucs = from_timer(ucs, t, timer_cmd_in);
-       struct urb *urb = ucs->urb_int_in;
-       struct cardstate *cs = urb->context;
+       struct cardstate *cs = ucs->cs;
        int rc;
 
        if (!ucs->rcvbuf_size) {
 static void int_in_resubmit(struct timer_list *t)
 {
        struct bas_cardstate *ucs = from_timer(ucs, t, timer_int_in);
-       struct urb *urb = ucs->urb_int_in;
-       struct cardstate *cs = urb->context;
+       struct cardstate *cs = ucs->cs;
        int rc;
 
        if (ucs->retry_int_in++ >= BAS_RETRY) {
 static void req_timeout(struct timer_list *t)
 {
        struct bas_cardstate *ucs = from_timer(ucs, t, timer_ctrl);
-       struct urb *urb = ucs->urb_int_in;
-       struct cardstate *cs = urb->context;
+       struct cardstate *cs = ucs->cs;
        int pending;
        unsigned long flags;
 
 static void atrdy_timeout(struct timer_list *t)
 {
        struct bas_cardstate *ucs = from_timer(ucs, t, timer_atrdy);
-       struct urb *urb = ucs->urb_int_in;
-       struct cardstate *cs = urb->context;
+       struct cardstate *cs = ucs->cs;
 
        dev_warn(cs->dev, "timeout waiting for HD_READY_SEND_ATDATA\n");
 
        }
 
        spin_lock_init(&ucs->lock);
+       ucs->cs = cs;
        timer_setup(&ucs->timer_ctrl, req_timeout, 0);
        timer_setup(&ucs->timer_atrdy, atrdy_timeout, 0);
        timer_setup(&ucs->timer_cmd_in, cmd_in_timeout, 0);