On 10-12-2011 02:44, Manu Abraham wrote:
From 707877f5a61b3259704d42e7dd5e647e9196e9a4 Mon Sep 17 00:00:00 2001 From: Manu Abraham <abraham.manu@xxxxxxxxx> 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.manu@xxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html