[media] dvb_frontend: pass the props cache to get_frontend() as arg
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Thu, 4 Feb 2016 14:58:30 +0000 (12:58 -0200)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Thu, 4 Feb 2016 18:27:30 +0000 (16:27 -0200)
Instead of using the DTV properties cache directly, pass the get
frontend data as an argument. For now, everything should remain
the same, but the next patch will prevent get_frontend to
affect the global cache.

This is needed because several drivers don't care enough to only
change the properties if locked. Due to that, calling
G_PROPERTY before locking on those drivers will make them to
never lock. Ok, those drivers are crap and should never be
merged like that, but the core should not rely that the drivers
would be doing the right thing.

Reviewed-by: Michael Ira Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
65 files changed:
drivers/media/dvb-core/dvb_frontend.c
drivers/media/dvb-core/dvb_frontend.h
drivers/media/dvb-frontends/af9013.c
drivers/media/dvb-frontends/af9033.c
drivers/media/dvb-frontends/as102_fe.c
drivers/media/dvb-frontends/atbm8830.c
drivers/media/dvb-frontends/au8522_dig.c
drivers/media/dvb-frontends/cx22700.c
drivers/media/dvb-frontends/cx22702.c
drivers/media/dvb-frontends/cx24110.c
drivers/media/dvb-frontends/cx24117.c
drivers/media/dvb-frontends/cx24120.c
drivers/media/dvb-frontends/cx24123.c
drivers/media/dvb-frontends/cxd2820r_c.c
drivers/media/dvb-frontends/cxd2820r_core.c
drivers/media/dvb-frontends/cxd2820r_priv.h
drivers/media/dvb-frontends/cxd2820r_t.c
drivers/media/dvb-frontends/cxd2820r_t2.c
drivers/media/dvb-frontends/cxd2841er.c
drivers/media/dvb-frontends/dib3000mb.c
drivers/media/dvb-frontends/dib3000mc.c
drivers/media/dvb-frontends/dib7000m.c
drivers/media/dvb-frontends/dib7000p.c
drivers/media/dvb-frontends/dib8000.c
drivers/media/dvb-frontends/dib9000.c
drivers/media/dvb-frontends/dvb_dummy_fe.c
drivers/media/dvb-frontends/hd29l2.c
drivers/media/dvb-frontends/l64781.c
drivers/media/dvb-frontends/lg2160.c
drivers/media/dvb-frontends/lgdt3305.c
drivers/media/dvb-frontends/lgdt3306a.c
drivers/media/dvb-frontends/lgdt330x.c
drivers/media/dvb-frontends/lgs8gl5.c
drivers/media/dvb-frontends/m88ds3103.c
drivers/media/dvb-frontends/m88rs2000.c
drivers/media/dvb-frontends/mt312.c
drivers/media/dvb-frontends/mt352.c
drivers/media/dvb-frontends/or51132.c
drivers/media/dvb-frontends/rtl2830.c
drivers/media/dvb-frontends/rtl2832.c
drivers/media/dvb-frontends/s5h1409.c
drivers/media/dvb-frontends/s5h1411.c
drivers/media/dvb-frontends/s5h1420.c
drivers/media/dvb-frontends/s921.c
drivers/media/dvb-frontends/stb0899_drv.c
drivers/media/dvb-frontends/stb6100.c
drivers/media/dvb-frontends/stv0297.c
drivers/media/dvb-frontends/stv0299.c
drivers/media/dvb-frontends/stv0367.c
drivers/media/dvb-frontends/stv0900_core.c
drivers/media/dvb-frontends/tc90522.c
drivers/media/dvb-frontends/tda10021.c
drivers/media/dvb-frontends/tda10023.c
drivers/media/dvb-frontends/tda10048.c
drivers/media/dvb-frontends/tda1004x.c
drivers/media/dvb-frontends/tda10071.c
drivers/media/dvb-frontends/tda10086.c
drivers/media/dvb-frontends/tda8083.c
drivers/media/dvb-frontends/ves1820.c
drivers/media/dvb-frontends/ves1x93.c
drivers/media/dvb-frontends/zl10353.c
drivers/media/pci/bt8xx/dst.c
drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
drivers/media/usb/dvb-usb/af9005-fe.c
drivers/media/usb/dvb-usb/dtt200u-fe.c

index ca6d60f9d492fc0749fdb8181821b396d37c6144..d009478f16c4e976d3ef1498244cf7e3aa0e487f 100644 (file)
@@ -1361,7 +1361,7 @@ static int dtv_get_frontend(struct dvb_frontend *fe,
        int r;
 
        if (fe->ops.get_frontend) {
-               r = fe->ops.get_frontend(fe);
+               r = fe->ops.get_frontend(fe, c);
                if (unlikely(r < 0))
                        return r;
                if (p_out)
index 458bcce20e3847e106b7af3ba2592764cef5f9bf..9592573a0b412f7972e00f4e3755b31269b44909 100644 (file)
@@ -449,7 +449,8 @@ struct dvb_frontend_ops {
        int (*set_frontend)(struct dvb_frontend *fe);
        int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
 
-       int (*get_frontend)(struct dvb_frontend *fe);
+       int (*get_frontend)(struct dvb_frontend *fe,
+                           struct dtv_frontend_properties *props);
 
        int (*read_status)(struct dvb_frontend *fe, enum fe_status *status);
        int (*read_ber)(struct dvb_frontend* fe, u32* ber);
index 41ab5defb7989b058bb42dfa90ecd972ded4381d..8bcde336ffd70e7f4781421cd5c2632341dd4407 100644 (file)
@@ -866,9 +866,9 @@ err:
        return ret;
 }
 
-static int af9013_get_frontend(struct dvb_frontend *fe)
+static int af9013_get_frontend(struct dvb_frontend *fe,
+                              struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct af9013_state *state = fe->demodulator_priv;
        int ret;
        u8 buf[3];
index 8b328d1ca8d365f6cac693a443a80adee4e9041e..efebe5ce2429096d4e4db6a7138abd271edf9c3f 100644 (file)
@@ -691,10 +691,10 @@ err:
        return ret;
 }
 
-static int af9033_get_frontend(struct dvb_frontend *fe)
+static int af9033_get_frontend(struct dvb_frontend *fe,
+                              struct dtv_frontend_properties *c)
 {
        struct af9033_dev *dev = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[8];
 
index 544c5f65d19a5f6f2db4800ac7bdcf638cd81e71..9412fcd1bddb65f57293b56ffbb80fba3d1cf3dc 100644 (file)
@@ -190,10 +190,10 @@ static int as102_fe_set_frontend(struct dvb_frontend *fe)
        return state->ops->set_tune(state->priv, &tune_args);
 }
 
-static int as102_fe_get_frontend(struct dvb_frontend *fe)
+static int as102_fe_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *c)
 {
        struct as102_state *state = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret = 0;
        struct as10x_tps tps = { 0 };
 
index 8fe552e293ed6ea66989847cc06b2fac402e2908..47248b868e38548427a045275a2e1f062a5fdbc5 100644 (file)
@@ -297,9 +297,9 @@ static int atbm8830_set_fe(struct dvb_frontend *fe)
        return 0;
 }
 
-static int atbm8830_get_fe(struct dvb_frontend *fe)
+static int atbm8830_get_fe(struct dvb_frontend *fe,
+                          struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        dprintk("%s\n", __func__);
 
        /* TODO: get real readings from device */
index 6c1e97640f3f6519dbb4689adf578488483803d3..e676b9461a59d60ce54eb66b759de96b0c6030bd 100644 (file)
@@ -816,9 +816,9 @@ static int au8522_read_ber(struct dvb_frontend *fe, u32 *ber)
        return au8522_read_ucblocks(fe, ber);
 }
 
-static int au8522_get_frontend(struct dvb_frontend *fe)
+static int au8522_get_frontend(struct dvb_frontend *fe,
+                              struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct au8522_state *state = fe->demodulator_priv;
 
        c->frequency = state->current_frequency;
index fd033cca6e111336775b2ca218f5a5f16711c933..5cad925609e06efc59ad32095363939b492a5b97 100644 (file)
@@ -345,9 +345,9 @@ static int cx22700_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int cx22700_get_frontend(struct dvb_frontend *fe)
+static int cx22700_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct cx22700_state* state = fe->demodulator_priv;
        u8 reg09 = cx22700_readreg (state, 0x09);
 
index d2d06dcd768356f1a0a4ae83d42e2309204a0248..c0e54c59cccf623a21ed63184bfec819ed206854 100644 (file)
@@ -562,9 +562,9 @@ static int cx22702_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
        return 0;
 }
 
-static int cx22702_get_frontend(struct dvb_frontend *fe)
+static int cx22702_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct cx22702_state *state = fe->demodulator_priv;
 
        u8 reg0C = cx22702_readreg(state, 0x0C);
index cb36475e322b8aa816b27372163600d0adea1e21..6cb81ec12847410ad3e600f4ab3960f3e1da0615 100644 (file)
@@ -550,9 +550,9 @@ static int cx24110_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int cx24110_get_frontend(struct dvb_frontend *fe)
+static int cx24110_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct cx24110_state *state = fe->demodulator_priv;
        s32 afc; unsigned sclk;
 
index 5f77bc80a896bf63f5a585964fa3d9b996b0912e..a3f7eb4e609d53887a9c5b7e765da906281ca6c1 100644 (file)
@@ -1560,10 +1560,10 @@ static int cx24117_get_algo(struct dvb_frontend *fe)
        return DVBFE_ALGO_HW;
 }
 
