aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/frontends/ves1x93.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/frontends/ves1x93.c')
-rw-r--r--drivers/media/dvb/frontends/ves1x93.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/media/dvb/frontends/ves1x93.c b/drivers/media/dvb/frontends/ves1x93.c
index 8d7854c2fb0c..9c17eacaec24 100644
--- a/drivers/media/dvb/frontends/ves1x93.c
+++ b/drivers/media/dvb/frontends/ves1x93.c
@@ -46,6 +46,7 @@ struct ves1x93_state {
46 u8 *init_1x93_wtab; 46 u8 *init_1x93_wtab;
47 u8 tab_size; 47 u8 tab_size;
48 u8 demod_type; 48 u8 demod_type;
49 u32 frequency;
49}; 50};
50 51
51static int debug; 52static int debug;
@@ -384,31 +385,34 @@ static int ves1x93_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
384 return 0; 385 return 0;
385} 386}
386 387
387static int ves1x93_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) 388static int ves1x93_set_frontend(struct dvb_frontend *fe)
388{ 389{
390 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
389 struct ves1x93_state* state = fe->demodulator_priv; 391 struct ves1x93_state* state = fe->demodulator_priv;
390 392
391 if (fe->ops.tuner_ops.set_params) { 393 if (fe->ops.tuner_ops.set_params) {
392 fe->ops.tuner_ops.set_params(fe, p); 394 fe->ops.tuner_ops.set_params(fe);
393 if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); 395 if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0);
394 } 396 }
395 ves1x93_set_inversion (state, p->inversion); 397 ves1x93_set_inversion (state, p->inversion);
396 ves1x93_set_fec (state, p->u.qpsk.fec_inner); 398 ves1x93_set_fec(state, p->fec_inner);
397 ves1x93_set_symbolrate (state, p->u.qpsk.symbol_rate); 399 ves1x93_set_symbolrate(state, p->symbol_rate);
398 state->inversion = p->inversion; 400 state->inversion = p->inversion;
401 state->frequency = p->frequency;
399 402
400 return 0; 403 return 0;
401} 404}
402 405
403static int ves1x93_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) 406static int ves1x93_get_frontend(struct dvb_frontend *fe)
404{ 407{
408 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
405 struct ves1x93_state* state = fe->demodulator_priv; 409 struct ves1x93_state* state = fe->demodulator_priv;
406 int afc; 410 int afc;
407 411
408 afc = ((int)((char)(ves1x93_readreg (state, 0x0a) << 1)))/2; 412 afc = ((int)((char)(ves1x93_readreg (state, 0x0a) << 1)))/2;
409 afc = (afc * (int)(p->u.qpsk.symbol_rate/1000/8))/16; 413 afc = (afc * (int)(p->symbol_rate/1000/8))/16;
410 414
411 p->frequency -= afc; 415 p->frequency = state->frequency - afc;
412 416
413 /* 417 /*
414 * inversion indicator is only valid 418 * inversion indicator is only valid
@@ -417,7 +421,7 @@ static int ves1x93_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_par
417 if (state->inversion == INVERSION_AUTO) 421 if (state->inversion == INVERSION_AUTO)
418 p->inversion = (ves1x93_readreg (state, 0x0f) & 2) ? 422 p->inversion = (ves1x93_readreg (state, 0x0f) & 2) ?
419 INVERSION_OFF : INVERSION_ON; 423 INVERSION_OFF : INVERSION_ON;
420 p->u.qpsk.fec_inner = ves1x93_get_fec (state); 424 p->fec_inner = ves1x93_get_fec(state);
421 /* XXX FIXME: timing offset !! */ 425 /* XXX FIXME: timing offset !! */
422 426
423 return 0; 427 return 0;
@@ -506,10 +510,9 @@ error:
506} 510}
507 511
508static struct dvb_frontend_ops ves1x93_ops = { 512static struct dvb_frontend_ops ves1x93_ops = {
509 513 .delsys = { SYS_DVBS },
510 .info = { 514 .info = {
511 .name = "VLSI VES1x93 DVB-S", 515 .name = "VLSI VES1x93 DVB-S",
512 .type = FE_QPSK,
513 .frequency_min = 950000, 516 .frequency_min = 950000,
514 .frequency_max = 2150000, 517 .frequency_max = 2150000,
515 .frequency_stepsize = 125, /* kHz for QPSK frontends */ 518 .frequency_stepsize = 125, /* kHz for QPSK frontends */