From: Yasunari Takiguchi <yasunari.takigu...@sony.com>

This is the optimization for SPI drive current and 
signal lock condition check part for BER/PER measure
to ensure BER/PER are stable

Signed-off-by: Yasunari Takiguchi <yasunari.takigu...@sony.com>
Signed-off-by: Masayuki Yamamoto <masayuki.yamam...@sony.com>
Signed-off-by: Hideki Nozawa <hideki.noz...@sony.com>
Signed-off-by: Kota Yonezawa <kota.yonez...@sony.com>
Signed-off-by: Toshihiko Matsumoto <toshihiko.matsum...@sony.com>
Signed-off-by: Satoshi Watanabe <satoshi.c.watan...@sony.com>
---

[Change list]
   drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
      -reduced the SPI output drive current
      -optimized signal lock condition check part for BER/PER measure
       to ensure BER/PER are stable

 drivers/media/dvb-frontends/cxd2880/cxd2880_top.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c 
b/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
index d474dc1b05da..bd9101e246d5 100644
--- a/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
+++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
@@ -520,6 +520,15 @@ static int cxd2880_init(struct dvb_frontend *fe)
                pr_err("cxd2880 integ init failed %d\n", ret);
                return ret;
        }
+
+       ret = cxd2880_tnrdmd_set_cfg(&priv->tnrdmd,
+                                    CXD2880_TNRDMD_CFG_TSPIN_CURRENT,
+                                    0x00);
+       if (ret) {
+               mutex_unlock(priv->spi_mutex);
+               pr_err("cxd2880 set config failed %d\n", ret);
+               return ret;
+       }
        mutex_unlock(priv->spi_mutex);
 
        pr_debug("OK.\n");
@@ -1126,7 +1135,7 @@ static int cxd2880_get_stats(struct dvb_frontend *fe,
        priv = fe->demodulator_priv;
        c = &fe->dtv_property_cache;
 
-       if (!(status & FE_HAS_LOCK)) {
+       if (!(status & FE_HAS_LOCK) || !(status & FE_HAS_CARRIER)) {
                c->pre_bit_error.len = 1;
                c->pre_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
                c->pre_bit_count.len = 1;
@@ -1345,7 +1354,8 @@ static int cxd2880_read_status(struct dvb_frontend *fe,
 
        pr_debug("status %d\n", *status);
 
-       if (priv->s == 0 && (*status & FE_HAS_LOCK)) {
+       if (priv->s == 0 && (*status & FE_HAS_LOCK) &&
+           (*status & FE_HAS_CARRIER)) {
                mutex_lock(priv->spi_mutex);
                if (c->delivery_system == SYS_DVBT) {
                        ret = cxd2880_set_ber_per_period_t(fe);
-- 
2.15.1

Reply via email to