Exemple #1
0
int dibusb_urb_exit(struct usb_dibusb *dib)
{
    int i;

    dibusb_urb_kill(dib);

    if((dib->init_state & DIBUSB_STATE_URB_LIST))
    {
        for (i = 0; i < dib->dibdev->dev_cl->urb_count; i++)
        {
            if (dib->urb_list[i] != NULL)
            {
                deb_info("freeing URB no. %d.\n",i);
                /* free the URBs */
                usb_free_urb(dib->urb_list[i]);
            }
        }
        /* free the urb array */
        kfree(dib->urb_list);
        dib->init_state &= ~DIBUSB_STATE_URB_LIST;
    }

    if (dib->init_state & DIBUSB_STATE_URB_BUF)
        pci_free_consistent(NULL,
                            dib->dibdev->dev_cl->urb_buffer_size*dib->dibdev->dev_cl->urb_count,
                            dib->buffer,dib->dma_handle);

    dib->init_state &= ~DIBUSB_STATE_URB_BUF;
    dib->init_state &= ~DIBUSB_STATE_URB_INIT;
    return 0;
}
Exemple #2
0
int dibusb_streaming(struct usb_dibusb *dib,int onoff)
{
	if (onoff)
		dibusb_urb_submit(dib);
	else
		dibusb_urb_kill(dib);
	return 0;
}
static int dibusb_urb_submit(struct usb_dibusb *dib)
{
	int i,ret;
	if (dib->init_state & DIBUSB_STATE_URB_INIT) {
		for (i = 0; i < dib->dibdev->dev_cl->urb_count; i++) {
			deb_info("submitting URB no. %d\n",i);
			if ((ret = usb_submit_urb(dib->urb_list[i],GFP_ATOMIC))) {
				err("could not submit buffer urb no. %d - get them all back\n",i);
				dibusb_urb_kill(dib);
				return ret;
			}
			dib->init_state |= DIBUSB_STATE_URB_SUBMIT;
		}
	}
	return 0;
}
int dibusb_streaming(struct usb_dibusb *dib,int onoff)
{
	if (onoff)
		dibusb_urb_submit(dib);
	else
		dibusb_urb_kill(dib);

	switch (dib->dibdev->dev_cl->id) {
		case DIBUSB2_0:
		case DIBUSB2_0B:
		case NOVAT_USB2:
		case UMT2_0:
			if (onoff)
				return dibusb_ioctl_cmd(dib,DIBUSB_IOCTL_CMD_ENABLE_STREAM,NULL,0);
			else
				return dibusb_ioctl_cmd(dib,DIBUSB_IOCTL_CMD_DISABLE_STREAM,NULL,0);
			break;
		default:
			break;
	}
	return 0;
}