aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends/m88rs2000.c
diff options
context:
space:
mode:
authorMalcolm Priestley <tvboxspy@gmail.com>2014-02-25 21:11:34 -0500
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-02-28 13:19:44 -0500
commit8272d0a0c0d374a01721e579df6e8add5577132b (patch)
tree6c1defe52d77d2411d68ef32d96a753d0afd6075 /drivers/media/dvb-frontends/m88rs2000.c
parent3c8023a782964c72574ad8268ba0ea4e2d9772fc (diff)
[media] m88rs2000: prevent frontend crash on continuous transponder scans
Add m88rs2000_get_tune_settings, min delay of 2000 ms on symbol rate more than 3000000 and delay of 3000ms less than this. Adding min delay prevents crashing the frontend on continuous transponder scans. Other dvb_frontend_tune_settings remain as default. This makes very little time difference to good channel scans, but slows down the set frontend where lock can never be achieved i.e. DVB-S2. Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com> Cc: stable@vger.kernel.org Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/dvb-frontends/m88rs2000.c')
-rw-r--r--drivers/media/dvb-frontends/m88rs2000.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/media/dvb-frontends/m88rs2000.c b/drivers/media/dvb-frontends/m88rs2000.c
index ee2fec87c2e6..32cffca14d0b 100644
--- a/drivers/media/dvb-frontends/m88rs2000.c
+++ b/drivers/media/dvb-frontends/m88rs2000.c
@@ -715,6 +715,22 @@ static int m88rs2000_get_frontend(struct dvb_frontend *fe)
715 return 0; 715 return 0;
716} 716}
717 717
718static int m88rs2000_get_tune_settings(struct dvb_frontend *fe,
719 struct dvb_frontend_tune_settings *tune)
720{
721 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
722
723 if (c->symbol_rate > 3000000)
724 tune->min_delay_ms = 2000;
725 else
726 tune->min_delay_ms = 3000;
727
728 tune->step_size = c->symbol_rate / 16000;
729 tune->max_drift = c->symbol_rate / 2000;
730
731 return 0;
732}
733
718static int m88rs2000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) 734static int m88rs2000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
719{ 735{
720 struct m88rs2000_state *state = fe->demodulator_priv; 736 struct m88rs2000_state *state = fe->demodulator_priv;
@@ -766,6 +782,7 @@ static struct dvb_frontend_ops m88rs2000_ops = {
766 782
767 .set_frontend = m88rs2000_set_frontend, 783 .set_frontend = m88rs2000_set_frontend,
768 .get_frontend = m88rs2000_get_frontend, 784 .get_frontend = m88rs2000_get_frontend,
785 .get_tune_settings = m88rs2000_get_tune_settings,
769}; 786};
770 787
771struct dvb_frontend *m88rs2000_attach(const struct m88rs2000_config *config, 788struct dvb_frontend *m88rs2000_attach(const struct m88rs2000_config *config,