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

Commit dea74869 authored by Patrick Boettcher's avatar Patrick Boettcher Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (4028): Change dvb_frontend_ops to be a real field instead of a...


V4L/DVB (4028): Change dvb_frontend_ops to be a real field instead of a pointer field inside dvb_frontend

The dvb_frontend_ops is a pointer inside dvb_frontend. That's why every demod-driver
is having a field of dvb_frontend_ops in its private-state-struct and
using the reference for filling the pointer-field in dvb_frontend.
- It saves at least two lines of code per demod-driver,
- reduces object size (one less dereference per frontend_ops-access),
- be coherent with dvb_tuner_ops,
- makes it a little bit easier for newbies to understand how it works and
- avoids stupid mistakes because you would have to copy the dvb_frontend_ops
  always, before you could assign the static pointer directly, which was
  dangerous.

Signed-off-by: default avatarPatrick Boettcher <pb@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 332bed5f
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -183,8 +183,8 @@ static int samsung_tbmu24112_tuner_set_params(struct dvb_frontend* fe, struct dv

	if (params->frequency < 1500000) buf[3] |= 0x10;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (fe->ops.i2c_gate_ctrl)
		fe->ops.i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&fc->i2c_adap, &msg, 1) != 1) {
		return -EIO;
	}
@@ -342,8 +342,8 @@ static int skystar23_samsung_tbdu18132_tuner_set_params(struct dvb_frontend* fe,
	if (params->frequency < 1550000)
		buf[3] |= 0x02;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (fe->ops.i2c_gate_ctrl)
		fe->ops.i2c_gate_ctrl(fe, 1);
	if (i2c_transfer(&fc->i2c_adap, &msg, 1) != 1)
		return -EIO;
	return 0;
@@ -389,8 +389,8 @@ int alps_tdee4_stv0297_tuner_set_params (struct dvb_frontend* fe, struct dvb_fro
	else if (fep->frequency <= 822000000) buf[3] = 0x08;
	else buf[3] = 0x88;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (fe->ops.i2c_gate_ctrl)
		fe->ops.i2c_gate_ctrl(fe, 1);
	deb_tuner("tuner buffer for %d Hz: %x %x %x %x\n",fep->frequency, buf[0],buf[1],buf[2],buf[3]);
	ret = fc->i2c_request(fc,FC_WRITE,FC_I2C_PORT_TUNER,0x61,buf[0],&buf[1],3);
	deb_tuner("tuner write returned: %d\n",ret);
@@ -505,7 +505,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)

	/* try the sky v2.6 (stv0299/Samsung tbmu24112(sl1935)) */
	if ((fc->fe = stv0299_attach(&samsung_tbmu24112_config, &fc->i2c_adap)) != NULL) {
		ops = fc->fe->ops;
		ops = &fc->fe->ops;

		ops->tuner_ops.set_params = samsung_tbmu24112_tuner_set_params;

@@ -520,7 +520,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)
	/* try the air dvb-t (mt352/Samsung tdtc9251dh0(??)) */
	if ((fc->fe = mt352_attach(&samsung_tdtc9251dh0_config, &fc->i2c_adap)) != NULL ) {
		fc->dev_type          = FC_AIR_DVB;
		fc->fe->ops->tuner_ops.calc_regs = samsung_tdtc9251dh0_calc_regs;
		fc->fe->ops.tuner_ops.calc_regs = samsung_tdtc9251dh0_calc_regs;
		info("found the mt352 at i2c address: 0x%02x",samsung_tdtc9251dh0_config.demod_address);
	} else
	/* try the air atsc 2nd generation (nxt2002) */
@@ -532,7 +532,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)
	/* try the air atsc 3nd generation (lgdt3303) */
	if ((fc->fe = lgdt330x_attach(&air2pc_atsc_hd5000_config, &fc->i2c_adap)) != NULL) {
		fc->dev_type          = FC_AIR_ATSC3;
		fc->fe->ops->tuner_ops.set_params = lgdt3303_tuner_set_params;
		fc->fe->ops.tuner_ops.set_params = lgdt3303_tuner_set_params;
		info("found the lgdt3303 at i2c address: 0x%02x",air2pc_atsc_hd5000_config.demod_address);
	} else
	/* try the air atsc 1nd generation (bcm3510)/panasonic ct10s */
