staging: comedi: usbdux: tidy up usbdux_ao_inttrig()
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Thu, 25 Jul 2013 23:05:17 +0000 (16:05 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Jul 2013 22:09:55 +0000 (15:09 -0700)
Rename the local variable used for the private data pointer to the
comedi "norm".

Remove the unnecessary sanity check of the private data pointer. This
function can only be called is the private data was allocated during
the attach.

Tidy up the exit path using goto to ensure that the semaphore is
released.

Return -EBUSY instead if an ao command is already running.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/usbdux.c

index 1e6cb0a60a07979b760fa1e42a2bac147a72fca2..9aa2e9ea53d13b13fd2f11a7b18ab46a0885c0ad 100644 (file)
@@ -1074,31 +1074,32 @@ ao_write_exit:
 }
 
 static int usbdux_ao_inttrig(struct comedi_device *dev,
-                            struct comedi_subdevice *s, unsigned int trignum)
+                            struct comedi_subdevice *s,
+                            unsigned int trignum)
 {
-       int ret;
-       struct usbdux_private *this_usbduxsub = dev->private;
+       struct usbdux_private *devpriv = dev->private;
+       int ret = -EINVAL;
 
-       if (!this_usbduxsub)
-               return -EFAULT;
+       down(&devpriv->sem);
 
-       down(&this_usbduxsub->sem);
-       if (trignum != 0) {
-               up(&this_usbduxsub->sem);
-               return -EINVAL;
-       }
-       if (!(this_usbduxsub->ao_cmd_running)) {
-               this_usbduxsub->ao_cmd_running = 1;
+       if (trignum != 0)
+               goto ao_trig_exit;
+
+       if (!devpriv->ao_cmd_running) {
+               devpriv->ao_cmd_running = 1;
                ret = usbduxsub_submit_outurbs(dev);
                if (ret < 0) {
-                       this_usbduxsub->ao_cmd_running = 0;
-                       up(&this_usbduxsub->sem);
-                       return ret;
+                       devpriv->ao_cmd_running = 0;
+                       goto ao_trig_exit;
                }
                s->async->inttrig = NULL;
+       } else {
+               ret = -EBUSY;
        }
-       up(&this_usbduxsub->sem);
-       return 1;
+
+ao_trig_exit:
+       up(&devpriv->sem);
+       return ret;
 }
 
 static int usbdux_ao_cmdtest(struct comedi_device *dev,