-static int cx24117_get_frontend(struct dvb_frontend *fe)
+static int cx24117_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
        struct cx24117_state *state = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct cx24117_cmd cmd;
        u8 reg, st, inv;
        int ret, idx;
index 3b0ef52bb8342a049ea7cbd6a719b71ae548776a..6ccbd86c9490275a01a61c296d2fcd05f34002ba 100644 (file)
@@ -1502,9 +1502,9 @@ static int cx24120_sleep(struct dvb_frontend *fe)
        return 0;
 }
 
-static int cx24120_get_frontend(struct dvb_frontend *fe)
+static int cx24120_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct cx24120_state *state = fe->demodulator_priv;
        u8 freq1, freq2, freq3;
 
index 0fe7fb11124bc6f24cd3f841556592934b432901..113b0949408a3c27000cccd08659224f2ad2d6cb 100644 (file)
@@ -945,9 +945,9 @@ static int cx24123_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int cx24123_get_frontend(struct dvb_frontend *fe)
+static int cx24123_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct cx24123_state *state = fe->demodulator_priv;
 
        dprintk("\n");
index 42fad6aa3958f0dcdedaa51f9df1b7345c21ca35..a674a6312c389ba974742d202b407cf9f6e1d991 100644 (file)
@@ -101,10 +101,10 @@ error:
        return ret;
 }
 
-int cxd2820r_get_frontend_c(struct dvb_frontend *fe)
+int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
+                           struct dtv_frontend_properties *c)
 {
        struct cxd2820r_priv *priv = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[2];
 
index ba4cb7557aa577ce762ef455e26d30176ad004b8..314d3b8c1080e5e1b54ec618ad01bc7e0523169d 100644 (file)
@@ -313,7 +313,8 @@ static int cxd2820r_read_status(struct dvb_frontend *fe, enum fe_status *status)
        return ret;
 }
 
-static int cxd2820r_get_frontend(struct dvb_frontend *fe)
+static int cxd2820r_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *p)
 {
        struct cxd2820r_priv *priv = fe->demodulator_priv;
        int ret;
@@ -326,13 +327,13 @@ static int cxd2820r_get_frontend(struct dvb_frontend *fe)
 
        switch (fe->dtv_property_cache.delivery_system) {
        case SYS_DVBT:
-               ret = cxd2820r_get_frontend_t(fe);
+               ret = cxd2820r_get_frontend_t(fe, p);
                break;
        case SYS_DVBT2:
-               ret = cxd2820r_get_frontend_t2(fe);
+               ret = cxd2820r_get_frontend_t2(fe, p);
                break;
        case SYS_DVBC_ANNEX_A:
-               ret = cxd2820r_get_frontend_c(fe);
+               ret = cxd2820r_get_frontend_c(fe, p);
                break;
        default:
                ret = -EINVAL;
index a0d53f01a8bfcb6f81d7ce27b8bb3dbc7a36a61f..e31c48e53097bd90a9381eff52c55aa66675fa64 100644 (file)
@@ -76,7 +76,8 @@ int cxd2820r_rd_reg(struct cxd2820r_priv *priv, u32 reg, u8 *val);
 
 /* cxd2820r_c.c */
 
-int cxd2820r_get_frontend_c(struct dvb_frontend *fe);
+int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
+                           struct dtv_frontend_properties *p);
 
 int cxd2820r_set_frontend_c(struct dvb_frontend *fe);
 
@@ -99,7 +100,8 @@ int cxd2820r_get_tune_settings_c(struct dvb_frontend *fe,
 
 /* cxd2820r_t.c */
 
-int cxd2820r_get_frontend_t(struct dvb_frontend *fe);
+int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
+                           struct dtv_frontend_properties *p);
 
 int cxd2820r_set_frontend_t(struct dvb_frontend *fe);
 
@@ -122,7 +124,8 @@ int cxd2820r_get_tune_settings_t(struct dvb_frontend *fe,
 
 /* cxd2820r_t2.c */
 
-int cxd2820r_get_frontend_t2(struct dvb_frontend *fe);
+int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
+                            struct dtv_frontend_properties *p);
 
 int cxd2820r_set_frontend_t2(struct dvb_frontend *fe);
 
index 21abf1b4ed4da74895b4fea046d3db9a117ff3ad..75ce7d8ded00506109e92f7ac3f9c3444427eadb 100644 (file)
@@ -138,10 +138,10 @@ error:
        return ret;
 }
 
-int cxd2820r_get_frontend_t(struct dvb_frontend *fe)
+int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
+                           struct dtv_frontend_properties *c)
 {
        struct cxd2820r_priv *priv = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[2];
 
index 4e028b41c0d5eb3018ffdafbe92d85fb58ff2ac7..704475676234086ffee020fe0b200645474e7fd6 100644 (file)
@@ -23,8 +23,8 @@
 
 int cxd2820r_set_frontend_t2(struct dvb_frontend *fe)
 {
-       struct cxd2820r_priv *priv = fe->demodulator_priv;
        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+       struct cxd2820r_priv *priv = fe->demodulator_priv;
        int ret, i, bw_i;
        u32 if_freq, if_ctl;
        u64 num;
@@ -169,10 +169,10 @@ error:
 
 }
 
-int cxd2820r_get_frontend_t2(struct dvb_frontend *fe)
+int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
+                            struct dtv_frontend_properties *c)
 {
        struct cxd2820r_priv *priv = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[2];
 
index fdffb2f0ded8f6bf2bda8a677d3e4cdff2e0d3f3..900186ba8e6201d428e22f1627fb7faa3bce7d7f 100644 (file)
@@ -2090,13 +2090,13 @@ static int cxd2841er_sleep_tc_to_active_c(struct cxd2841er_priv *priv,
        return 0;
 }
 
-static int cxd2841er_get_frontend(struct dvb_frontend *fe)
+static int cxd2841er_get_frontend(struct dvb_frontend *fe,
+                                 struct dtv_frontend_properties *p)
 {
        enum fe_status status = 0;
        u16 strength = 0, snr = 0;
        u32 errors = 0, ber = 0;
        struct cxd2841er_priv *priv = fe->demodulator_priv;
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
 
        dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
        if (priv->state == STATE_ACTIVE_S)
index 3ca300939f790bb1c3ebaceca298932a19f1ac3c..6821ecb53d6326aa4a0dd80bcc6fad7a09d29e7b 100644 (file)
@@ -112,7 +112,8 @@ static u16 dib3000_seq[2][2][2] =     /* fft,gua,   inv   */
                }
        };
 
