On 10-12-2011 02:44, Manu Abraham wrote:
From 707877f5a61b3259704d42e7dd5e647e9196e9a4 Mon Sep 17 00:00:00 2001
From: Manu Abraham <abraham.m...@gmail.com>
Date: Thu, 24 Nov 2011 19:56:34 +0530
Subject: [PATCH 08/10] TDA18271c2dd: Allow frontend to set DELSYS, rather than 
querying fe->ops.info.type

With any tuner that can tune to multiple delivery systems/standards, it does
query fe->ops.info.type to determine frontend type and set the delivery
system type. fe->ops.info.type can handle only 4 delivery systems, viz FE_QPSK,
FE_QAM, FE_OFDM and FE_ATSC.

Signed-off-by: Manu Abraham <abraham.m...@gmail.com>
---
 drivers/media/dvb/frontends/tda18271c2dd.c |   42 ++++++++++++++++++++--------
 1 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/drivers/media/dvb/frontends/tda18271c2dd.c 
b/drivers/media/dvb/frontends/tda18271c2dd.c
index 1b1bf20..43a3dd4 100644
--- a/drivers/media/dvb/frontends/tda18271c2dd.c
+++ b/drivers/media/dvb/frontends/tda18271c2dd.c
@@ -1145,28 +1145,46 @@ static int set_params(struct dvb_frontend *fe,
        int status = 0;
        int Standard;

-       state->m_Frequency = params->frequency;
+       u32 bw;
+       fe_delivery_system_t delsys;

-       if (fe->ops.info.type == FE_OFDM)
-               switch (params->u.ofdm.bandwidth) {
-               case BANDWIDTH_6_MHZ:
+       delsys  = fe->dtv_property_cache.delivery_system;
+       bw      = fe->dtv_property_cache.bandwidth_hz;
+
+       state->m_Frequency = fe->dtv_property_cache.frequency;
+
+       if (!delsys || !state->m_Frequency) {
+               printk(KERN_ERR "Invalid delsys:%d freq:%d\n", delsys, 
state->m_Frequency);
+               return -EINVAL;
+       }
+
+       switch (delsys) {
+       case SYS_DVBT:
+       case SYS_DVBT2:
+               if (!bw)
+                       return -EINVAL;
+               switch (bw) {
+               case 6000000:
                        Standard = HF_DVBT_6MHZ;
                        break;
-               case BANDWIDTH_7_MHZ:
+               case 7000000:
                        Standard = HF_DVBT_7MHZ;
                        break;
                default:
-               case BANDWIDTH_8_MHZ:
+               case 8000000:
                        Standard = HF_DVBT_8MHZ;
                        break;
                }
-       else if (fe->ops.info.type == FE_QAM) {
-               if (params->u.qam.symbol_rate <= MAX_SYMBOL_RATE_6MHz)
-                       Standard = HF_DVBC_6MHZ;
-               else
-                       Standard = HF_DVBC_8MHZ;
-       } else
+               break;
+       case SYS_DVBC_ANNEX_A:
+               Standard = HF_DVBC_6MHZ;
+               break;
+       case SYS_DVBC_ANNEX_C:
+               Standard = HF_DVBC_8MHZ;
+               break;

No, this is wrong. This patch doesn't apply anymore, due to the recent
changes that estimate the bandwidth based on the roll-off factor. Reverting
it breaks for DVB-C @ 6MHz spaced channels (and likely decreases quality
or breaks for 7MHz spaced ones too).

+       default:
                return -EINVAL;
+       }
        do {
                status = RFTrackingFiltersCorrection(state, params->frequency);
                if (status < 0)
--
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to