media: dvb_frontend: move algo-specific settings to a function
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 17 Jun 2020 18:52:13 +0000 (20:52 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 22 Mar 2021 14:47:53 +0000 (15:47 +0100)
As we're planning to call this code from somewhere else,
let's first move it to its own function.

Link: https://lore.kernel.org/linux-media/daa69edd80e7fcf979062273f3067cb7b5573d52.1592419750.git.mchehab+huawei@kernel.org
Reviewed-by: Marc Gonzalez <marc.w.gonzalez@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/dvb-core/dvb_frontend.c

index fb35697dd93c61733e37f701237fd22e77349106..00b361a534eaf677d6b491f6386bcbf80e61e972 100644 (file)
@@ -1791,6 +1791,53 @@ static int dvbv3_set_delivery_system(struct dvb_frontend *fe)
        return emulate_delivery_system(fe, delsys);
 }
 
+static void prepare_tuning_algo_parameters(struct dvb_frontend *fe)
+{
+       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+       struct dvb_frontend_private *fepriv = fe->frontend_priv;
+       struct dvb_frontend_tune_settings fetunesettings = { 0 };
+
+       /* get frontend-specific tuning settings */
+       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 (c->delivery_system) {
+               case SYS_DVBS:
+               case SYS_DVBS2:
+               case SYS_ISDBS:
+               case SYS_TURBO:
+               case SYS_DVBC_ANNEX_A:
+               case SYS_DVBC_ANNEX_C:
+                       fepriv->min_delay = HZ / 20;
+                       fepriv->step_size = c->symbol_rate / 16000;
+                       fepriv->max_drift = c->symbol_rate / 2000;
+                       break;
+               case SYS_DVBT:
+               case SYS_DVBT2:
+               case SYS_ISDBT:
+               case SYS_DTMB:
+                       fepriv->min_delay = HZ / 20;
+                       fepriv->step_size = dvb_frontend_get_stepsize(fe) * 2;
+                       fepriv->max_drift = (dvb_frontend_get_stepsize(fe) * 2) + 1;
+                       break;
+               default:
+                       /*
+                        * FIXME: This sounds wrong! if freqency_stepsize is
+                        * defined by the frontend, why not use it???
+                        */
+                       fepriv->min_delay = HZ / 20;
+                       fepriv->step_size = 0; /* no zigzag */
+                       fepriv->max_drift = 0;
+                       break;
+               }
+       }
+       if (dvb_override_tune_delay > 0)
+               fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
+}
+
 /**
  * dtv_property_process_set -  Sets a single DTV property
  * @fe:                Pointer to &struct dvb_frontend
@@ -2183,7 +2230,6 @@ static int dtv_set_frontend(struct dvb_frontend *fe)
 {
        struct dvb_frontend_private *fepriv = fe->frontend_priv;
        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-       struct dvb_frontend_tune_settings fetunesettings;
        u32 rolloff = 0;
 
        if (dvb_frontend_check_parameters(fe) < 0)
@@ -2261,46 +2307,7 @@ static int dtv_set_frontend(struct dvb_frontend *fe)
        if (c->hierarchy == HIERARCHY_NONE && c->code_rate_LP == FEC_NONE)
                c->code_rate_LP = FEC_AUTO;
 
-       /* get frontend-specific tuning settings */
-       memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));
-       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 (c->delivery_system) {
-               case SYS_DVBS:
-               case SYS_DVBS2:
-               case SYS_ISDBS:
-               case SYS_TURBO:
-               case SYS_DVBC_ANNEX_A:
-               case SYS_DVBC_ANNEX_C:
-                       fepriv->min_delay = HZ / 20;
-                       fepriv->step_size = c->symbol_rate / 16000;
-                       fepriv->max_drift = c->symbol_rate / 2000;
-                       break;
-               case SYS_DVBT:
-               case SYS_DVBT2:
-               case SYS_ISDBT:
-               case SYS_DTMB:
-                       fepriv->min_delay = HZ / 20;
-                       fepriv->step_size = dvb_frontend_get_stepsize(fe) * 2;
-                       fepriv->max_drift = (dvb_frontend_get_stepsize(fe) * 2) + 1;
-                       break;
-               default:
-                       /*
-                        * FIXME: This sounds wrong! if freqency_stepsize is
-                        * defined by the frontend, why not use it???
-                        */
-                       fepriv->min_delay = HZ / 20;
-                       fepriv->step_size = 0; /* no zigzag */
-                       fepriv->max_drift = 0;
-                       break;
-               }
-       }
-       if (dvb_override_tune_delay > 0)
-               fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
+       prepare_tuning_algo_parameters(fe);
 
        fepriv->state = FESTATE_RETUNE;