[media] m88rs2000: prevent frontend crash on continuous transponder scans
authorMalcolm Priestley <tvboxspy@gmail.com>
Wed, 26 Feb 2014 02:11:34 +0000 (23:11 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 28 Feb 2014 18:19:44 +0000 (15:19 -0300)
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>
drivers/media/dvb-frontends/m88rs2000.c

index ee2fec87c2e643fbad942d6e448053d2f9f100e9..32cffca14d0b6ada3e96cdfb8a561c8f0ad1c4a4 100644 (file)
@@ -715,6 +715,22 @@ static int m88rs2000_get_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
+static int m88rs2000_get_tune_settings(struct dvb_frontend *fe,
+       struct dvb_frontend_tune_settings *tune)
+{
+       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+
+       if (c->symbol_rate > 3000000)
+               tune->min_delay_ms = 2000;
+       else
+               tune->min_delay_ms = 3000;
+
+       tune->step_size = c->symbol_rate / 16000;
+       tune->max_drift = c->symbol_rate / 2000;
+
+       return 0;
+}
+
 static int m88rs2000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
 {
        struct m88rs2000_state *state = fe->demodulator_priv;
@@ -766,6 +782,7 @@ static struct dvb_frontend_ops m88rs2000_ops = {
 
        .set_frontend = m88rs2000_set_frontend,
        .get_frontend = m88rs2000_get_frontend,
+       .get_tune_settings = m88rs2000_get_tune_settings,
 };
 
 struct dvb_frontend *m88rs2000_attach(const struct m88rs2000_config *config,