Clean up the tuner driver code.
- Remove the redundant code in m88rs6000 driver.
- Correct some typos.
- Correct equation error in the driver.
- Remove the unused code.
Google-Bug-Id: 19432272
Change-Id: Id2001bcc21be819876f58023daa7eeff27a9d6f3
diff --git a/drivers/media/dvb/frontends/dvbsky_m88rs6000.c b/drivers/media/dvb/frontends/dvbsky_m88rs6000.c
index e9f7e96..f6c3b25 100644
--- a/drivers/media/dvb/frontends/dvbsky_m88rs6000.c
+++ b/drivers/media/dvb/frontends/dvbsky_m88rs6000.c
@@ -466,10 +466,16 @@
snr_total += val;
cnt--;
}
+ /* TODO(kedong): The following code is based on the formula
+ * from data sheet. The formula is basically
+ * 10*ln(snr/8)/ln(10). The result SNR seems very low though
+ * more reasonable at magnitude level compared to the original
+ * setting. Need to double check with vendor on this.
+ */
tmp = (u16)(snr_total/80);
if(tmp > 0){
if (tmp > 32) tmp = 32;
- snr = (mes_loge[tmp - 1] * 100) / 45;
+ snr = (mes_loge[tmp - 1] * 10) / 23026;
}else{
snr = 0;
}
@@ -724,7 +730,7 @@
state->config = config;
state->i2c = i2c;
- state->preBer = 0xffff;
+ state->preBer = 0x0;
state->delivery_system = SYS_DVBS; /*Default to DVB-S.*/
state->iMclkKHz = 96000;
@@ -1030,7 +1036,7 @@
static int m88rs6000_set_ts_mclk(struct m88rs6000_state *state, u32 MCLK_KHz, u32 iSymRateKSs)
{
- u8 reg11 = 0x0A, reg15, reg16, reg1D, reg1E, reg1F, tmp;
+ u8 reg15, reg16, reg1D, reg1E, reg1F, tmp;
u8 sm, f0 = 0, f1 = 0, f2 = 0, f3 = 0;
u16 pll_div_fb, N;
u32 div;
@@ -1041,14 +1047,16 @@
reg16 = m88rs6000_tuner_readreg(state, 0x16);
reg1D = m88rs6000_tuner_readreg(state, 0x1D);
- if(reg16 == 92)
- tmp = 93;
- else if (reg16 == 100)
- tmp = 99;
- else
- tmp = 96;
- MCLK_KHz *= tmp;
- MCLK_KHz /= 96;
+ if(state->config->ts_mode == 0) {
+ if(reg16 == 92)
+ tmp = 93;
+ else if (reg16 == 100)
+ tmp = 99;
+ else
+ tmp = 96;
+ MCLK_KHz *= tmp;
+ MCLK_KHz /= 96;
+ }
pll_div_fb = (reg15 & 0x01) << 8;
pll_div_fb += reg16;
@@ -1057,35 +1065,33 @@
div = 9000 * pll_div_fb * 4;
div /= MCLK_KHz;
+ if(div <= 32) {
+ N = 2;
+ f0 = 0;
+ f1 = div / N;
+ f2 = div - f1;
+ f3 = 0;
+ } else if (div <= 34) {
+ N = 3;
+ f0 = div / N;
+ f1 = (div - f0) / (N - 1);
+ f2 = div - f0 - f1;
+ f3 = 0;
+ } else if (div <= 64) {
+ N = 4;
+ f0 = div / N;
+ f1 = (div - f0) / (N - 1);
+ f2 = (div - f0 - f1) / (N - 2);
+ f3 = div - f0 - f1 - f2;
+ } else {
+ N = 4;
+ f0 = 16;
+ f1 = 16;
+ f2 = 16;
+ f3 = 16;
+ }
+
if(state->config->ts_mode == 1) {
- reg11 |= 0x02;
-
- if(div <= 32) {
- N = 2;
- f0 = 0;
- f1 = div / N;
- f2 = div - f1;
- f3 = 0;
- } else if (div <= 34) {
- N = 3;
- f0 = div / N;
- f1 = (div - f0) / (N - 1);
- f2 = div - f0 - f1;
- f3 = 0;
- } else if (div <= 64) {
- N = 4;
- f0 = div / N;
- f1 = (div - f0) / (N - 1);
- f2 = (div - f0 - f1) / (N - 2);
- f3 = div - f0 - f1 - f2;
- } else {
- N = 4;
- f0 = 16;
- f1 = 16;
- f2 = 16;
- f3 = 16;
- }
-
if(f0 == 16)
f0 = 0;
else if((f0 < 8) && (f0 != 0))
@@ -1106,33 +1112,6 @@
else if((f3 < 8) && (f3 != 0))
f3 = 8;
} else {
- reg11 &= ~0x02;
- if(div <= 32) {
- N = 2;
- f0 = 0;
- f1 = div / N;
- f2 = div - f1;
- f3 = 0;
- } else if(div <= 48) {
- N = 3;
- f0 = div / N;
- f1 = (div - f0) / (N - 1);
- f2 = div - f0 - f1;
- f3 = 0;
- } else if(div <= 64) {
- N = 4;
- f0 = div / N;
- f1 = (div - f0) / (N - 1);
- f2 = (div - f0 - f1) / (N - 2);
- f3 = div - f0 - f1 - f2;
- } else {
- N = 4;
- f0 = 16;
- f1 = 16;
- f2 = 16;
- f3 = 16;
- }
-
if(f0 == 16)
f0 = 0;
else if((f0 < 9) && (f0 != 0))
@@ -1192,6 +1171,7 @@
val = m88rs6000_readreg(state, 0xfe);
val &= 0xF0;
+ val |= (tmp1 >> 2) & 0x0f;
m88rs6000_writereg(state, 0xfe, val);
val = (u8)((tmp1 & 0x03) << 6);
@@ -1292,7 +1272,7 @@
/* set others.*/
tmp = m88rs6000_readreg(state, 0xca);
tmp &= 0xFE;
- tmp |= (m88rs6000_readreg(state, 0xfd) >> 3) & 0x01;
+ tmp |= (m88rs6000_readreg(state, 0xca) >> 3) & 0x01;
m88rs6000_writereg(state, 0xca, tmp);
m88rs6000_writereg(state, 0x33, 0x99);
@@ -1339,17 +1319,12 @@
u32 offset_MHz[3];
u32 max_offset = 0;
u8 i;
+ u8 big_symbol = (iSymRateKSs > 45010) ? 1 : 0;
- if(iSymRateKSs > 45010) {
+ if(big_symbol) {
reg16 = 115;
state->iMclkKHz = 110250;
} else {
- adc_Freq_MHz[0] = 96;
- adc_Freq_MHz[1] = 93;
- adc_Freq_MHz[2] = 99;
- reg16_list[0] = 96;
- reg16_list[1] = 92;
- reg16_list[2] = 100;
reg16 = 96;
for(i = 0; i < 3; i++) {
offset_MHz[i] = tuner_freq_MHz % adc_Freq_MHz[i];
@@ -1361,16 +1336,30 @@
max_offset = offset_MHz[i];
reg16 = reg16_list[i];
state->iMclkKHz = adc_Freq_MHz[i] * 1000;
-
- if(iSymRateKSs > 45010)
- state->iMclkKHz /= 2;
}
}
}
+ switch(state->iMclkKHz) {
+ case 93000:
+ m88rs6000_writereg(state, 0xa0, 0x42);
+ break;
+ case 96000:
+ m88rs6000_writereg(state, 0xa0, 0x44);
+ break;
+ case 99000:
+ m88rs6000_writereg(state, 0xa0, 0x46);
+ break;
+ case 110250:
+ m88rs6000_writereg(state, 0xa0, 0x4e);
+ break;
+ default:
+ m88rs6000_writereg(state, 0xa0, 0x44);
+ break;
+ }
reg15 = m88rs6000_tuner_readreg(state, 0x15);
m88rs6000_tuner_writereg(state, 0x05, 0x40);
m88rs6000_tuner_writereg(state, 0x11, 0x08);
- if(iSymRateKSs > 45010)
+ if(big_symbol)
reg15 |= 0x02;
else
reg15 &= ~0x02;
@@ -1378,7 +1367,7 @@
m88rs6000_tuner_writereg(state, 0x16, reg16);
msleep(5);
m88rs6000_tuner_writereg(state, 0x05, 0x00);
- m88rs6000_tuner_writereg(state, 0x11, (iSymRateKSs > 45010) ? 0x0E : 0x0A);
+ m88rs6000_tuner_writereg(state, 0x11, (big_symbol) ? 0x0E : 0x0A);
msleep(5);
return 0;
}