Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e30783b authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

drxk: allow loading firmware synchrousnously



Due to udev-182, the firmware load was changed to be async, as
otherwise udev would give up of loading a firmware.

Add an option to return to the previous behaviour, async firmware
loads cause failures with the tda18271 driver.

Antti tested it with the following hardware:
        Hauppauge WinTV HVR 930C
        MaxMedia UB425-TC
        PCTV QuatroStick nano (520e)

Tested-by: default avatarAntti Palosaari <crope@iki.fi>
Cc: stable@kernel.org #	for Kernel 3.6 - please note that driver location has changed
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 6ae5e060
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
 *				A value of 0 (default) or lower indicates that
 *				the correct number of parameters will be
 *				automatically detected.
 * @load_firmware_sync:		Force the firmware load to be synchronous.
 *
 * On the *_gpio vars, bit 0 is UIO-1, bit 1 is UIO-2 and bit 2 is
 * UIO-3.
@@ -39,6 +40,7 @@ struct drxk_config {
	bool	parallel_ts;
	bool	dynamic_clk;
	bool	enable_merr_cfg;
	bool	load_firmware_sync;

	bool	antenna_dvbt;
	u16	antenna_gpio;
+15 −5
Original line number Diff line number Diff line
@@ -6609,6 +6609,15 @@ struct dvb_frontend *drxk_attach(const struct drxk_config *config,

	/* Load firmware and initialize DRX-K */
	if (state->microcode_name) {
		if (config->load_firmware_sync) {
			const struct firmware *fw = NULL;

			status = request_firmware(&fw, state->microcode_name,
						  state->i2c->dev.parent);
			if (status < 0)
				fw = NULL;
			load_firmware_cb(fw, state);
		} else {
			status = request_firmware_nowait(THIS_MODULE, 1,
					      state->microcode_name,
					      state->i2c->dev.parent,
@@ -6619,6 +6628,7 @@ struct dvb_frontend *drxk_attach(const struct drxk_config *config,
				       "drxk: failed to request a firmware\n");
				return NULL;
			}
		}
	} else if (init_drxk(state) < 0)
		goto error;