-static int dib3000mb_get_frontend(struct dvb_frontend* fe);
+static int dib3000mb_get_frontend(struct dvb_frontend* fe,
+                                 struct dtv_frontend_properties *c);
 
 static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner)
 {
@@ -359,7 +360,7 @@ static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner)
                deb_setf("search_state after autosearch %d after %d checks\n",search_state,as_count);
 
                if (search_state == 1) {
-                       if (dib3000mb_get_frontend(fe) == 0) {
+                       if (dib3000mb_get_frontend(fe, c) == 0) {
                                deb_setf("reading tuning data from frontend succeeded.\n");
                                return dib3000mb_set_frontend(fe, 0);
                        }
@@ -450,9 +451,9 @@ static int dib3000mb_fe_init(struct dvb_frontend* fe, int mobile_mode)
        return 0;
 }
 
-static int dib3000mb_get_frontend(struct dvb_frontend* fe)
+static int dib3000mb_get_frontend(struct dvb_frontend* fe,
+                                 struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct dib3000_state* state = fe->demodulator_priv;
        enum fe_code_rate *cr;
        u16 tps_val;
index ac90ed3af37e40a6a184dd7698a6f756140adddb..da0f1dc5aaf73ce15a2bb356ccc81760eb20dd1f 100644 (file)
@@ -636,9 +636,9 @@ struct i2c_adapter * dib3000mc_get_tuner_i2c_master(struct dvb_frontend *demod,
 
 EXPORT_SYMBOL(dib3000mc_get_tuner_i2c_master);
 
-static int dib3000mc_get_frontend(struct dvb_frontend* fe)
+static int dib3000mc_get_frontend(struct dvb_frontend* fe,
+                                 struct dtv_frontend_properties *fep)
 {
-       struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
        struct dib3000mc_state *state = fe->demodulator_priv;
        u16 tps = dib3000mc_read_word(state,458);
 
@@ -726,7 +726,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend *fe)
                if (found == 0 || found == 1)
                        return 0; // no channel found
 
-               dib3000mc_get_frontend(fe);
+               dib3000mc_get_frontend(fe, fep);
        }
 
        ret = dib3000mc_tune(fe);
index 8b21cccf3c3a04184629af11a30cb0d9c3d91d9b..b3ddae8885ac23cc94b7bb46930eb5d1f3df689b 100644 (file)
@@ -1151,9 +1151,9 @@ static int dib7000m_identify(struct dib7000m_state *state)
 }
 
 
-static int dib7000m_get_frontend(struct dvb_frontend* fe)
+static int dib7000m_get_frontend(struct dvb_frontend* fe,
+                                struct dtv_frontend_properties *fep)
 {
-       struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
        struct dib7000m_state *state = fe->demodulator_priv;
        u16 tps = dib7000m_read_word(state,480);
 
@@ -1246,7 +1246,7 @@ static int dib7000m_set_frontend(struct dvb_frontend *fe)
                if (found == 0 || found == 1)
                        return 0; // no channel found
 
-               dib7000m_get_frontend(fe);
+               dib7000m_get_frontend(fe, fep);
        }
 
        ret = dib7000m_tune(fe);
index 65ab79ed5e3ecb3e3a00c31adbb6b7ca5e8e03b6..b861d4437f2aabb13a394259a5ec7d2613d0274f 100644 (file)
@@ -1405,9 +1405,9 @@ static int dib7000p_identify(struct dib7000p_state *st)
        return 0;
 }
 
-static int dib7000p_get_frontend(struct dvb_frontend *fe)
+static int dib7000p_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *fep)
 {
-       struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
        struct dib7000p_state *state = fe->demodulator_priv;
        u16 tps = dib7000p_read_word(state, 463);
 
@@ -1540,7 +1540,7 @@ static int dib7000p_set_frontend(struct dvb_frontend *fe)
                if (found == 0 || found == 1)
                        return 0;
 
-               dib7000p_get_frontend(fe);
+               dib7000p_get_frontend(fe, fep);
        }
 
        ret = dib7000p_tune(fe);
index 349d2f1f62ce0341e2612d519b7d7ee3f043ed21..ddf9c44877a259830f34c802d066fe65f465235d 100644 (file)
@@ -3382,14 +3382,15 @@ static int dib8000_sleep(struct dvb_frontend *fe)
 
 static int dib8000_read_status(struct dvb_frontend *fe, enum fe_status *stat);
 
-static int dib8000_get_frontend(struct dvb_frontend *fe)
+static int dib8000_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
        struct dib8000_state *state = fe->demodulator_priv;
        u16 i, val = 0;
        enum fe_status stat = 0;
        u8 index_frontend, sub_index_frontend;
 
-       fe->dtv_property_cache.bandwidth_hz = 6000000;
+       c->bandwidth_hz = 6000000;
 
        /*
         * If called to early, get_frontend makes dib8000_tune to either
@@ -3406,7 +3407,7 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
                if (stat&FE_HAS_SYNC) {
                        dprintk("TMCC lock on the slave%i", index_frontend);
                        /* synchronize the cache with the other frontends */
-                       state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend]);
+                       state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend], c);
                        for (sub_index_frontend = 0; (sub_index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[sub_index_frontend] != NULL); sub_index_frontend++) {
                                if (sub_index_frontend != index_frontend) {
                                        state->fe[sub_index_frontend]->dtv_property_cache.isdbt_sb_mode = state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode;
@@ -3426,57 +3427,57 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
                }
        }
 
-       fe->dtv_property_cache.isdbt_sb_mode = dib8000_read_word(state, 508) & 0x1;
+       c->isdbt_sb_mode = dib8000_read_word(state, 508) & 0x1;
 
        if (state->revision == 0x8090)
                val = dib8000_read_word(state, 572);
        else
                val = dib8000_read_word(state, 570);
-       fe->dtv_property_cache.inversion = (val & 0x40) >> 6;
+       c->inversion = (val & 0x40) >> 6;
        switch ((val & 0x30) >> 4) {
        case 1:
-               fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_2K;
+               c->transmission_mode = TRANSMISSION_MODE_2K;
                dprintk("dib8000_get_frontend: transmission mode 2K");
                break;
        case 2:
-               fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_4K;
+               c->transmission_mode = TRANSMISSION_MODE_4K;
                dprintk("dib8000_get_frontend: transmission mode 4K");
                break;
        case 3:
        default:
-               fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_8K;
+               c->transmission_mode = TRANSMISSION_MODE_8K;
                dprintk("dib8000_get_frontend: transmission mode 8K");
                break;
        }
 
        switch (val & 0x3) {
        case 0:
-               fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_32;
+               c->guard_interval = GUARD_INTERVAL_1_32;
                dprintk("dib8000_get_frontend: Guard Interval = 1/32 ");
                break;
        case 1:
-               fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_16;
+               c->guard_interval = GUARD_INTERVAL_1_16;
                dprintk("dib8000_get_frontend: Guard Interval = 1/16 ");
                break;
        case 2:
                dprintk("dib8000_get_frontend: Guard Interval = 1/8 ");
-               fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_8;
+               c->guard_interval = GUARD_INTERVAL_1_8;
                break;
        case 3:
                dprintk("dib8000_get_frontend: Guard Interval = 1/4 ");
-               fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_4;
+               c->guard_interval = GUARD_INTERVAL_1_4;
                break;
        }
 
        val = dib8000_read_word(state, 505);
