Merge branch 'stable-3.2' into pandora-3.2
[pandora-kernel.git] / drivers / staging / comedi / comedi_fops.c
index 4ad2c0e..ab9f5ed 100644 (file)
@@ -843,7 +843,7 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn,
                                ret = -EAGAIN;
                                break;
                        }
-                       ret = s->async->inttrig(dev, s, insn->data[0]);
+                       ret = s->async->inttrig(dev, s, data[0]);
                        if (ret >= 0)
                                ret = 1;
                        break;
@@ -1088,7 +1088,6 @@ static int do_cmd_ioctl(struct comedi_device *dev,
                goto cleanup;
        }
 
-       kfree(async->cmd.chanlist);
        async->cmd = user_cmd;
        async->cmd.data = NULL;
        /* load channel/gain list */
@@ -1833,6 +1832,8 @@ void do_become_nonbusy(struct comedi_device *dev, struct comedi_subdevice *s)
        if (async) {
                comedi_reset_async_buf(async);
                async->inttrig = NULL;
+               kfree(async->cmd.chanlist);
+               async->cmd.chanlist = NULL;
        } else {
                printk(KERN_ERR
                       "BUG: (?) do_become_nonbusy called with async=0\n");
@@ -2206,6 +2207,7 @@ int comedi_alloc_board_minor(struct device *hardware_device)
                kfree(info);
                return -ENOMEM;
        }
+       info->hardware_device = hardware_device;
        comedi_device_init(info->device);
        spin_lock_irqsave(&comedi_file_info_table_lock, flags);
        for (i = 0; i < COMEDI_NUM_BOARD_MINORS; ++i) {
@@ -2294,6 +2296,23 @@ void comedi_free_board_minor(unsigned minor)
        }
 }
 
+int comedi_find_board_minor(struct device *hardware_device)
+{
+       int minor;
+       struct comedi_device_file_info *info;
+
+       for (minor = 0; minor < COMEDI_NUM_BOARD_MINORS; minor++) {
+               spin_lock(&comedi_file_info_table_lock);
+               info = comedi_file_info_table[minor];
+               if (info && info->hardware_device == hardware_device) {
+                       spin_unlock(&comedi_file_info_table_lock);
+                       return minor;
+               }
+               spin_unlock(&comedi_file_info_table_lock);
+       }
+       return -ENODEV;
+}
+
 int comedi_alloc_subdevice_minor(struct comedi_device *dev,
                                 struct comedi_subdevice *s)
 {