struct lirc_driver l;
 
        struct mutex ir_lock;
-       int open;
+       atomic_t open_count;
 
        struct i2c_adapter *adapter;
        struct IR_rx *rx;
                set_current_state(TASK_INTERRUPTIBLE);
 
                /* if device not opened, we can sleep half a second */
-               if (!ir->open) {
+               if (atomic_read(&ir->open_count) == 0) {
                        schedule_timeout(HZ/2);
                        continue;
                }
        if (ir == NULL)
                return -ENODEV;
 
-       /* increment in use count */
-       mutex_lock(&ir->ir_lock);
-       ++ir->open;
-       mutex_unlock(&ir->ir_lock);
+       atomic_inc(&ir->open_count);
 
        /* stash our IR struct */
        filep->private_data = ir;
                return -ENODEV;
        }
 
-       /* decrement in use count */
-       mutex_lock(&ir->ir_lock);
-       --ir->open;
-       mutex_unlock(&ir->ir_lock);
+       atomic_dec(&ir->open_count);
 
        return 0;
 }
 
                ir->adapter = adap;
                mutex_init(&ir->ir_lock);
+               atomic_set(&ir->open_count, 0);
 
                /* set lirc_dev stuff */
                memcpy(&ir->l, &lirc_template, sizeof(struct lirc_driver));