release_firmware(fw); 
static int tda10046_fwupload(struct dvb_frontend* fe){	struct tda1004x_state* state = fe->demodulator_priv;	int ret;	const struct firmware *fw;	/* reset + wake up chip */	tda1004x_write_byteI(state, TDA1004X_CONFC4, 0);	tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 1, 0);	/* let the clocks recover from sleep */	msleep(5);	/* don't re-upload unless necessary */	if (tda1004x_check_upload_ok(state) == 0)		return 0;	/* set parameters */	tda10046_init_plls(fe);	if (state->config->request_firmware != NULL) {		/* request the firmware, this will block until someone uploads it */		printk(KERN_INFO "tda1004x: waiting for firmware upload...\n");		ret = state->config->request_firmware(fe, &fw, TDA10046_DEFAULT_FIRMWARE);		if (ret) {			printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");   	   		return ret;		}		tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8); // going to boot from HOST		ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10046H_CODE_CPT, TDA10046H_CODE_IN);		if (ret)			return ret;	} else {		/* boot from firmware eeprom */		/* Hac Note: we might need to do some GPIO Magic here */		printk(KERN_INFO "tda1004x: booting from eeprom\n");		tda1004x_write_mask(state, TDA1004X_CONFC4, 4, 4);		msleep(300);	}	return tda1004x_check_upload_ok(state);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/0c744b010078bd65724477e75261e51712d290a0/tda1004x.c/clean/drivers/media/dvb/frontends/tda1004x.c