@@ -543,12 +543,12 @@ int flexcop_frontend_init(struct flexcop_device *fc)
	/* try the cable dvb (stv0297) */
	if ((fc->fe = stv0297_attach(&alps_tdee4_stv0297_config, &fc->i2c_adap)) != NULL) {
		fc->dev_type                        = FC_CABLE;
		fc->fe->ops->tuner_ops.set_params = alps_tdee4_stv0297_tuner_set_params;
		fc->fe->ops.tuner_ops.set_params = alps_tdee4_stv0297_tuner_set_params;
		info("found the stv0297 at i2c address: 0x%02x",alps_tdee4_stv0297_config.demod_address);
	} else
	/* try the sky v2.3 (vp310/Samsung tbdu18132(tsa5059)) */
	if ((fc->fe = vp310_mt312_attach(&skystar23_samsung_tbdu18132_config, &fc->i2c_adap)) != NULL) {
		ops = fc->fe->ops;
		ops = &fc->fe->ops;

		ops->tuner_ops.set_params = skystar23_samsung_tbdu18132_tuner_set_params;

@@ -570,7 +570,7 @@ int flexcop_frontend_init(struct flexcop_device *fc)
	} else {
		if (dvb_register_frontend(&fc->dvb_adapter, fc->fe)) {
			err("frontend registration failed!");
			ops = fc->fe->ops;
			ops = &fc->fe->ops;
			if (ops->release != NULL)
				ops->release(fc->fe);
			fc->fe = NULL;
+4 −6
Original line number Diff line number Diff line
@@ -1417,24 +1417,22 @@ struct dst_state *dst_attach(struct dst_state *state, struct dvb_adapter *dvb_ad
		return NULL;
	}
	/* determine settings based on type */
	/* create dvb_frontend */
	switch (state->dst_type) {
	case DST_TYPE_IS_TERR:
		memcpy(&state->ops, &dst_dvbt_ops, sizeof(struct dvb_frontend_ops));
		memcpy(&state->frontend.ops, &dst_dvbt_ops, sizeof(struct dvb_frontend_ops));
		break;
	case DST_TYPE_IS_CABLE:
		memcpy(&state->ops, &dst_dvbc_ops, sizeof(struct dvb_frontend_ops));
		memcpy(&state->frontend.ops, &dst_dvbc_ops, sizeof(struct dvb_frontend_ops));
		break;
	case DST_TYPE_IS_SAT:
		memcpy(&state->ops, &dst_dvbs_ops, sizeof(struct dvb_frontend_ops));
		memcpy(&state->frontend.ops, &dst_dvbs_ops, sizeof(struct dvb_frontend_ops));
		break;
	default:
		dprintk(verbose, DST_ERROR, 1, "unknown DST type. please report to the LinuxTV.org DVB mailinglist.");
		kfree(state);
		return NULL;
	}

	/* create dvb_frontend */
	state->frontend.ops = &state->ops;
	state->frontend.demodulator_priv = state;

	return state;				/*	Manu (DST is a card not a frontend)	*/
+0 −2
Original line number Diff line number Diff line
@@ -84,8 +84,6 @@ struct dst_state {

	struct bt878* bt;

	struct dvb_frontend_ops ops;

	/* configuration settings */
	const struct dst_config* config;

+19 −19
Original line number Diff line number Diff line
@@ -300,8 +300,8 @@ static int microtune_mt7202dtf_tuner_set_params(struct dvb_frontend* fe, struct
	data[2] = ((div >> 10) & 0x60) | cfg;
	data[3] = (cpump << 6) | band_select;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (fe->ops.i2c_gate_ctrl)
		fe->ops.i2c_gate_ctrl(fe, 1);
	i2c_transfer(card->i2c_adapter, &msg, 1);
	return (div * 166666 - 36000000);
}
@@ -483,8 +483,8 @@ static int vp3021_alps_tded4_tuner_set_params(struct dvb_frontend* fe, struct dv
	else
		return -EINVAL;

	if (fe->ops->i2c_gate_ctrl)
		fe->ops->i2c_gate_ctrl(fe, 1);
	if (fe->ops.i2c_gate_ctrl)
		fe->ops.i2c_gate_ctrl(fe, 1);
	i2c_transfer(card->i2c_adapter, &msg, 1);
	return 0;
}
@@ -607,9 +607,9 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
						  card->i2c_adapter);

		if (card->fe != NULL) {
			card->fe->ops->tuner_ops.calc_regs = thomson_dtt7579_tuner_calc_regs;
			card->fe->ops->info.frequency_min = 174000000;
			card->fe->ops->info.frequency_max = 862000000;
			card->fe->ops.tuner_ops.calc_regs = thomson_dtt7579_tuner_calc_regs;
			card->fe->ops.info.frequency_min = 174000000;
			card->fe->ops.info.frequency_max = 862000000;
		}
		break;

@@ -617,7 +617,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
		lgdt330x_reset(card);
		card->fe = lgdt330x_attach(&tdvs_tua6034_config, card->i2c_adapter);
		if (card->fe != NULL) {
			card->fe->ops->tuner_ops.set_params = tdvs_tua6034_tuner_set_params;
			card->fe->ops.tuner_ops.set_params = tdvs_tua6034_tuner_set_params;
			dprintk ("dvb_bt8xx: lgdt330x detected\n");
		}
		break;
@@ -632,7 +632,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
		digitv_alps_tded4_reset(card);
		card->fe = nxt6000_attach(&vp3021_alps_tded4_config, card->i2c_adapter);
		if (card->fe != NULL) {
			card->fe->ops->tuner_ops.set_params = vp3021_alps_tded4_tuner_set_params;
			card->fe->ops.tuner_ops.set_params = vp3021_alps_tded4_tuner_set_params;
			dprintk ("dvb_bt8xx: an nxt6000 was detected on your digitv card\n");
			break;
		}
@@ -642,7 +642,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
		card->fe = mt352_attach(&digitv_alps_tded4_config, card->i2c_adapter);

		if (card->fe != NULL) {
			card->fe->ops->tuner_ops.calc_regs = digitv_alps_tded4_tuner_calc_regs;
			card->fe->ops.tuner_ops.calc_regs = digitv_alps_tded4_tuner_calc_regs;
			dprintk ("dvb_bt8xx: an mt352 was detected on your digitv card\n");
		}
		break;
@@ -650,16 +650,16 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
	case BTTV_BOARD_AVDVBT_761:
		card->fe = sp887x_attach(&microtune_mt7202dtf_config, card->i2c_adapter);
		if (card->fe) {
			card->fe->ops->tuner_ops.set_params = microtune_mt7202dtf_tuner_set_params;
			card->fe->ops.tuner_ops.set_params = microtune_mt7202dtf_tuner_set_params;
		}
		break;

	case BTTV_BOARD_AVDVBT_771:
		card->fe = mt352_attach(&advbt771_samsung_tdtc9251dh0_config, card->i2c_adapter);
		if (card->fe != NULL) {
			card->fe->ops->tuner_ops.calc_regs = advbt771_samsung_tdtc9251dh0_tuner_calc_regs;
			card->fe->ops->info.frequency_min = 174000000;
			card->fe->ops->info.frequency_max = 862000000;
			card->fe->ops.tuner_ops.calc_regs = advbt771_samsung_tdtc9251dh0_tuner_calc_regs;
			card->fe->ops.info.frequency_min = 174000000;
			card->fe->ops.info.frequency_max = 862000000;
		}
		break;

@@ -687,9 +687,9 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
	case BTTV_BOARD_PINNACLESAT:
		card->fe = cx24110_attach(&pctvsat_config, card->i2c_adapter);
		if (card->fe) {
			card->fe->ops->tuner_ops.init = pinnsat_tuner_init;
			card->fe->ops->tuner_ops.sleep = pinnsat_tuner_sleep;
			card->fe->ops->tuner_ops.set_params = cx24108_tuner_set_params;
			card->fe->ops.tuner_ops.init = pinnsat_tuner_init;
			card->fe->ops.tuner_ops.sleep = pinnsat_tuner_sleep;
			card->fe->ops.tuner_ops.set_params = cx24108_tuner_set_params;
		}
		break;

@@ -707,8 +707,8 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)
	else
		if (dvb_register_frontend(&card->dvb_adapter, card->fe)) {
			printk("dvb-bt8xx: Frontend registration failed!\n");
			if (card->fe->ops->release)
				card->fe->ops->release(card->fe);
			if (card->fe->ops.release)
				card->fe->ops.release(card->fe);
			card->fe = NULL;
		}
}
+76 −76
Original line number Diff line number Diff line
@@ -151,8 +151,8 @@ static void dvb_frontend_add_event(struct dvb_frontend *fe, fe_status_t status)
		sizeof (struct dvb_frontend_parameters));

	if (status & FE_HAS_LOCK)
		if (fe->ops->get_frontend)
			fe->ops->get_frontend(fe, &e->parameters);
		if (fe->ops.get_frontend)
			fe->ops.get_frontend(fe, &e->parameters);

	events->eventw = wp;

