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 )