struct gs_usb {
        struct gs_can *canch[GS_MAX_INTF];
        struct usb_anchor rx_submitted;
-       atomic_t active_channels;
        struct usb_device *udev;
+       u8 active_channels;
 };
 
 /* 'allocate' a tx context.
        if (rc)
                return rc;
 
-       if (atomic_add_return(1, &parent->active_channels) == 1) {
+       if (!parent->active_channels) {
                for (i = 0; i < GS_MAX_RX_URBS; i++) {
                        struct urb *urb;
                        u8 *buf;
 
        dev->can.state = CAN_STATE_ERROR_ACTIVE;
 
+       parent->active_channels++;
        if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
                netif_start_queue(netdev);
 
        netif_stop_queue(netdev);
 
        /* Stop polling */
-       if (atomic_dec_and_test(&parent->active_channels))
+       parent->active_channels--;
+       if (!parent->active_channels)
                usb_kill_anchored_urbs(&parent->rx_submitted);
 
        /* Stop sending URBs */
 
        init_usb_anchor(&dev->rx_submitted);
 
-       atomic_set(&dev->active_channels, 0);
-
        usb_set_intfdata(intf, dev);
        dev->udev = interface_to_usbdev(intf);