Merge tag 'v3.10.55' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / media / tuners / xc4000.c
index 2018befabb5ab65f8d833f5d7052823c3e9af9ca..e71decbfd0afdf495c28a407930eb6768233d06c 100644 (file)
@@ -93,7 +93,7 @@ struct xc4000_priv {
        struct firmware_description *firm;
        int     firm_size;
        u32     if_khz;
-       u32     freq_hz;
+       u32     freq_hz, freq_offset;
        u32     bandwidth;
        u8      video_standard;
        u8      rf_mode;
@@ -1157,14 +1157,14 @@ static int xc4000_set_params(struct dvb_frontend *fe)
        case SYS_ATSC:
                dprintk(1, "%s() VSB modulation\n", __func__);
                priv->rf_mode = XC_RF_MODE_AIR;
-               priv->freq_hz = c->frequency - 1750000;
+               priv->freq_offset = 1750000;
                priv->video_standard = XC4000_DTV6;
                type = DTV6;
                break;
        case SYS_DVBC_ANNEX_B:
                dprintk(1, "%s() QAM modulation\n", __func__);
                priv->rf_mode = XC_RF_MODE_CABLE;
-               priv->freq_hz = c->frequency - 1750000;
+               priv->freq_offset = 1750000;
                priv->video_standard = XC4000_DTV6;
                type = DTV6;
                break;
@@ -1173,23 +1173,23 @@ static int xc4000_set_params(struct dvb_frontend *fe)
                dprintk(1, "%s() OFDM\n", __func__);
                if (bw == 0) {
                        if (c->frequency < 400000000) {
-                               priv->freq_hz = c->frequency - 2250000;
+                               priv->freq_offset = 2250000;
                        } else {
-                               priv->freq_hz = c->frequency - 2750000;
+                               priv->freq_offset = 2750000;
                        }
                        priv->video_standard = XC4000_DTV7_8;
                        type = DTV78;
                } else if (bw <= 6000000) {
                        priv->video_standard = XC4000_DTV6;
-                       priv->freq_hz = c->frequency - 1750000;
+                       priv->freq_offset = 1750000;
                        type = DTV6;
                } else if (bw <= 7000000) {
                        priv->video_standard = XC4000_DTV7;
-                       priv->freq_hz = c->frequency - 2250000;
+                       priv->freq_offset = 2250000;
                        type = DTV7;
                } else {
                        priv->video_standard = XC4000_DTV8;
-                       priv->freq_hz = c->frequency - 2750000;
+                       priv->freq_offset = 2750000;
                        type = DTV8;
                }
                priv->rf_mode = XC_RF_MODE_AIR;
@@ -1200,6 +1200,8 @@ static int xc4000_set_params(struct dvb_frontend *fe)
                goto fail;
        }
 
+       priv->freq_hz = c->frequency - priv->freq_offset;
+
        dprintk(1, "%s() frequency=%d (compensated)\n",
                __func__, priv->freq_hz);
 
@@ -1520,7 +1522,7 @@ static int xc4000_get_frequency(struct dvb_frontend *fe, u32 *freq)
 {
        struct xc4000_priv *priv = fe->tuner_priv;
 
-       *freq = priv->freq_hz;
+       *freq = priv->freq_hz + priv->freq_offset;
 
        if (debug) {
                mutex_lock(&priv->lock);