-       fe->dtv_property_cache.isdbt_partial_reception = val & 1;
-       dprintk("dib8000_get_frontend: partial_reception = %d ", fe->dtv_property_cache.isdbt_partial_reception);
+       c->isdbt_partial_reception = val & 1;
+       dprintk("dib8000_get_frontend: partial_reception = %d ", c->isdbt_partial_reception);
 
        for (i = 0; i < 3; i++) {
                int show;
 
                val = dib8000_read_word(state, 493 + i) & 0x0f;
-               fe->dtv_property_cache.layer[i].segment_count = val;
+               c->layer[i].segment_count = val;
 
                if (val == 0 || val > 13)
                        show = 0;
@@ -3485,41 +3486,41 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
 
                if (show)
                        dprintk("dib8000_get_frontend: Layer %d segments = %d ",
-                               i, fe->dtv_property_cache.layer[i].segment_count);
+                               i, c->layer[i].segment_count);
 
                val = dib8000_read_word(state, 499 + i) & 0x3;
                /* Interleaving can be 0, 1, 2 or 4 */
                if (val == 3)
                        val = 4;
-               fe->dtv_property_cache.layer[i].interleaving = val;
+               c->layer[i].interleaving = val;
                if (show)
                        dprintk("dib8000_get_frontend: Layer %d time_intlv = %d ",
-                               i, fe->dtv_property_cache.layer[i].interleaving);
+                               i, c->layer[i].interleaving);
 
                val = dib8000_read_word(state, 481 + i);
                switch (val & 0x7) {
                case 1:
-                       fe->dtv_property_cache.layer[i].fec = FEC_1_2;
+                       c->layer[i].fec = FEC_1_2;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d Code Rate = 1/2 ", i);
                        break;
                case 2:
-                       fe->dtv_property_cache.layer[i].fec = FEC_2_3;
+                       c->layer[i].fec = FEC_2_3;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d Code Rate = 2/3 ", i);
                        break;
                case 3:
-                       fe->dtv_property_cache.layer[i].fec = FEC_3_4;
+                       c->layer[i].fec = FEC_3_4;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d Code Rate = 3/4 ", i);
                        break;
                case 5:
-                       fe->dtv_property_cache.layer[i].fec = FEC_5_6;
+                       c->layer[i].fec = FEC_5_6;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d Code Rate = 5/6 ", i);
                        break;
                default:
-                       fe->dtv_property_cache.layer[i].fec = FEC_7_8;
+                       c->layer[i].fec = FEC_7_8;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d Code Rate = 7/8 ", i);
                        break;
@@ -3528,23 +3529,23 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
                val = dib8000_read_word(state, 487 + i);
                switch (val & 0x3) {
                case 0:
-                       fe->dtv_property_cache.layer[i].modulation = DQPSK;
+                       c->layer[i].modulation = DQPSK;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d DQPSK ", i);
                        break;
                case 1:
-                       fe->dtv_property_cache.layer[i].modulation = QPSK;
+                       c->layer[i].modulation = QPSK;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d QPSK ", i);
                        break;
                case 2:
-                       fe->dtv_property_cache.layer[i].modulation = QAM_16;
+                       c->layer[i].modulation = QAM_16;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d QAM16 ", i);
                        break;
                case 3:
                default:
-                       fe->dtv_property_cache.layer[i].modulation = QAM_64;
+                       c->layer[i].modulation = QAM_64;
                        if (show)
                                dprintk("dib8000_get_frontend: Layer %d QAM64 ", i);
                        break;
@@ -3553,16 +3554,16 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
 
        /* synchronize the cache with the other frontends */
        for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) {
-               state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode = fe->dtv_property_cache.isdbt_sb_mode;
-               state->fe[index_frontend]->dtv_property_cache.inversion = fe->dtv_property_cache.inversion;
-               state->fe[index_frontend]->dtv_property_cache.transmission_mode = fe->dtv_property_cache.transmission_mode;
-               state->fe[index_frontend]->dtv_property_cache.guard_interval = fe->dtv_property_cache.guard_interval;
-               state->fe[index_frontend]->dtv_property_cache.isdbt_partial_reception = fe->dtv_property_cache.isdbt_partial_reception;
+               state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode = c->isdbt_sb_mode;
+               state->fe[index_frontend]->dtv_property_cache.inversion = c->inversion;
+               state->fe[index_frontend]->dtv_property_cache.transmission_mode = c->transmission_mode;
+               state->fe[index_frontend]->dtv_property_cache.guard_interval = c->guard_interval;
+               state->fe[index_frontend]->dtv_property_cache.isdbt_partial_reception = c->isdbt_partial_reception;
                for (i = 0; i < 3; i++) {
-                       state->fe[index_frontend]->dtv_property_cache.layer[i].segment_count = fe->dtv_property_cache.layer[i].segment_count;
-                       state->fe[index_frontend]->dtv_property_cache.layer[i].interleaving = fe->dtv_property_cache.layer[i].interleaving;
-                       state->fe[index_frontend]->dtv_property_cache.layer[i].fec = fe->dtv_property_cache.layer[i].fec;
-                       state->fe[index_frontend]->dtv_property_cache.layer[i].modulation = fe->dtv_property_cache.layer[i].modulation;
+                       state->fe[index_frontend]->dtv_property_cache.layer[i].segment_count = c->layer[i].segment_count;
+                       state->fe[index_frontend]->dtv_property_cache.layer[i].interleaving = c->layer[i].interleaving;
+                       state->fe[index_frontend]->dtv_property_cache.layer[i].fec = c->layer[i].fec;
+                       state->fe[index_frontend]->dtv_property_cache.layer[i].modulation = c->layer[i].modulation;
                }
        }
        return 0;
@@ -3671,7 +3672,7 @@ static int dib8000_set_frontend(struct dvb_frontend *fe)
                        if (state->channel_parameters_set == 0) { /* searching */
                                if ((dib8000_get_status(state->fe[index_frontend]) == FE_STATUS_DEMOD_SUCCESS) || (dib8000_get_status(state->fe[index_frontend]) == FE_STATUS_FFT_SUCCESS)) {
                                        dprintk("autosearch succeeded on fe%i", index_frontend);
-                                       dib8000_get_frontend(state->fe[index_frontend]); /* we read the channel parameters from the frontend which was successful */
+                                       dib8000_get_frontend(state->fe[index_frontend], c); /* we read the channel parameters from the frontend which was successful */
                                        state->channel_parameters_set = 1;
 
                                        for (l = 0; (l < MAX_NUMBER_OF_FRONTENDS) && (state->fe[l] != NULL); l++) {
index 91888a2f53018bc2755a31d2a128560486226ce7..bab8c5a980a2dd3cbe5efbe123f52f8577b8aeb2 100644 (file)
@@ -1889,7 +1889,8 @@ static int dib9000_fe_get_tune_settings(struct dvb_frontend *fe, struct dvb_fron
        return 0;
 }
 
-static int dib9000_get_frontend(struct dvb_frontend *fe)
+static int dib9000_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
        struct dib9000_state *state = fe->demodulator_priv;
        u8 index_frontend, sub_index_frontend;
@@ -1909,7 +1910,7 @@ static int dib9000_get_frontend(struct dvb_frontend *fe)
                        dprintk("TPS lock on the slave%i", index_frontend);
 
                        /* synchronize the cache with the other frontends */
-                       state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend]);
+                       state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend], c);
                        for (sub_index_frontend = 0; (sub_index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[sub_index_frontend] != NULL);
                             sub_index_frontend++) {
                                if (sub_index_frontend != index_frontend) {
@@ -1943,14 +1944,14 @@ static int dib9000_get_frontend(struct dvb_frontend *fe)
 
        /* synchronize the cache with the other frontends */
        for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) {
-               state->fe[index_frontend]->dtv_property_cache.inversion = fe->dtv_property_cache.inversion;
-               state->fe[index_frontend]->dtv_property_cache.transmission_mode = fe->dtv_property_cache.transmission_mode;
-               state->fe[index_frontend]->dtv_property_cache.guard_interval = fe->dtv_property_cache.guard_interval;
-               state->fe[index_frontend]->dtv_property_cache.modulation = fe->dtv_property_cache.modulation;
-               state->fe[index_frontend]->dtv_property_cache.hierarchy = fe->dtv_property_cache.hierarchy;
-               state->fe[index_frontend]->dtv_property_cache.code_rate_HP = fe->dtv_property_cache.code_rate_HP;
-               state->fe[index_frontend]->dtv_property_cache.code_rate_LP = fe->dtv_property_cache.code_rate_LP;
-               state->fe[index_frontend]->dtv_property_cache.rolloff = fe->dtv_property_cache.rolloff;
+               state->fe[index_frontend]->dtv_property_cache.inversion = c->inversion;
+               state->fe[index_frontend]->dtv_property_cache.transmission_mode = c->transmission_mode;
+               state->fe[index_frontend]->dtv_property_cache.guard_interval = c->guard_interval;
+               state->fe[index_frontend]->dtv_property_cache.modulation = c->modulation;
+               state->fe[index_frontend]->dtv_property_cache.hierarchy = c->hierarchy;
+               state->fe[index_frontend]->dtv_property_cache.code_rate_HP = c->code_rate_HP;
+               state->fe[index_frontend]->dtv_property_cache.code_rate_LP = c->code_rate_LP;
+               state->fe[index_frontend]->dtv_property_cache.rolloff = c->rolloff;
        }
        ret = 0;
 
@@ -2083,7 +2084,7 @@ static int dib9000_set_frontend(struct dvb_frontend *fe)
 
        /* synchronize all the channel cache */
        state->get_frontend_internal = 1;
-       dib9000_get_frontend(state->fe[0]);
+       dib9000_get_frontend(state->fe[0], &state->fe[0]->dtv_property_cache);
        state->get_frontend_internal = 0;
 
        /* retune the other frontends with the found channel */
index 14e996d45fac40515e9c9f7cb95b2d5b3eebe175..e5bd8c62ad3a325d68c2aa7f42a16383484ba893 100644 (file)
@@ -70,9 +70,12 @@ static int dvb_dummy_fe_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
 }
 
 /*
- * Only needed if it actually reads something from the hardware
+ * Should only be implemented if it actually reads something from the hardware.
+ * Also, it should check for the locks, in order to avoid report wrong data
+ * to userspace.
  */