@@ -211,14 +211,14 @@ static void dvb_frontend_init(struct dvb_frontend *fe)
{
	dprintk ("DVB: initialising frontend %i (%s)...\n",
		 fe->dvb->num,
		 fe->ops->info.name);
		 fe->ops.info.name);

	if (fe->ops->init)
		fe->ops->init(fe);
	if (fe->ops->tuner_ops.init) {
		fe->ops->tuner_ops.init(fe);
		if (fe->ops->i2c_gate_ctrl)
			fe->ops->i2c_gate_ctrl(fe, 0);
	if (fe->ops.init)
		fe->ops.init(fe);
	if (fe->ops.tuner_ops.init) {
		fe->ops.tuner_ops.init(fe);
		if (fe->ops.i2c_gate_ctrl)
			fe->ops.i2c_gate_ctrl(fe, 0);
	}
}

@@ -264,7 +264,7 @@ static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wra
	u32 original_frequency = fepriv->parameters.frequency;

	/* are we using autoinversion? */
	autoinversion = ((!(fe->ops->info.caps & FE_CAN_INVERSION_AUTO)) &&
	autoinversion = ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) &&
			 (fepriv->parameters.inversion == INVERSION_AUTO));

	/* setup parameters correctly */
@@ -334,8 +334,8 @@ static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wra
	fepriv->parameters.frequency += fepriv->lnb_drift;
	if (autoinversion)
		fepriv->parameters.inversion = fepriv->inversion;
	if (fe->ops->set_frontend)
		fe->ops->set_frontend(fe, &fepriv->parameters);
	if (fe->ops.set_frontend)
		fe->ops.set_frontend(fe, &fepriv->parameters);

	fepriv->parameters.frequency = original_frequency;
	fepriv->parameters.inversion = original_inversion;
