struct module *owner;
short *adapter_nr;
u8 bInterfaceNumber;
-
int size_of_priv;
+#define WARM 0
+#define COLD 1
+ int (*identify_state) (struct dvb_usb_device *, const char **);
const char *firmware;
- int (*get_firmware_name) (struct dvb_usb_device *, const char **);
-#define RECONNECTS_USB 1
+#define RECONNECTS_USB 1
int (*download_firmware) (struct dvb_usb_device *,
const struct firmware *);
int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
int (*fe_ioctl_override) (struct dvb_frontend *,
unsigned int, void *, unsigned int);
-
-#define WARM 0
-#define COLD 1
- int (*identify_state) (struct dvb_usb_device *);
int (*init) (struct dvb_usb_device *);
void (*disconnect) (struct dvb_usb_device *);
int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a" \
" PID filter, if any (default: 0).");
-static int dvb_usbv2_download_firmware(struct dvb_usb_device *d)
+static int dvb_usbv2_download_firmware(struct dvb_usb_device *d, const char *name)
{
int ret;
- const struct firmware *fw = NULL;
- const char *name;
-
- /* resolve firmware name */
- name = d->props->firmware;
- if (d->props->get_firmware_name) {
- ret = d->props->get_firmware_name(d, &name);
- if (ret < 0)
- goto err;
- }
+ const struct firmware *fw;
if (!d->props->download_firmware) {
ret = -EINVAL;
int ret;
struct dvb_usb_device *d =
container_of(work, struct dvb_usb_device, probe_work);
- bool cold = false;
d->work_pid = current->pid;
}
if (d->props->identify_state) {
- ret = d->props->identify_state(d);
+ const char *name = NULL;
+ ret = d->props->identify_state(d, &name);
if (ret == 0) {
;
} else if (ret == COLD) {
- cold = true;
- ret = 0;
- } else {
- goto err_usb_driver_release_interface;
- }
- }
-
- if (cold) {
- pr_info("%s: found a '%s' in cold state\n",
- KBUILD_MODNAME, d->name);
- ret = dvb_usbv2_download_firmware(d);
- if (ret == 0) {
- /* device is warm, continue initialization */
- ;
- } else if (ret == RECONNECTS_USB) {
- /*
- * USB core will call disconnect() and then probe()
- * as device reconnects itself from the USB bus.
- * disconnect() will release all driver resources
- * and probe() is called for 'new' device. As 'new'
- * device is warm we should never go here again.
- */
- return;
+ pr_info("%s: found a '%s' in cold state\n",
+ KBUILD_MODNAME, d->name);
+
+ if (!name)
+ name = d->props->firmware;
+
+ ret = dvb_usbv2_download_firmware(d, name);
+ if (ret == 0) {
+ /* device is warm, continue initialization */
+ ;
+ } else if (ret == RECONNECTS_USB) {
+ /*
+ * USB core will call disconnect() and then
+ * probe() as device reconnects itself from the
+ * USB bus. disconnect() will release all driver
+ * resources and probe() is called for 'new'
+ * device. As 'new' device is warm we should
+ * never go here again.
+ */
+ return;
+ } else {
+ /* Unexpected error. We must unregister driver
+ * manually from the device, because device is
+ * already register by returning from probe()
+ * with success. usb_driver_release_interface()
+ * finally calls disconnect() in order to free
+ * resources.
+ */
+ goto err_usb_driver_release_interface;
+ }
} else {
- /* Unexpected fatal error. We must unregister driver
- * manually from the device, because device is already
- * register by returning from probe() with success.
- * usb_driver_release_interface() finally calls
- * disconnect() in order to free resources.
- */
goto err_usb_driver_release_interface;
}
}