-static int dvb_dummy_fe_get_frontend(struct dvb_frontend *fe)
+static int dvb_dummy_fe_get_frontend(struct dvb_frontend *fe,
+                                    struct dtv_frontend_properties *p)
 {
        return 0;
 }
index 40e359f2d17d5082e0c6a973a875db4676c4483d..1c7eb477e2cde511fdcc998751d2f5ad46880531 100644 (file)
@@ -560,11 +560,11 @@ static int hd29l2_get_frontend_algo(struct dvb_frontend *fe)
        return DVBFE_ALGO_CUSTOM;
 }
 
-static int hd29l2_get_frontend(struct dvb_frontend *fe)
+static int hd29l2_get_frontend(struct dvb_frontend *fe,
+                              struct dtv_frontend_properties *c)
 {
        int ret;
        struct hd29l2_priv *priv = fe->demodulator_priv;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        u8 buf[3];
        u32 if_ctl;
        char *str_constellation, *str_code_rate, *str_constellation_code_rate,
index 0977871232a286d6a2482dcf353a2e83f7746099..2f3d0519e19be718044d8771f42f0911f966aaa9 100644 (file)
@@ -243,9 +243,9 @@ static int apply_frontend_param(struct dvb_frontend *fe)
        return 0;
 }
 
-static int get_frontend(struct dvb_frontend *fe)
+static int get_frontend(struct dvb_frontend *fe,
+                       struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct l64781_state* state = fe->demodulator_priv;
        int tmp;
 
index 7880f71ccd8a381f9198244a1d8de4e0b3e12757..f51a3a0b3949ae2a008c1cf515315e0d3dfbeb1f 100644 (file)
@@ -942,101 +942,102 @@ static int lg216x_read_rs_err_count(struct lg216x_state *state, u16 *err)
 
 /* ------------------------------------------------------------------------ */
 
-static int lg216x_get_frontend(struct dvb_frontend *fe)
+static int lg216x_get_frontend(struct dvb_frontend *fe,
+                              struct dtv_frontend_properties *c)
 {
        struct lg216x_state *state = fe->demodulator_priv;
        int ret;
 
        lg_dbg("\n");
 
-       fe->dtv_property_cache.modulation = VSB_8;
-       fe->dtv_property_cache.frequency = state->current_frequency;
-       fe->dtv_property_cache.delivery_system = SYS_ATSCMH;
+       c->modulation = VSB_8;
+       c->frequency = state->current_frequency;
+       c->delivery_system = SYS_ATSCMH;
 
        ret = lg216x_get_fic_version(state,
-                                    &fe->dtv_property_cache.atscmh_fic_ver);
+                                    &c->atscmh_fic_ver);
        if (lg_fail(ret))
                goto fail;
-       if (state->fic_ver != fe->dtv_property_cache.atscmh_fic_ver) {
-               state->fic_ver = fe->dtv_property_cache.atscmh_fic_ver;
+       if (state->fic_ver != c->atscmh_fic_ver) {
+               state->fic_ver = c->atscmh_fic_ver;
 
 #if 0
                ret = lg2160_get_parade_id(state,
-                               &fe->dtv_property_cache.atscmh_parade_id);
+                               &c->atscmh_parade_id);
                if (lg_fail(ret))
                        goto fail;
 /* #else */
-               fe->dtv_property_cache.atscmh_parade_id = state->parade_id;
+               c->atscmh_parade_id = state->parade_id;
 #endif
                ret = lg216x_get_nog(state,
-                                    &fe->dtv_property_cache.atscmh_nog);
+                                    &c->atscmh_nog);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_tnog(state,
-                                     &fe->dtv_property_cache.atscmh_tnog);
+                                     &c->atscmh_tnog);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_sgn(state,
-                                    &fe->dtv_property_cache.atscmh_sgn);
+                                    &c->atscmh_sgn);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_prc(state,
-                                    &fe->dtv_property_cache.atscmh_prc);
+                                    &c->atscmh_prc);
                if (lg_fail(ret))
                        goto fail;
 
                ret = lg216x_get_rs_frame_mode(state,
                        (enum atscmh_rs_frame_mode *)
-                       &fe->dtv_property_cache.atscmh_rs_frame_mode);
+                       &c->atscmh_rs_frame_mode);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_rs_frame_ensemble(state,
                        (enum atscmh_rs_frame_ensemble *)
-                       &fe->dtv_property_cache.atscmh_rs_frame_ensemble);
+                       &c->atscmh_rs_frame_ensemble);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_rs_code_mode(state,
                        (enum atscmh_rs_code_mode *)
-                       &fe->dtv_property_cache.atscmh_rs_code_mode_pri,
+                       &c->atscmh_rs_code_mode_pri,
                        (enum atscmh_rs_code_mode *)
-                       &fe->dtv_property_cache.atscmh_rs_code_mode_sec);
+                       &c->atscmh_rs_code_mode_sec);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_sccc_block_mode(state,
                        (enum atscmh_sccc_block_mode *)
-                       &fe->dtv_property_cache.atscmh_sccc_block_mode);
+                       &c->atscmh_sccc_block_mode);
                if (lg_fail(ret))
                        goto fail;
                ret = lg216x_get_sccc_code_mode(state,
                        (enum atscmh_sccc_code_mode *)
-                       &fe->dtv_property_cache.atscmh_sccc_code_mode_a,
+                       &c->atscmh_sccc_code_mode_a,
                        (enum atscmh_sccc_code_mode *)
-                       &fe->dtv_property_cache.atscmh_sccc_code_mode_b,
+                       &c->atscmh_sccc_code_mode_b,
                        (enum atscmh_sccc_code_mode *)
-                       &fe->dtv_property_cache.atscmh_sccc_code_mode_c,
+                       &c->atscmh_sccc_code_mode_c,
                        (enum atscmh_sccc_code_mode *)
-                       &fe->dtv_property_cache.atscmh_sccc_code_mode_d);
+                       &c->atscmh_sccc_code_mode_d);
                if (lg_fail(ret))
                        goto fail;
        }
 #if 0
        ret = lg216x_read_fic_err_count(state,
-                               (u8 *)&fe->dtv_property_cache.atscmh_fic_err);
+                               (u8 *)&c->atscmh_fic_err);
        if (lg_fail(ret))
                goto fail;
        ret = lg216x_read_crc_err_count(state,
-                               &fe->dtv_property_cache.atscmh_crc_err);
+                               &c->atscmh_crc_err);
        if (lg_fail(ret))
                goto fail;
        ret = lg216x_read_rs_err_count(state,
-                               &fe->dtv_property_cache.atscmh_rs_err);
+                               &c->atscmh_rs_err);
        if (lg_fail(ret))
                goto fail;
 
        switch (state->cfg->lg_chip) {
        case LG2160:
-               if (((fe->dtv_property_cache.atscmh_rs_err >= 240) &&
-                    (fe->dtv_property_cache.atscmh_crc_err >= 240)) &&
+               if (((c->atscmh_rs_err >= 240) &&
+                    (c->atscmh_crc_err >= 240)) &&
                    ((jiffies_to_msecs(jiffies) - state->last_reset) > 6000))
                        ret = lg216x_soft_reset(state);
                break;
@@ -1054,14 +1055,17 @@ fail:
 static int lg216x_get_property(struct dvb_frontend *fe,
                               struct dtv_property *tvp)
 {
+       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+
        return (DTV_ATSCMH_FIC_VER == tvp->cmd) ?
-               lg216x_get_frontend(fe) : 0;
+               lg216x_get_frontend(fe, c) : 0;
 }
 
 
 static int lg2160_set_frontend(struct dvb_frontend *fe)
 {
        struct lg216x_state *state = fe->demodulator_priv;
+       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
 
        lg_dbg("(%d)\n", fe->dtv_property_cache.frequency);
@@ -1129,7 +1133,7 @@ static int lg2160_set_frontend(struct dvb_frontend *fe)
        ret = lg216x_enable_fic(state, 1);
        lg_fail(ret);
 
-       lg216x_get_frontend(fe);
+       lg216x_get_frontend(fe, c);
 fail:
        return ret;
 }
index 47121866163d0c20278c8d8ae9342692f728d946..4503e8852fd1b89369932c54278dcc07efcde0e4 100644 (file)
@@ -812,9 +812,9 @@ fail:
        return ret;
 }
 
-static int lgdt3305_get_frontend(struct dvb_frontend *fe)
+static int lgdt3305_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct lgdt3305_state *state = fe->demodulator_priv;
 
        lg_dbg("\n");
index 721fbc07e9eee5bca6ea883c98af5603dd41cbf1..179c26e5eb4e772beda462fff9bf424ea2ed9b69 100644 (file)
@@ -1040,10 +1040,10 @@ fail:
        return ret;
 }
 
