/* callback function from USB when async USB request has completed */ static void redrat3_handle_async(struct urb *urb, struct pt_regs *regs) { struct redrat3_dev *rr3; if (!urb) return; rr3 = urb->context; if (!rr3) { pr_err("%s called with invalid context!\n", __func__); usb_unlink_urb(urb); return; } rr3_ftr(rr3->dev, "Entering %s\n", __func__); if (!rr3->det_enabled) { rr3_dbg(rr3->dev, "received a read callback but detector " "disabled - ignoring\n"); return; } switch (urb->status) { case 0: redrat3_get_ir_data(rr3, urb->actual_length); break; case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: usb_unlink_urb(urb); return; case -EPIPE: default: dev_warn(rr3->dev, "Error: urb status = %d\n", urb->status); rr3->bytes_read = 0; rr3->pktlen = 0; rr3->pkttype = 0; break; } if (!rr3->transmitting) redrat3_issue_async(rr3); else rr3_dbg(rr3->dev, "IR transmit in progress\n"); }
static void redrat3_handle_async(struct urb *urb, struct pt_regs *regs) { struct redrat3_dev *rr3; int ret; if (!urb) return; rr3 = urb->context; if (!rr3) { pr_err("%s called with invalid context!\n", __func__); usb_unlink_urb(urb); return; } rr3_ftr(rr3->dev, "Entering %s\n", __func__); switch (urb->status) { case 0: ret = redrat3_get_ir_data(rr3, urb->actual_length); if (!ret) { /* */ redrat3_issue_async(rr3); } break; case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: usb_unlink_urb(urb); return; case -EPIPE: default: dev_warn(rr3->dev, "Error: urb status = %d\n", urb->status); rr3->bytes_read = 0; rr3->pktlen = 0; rr3->pkttype = 0; break; } }
/* callback function from USB when async USB request has completed */ static void redrat3_handle_async(struct urb *urb) { struct redrat3_dev *rr3 = urb->context; int ret; switch (urb->status) { case 0: ret = redrat3_get_ir_data(rr3, urb->actual_length); if (!ret && rr3->wideband && !rr3->learn_urb->hcpriv) { ret = usb_submit_urb(rr3->learn_urb, GFP_ATOMIC); if (ret) dev_err(rr3->dev, "Failed to submit learning urb: %d", ret); } if (!ret) { /* no error, prepare to read more */ ret = usb_submit_urb(urb, GFP_ATOMIC); if (ret) dev_err(rr3->dev, "Failed to resubmit urb: %d", ret); } break; case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: usb_unlink_urb(urb); return; case -EPIPE: default: dev_warn(rr3->dev, "Error: urb status = %d\n", urb->status); rr3->bytes_read = 0; break; } }