@@ -359,8 +359,8 @@ static void dvb_frontend_swzigzag(struct dvb_frontend *fe)
	/* in SCAN mode, we just set the frontend when asked and leave it alone */
	if (fepriv->tune_mode_flags & FE_TUNE_MODE_ONESHOT) {
		if (fepriv->state & FESTATE_RETUNE) {
			if (fe->ops->set_frontend)
				fe->ops->set_frontend(fe, &fepriv->parameters);
			if (fe->ops.set_frontend)
				fe->ops.set_frontend(fe, &fepriv->parameters);
			fepriv->state = FESTATE_TUNED;
		}
		fepriv->delay = 3*HZ;
@@ -372,8 +372,8 @@ static void dvb_frontend_swzigzag(struct dvb_frontend *fe)
	if (fepriv->state & FESTATE_RETUNE) {
		s = 0;
	} else {
		if (fe->ops->read_status)
			fe->ops->read_status(fe, &s);
		if (fe->ops.read_status)
			fe->ops.read_status(fe, &s);
		if (s != fepriv->status) {
			dvb_frontend_add_event(fe, s);
			fepriv->status = s;
@@ -386,7 +386,7 @@ static void dvb_frontend_swzigzag(struct dvb_frontend *fe)
		fepriv->state = FESTATE_TUNED;

		/* if we're tuned, then we have determined the correct inversion */
		if ((!(fe->ops->info.caps & FE_CAN_INVERSION_AUTO)) &&
		if ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) &&
		    (fepriv->parameters.inversion == INVERSION_AUTO)) {
			fepriv->parameters.inversion = fepriv->inversion;
		}
@@ -410,7 +410,7 @@ static void dvb_frontend_swzigzag(struct dvb_frontend *fe)
	/* don't actually do anything if we're in the LOSTLOCK state,
	 * the frontend is set to FE_CAN_RECOVER, and the max_drift is 0 */
	if ((fepriv->state & FESTATE_LOSTLOCK) &&
	    (fe->ops->info.caps & FE_CAN_RECOVER) && (fepriv->max_drift == 0)) {
	    (fe->ops.info.caps & FE_CAN_RECOVER) && (fepriv->max_drift == 0)) {
		dvb_frontend_swzigzag_update_delay(fepriv, s & FE_HAS_LOCK);
		return;
	}
@@ -545,16 +545,16 @@ static int dvb_frontend_thread(void *data)
		if (fepriv->reinitialise) {
			dvb_frontend_init(fe);
			if (fepriv->tone != -1) {
				fe->ops->set_tone(fe, fepriv->tone);
				fe->ops.set_tone(fe, fepriv->tone);
			}
			if (fepriv->voltage != -1) {
				fe->ops->set_voltage(fe, fepriv->voltage);
				fe->ops.set_voltage(fe, fepriv->voltage);
			}
			fepriv->reinitialise = 0;
		}

		/* do an iteration of the tuning loop */
		if (fe->ops->tune) {
		if (fe->ops.tune) {
			/* have we been asked to retune? */
			params = NULL;
			if (fepriv->state & FESTATE_RETUNE) {
@@ -562,7 +562,7 @@ static int dvb_frontend_thread(void *data)
				fepriv->state = FESTATE_TUNED;
			}

			fe->ops->tune(fe, params, fepriv->tune_mode_flags, &fepriv->delay, &s);
			fe->ops.tune(fe, params, fepriv->tune_mode_flags, &fepriv->delay, &s);
			if (s != fepriv->status) {
				dvb_frontend_add_event(fe, s);
				fepriv->status = s;
@@ -574,15 +574,15 @@ static int dvb_frontend_thread(void *data)

	if (dvb_shutdown_timeout) {
		if (dvb_powerdown_on_sleep)
			if (fe->ops->set_voltage)
				fe->ops->set_voltage(fe, SEC_VOLTAGE_OFF);
		if (fe->ops->tuner_ops.sleep) {
			fe->ops->tuner_ops.sleep(fe);
			if (fe->ops->i2c_gate_ctrl)
				fe->ops->i2c_gate_ctrl(fe, 0);
			if (fe->ops.set_voltage)
				fe->ops.set_voltage(fe, SEC_VOLTAGE_OFF);
		if (fe->ops.tuner_ops.sleep) {
			fe->ops.tuner_ops.sleep(fe);
			if (fe->ops.i2c_gate_ctrl)
				fe->ops.i2c_gate_ctrl(fe, 0);
		}
		if (fe->ops->sleep)
			fe->ops->sleep(fe);
		if (fe->ops.sleep)
			fe->ops.sleep(fe);
	}

	fepriv->thread_pid = 0;
@@ -734,7 +734,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
	switch (cmd) {
	case FE_GET_INFO: {
		struct dvb_frontend_info* info = parg;
		memcpy(info, &fe->ops->info, sizeof(struct dvb_frontend_info));
		memcpy(info, &fe->ops.info, sizeof(struct dvb_frontend_info));

		/* Force the CAN_INVERSION_AUTO bit on. If the frontend doesn't
		 * do it, it is done for it. */
@@ -754,58 +754,58 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
			break;
		}

		if (fe->ops->read_status)
			err = fe->ops->read_status(fe, status);
		if (fe->ops.read_status)
			err = fe->ops.read_status(fe, status);
		break;
	}
	case FE_READ_BER:
		if (fe->ops->read_ber)
			err = fe->ops->read_ber(fe, (__u32*) parg);
		if (fe->ops.read_ber)
			err = fe->ops.read_ber(fe, (__u32*) parg);
		break;

	case FE_READ_SIGNAL_STRENGTH:
		if (fe->ops->read_signal_strength)
			err = fe->ops->read_signal_strength(fe, (__u16*) parg);
		if (fe->ops.read_signal_strength)
			err = fe->ops.read_signal_strength(fe, (__u16*) parg);
		break;

	case FE_READ_SNR:
		if (fe->ops->read_snr)
			err = fe->ops->read_snr(fe, (__u16*) parg);
		if (fe->ops.read_snr)
			err = fe->ops.read_snr(fe, (__u16*) parg);
		break;

	case FE_READ_UNCORRECTED_BLOCKS:
		if (fe->ops->read_ucblocks)
			err = fe->ops->read_ucblocks(fe, (__u32*) parg);
		if (fe->ops.read_ucblocks)
			err = fe->ops.read_ucblocks(fe, (__u32*) parg);
		break;


	case FE_DISEQC_RESET_OVERLOAD:
		if (fe->ops->diseqc_reset_overload) {
			err = fe->ops->diseqc_reset_overload(fe);
		if (fe->ops.diseqc_reset_overload) {
			err = fe->ops.diseqc_reset_overload(fe);
			fepriv->state = FESTATE_DISEQC;
			fepriv->status = 0;
		}
		break;

	case FE_DISEQC_SEND_MASTER_CMD:
		if (fe->ops->diseqc_send_master_cmd) {
			err = fe->ops->diseqc_send_master_cmd(fe, (struct dvb_diseqc_master_cmd*) parg);
		if (fe->ops.diseqc_send_master_cmd) {
			err = fe->ops.diseqc_send_master_cmd(fe, (struct dvb_diseqc_master_cmd*) parg);
			fepriv->state = FESTATE_DISEQC;
			fepriv->status = 0;
		}
		break;

	case FE_DISEQC_SEND_BURST:
		if (fe->ops->diseqc_send_burst) {
			err = fe->ops->diseqc_send_burst(fe, (fe_sec_mini_cmd_t) parg);
		if (fe->ops.diseqc_send_burst) {
			err = fe->ops.diseqc_send_burst(fe, (fe_sec_mini_cmd_t) parg);
			fepriv->state = FESTATE_DISEQC;
			fepriv->status = 0;
		}
		break;

	case FE_SET_TONE:
		if (fe->ops->set_tone) {
			err = fe->ops->set_tone(fe, (fe_sec_tone_mode_t) parg);
		if (fe->ops.set_tone) {
			err = fe->ops.set_tone(fe, (fe_sec_tone_mode_t) parg);
			fepriv->tone = (fe_sec_tone_mode_t) parg;
			fepriv->state = FESTATE_DISEQC;
			fepriv->status = 0;
@@ -813,8 +813,8 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
		break;

	case FE_SET_VOLTAGE:
		if (fe->ops->set_voltage) {
			err = fe->ops->set_voltage(fe, (fe_sec_voltage_t) parg);
		if (fe->ops.set_voltage) {
			err = fe->ops.set_voltage(fe, (fe_sec_voltage_t) parg);
			fepriv->voltage = (fe_sec_voltage_t) parg;
			fepriv->state = FESTATE_DISEQC;
			fepriv->status = 0;
@@ -822,11 +822,11 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
		break;

	case FE_DISHNETWORK_SEND_LEGACY_CMD:
		if (fe->ops->dishnetwork_send_legacy_command) {
			err = fe->ops->dishnetwork_send_legacy_command(fe, (unsigned long) parg);
		if (fe->ops.dishnetwork_send_legacy_command) {
			err = fe->ops.dishnetwork_send_legacy_command(fe, (unsigned long) parg);
			fepriv->state = FESTATE_DISEQC;
			fepriv->status = 0;
		} else if (fe->ops->set_voltage) {
		} else if (fe->ops.set_voltage) {
			/*
			 * NOTE: This is a fallback condition.  Some frontends
			 * (stv0299 for instance) take longer than 8msec to
@@ -856,7 +856,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
			/* before sending a command, initialize by sending
			 * a 32ms 18V to the switch
			 */
			fe->ops->set_voltage(fe, SEC_VOLTAGE_18);
			fe->ops.set_voltage(fe, SEC_VOLTAGE_18);
			dvb_frontend_sleep_until(&nexttime, 32000);

			for (i = 0; i < 9; i++) {
@@ -864,7 +864,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
					do_gettimeofday(&tv[i + 1]);
				if ((cmd & 0x01) != last) {
					/* set voltage to (last ? 13V : 18V) */
					fe->ops->set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18);
					fe->ops.set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18);
					last = (last) ? 0 : 1;
				}
				cmd = cmd >> 1;
@@ -884,13 +884,13 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
		break;

	case FE_DISEQC_RECV_SLAVE_REPLY:
		if (fe->ops->diseqc_recv_slave_reply)
			err = fe->ops->diseqc_recv_slave_reply(fe, (struct dvb_diseqc_slave_reply*) parg);
		if (fe->ops.diseqc_recv_slave_reply)
			err = fe->ops.diseqc_recv_slave_reply(fe, (struct dvb_diseqc_slave_reply*) parg);
		break;

	case FE_ENABLE_HIGH_LNB_VOLTAGE:
		if (fe->ops->enable_high_lnb_voltage)
			err = fe->ops->enable_high_lnb_voltage(fe, (long) parg);
		if (fe->ops.enable_high_lnb_voltage)
			err = fe->ops.enable_high_lnb_voltage(fe, (long) parg);
		break;

	case FE_SET_FRONTEND: {
@@ -908,7 +908,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
			fepriv->parameters.inversion = INVERSION_AUTO;
			fetunesettings.parameters.inversion = INVERSION_AUTO;
		}
		if (fe->ops->info.type == FE_OFDM) {
		if (fe->ops.info.type == FE_OFDM) {
			/* without hierachical coding code_rate_LP is irrelevant,
			 * so we tolerate the otherwise invalid FEC_NONE setting */
			if (fepriv->parameters.u.ofdm.hierarchy_information == HIERARCHY_NONE &&
@@ -917,13 +917,13 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
		}

		/* get frontend-specific tuning settings */
		if (fe->ops->get_tune_settings && (fe->ops->get_tune_settings(fe, &fetunesettings) == 0)) {
		if (fe->ops.get_tune_settings && (fe->ops.get_tune_settings(fe, &fetunesettings) == 0)) {
			fepriv->min_delay = (fetunesettings.min_delay_ms * HZ) / 1000;
			fepriv->max_drift = fetunesettings.max_drift;
			fepriv->step_size = fetunesettings.step_size;
		} else {
			/* default values */
			switch(fe->ops->info.type) {
			switch(fe->ops.info.type) {
			case FE_QPSK:
				fepriv->min_delay = HZ/20;
				fepriv->step_size = fepriv->parameters.u.qpsk.symbol_rate / 16000;
@@ -938,8 +938,8 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,

			case FE_OFDM:
				fepriv->min_delay = HZ/20;
				fepriv->step_size = fe->ops->info.frequency_stepsize * 2;
				fepriv->max_drift = (fe->ops->info.frequency_stepsize * 2) + 1;
				fepriv->step_size = fe->ops.info.frequency_stepsize * 2;
				fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
				break;
			case FE_ATSC:
				printk("dvb-core: FE_ATSC not handled yet.\n");
@@ -962,9 +962,9 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
		break;

	case FE_GET_FRONTEND:
		if (fe->ops->get_frontend) {
		if (fe->ops.get_frontend) {
			memcpy (parg, &fepriv->parameters, sizeof (struct dvb_frontend_parameters));
			err = fe->ops->get_frontend(fe, (struct dvb_frontend_parameters*) parg);
			err = fe->ops.get_frontend(fe, (struct dvb_frontend_parameters*) parg);
		}
		break;

@@ -1077,7 +1077,7 @@ int dvb_register_frontend(struct dvb_adapter* dvb,

	printk ("DVB: registering frontend %i (%s)...\n",
		fe->dvb->num,
		fe->ops->info.name);
		fe->ops.info.name);

	dvb_register_device (fe->dvb, &fepriv->dvbdev, &dvbdev_template,
			     fe, DVB_DEVICE_FRONTEND);
@@ -1095,15 +1095,15 @@ int dvb_unregister_frontend(struct dvb_frontend* fe)
	mutex_lock(&frontend_mutex);
	dvb_unregister_device (fepriv->dvbdev);
	dvb_frontend_stop (fe);
	if (fe->ops->tuner_ops.release) {
		fe->ops->tuner_ops.release(fe);
		if (fe->ops->i2c_gate_ctrl)
			fe->ops->i2c_gate_ctrl(fe, 0);
	if (fe->ops.tuner_ops.release) {
		fe->ops.tuner_ops.release(fe);
		if (fe->ops.i2c_gate_ctrl)
			fe->ops.i2c_gate_ctrl(fe, 0);
	}
	if (fe->ops->release)
		fe->ops->release(fe);
	if (fe->ops.release)
		fe->ops.release(fe);
	else
		printk("dvb_frontend: Demodulator (%s) does not have a release callback!\n", fe->ops->info.name);
		printk("dvb_frontend: Demodulator (%s) does not have a release callback!\n", fe->ops.info.name);
	/* fe is invalid now */
	kfree(fepriv);
	mutex_unlock(&frontend_mutex);
Loading