-static int lgdt3306a_get_frontend(struct dvb_frontend *fe)
+static int lgdt3306a_get_frontend(struct dvb_frontend *fe,
+                                 struct dtv_frontend_properties *p)
 {
        struct lgdt3306a_state *state = fe->demodulator_priv;
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
 
        dbg_info("(%u, %d)\n",
                 state->current_frequency, state->current_modulation);
index cf3cc20510da04cf8ee72180f85bd39d36e794d6..96bf254da21edc35c1af7c807dd7d1501885d04b 100644 (file)
@@ -439,10 +439,11 @@ static int lgdt330x_set_parameters(struct dvb_frontend *fe)
        return 0;
 }
 
-static int lgdt330x_get_frontend(struct dvb_frontend *fe)
+static int lgdt330x_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct lgdt330x_state *state = fe->demodulator_priv;
+
        p->frequency = state->current_frequency;
        return 0;
 }
index 7bbb2c18c2dd0a2fee868fcb6e17a6af886a8d92..fbfd87b5b8038a098d132418aca05c082b65cafc 100644 (file)
@@ -336,10 +336,11 @@ lgs8gl5_set_frontend(struct dvb_frontend *fe)
 
 
 static int
-lgs8gl5_get_frontend(struct dvb_frontend *fe)
+lgs8gl5_get_frontend(struct dvb_frontend *fe,
+                    struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct lgs8gl5_state *state = fe->demodulator_priv;
+
        u8 inv = lgs8gl5_read_reg(state, REG_INVERSION);
 
        p->inversion = (inv & REG_INVERSION_ON) ? INVERSION_ON : INVERSION_OFF;
index ce73a5ec6036b3d8930bbda47ac2c4d93a233c6c..76883600ec6f08de70a49298aa289a82fef3b95d 100644 (file)
@@ -791,11 +791,11 @@ err:
        return ret;
 }
 
-static int m88ds3103_get_frontend(struct dvb_frontend *fe)
+static int m88ds3103_get_frontend(struct dvb_frontend *fe,
+                                 struct dtv_frontend_properties *c)
 {
        struct m88ds3103_dev *dev = fe->demodulator_priv;
        struct i2c_client *client = dev->client;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[3];
 
index 9b6f464c48bd70ee7c150cd5e43e4e5708d591a6..a09b12313a7317c4ba16bc60a7972602329e2ffe 100644 (file)
@@ -708,10 +708,11 @@ static int m88rs2000_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int m88rs2000_get_frontend(struct dvb_frontend *fe)
+static int m88rs2000_get_frontend(struct dvb_frontend *fe,
+                                 struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct m88rs2000_state *state = fe->demodulator_priv;
+
        c->fec_inner = state->fec_inner;
        c->frequency = state->tuner_frequency;
        c->symbol_rate = state->symbol_rate;
index c36e6764eeadc8764edacfe546cd0cd0389a83c0..fc08429c99b7debbe2848c0d2f76e1c6d15aa8ee 100644 (file)
@@ -647,9 +647,9 @@ static int mt312_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int mt312_get_frontend(struct dvb_frontend *fe)
+static int mt312_get_frontend(struct dvb_frontend *fe,
+                             struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct mt312_state *state = fe->demodulator_priv;
        int ret;
 
index 123bb2f8e4b6ea6977b4f485e058af9b1e1eb104..c0bb6328956b17120fcd132b1eab7b0d31fe7e2a 100644 (file)
@@ -311,9 +311,9 @@ static int mt352_set_parameters(struct dvb_frontend *fe)
        return 0;
 }
 
-static int mt352_get_parameters(struct dvb_frontend* fe)
+static int mt352_get_parameters(struct dvb_frontend* fe,
+                               struct dtv_frontend_properties *op)
 {
-       struct dtv_frontend_properties *op = &fe->dtv_property_cache;
        struct mt352_state* state = fe->demodulator_priv;
        u16 tps;
        u16 div;
index 35b1053b36409a7b8751714930db3fc28424c3a8..a165af990672f2a2c196e4f961a0341796cd1ae2 100644 (file)
@@ -375,9 +375,9 @@ static int or51132_set_parameters(struct dvb_frontend *fe)
        return 0;
 }
 
-static int or51132_get_parameters(struct dvb_frontend* fe)
+static int or51132_get_parameters(struct dvb_frontend* fe,
+                                 struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct or51132_state* state = fe->demodulator_priv;
        int status;
        int retry = 1;
index 74b771218033d76dee58d151dca1addd54404b13..3f96429af0e59e0de58805754fa59dca27b062a2 100644 (file)
@@ -279,11 +279,11 @@ err:
        return ret;
 }
 
-static int rtl2830_get_frontend(struct dvb_frontend *fe)
+static int rtl2830_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
        struct i2c_client *client = fe->demodulator_priv;
        struct rtl2830_dev *dev = i2c_get_clientdata(client);
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[3];
 
index 10f2119935da8b69402dc21cae1c040e6f8aadf4..c2469fb42f128bad54aaaf64a54acf85d80a9811 100644 (file)
@@ -575,11 +575,11 @@ err:
        return ret;
 }
 
-static int rtl2832_get_frontend(struct dvb_frontend *fe)
+static int rtl2832_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *c)
 {
        struct rtl2832_dev *dev = fe->demodulator_priv;
        struct i2c_client *client = dev->client;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret;
        u8 buf[3];
 
index 10964848a2f17c22f2e664e4cde7cc2a97731088..c68965ad97c0128d70f7baaa6e1f2fa938ddeb98 100644 (file)
@@ -925,9 +925,9 @@ static int s5h1409_read_ber(struct dvb_frontend *fe, u32 *ber)
        return s5h1409_read_ucblocks(fe, ber);
 }
 
