mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	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: Antti Palosaari <crope@iki.fi>
Cc: stable@kernel.org #	for Kernel 3.6 - please note that driver location has changed
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									6ae5e06084
								
							
						
					
					
						commit
						8e30783b0b
					
				| @ -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; | ||||
|  | ||||
| @ -6609,15 +6609,25 @@ struct dvb_frontend *drxk_attach(const struct drxk_config *config, | ||||
| 
 | ||||
| 	/* Load firmware and initialize DRX-K */ | ||||
| 	if (state->microcode_name) { | ||||
| 		status = request_firmware_nowait(THIS_MODULE, 1, | ||||
| 		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, | ||||
| 					      GFP_KERNEL, | ||||
| 					      state, load_firmware_cb); | ||||
| 		if (status < 0) { | ||||
| 			printk(KERN_ERR | ||||
| 			"drxk: failed to request a firmware\n"); | ||||
| 			return NULL; | ||||
| 			if (status < 0) { | ||||
| 				printk(KERN_ERR | ||||
| 				       "drxk: failed to request a firmware\n"); | ||||
| 				return NULL; | ||||
| 			} | ||||
| 		} | ||||
| 	} else if (init_drxk(state) < 0) | ||||
| 		goto error; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Mauro Carvalho Chehab
						Mauro Carvalho Chehab