usb_put_dev(dev->udev);
 
        /* Mark device as unused */
-       cx231xx_devused &= ~(1 << dev->devno);
+       clear_bit(dev->devno, &cx231xx_devused);
 
        kfree(dev->video_mode.alt_max_pkt_size);
        kfree(dev->vbi_mode.alt_max_pkt_size);
                return -ENODEV;
 
        /* Check to see next free device and mark as used */
-       nr = find_first_zero_bit(&cx231xx_devused, CX231XX_MAXBOARDS);
-       cx231xx_devused |= 1 << nr;
-
-       if (nr >= CX231XX_MAXBOARDS) {
-               cx231xx_err(DRIVER_NAME
-                ": Supports only %i cx231xx boards.\n", CX231XX_MAXBOARDS);
-               cx231xx_devused &= ~(1 << nr);
-               return -ENOMEM;
-       }
+       do {
+               nr = find_first_zero_bit(&cx231xx_devused, CX231XX_MAXBOARDS);
+               if (nr >= CX231XX_MAXBOARDS) {
+                       /* No free device slots */
+                       cx231xx_err(DRIVER_NAME ": Supports only %i devices.\n",
+                                       CX231XX_MAXBOARDS);
+                       return -ENOMEM;
+               }
+       } while (test_and_set_bit(nr, &cx231xx_devused));
 
        /* allocate memory for our device state and initialize it */
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        if (dev == NULL) {
                cx231xx_err(DRIVER_NAME ": out of memory!\n");
-               cx231xx_devused &= ~(1 << nr);
+               clear_bit(dev->devno, &cx231xx_devused);
                return -ENOMEM;
        }
 
        if (assoc_desc->bFirstInterface != ifnum) {
                cx231xx_err(DRIVER_NAME ": Not found "
                            "matching IAD interface\n");
-               cx231xx_devused &= ~(1 << nr);
+               clear_bit(dev->devno, &cx231xx_devused);
                kfree(dev);
                dev = NULL;
                return -ENODEV;
        retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
        if (retval) {
                cx231xx_errdev("v4l2_device_register failed\n");
-               cx231xx_devused &= ~(1 << nr);
+               clear_bit(dev->devno, &cx231xx_devused);
                kfree(dev);
                dev = NULL;
                return -EIO;
        /* allocate device struct */
        retval = cx231xx_init_dev(&dev, udev, nr);
        if (retval) {
-               cx231xx_devused &= ~(1 << dev->devno);
+               clear_bit(dev->devno, &cx231xx_devused);
                v4l2_device_unregister(&dev->v4l2_dev);
                kfree(dev);
                dev = NULL;
 
        if (dev->video_mode.alt_max_pkt_size == NULL) {
                cx231xx_errdev("out of memory!\n");
-               cx231xx_devused &= ~(1 << nr);
+               clear_bit(dev->devno, &cx231xx_devused);
                v4l2_device_unregister(&dev->v4l2_dev);
                kfree(dev);
                dev = NULL;
 
        if (dev->vbi_mode.alt_max_pkt_size == NULL) {
                cx231xx_errdev("out of memory!\n");
-               cx231xx_devused &= ~(1 << nr);
+               clear_bit(dev->devno, &cx231xx_devused);
                v4l2_device_unregister(&dev->v4l2_dev);
                kfree(dev);
                dev = NULL;
 
        if (dev->sliced_cc_mode.alt_max_pkt_size == NULL) {
                cx231xx_errdev("out of memory!\n");
-               cx231xx_devused &= ~(1 << nr);
+               clear_bit(dev->devno, &cx231xx_devused);
                v4l2_device_unregister(&dev->v4l2_dev);
                kfree(dev);
                dev = NULL;
 
                if (dev->ts1_mode.alt_max_pkt_size == NULL) {
                        cx231xx_errdev("out of memory!\n");
-                       cx231xx_devused &= ~(1 << nr);
+                       clear_bit(dev->devno, &cx231xx_devused);
                        v4l2_device_unregister(&dev->v4l2_dev);
                        kfree(dev);
                        dev = NULL;