|
@@ -47,7 +47,7 @@
|
|
|
#define MOD_AUTHOR "Jarod Wilson <jarod@wilsonet.com>"
|
|
|
#define MOD_DESC "Driver for SoundGraph iMON MultiMedia IR/Display"
|
|
|
#define MOD_NAME "imon"
|
|
|
-#define MOD_VERSION "0.9.3"
|
|
|
+#define MOD_VERSION "0.9.4"
|
|
|
|
|
|
#define DISPLAY_MINOR_BASE 144
|
|
|
#define DEVICE_NAME "lcd%d"
|
|
@@ -1658,9 +1658,17 @@ static void usb_rx_callback_intf0(struct urb *urb)
|
|
|
return;
|
|
|
|
|
|
ictx = (struct imon_context *)urb->context;
|
|
|
- if (!ictx || !ictx->dev_present_intf0)
|
|
|
+ if (!ictx)
|
|
|
return;
|
|
|
|
|
|
+ /*
|
|
|
+ * if we get a callback before we're done configuring the hardware, we
|
|
|
+ * can't yet process the data, as there's nowhere to send it, but we
|
|
|
+ * still need to submit a new rx URB to avoid wedging the hardware
|
|
|
+ */
|
|
|
+ if (!ictx->dev_present_intf0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
switch (urb->status) {
|
|
|
case -ENOENT: /* usbcore unlink successful! */
|
|
|
return;
|
|
@@ -1678,6 +1686,7 @@ static void usb_rx_callback_intf0(struct urb *urb)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
usb_submit_urb(ictx->rx_urb_intf0, GFP_ATOMIC);
|
|
|
}
|
|
|
|
|
@@ -1690,9 +1699,17 @@ static void usb_rx_callback_intf1(struct urb *urb)
|
|
|
return;
|
|
|
|
|
|
ictx = (struct imon_context *)urb->context;
|
|
|
- if (!ictx || !ictx->dev_present_intf1)
|
|
|
+ if (!ictx)
|
|
|
return;
|
|
|
|
|
|
+ /*
|
|
|
+ * if we get a callback before we're done configuring the hardware, we
|
|
|
+ * can't yet process the data, as there's nowhere to send it, but we
|
|
|
+ * still need to submit a new rx URB to avoid wedging the hardware
|
|
|
+ */
|
|
|
+ if (!ictx->dev_present_intf1)
|
|
|
+ goto out;
|
|
|
+
|
|
|
switch (urb->status) {
|
|
|
case -ENOENT: /* usbcore unlink successful! */
|
|
|
return;
|
|
@@ -1710,6 +1727,7 @@ static void usb_rx_callback_intf1(struct urb *urb)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
usb_submit_urb(ictx->rx_urb_intf1, GFP_ATOMIC);
|
|
|
}
|
|
|
|
|
@@ -2242,7 +2260,7 @@ find_endpoint_failed:
|
|
|
mutex_unlock(&ictx->lock);
|
|
|
usb_free_urb(rx_urb);
|
|
|
rx_urb_alloc_failed:
|
|
|
- dev_err(ictx->dev, "unable to initialize intf0, err %d\n", ret);
|
|
|
+ dev_err(ictx->dev, "unable to initialize intf1, err %d\n", ret);
|
|
|
|
|
|
return NULL;
|
|
|
}
|