Device-LabJack

 view release on metacpan or  search on metacpan

linux-labjack/driver/linux-2.4/labjack.c  view on Meta::CPAN

 error:
        labjack_release_internal (dev);

 unlock_exit:
	up (&dev->sem);

 unlock_minor_table_exit:
	up (&minor_table_mutex);
        if (retval != 0) {
                MOD_DEC_USE_COUNT;
        }

 exit:
	dbg(2,"%s : leave, return value %d ", __func__, retval);

	return retval;
}


static int labjack_release (struct inode *inode, struct file *file)
{
	struct labjack_usb *dev;
	int retval = 0;

	dbg(2," %s : enter", __func__);

	dev = (struct labjack_usb *)file->private_data;

	if (dev == NULL) {
	        dbg(1," %s : object is NULL", __func__);
		retval = -ENODEV;
                goto exit;
	}

	down (&minor_table_mutex);

	down (&dev->sem);

 	if (dev->open_count <= 0) {
        	dbg(1," %s : device not opened", __func__);
                up (&dev->sem);
                up (&minor_table_mutex);
		retval = -ENODEV;
		goto exit;
	}

        retval = labjack_release_internal (dev);

	up (&dev->sem);
	up (&minor_table_mutex);

	MOD_DEC_USE_COUNT;

 exit:
	dbg(2," %s : leave, return value %d", __func__, retval);
	return retval;
}


/*
 * NOTE: assumes minor_table and device are locked
 */
static int labjack_release_internal (struct labjack_usb *dev)
{
	int retval = 0;

	dbg(2," %s : enter", __func__);

	if (dev->udev == NULL) {
		/* the device was unplugged before the file was released */
		labjack_delete (dev);
		goto exit;
	}

	--dev->open_count;
	if (dev->open_count <= 0) {
                labjack_abort_transfers (dev);
		dev->open_count = 0;
	}

 exit:
	dbg(2," %s : leave", __func__);

	return retval;
}


static void labjack_abort_transfers (struct labjack_usb *dev)
{
	dbg(2," %s : enter", __func__);

        if (dev == NULL) {
        	dbg(1," %s : dev is null", __func__);
                goto exit;
        }

	if (dev->interrupt_in_urb != NULL) {
                usb_unlink_urb (dev->interrupt_in_urb);
        }
	if (dev->interrupt_out_urb != NULL) {
                usb_unlink_urb (dev->interrupt_out_urb);
        }

 exit:
	dbg(2," %s : leave", __func__);
}


static ssize_t labjack_read (struct file *file, char *buffer, size_t count, loff_t *ppos)
{
        struct labjack_usb *dev;
        size_t bytes_read = 0;
        size_t bytes_to_read;
        int i;
        int retval = 0;
	int timeout = 0;
	
	//printf("Before debug\n");

	dbg(2," %s : enter, count = %d", __func__, count);



( run in 0.845 second using v1.01-cache-2.11-cpan-39bf76dae61 )