/* * 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); }
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); }
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); }