-static int s5h1409_get_frontend(struct dvb_frontend *fe)
+static int s5h1409_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct s5h1409_state *state = fe->demodulator_priv;
 
        p->frequency = state->current_frequency;
index 9afc3f42290e8403f7936f96833c157aac379ab5..90f86e82b087e3cb19874aff7c99557a046fd65b 100644 (file)
@@ -840,9 +840,9 @@ static int s5h1411_read_ber(struct dvb_frontend *fe, u32 *ber)
        return s5h1411_read_ucblocks(fe, ber);
 }
 
-static int s5h1411_get_frontend(struct dvb_frontend *fe)
+static int s5h1411_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct s5h1411_state *state = fe->demodulator_priv;
 
        p->frequency = state->current_frequency;
index 9c22a4c70d87591617b9c5ab1caa84f5912bff85..d7d0b7d57ad707e546ac15e67268adcddc5bed8e 100644 (file)
@@ -756,9 +756,9 @@ static int s5h1420_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int s5h1420_get_frontend(struct dvb_frontend* fe)
+static int s5h1420_get_frontend(struct dvb_frontend* fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct s5h1420_state* state = fe->demodulator_priv;
 
        p->frequency = state->tunedfreq + s5h1420_getfreqoffset(state);
index d6a8fa63040b9f77ca7af19e3caf9f345ab96098..b5e3d90eba5e919621755dd2e06c246579099ff3 100644 (file)
@@ -433,9 +433,9 @@ static int s921_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int s921_get_frontend(struct dvb_frontend *fe)
+static int s921_get_frontend(struct dvb_frontend *fe,
+                            struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct s921_state *state = fe->demodulator_priv;
 
        /* FIXME: Probably it is possible to get it from regs f1 and f2 */
index 756650f154abe4d778fce5554eb629ba144953cb..3d171b0e00c2a742d41737b176418d40d155093d 100644 (file)
@@ -1568,9 +1568,9 @@ static enum dvbfe_search stb0899_search(struct dvb_frontend *fe)
        return DVBFE_ALGO_SEARCH_ERROR;
 }
 
-static int stb0899_get_frontend(struct dvb_frontend *fe)
+static int stb0899_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct stb0899_state *state             = fe->demodulator_priv;
        struct stb0899_internal *internal       = &state->internal;
 
index c978c801c7aa5b561009d16aaff4480e1451e246..b9c2511bf019866ee06d863fa73fce3f61040d2e 100644 (file)
@@ -346,7 +346,7 @@ static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency)
 
        if (fe->ops.get_frontend) {
                dprintk(verbose, FE_DEBUG, 1, "Get frontend parameters");
-               fe->ops.get_frontend(fe);
+               fe->ops.get_frontend(fe, p);
        }
        srate = p->symbol_rate;
 
index 75b4d8b256573c9a4fdfe572b0bc0cf6e07540d3..81b27b7c0c96f587b22cde7f1690f70c32f207b7 100644 (file)
@@ -615,9 +615,9 @@ timeout:
        return 0;
 }
 
-static int stv0297_get_frontend(struct dvb_frontend *fe)
+static int stv0297_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct stv0297_state *state = fe->demodulator_priv;
        int reg_00, reg_83;
 
index c43f36d323409b768c5dfbe2ff0fab22e03995af..7927fa925f2f661814f1218cd41dd125bd9aec2d 100644 (file)
@@ -602,9 +602,9 @@ static int stv0299_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int stv0299_get_frontend(struct dvb_frontend *fe)
+static int stv0299_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct stv0299_state* state = fe->demodulator_priv;
        s32 derot_freq;
        int invval;
index 44cb73f68af658cf0a8f94c7a3e4476e51d9de5f..abc379aea713f5e6a93ac34dc5531e1cbf6124b9 100644 (file)
@@ -1938,9 +1938,9 @@ static int stv0367ter_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
        return 0;
 }
 
-static int stv0367ter_get_frontend(struct dvb_frontend *fe)
+static int stv0367ter_get_frontend(struct dvb_frontend *fe,
+                                  struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct stv0367_state *state = fe->demodulator_priv;
        struct stv0367ter_state *ter_state = state->ter_state;
        enum stv0367_ter_mode mode;
@@ -3146,9 +3146,9 @@ static int stv0367cab_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int stv0367cab_get_frontend(struct dvb_frontend *fe)
+static int stv0367cab_get_frontend(struct dvb_frontend *fe,
+                                  struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct stv0367_state *state = fe->demodulator_priv;
        struct stv0367cab_state *cab_state = state->cab_state;
 
index fe31dd54195515543dc43636ae99ccc5a491cdb5..28239b1fd954932840ab54608da07f0328e66818 100644 (file)
@@ -1859,9 +1859,9 @@ static int stv0900_sleep(struct dvb_frontend *fe)
        return 0;
 }
 
-static int stv0900_get_frontend(struct dvb_frontend *fe)
+static int stv0900_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct stv0900_state *state = fe->demodulator_priv;
        struct stv0900_internal *intp = state->internal;
        enum fe_stv0900_demod_num demod = state->demod;
index 456cdc7fb1e784937f4c7160f8c01905743cdcc0..31cd32532387e44c5833d70c29a04fbfe9c16773 100644 (file)
@@ -201,10 +201,10 @@ static const enum fe_code_rate fec_conv_sat[] = {
        FEC_2_3, /* for 8PSK. (trellis code) */
 };
 
-static int tc90522s_get_frontend(struct dvb_frontend *fe)
+static int tc90522s_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *c)
 {
        struct tc90522_state *state;
-       struct dtv_frontend_properties *c;
        struct dtv_fe_stats *stats;
        int ret, i;
        int layers;
@@ -212,7 +212,6 @@ static int tc90522s_get_frontend(struct dvb_frontend *fe)
        u32 cndat;
 
        state = fe->demodulator_priv;
-       c = &fe->dtv_property_cache;
        c->delivery_system = SYS_ISDBS;
        c->symbol_rate = 28860000;
 
@@ -337,10 +336,10 @@ static const enum fe_modulation mod_conv[] = {
        DQPSK, QPSK, QAM_16, QAM_64, 0, 0, 0, 0
 };
 
-static int tc90522t_get_frontend(struct dvb_frontend *fe)
+static int tc90522t_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *c)
 {
        struct tc90522_state *state;
-       struct dtv_frontend_properties *c;
        struct dtv_fe_stats *stats;
        int ret, i;
        int layers;
@@ -348,7 +347,6 @@ static int tc90522t_get_frontend(struct dvb_frontend *fe)
        u32 cndat;
 
        state = fe->demodulator_priv;
-       c = &fe->dtv_property_cache;
        c->delivery_system = SYS_ISDBT;
        c->bandwidth_hz = 6000000;
        mode = 1;
index a684424e665a79a56f054a2c5fcc47c7b9a20495..806c56691ca517da5bccb40e302f3b1117aa2148 100644 (file)
@@ -387,9 +387,9 @@ static int tda10021_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
        return 0;
 }
 
