Commit 998bb7be authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: usbduxfast: request firmware synchronously

Change the request_firmware_nowait() to a request_firmware() so
that the usb_driver (*probe) and continue with the comedi_driver
(*auto_attach).
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4e595c0d
......@@ -1470,31 +1470,21 @@ static struct comedi_driver usbduxfast_driver = {
.detach = usbduxfast_detach,
};
static void usbduxfast_firmware_request_complete_handler(const struct firmware
*fw, void *context)
static int usbduxfast_request_firmware(struct usb_interface *intf)
{
struct usbduxfastsub_s *usbduxfastsub_tmp = context;
struct usb_interface *uinterf = usbduxfastsub_tmp->interface;
struct usb_device *usb = interface_to_usbdev(intf);
struct usbduxfastsub_s *devpriv = usb_get_intfdata(intf);
const struct firmware *fw;
int ret;
if (fw == NULL)
return;
/*
* we need to upload the firmware here because fw will be
* freed once we've left this function
*/
ret = firmwareUpload(usbduxfastsub_tmp, fw->data, fw->size);
if (ret) {
dev_err(&uinterf->dev,
"Could not upload firmware (err=%d)\n", ret);
goto out;
}
ret = request_firmware(&fw, FIRMWARE, &usb->dev);
if (ret)
return ret;
comedi_usb_auto_config(uinterf, &usbduxfast_driver, 0);
out:
ret = firmwareUpload(devpriv, fw->data, fw->size);
release_firmware(fw);
return ret;
}
static int usbduxfast_usb_probe(struct usb_interface *uinterf,
......@@ -1598,14 +1588,11 @@ static int usbduxfast_usb_probe(struct usb_interface *uinterf,
usbduxfastsub[index].probed = 1;
up(&start_stop_sem);
ret = request_firmware_nowait(THIS_MODULE,
FW_ACTION_HOTPLUG,
FIRMWARE,
&udev->dev,
GFP_KERNEL,
usbduxfastsub + index,
usbduxfast_firmware_request_complete_handler);
/*
* Request, and upload, the firmware so we can
* complete the comedi_driver (*auto_attach).
*/
ret = usbduxfast_request_firmware(uinterf);
if (ret) {
dev_err(&uinterf->dev, "could not load firmware (err=%d)\n", ret);
return ret;
......@@ -1613,8 +1600,8 @@ static int usbduxfast_usb_probe(struct usb_interface *uinterf,
dev_info(&uinterf->dev,
"usbduxfast%d has been successfully initialized.\n", index);
/* success */
return 0;
return comedi_usb_auto_config(uinterf, &usbduxfast_driver, 0);
}
static void usbduxfast_usb_disconnect(struct usb_interface *intf)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment