Esempio n. 1
0
/*
 * Start transfering (flags or data) on the B channel, since
 * FIFO counters has been set to a non-zero value.
 */
static void st5481B_start_xfer(void *context)
{
	struct st5481_bcs *bcs = context;

	DBG(4,"B%d",bcs->channel+1);

	// Start transmitting (flags or data) on B channel

	usb_b_out(bcs,0);
	usb_b_out(bcs,1);
}
Esempio n. 2
0
static void usb_b_out_complete(struct urb *urb, struct pt_regs *regs)
{
	struct st5481_bcs *bcs = urb->context;
	struct st5481_b_out *b_out = &bcs->b_out;
	struct st5481_adapter *adapter = bcs->adapter;
	int buf_nr;
	
	buf_nr = get_buf_nr(b_out->urb, urb);
	test_and_clear_bit(buf_nr, &b_out->busy);

	if (unlikely(urb->status < 0)) {
		switch (urb->status) {
			case -ENOENT:
			case -ESHUTDOWN:
			case -ECONNRESET:
				DBG(4,"urb killed status %d", urb->status);
				return; // Give up
			default: 
				WARN("urb status %d",urb->status);
				if (b_out->busy == 0) {
					st5481_usb_pipe_reset(adapter, (bcs->channel+1)*2 | USB_DIR_OUT, NULL, NULL);
				}
				break;
		}
	}

	usb_b_out(bcs,buf_nr);

	if (adapter->number_of_leds == 2)
		led_blink(adapter);
}
Esempio n. 3
0
static void usb_b_out_complete(struct urb *urb)
{
    struct st5481_bcs *bcs = urb->context;
    struct st5481_b_out *b_out = &bcs->b_out;
    struct st5481_adapter *adapter = bcs->adapter;
    int buf_nr;

    buf_nr = get_buf_nr(b_out->urb, urb);
    test_and_clear_bit(buf_nr, &b_out->busy);

    if (urb->status < 0) {
        if (urb->status != USB_ST_URB_KILLED) {
            WARN("urb status %d",urb->status);
            if (b_out->busy == 0) {
                st5481_usb_pipe_reset(adapter, (bcs->channel+1)*2 | USB_DIR_OUT, NULL, NULL);
            }
        } else {
            DBG(1,"urb killed");
            return; // Give up
        }
    }

    usb_b_out(bcs,buf_nr);

    if (adapter->number_of_leds == 2)
        led_blink(adapter);
}