-static int tda10021_get_frontend(struct dvb_frontend *fe)
+static int tda10021_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct tda10021_state* state = fe->demodulator_priv;
        int sync;
        s8 afc = 0;
index 44a55656093f2cf6d04be4c5c19b54cf8b5a0c4b..3b8c7e499d0d5a9aebbf3aced1c51b10f945304a 100644 (file)
@@ -457,9 +457,9 @@ static int tda10023_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
        return 0;
 }
 
-static int tda10023_get_frontend(struct dvb_frontend *fe)
+static int tda10023_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct tda10023_state* state = fe->demodulator_priv;
        int sync,inv;
        s8 afc = 0;
index 8451086c563f7d0dee066d958a2970a99582be85..c2bf89d0b0b049b3bdff8feaa197ec1e4caa1862 100644 (file)
@@ -1028,9 +1028,9 @@ static int tda10048_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
        return 0;
 }
 
-static int tda10048_get_frontend(struct dvb_frontend *fe)
+static int tda10048_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct tda10048_state *state = fe->demodulator_priv;
 
        dprintk(1, "%s()\n", __func__);
index 0e209b56c76c1c487007121e336e0438944acb93..3137a9ba3a3224da9da5cbb6b91ded5e141b8fcf 100644 (file)
@@ -899,9 +899,9 @@ static int tda1004x_set_fe(struct dvb_frontend *fe)
        return 0;
 }
 
-static int tda1004x_get_fe(struct dvb_frontend *fe)
+static int tda1004x_get_fe(struct dvb_frontend *fe,
+                          struct dtv_frontend_properties *fe_params)
 {
-       struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
        struct tda1004x_state* state = fe->demodulator_priv;
 
        dprintk("%s\n", __func__);
index 119d47596ac81ace7dacf073c4024ca65b4fa38a..37ebeef2bbd0b2d76aace89734c542f829cc0994 100644 (file)
@@ -701,11 +701,11 @@ error:
        return ret;
 }
 
-static int tda10071_get_frontend(struct dvb_frontend *fe)
+static int tda10071_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *c)
 {
        struct tda10071_dev *dev = fe->demodulator_priv;
        struct i2c_client *client = dev->client;
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret, i;
        u8 buf[5], tmp;
 
index 95a33e187f8ed442e38534739d2705eb84d0fedb..31d0acb54fe86f196892e52cd37464c899bd07b2 100644 (file)
@@ -459,9 +459,9 @@ static int tda10086_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int tda10086_get_frontend(struct dvb_frontend *fe)
+static int tda10086_get_frontend(struct dvb_frontend *fe,
+                                struct dtv_frontend_properties *fe_params)
 {
-       struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
        struct tda10086_state* state = fe->demodulator_priv;
        u8 val;
        int tmp;
index 796543fa2c8de107fc7f64cfbc6614e9993747ce..9072d64630948b539cd021515e72b7a438275e54 100644 (file)
@@ -342,9 +342,9 @@ static int tda8083_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int tda8083_get_frontend(struct dvb_frontend *fe)
+static int tda8083_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct tda8083_state* state = fe->demodulator_priv;
 
        /*  FIXME: get symbolrate & frequency offset...*/
index aacfdda3e005ab7c0b763a71eeded7812346aaac..b09fe88c40f876a87a8d122a5bf4d6d0361c9c3c 100644 (file)
@@ -312,9 +312,9 @@ static int ves1820_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
        return 0;
 }
 
-static int ves1820_get_frontend(struct dvb_frontend *fe)
+static int ves1820_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct ves1820_state* state = fe->demodulator_priv;
        int sync;
        s8 afc = 0;
index 52695239642257feefa1306f548c0d73302027be..ed113e216e145ba3cb7a4dd23a13956bd242b70d 100644 (file)
@@ -406,9 +406,9 @@ static int ves1x93_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int ves1x93_get_frontend(struct dvb_frontend *fe)
+static int ves1x93_get_frontend(struct dvb_frontend *fe,
+                               struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct ves1x93_state* state = fe->demodulator_priv;
        int afc;
 
index ef9764a02d4c9d4b580022a5a4d31eb0f0a3342e..1832c2f7695c9b12658a988c46c2acaf36b411f3 100644 (file)
@@ -371,9 +371,9 @@ static int zl10353_set_parameters(struct dvb_frontend *fe)
        return 0;
 }
 
-static int zl10353_get_parameters(struct dvb_frontend *fe)
+static int zl10353_get_parameters(struct dvb_frontend *fe,
+                                 struct dtv_frontend_properties *c)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        struct zl10353_state *state = fe->demodulator_priv;
        int s6, s9;
        u16 tps;
index 4a90eee5e3bb761cf191aa9567efa14f231dff38..35bc9b2287b4c140bd7cb5708e8f8cdc70ee74f6 100644 (file)
@@ -1688,9 +1688,9 @@ static int dst_get_tuning_algo(struct dvb_frontend *fe)
        return dst_algo ? DVBFE_ALGO_HW : DVBFE_ALGO_SW;
 }
 
-static int dst_get_frontend(struct dvb_frontend *fe)
+static int dst_get_frontend(struct dvb_frontend *fe,
+                           struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct dst_state *state = fe->demodulator_priv;
 
        p->frequency = state->decode_freq;
index 84f6de6fa07db183d94fca0ad6473fc85da34e11..047a32fe43eaf75813128038e4849412686968c0 100644 (file)
@@ -507,9 +507,9 @@ static int mxl111sf_demod_read_signal_strength(struct dvb_frontend *fe,
        return 0;
 }
 
-static int mxl111sf_demod_get_frontend(struct dvb_frontend *fe)
+static int mxl111sf_demod_get_frontend(struct dvb_frontend *fe,
+                                      struct dtv_frontend_properties *p)
 {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
        struct mxl111sf_demod_state *state = fe->demodulator_priv;
 
        mxl_dbg("()");
index ac97075d75f702f926f2db01e6ff3198292d8dd5..09db3d02bd8267be03b2ed98222e705244fde7e9 100644 (file)
@@ -1227,9 +1227,9 @@ static int af9005_fe_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int af9005_fe_get_frontend(struct dvb_frontend *fe)
+static int af9005_fe_get_frontend(struct dvb_frontend *fe,
+                                 struct dtv_frontend_properties *fep)
 {
-       struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
        struct af9005_fe_state *state = fe->demodulator_priv;
        int ret;
        u8 temp;
index 7e72a1bef76a22d6070a20ea71297e6a5da280ec..c09332bd99cb7c5e41699e2a9d435c3072432277 100644 (file)
@@ -140,10 +140,11 @@ static int dtt200u_fe_set_frontend(struct dvb_frontend *fe)
        return 0;
 }
 
-static int dtt200u_fe_get_frontend(struct dvb_frontend* fe)
+static int dtt200u_fe_get_frontend(struct dvb_frontend* fe,
+                                  struct dtv_frontend_properties *fep)
 {
-       struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
        struct dtt200u_fe_state *state = fe->demodulator_priv;
+
        memcpy(fep, &state->fep, sizeof(struct dtv_frontend_properties));
        return 0;
 }