linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / media / dvb / bt8xx / dst.c
index 06ac899..0310e3d 100644 (file)
@@ -38,10 +38,6 @@ static unsigned int dst_addons;
 module_param(dst_addons, int, 0644);
 MODULE_PARM_DESC(dst_addons, "CA daughterboard, default is 0 (No addons)");
 
-static unsigned int dst_algo;
-module_param(dst_algo, int, 0644);
-MODULE_PARM_DESC(dst_algo, "tuning algo: default is 0=(SW), 1=(HW)");
-
 #define HAS_LOCK               1
 #define ATTEMPT_TUNE           2
 #define HAS_POWER              4
@@ -51,24 +47,20 @@ MODULE_PARM_DESC(dst_algo, "tuning algo: default is 0=(SW), 1=(HW)");
 #define DST_INFO               2
 #define DST_DEBUG              3
 
-#define dprintk(x, y, z, format, arg...) do {                          \
-       if (z) {                                                        \
-               if      ((x > DST_ERROR) && (x > y))                    \
-                       printk(KERN_ERR "dst(%d) %s: " format "\n",     \
-                               state->bt->nr, __func__ , ##arg);       \
-               else if ((x > DST_NOTICE) && (x > y))                   \
-                       printk(KERN_NOTICE "dst(%d) %s: " format "\n",  \
-                               state->bt->nr, __func__ , ##arg);       \
-               else if ((x > DST_INFO) && (x > y))                     \
-                       printk(KERN_INFO "dst(%d) %s: " format "\n",    \
-                               state->bt->nr, __func__ , ##arg);       \
-               else if ((x > DST_DEBUG) && (x > y))                    \
-                       printk(KERN_DEBUG "dst(%d) %s: " format "\n",   \
-                               state->bt->nr,  __func__ , ##arg);      \
-       } else {                                                        \
-               if (x > y)                                              \
-                       printk(format, ##arg);                          \
-       }                                                               \
+#define dprintk(x, y, z, format, arg...) do {                                          \
+       if (z) {                                                                        \
+               if      ((x > DST_ERROR) && (x > y))                                    \
+                       printk(KERN_ERR "%s: " format "\n", __FUNCTION__ , ##arg);      \
+               else if ((x > DST_NOTICE) && (x > y))                                   \
+                       printk(KERN_NOTICE "%s: " format "\n", __FUNCTION__ , ##arg);   \
+               else if ((x > DST_INFO) && (x > y))                                     \
+                       printk(KERN_INFO "%s: " format "\n", __FUNCTION__ , ##arg);     \
+               else if ((x > DST_DEBUG) && (x > y))                                    \
+                       printk(KERN_DEBUG "%s: " format "\n", __FUNCTION__ , ##arg);    \
+       } else {                                                                        \
+               if (x > y)                                                              \
+                       printk(format, ##arg);                                          \
+       }                                                                               \
 } while(0)
 
 
@@ -118,7 +110,7 @@ int dst_gpio_inb(struct dst_state *state, u8 *result)
 
        *result = 0;
        if ((err = bt878_device_control(state->bt, DST_IG_READ, &rd_packet)) < 0) {
-               dprintk(verbose, DST_ERROR, 1, "dst_gpio_inb error (err == %i)", err);
+               dprintk(verbose, DST_ERROR, 1, "dst_gpio_inb error (err == %i)\n", err);
                return -EREMOTEIO;
        }
        *result = (u8) rd_packet.rd.value;
@@ -371,17 +363,6 @@ static int dst_set_freq(struct dst_state *state, u32 freq)
                state->tx_tuna[2] = (freq >> 16) & 0xff;
                state->tx_tuna[3] = (freq >> 8) & 0xff;
                state->tx_tuna[4] = (u8) freq;
-       } else if (state->dst_type == DST_TYPE_IS_ATSC) {
-               freq = freq / 1000;
-               if (freq < 51000 || freq > 858000)
-                       return -EINVAL;
-               state->tx_tuna[2] = (freq >> 16) & 0xff;
-               state->tx_tuna[3] = (freq >>  8) & 0xff;
-               state->tx_tuna[4] = (u8) freq;
-               state->tx_tuna[5] = 0x00;               /*      ATSC    */
-               state->tx_tuna[6] = 0x00;
-               if (state->dst_hw_cap & DST_TYPE_HAS_ANALOG)
-                       state->tx_tuna[7] = 0x00;       /*      Digital */
        } else
                return -EINVAL;
 
@@ -393,7 +374,7 @@ static int dst_set_bandwidth(struct dst_state *state, fe_bandwidth_t bandwidth)
        state->bandwidth = bandwidth;
 
        if (state->dst_type != DST_TYPE_IS_TERR)
-               return -EOPNOTSUPP;
+               return 0;
 
        switch (bandwidth) {
        case BANDWIDTH_6_MHZ:
@@ -462,49 +443,37 @@ static int dst_set_symbolrate(struct dst_state *state, u32 srate)
 
        state->symbol_rate = srate;
        if (state->dst_type == DST_TYPE_IS_TERR) {
-               return -EOPNOTSUPP;
+               return 0;
        }
        dprintk(verbose, DST_INFO, 1, "set symrate %u", srate);
        srate /= 1000;
-       if (state->dst_type == DST_TYPE_IS_SAT) {
-               if (state->type_flags & DST_TYPE_HAS_SYMDIV) {
-                       sval = srate;
-                       sval <<= 20;
-                       do_div(sval, 88000);
-                       symcalc = (u32) sval;
-                       dprintk(verbose, DST_INFO, 1, "set symcalc %u", symcalc);
-                       state->tx_tuna[5] = (u8) (symcalc >> 12);
-                       state->tx_tuna[6] = (u8) (symcalc >> 4);
-                       state->tx_tuna[7] = (u8) (symcalc << 4);
-               } else {
-                       state->tx_tuna[5] = (u8) (srate >> 16) & 0x7f;
-                       state->tx_tuna[6] = (u8) (srate >> 8);
-                       state->tx_tuna[7] = (u8) srate;
-               }
-               state->tx_tuna[8] &= ~0x20;
-               if (state->type_flags & DST_TYPE_HAS_OBS_REGS) {
-                       if (srate > 8000)
-                               state->tx_tuna[8] |= 0x20;
-               }
-       } else if (state->dst_type == DST_TYPE_IS_CABLE) {
-               dprintk(verbose, DST_DEBUG, 1, "%s", state->fw_name);
-               if (!strncmp(state->fw_name, "DCTNEW", 6)) {
-                       state->tx_tuna[5] = (u8) (srate >> 8);
-                       state->tx_tuna[6] = (u8) srate;
-                       state->tx_tuna[7] = 0x00;
-               } else if (!strncmp(state->fw_name, "DCT-CI", 6)) {
-                       state->tx_tuna[5] = 0x00;
-                       state->tx_tuna[6] = (u8) (srate >> 8);
-                       state->tx_tuna[7] = (u8) srate;
-               }
+       if (state->type_flags & DST_TYPE_HAS_SYMDIV) {
+               sval = srate;
+               sval <<= 20;
+               do_div(sval, 88000);
+               symcalc = (u32) sval;
+               dprintk(verbose, DST_INFO, 1, "set symcalc %u", symcalc);
+               state->tx_tuna[5] = (u8) (symcalc >> 12);
+               state->tx_tuna[6] = (u8) (symcalc >> 4);
+               state->tx_tuna[7] = (u8) (symcalc << 4);
+       } else {
+               state->tx_tuna[5] = (u8) (srate >> 16) & 0x7f;
+               state->tx_tuna[6] = (u8) (srate >> 8);
+               state->tx_tuna[7] = (u8) srate;
+       }
+       state->tx_tuna[8] &= ~0x20;
+       if (state->type_flags & DST_TYPE_HAS_OBS_REGS) {
+               if (srate > 8000)
+                       state->tx_tuna[8] |= 0x20;
        }
        return 0;
 }
 
+
 static int dst_set_modulation(struct dst_state *state, fe_modulation_t modulation)
 {
        if (state->dst_type != DST_TYPE_IS_CABLE)
-               return -EOPNOTSUPP;
+               return 0;
 
        state->modulation = modulation;
        switch (modulation) {
@@ -521,10 +490,7 @@ static int dst_set_modulation(struct dst_state *state, fe_modulation_t modulatio
                state->tx_tuna[8] = 0x80;
                break;
        case QAM_256:
-               if (!strncmp(state->fw_name, "DCTNEW", 6))
-                       state->tx_tuna[8] = 0xff;
-               else if (!strncmp(state->fw_name, "DCT-CI", 6))
-                       state->tx_tuna[8] = 0x00;
+               state->tx_tuna[8] = 0x00;
                break;
        case QPSK:
        case QAM_AUTO:
@@ -557,19 +523,13 @@ u8 dst_check_sum(u8 *buf, u32 len)
 }
 EXPORT_SYMBOL(dst_check_sum);
 
-static void dst_type_flags_print(struct dst_state *state)
+static void dst_type_flags_print(u32 type_flags)
 {
-       u32 type_flags = state->type_flags;
-
        dprintk(verbose, DST_ERROR, 0, "DST type flags :");
-       if (type_flags & DST_TYPE_HAS_TS188)
-               dprintk(verbose, DST_ERROR, 0, " 0x%x newtuner", DST_TYPE_HAS_TS188);
-       if (type_flags & DST_TYPE_HAS_NEWTUNE_2)
-               dprintk(verbose, DST_ERROR, 0, " 0x%x newtuner 2", DST_TYPE_HAS_NEWTUNE_2);
+       if (type_flags & DST_TYPE_HAS_NEWTUNE)
+               dprintk(verbose, DST_ERROR, 0, " 0x%x newtuner", DST_TYPE_HAS_NEWTUNE);
        if (type_flags & DST_TYPE_HAS_TS204)
                dprintk(verbose, DST_ERROR, 0, " 0x%x ts204", DST_TYPE_HAS_TS204);
-       if (type_flags & DST_TYPE_HAS_VLF)
-               dprintk(verbose, DST_ERROR, 0, " 0x%x VLF", DST_TYPE_HAS_VLF);
        if (type_flags & DST_TYPE_HAS_SYMDIV)
                dprintk(verbose, DST_ERROR, 0, " 0x%x symdiv", DST_TYPE_HAS_SYMDIV);
        if (type_flags & DST_TYPE_HAS_FW_1)
@@ -582,7 +542,7 @@ static void dst_type_flags_print(struct dst_state *state)
 }
 
 
-static int dst_type_print(struct dst_state *state, u8 type)
+static int dst_type_print(u8 type)
 {
        char *otype;
        switch (type) {
@@ -598,10 +558,6 @@ static int dst_type_print(struct dst_state *state, u8 type)
                otype = "cable";
                break;
 
-       case DST_TYPE_IS_ATSC:
-               otype = "atsc";
-               break;
-
        default:
                dprintk(verbose, DST_INFO, 1, "invalid dst type %d", type);
                return -EINVAL;
@@ -611,127 +567,6 @@ static int dst_type_print(struct dst_state *state, u8 type)
        return 0;
 }
 
-struct tuner_types tuner_list[] = {
-       {
-               .tuner_type = TUNER_TYPE_L64724,
-               .tuner_name = "L 64724",
-               .board_name = "UNKNOWN",
-               .fw_name    = "UNKNOWN"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_STV0299,
-               .tuner_name = "STV 0299",
-               .board_name = "VP1020",
-               .fw_name    = "DST-MOT"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_STV0299,
-               .tuner_name = "STV 0299",
-               .board_name = "VP1020",
-               .fw_name    = "DST-03T"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_MB86A15,
-               .tuner_name = "MB 86A15",
-               .board_name = "VP1022",
-               .fw_name    = "DST-03T"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_MB86A15,
-               .tuner_name = "MB 86A15",
-               .board_name = "VP1025",
-               .fw_name    = "DST-03T"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_STV0299,
-               .tuner_name = "STV 0299",
-               .board_name = "VP1030",
-               .fw_name    = "DST-CI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_STV0299,
-               .tuner_name = "STV 0299",
-               .board_name = "VP1030",
-               .fw_name    = "DSTMCI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP2021",
-               .fw_name    = "DCTNEW"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP2030",
-               .fw_name    = "DCT-CI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP2031",
-               .fw_name    = "DCT-CI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP2040",
-               .fw_name    = "DCT-CI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP3020",
-               .fw_name    = "DTTFTA"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP3021",
-               .fw_name    = "DTTFTA"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_TDA10046,
-               .tuner_name = "TDA10046",
-               .board_name = "VP3040",
-               .fw_name    = "DTT-CI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_UNKNOWN,
-               .tuner_name = "UNKNOWN",
-               .board_name = "VP3051",
-               .fw_name    = "DTTNXT"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_NXT200x,
-               .tuner_name = "NXT200x",
-               .board_name = "VP3220",
-               .fw_name    = "ATSCDI"
-       },
-
-       {
-               .tuner_type = TUNER_TYPE_NXT200x,
-               .tuner_name = "NXT200x",
-               .board_name = "VP3250",
-               .fw_name    = "ATSCAD"
-       },
-};
-
 /*
        Known cards list
        Satellite
@@ -773,8 +608,7 @@ static struct dst_types dst_tlist[] = {
                .offset = 0,
                .dst_type =  DST_TYPE_IS_SAT,
                .type_flags = DST_TYPE_HAS_SYMDIV | DST_TYPE_HAS_FW_1 | DST_TYPE_HAS_OBS_REGS,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .dst_feature = 0
        },      /*      obsolete        */
 
        {
@@ -782,17 +616,15 @@ static struct dst_types dst_tlist[] = {
                .offset = 0,
                .dst_type =  DST_TYPE_IS_SAT,
                .type_flags = DST_TYPE_HAS_SYMDIV | DST_TYPE_HAS_FW_1,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .dst_feature = 0
        },      /*      obsolete        */
 
        {
                .device_id = "DST-030",
                .offset =  0,
                .dst_type = DST_TYPE_IS_SAT,
-               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_TS188 | DST_TYPE_HAS_FW_1,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1,
+               .dst_feature = 0
        },      /*      obsolete        */
 
        {
@@ -801,8 +633,7 @@ static struct dst_types dst_tlist[] = {
                .dst_type = DST_TYPE_IS_SAT,
                .type_flags = DST_TYPE_HAS_SYMDIV | DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_2,
                .dst_feature = DST_TYPE_HAS_DISEQC3 | DST_TYPE_HAS_DISEQC4 | DST_TYPE_HAS_DISEQC5
-                                                        | DST_TYPE_HAS_MAC | DST_TYPE_HAS_MOTO,
-               .tuner_type = TUNER_TYPE_MULTI
+                                                        | DST_TYPE_HAS_MAC | DST_TYPE_HAS_MOTO
         },
 
        {
@@ -810,63 +641,57 @@ static struct dst_types dst_tlist[] = {
                .offset =  0,
                .dst_type = DST_TYPE_IS_SAT,
                .type_flags = DST_TYPE_HAS_SYMDIV | DST_TYPE_HAS_FW_1,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .dst_feature = 0
        },      /*      obsolete        */
 
        {
                .device_id = "DST-CI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_SAT,
-               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_1,
-               .dst_feature = DST_TYPE_HAS_CA,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1,
+               .dst_feature = DST_TYPE_HAS_CA
        },      /*      An OEM board    */
 
        {
                .device_id = "DSTMCI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_SAT,
-               .type_flags = DST_TYPE_HAS_TS188 | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD | DST_TYPE_HAS_INC_COUNT | DST_TYPE_HAS_VLF,
+               .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD | DST_TYPE_HAS_INC_COUNT,
                .dst_feature = DST_TYPE_HAS_CA | DST_TYPE_HAS_DISEQC3 | DST_TYPE_HAS_DISEQC4
-                                                       | DST_TYPE_HAS_MOTO | DST_TYPE_HAS_MAC,
-               .tuner_type = TUNER_TYPE_MULTI
+                                                       | DST_TYPE_HAS_MOTO | DST_TYPE_HAS_MAC
        },
 
        {
                .device_id = "DSTFCI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_SAT,
-               .type_flags = DST_TYPE_HAS_TS188 | DST_TYPE_HAS_FW_1,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1,
+               .dst_feature = 0
        },      /* unknown to vendor    */
 
        {
                .device_id = "DCT-CI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_CABLE,
-               .type_flags = DST_TYPE_HAS_MULTI_FE | DST_TYPE_HAS_FW_1 | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_VLF,
-               .dst_feature = DST_TYPE_HAS_CA,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1
+                                                       | DST_TYPE_HAS_FW_2,
+               .dst_feature = DST_TYPE_HAS_CA
        },
 
        {
                .device_id = "DCTNEW",
                .offset = 1,
                .dst_type = DST_TYPE_IS_CABLE,
-               .type_flags = DST_TYPE_HAS_TS188 | DST_TYPE_HAS_FW_3 | DST_TYPE_HAS_FW_BUILD | DST_TYPE_HAS_MULTI_FE,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_3 | DST_TYPE_HAS_FW_BUILD,
+               .dst_feature = 0
        },
 
        {
                .device_id = "DTT-CI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_TERR,
-               .type_flags = DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_MULTI_FE | DST_TYPE_HAS_VLF,
-               .dst_feature = DST_TYPE_HAS_CA,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_MULTI_FE,
+               .dst_feature = DST_TYPE_HAS_CA
        },
 
        {
@@ -874,8 +699,7 @@ static struct dst_types dst_tlist[] = {
                .offset = 1,
                .dst_type = DST_TYPE_IS_TERR,
                .type_flags = DST_TYPE_HAS_FW_2,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .dst_feature = 0
        },
 
        {
@@ -883,8 +707,7 @@ static struct dst_types dst_tlist[] = {
                .offset = 1,
                .dst_type = DST_TYPE_IS_TERR,
                .type_flags = DST_TYPE_HAS_FW_2,
-               .dst_feature = DST_TYPE_HAS_ANALOG,
-               .tuner_type = 0
+               .dst_feature = DST_TYPE_HAS_ANALOG
        },
 
        {
@@ -892,17 +715,15 @@ static struct dst_types dst_tlist[] = {
                .offset = 1,
                .dst_type = DST_TYPE_IS_ATSC,
                .type_flags = DST_TYPE_HAS_FW_2,
-               .dst_feature = 0,
-               .tuner_type = 0
+               .dst_feature = 0
        },
 
        {
                .device_id = "ATSCAD",
                .offset = 1,
                .dst_type = DST_TYPE_IS_ATSC,
-               .type_flags = DST_TYPE_HAS_MULTI_FE | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD,
-               .dst_feature = DST_TYPE_HAS_MAC | DST_TYPE_HAS_ANALOG,
-               .tuner_type = 0
+               .type_flags = DST_TYPE_HAS_FW_2,
+               .dst_feature = 0
        },
 
        { }
@@ -947,9 +768,6 @@ static int dst_fw_ver(struct dst_state *state)
 
 static int dst_card_type(struct dst_state *state)
 {
-       int j;
-       struct tuner_types *p_tuner_list = NULL;
-
        u8 get_type[] = { 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
        get_type[7] = dst_check_sum(get_type, 7);
        if (dst_command(state, get_type, 8) < 0) {
@@ -957,17 +775,9 @@ static int dst_card_type(struct dst_state *state)
                return -1;
        }
        memset(&state->card_info, '\0', 8);
-       memcpy(&state->card_info, &state->rxbuffer, 7);
+       memcpy(&state->card_info, &state->rxbuffer, 8);
        dprintk(verbose, DST_ERROR, 1, "Device Model=[%s]", &state->card_info[0]);
 
-       for (j = 0, p_tuner_list = tuner_list; j < ARRAY_SIZE(tuner_list); j++, p_tuner_list++) {
-               if (!strcmp(&state->card_info[0], p_tuner_list->board_name)) {
-                       state->tuner_type = p_tuner_list->tuner_type;
-                       dprintk(verbose, DST_ERROR, 1, "DST has [%s] tuner, tuner type=[%d]",
-                               p_tuner_list->tuner_name, p_tuner_list->tuner_type);
-               }
-       }
-
        return 0;
 }
 
@@ -980,64 +790,12 @@ static int dst_get_vendor(struct dst_state *state)
                return -1;
        }
        memset(&state->vendor, '\0', 8);
-       memcpy(&state->vendor, &state->rxbuffer, 7);
+       memcpy(&state->vendor, &state->rxbuffer, 8);
        dprintk(verbose, DST_ERROR, 1, "Vendor=[%s]", &state->vendor[0]);
 
        return 0;
 }
 
-static void debug_dst_buffer(struct dst_state *state)
-{
-       int i;
-
-       if (verbose > 2) {
-               printk("%s: [", __func__);
-               for (i = 0; i < 8; i++)
-                       printk(" %02x", state->rxbuffer[i]);
-               printk("]\n");
-       }
-}
-
-static int dst_check_stv0299(struct dst_state *state)
-{
-       u8 check_stv0299[] = { 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-       check_stv0299[7] = dst_check_sum(check_stv0299, 7);
-       if (dst_command(state, check_stv0299, 8) < 0) {
-               dprintk(verbose, DST_ERROR, 1, "Cmd=[0x04] failed");
-               return -1;
-       }
-       debug_dst_buffer(state);
-
-       if (memcmp(&check_stv0299, &state->rxbuffer, 8)) {
-               dprintk(verbose, DST_ERROR, 1, "Found a STV0299 NIM");
-               state->tuner_type = TUNER_TYPE_STV0299;
-               return 0;
-       }
-
-       return -1;
-}
-
-static int dst_check_mb86a15(struct dst_state *state)
-{
-       u8 check_mb86a15[] = { 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-       check_mb86a15[7] = dst_check_sum(check_mb86a15, 7);
-       if (dst_command(state, check_mb86a15, 8) < 0) {
-               dprintk(verbose, DST_ERROR, 1, "Cmd=[0x10], failed");
-               return -1;
-       }
-       debug_dst_buffer(state);
-
-       if (memcmp(&check_mb86a15, &state->rxbuffer, 8) < 0) {
-               dprintk(verbose, DST_ERROR, 1, "Found a MB86A15 NIM");
-               state->tuner_type = TUNER_TYPE_MB86A15;
-               return 0;
-       }
-
-       return -1;
-}
-
 static int dst_get_tuner_info(struct dst_state *state)
 {
        u8 get_tuner_1[] = { 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
@@ -1045,59 +803,60 @@ static int dst_get_tuner_info(struct dst_state *state)
 
        get_tuner_1[7] = dst_check_sum(get_tuner_1, 7);
        get_tuner_2[7] = dst_check_sum(get_tuner_2, 7);
-       dprintk(verbose, DST_ERROR, 1, "DST TYpe = MULTI FE");
        if (state->type_flags & DST_TYPE_HAS_MULTI_FE) {
-               if (dst_command(state, get_tuner_1, 8) < 0) {
-                       dprintk(verbose, DST_INFO, 1, "Cmd=[0x13], Unsupported");
-                       goto force;
+               if (dst_command(state, get_tuner_2, 8) < 0) {
+                       dprintk(verbose, DST_INFO, 1, "Unsupported Command");
+                       return -1;
                }
        } else {
-               if (dst_command(state, get_tuner_2, 8) < 0) {
-                       dprintk(verbose, DST_INFO, 1, "Cmd=[0xb], Unsupported");
-                       goto force;
+               if (dst_command(state, get_tuner_1, 8) < 0) {
+                       dprintk(verbose, DST_INFO, 1, "Unsupported Command");
+                       return -1;
                }
        }
        memset(&state->board_info, '\0', 8);
        memcpy(&state->board_info, &state->rxbuffer, 8);
        if (state->type_flags & DST_TYPE_HAS_MULTI_FE) {
-               dprintk(verbose, DST_ERROR, 1, "DST type has TS=188");
-       }
-       if (state->board_info[0] == 0xbc) {
-               if (state->type_flags != DST_TYPE_IS_ATSC)
-                       state->type_flags |= DST_TYPE_HAS_TS188;
-               else
-                       state->type_flags |= DST_TYPE_HAS_NEWTUNE_2;
-
-               if (state->board_info[1] == 0x01) {
-                       state->dst_hw_cap |= DST_TYPE_HAS_DBOARD;
-                       dprintk(verbose, DST_ERROR, 1, "DST has Daughterboard");
+               if (state->board_info[1] == 0x0b) {
+                       if (state->type_flags & DST_TYPE_HAS_TS204)
+                               state->type_flags &= ~DST_TYPE_HAS_TS204;
+                       state->type_flags |= DST_TYPE_HAS_NEWTUNE;
+                       dprintk(verbose, DST_INFO, 1, "DST type has TS=188");
+               } else {
+                       if (state->type_flags & DST_TYPE_HAS_NEWTUNE)
+                               state->type_flags &= ~DST_TYPE_HAS_NEWTUNE;
+                       state->type_flags |= DST_TYPE_HAS_TS204;
+                       dprintk(verbose, DST_INFO, 1, "DST type has TS=204");
+               }
+       } else {
+               if (state->board_info[0] == 0xbc) {
+                       if (state->type_flags & DST_TYPE_HAS_TS204)
+                               state->type_flags &= ~DST_TYPE_HAS_TS204;
+                       state->type_flags |= DST_TYPE_HAS_NEWTUNE;
+                       dprintk(verbose, DST_INFO, 1, "DST type has TS=188, Daughterboard=[%d]", state->board_info[1]);
+
+               } else if (state->board_info[0] == 0xcc) {
+                       if (state->type_flags & DST_TYPE_HAS_NEWTUNE)
+                               state->type_flags &= ~DST_TYPE_HAS_NEWTUNE;
+                       state->type_flags |= DST_TYPE_HAS_TS204;
+                       dprintk(verbose, DST_INFO, 1, "DST type has TS=204 Daughterboard=[%d]", state->board_info[1]);
                }
        }
 
        return 0;
-force:
-       if (!strncmp(state->fw_name, "DCT-CI", 6)) {
-               state->type_flags |= DST_TYPE_HAS_TS204;
-               dprintk(verbose, DST_ERROR, 1, "Forcing [%s] to TS188", state->fw_name);
-       }
-
-       return -1;
 }
 
 static int dst_get_device_id(struct dst_state *state)
 {
        u8 reply;
 
-       int i, j;
-       struct dst_types *p_dst_type = NULL;
-       struct tuner_types *p_tuner_list = NULL;
-
+       int i;
+       struct dst_types *p_dst_type;
        u8 use_dst_type = 0;
        u32 use_type_flags = 0;
 
        static u8 device_type[8] = {0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff};
 
-       state->tuner_type = 0;
        device_type[7] = dst_check_sum(device_type, 7);
 
        if (write_dst(state, device_type, FIXED_COMM))
@@ -1129,34 +888,8 @@ static int dst_get_device_id(struct dst_state *state)
 
                        /*      Card capabilities       */
                        state->dst_hw_cap = p_dst_type->dst_feature;
-                       dprintk(verbose, DST_ERROR, 1, "Recognise [%s]", p_dst_type->device_id);
-                       strncpy(&state->fw_name[0], p_dst_type->device_id, 6);
-                       /*      Multiple tuners         */
-                       if (p_dst_type->tuner_type & TUNER_TYPE_MULTI) {
-                               switch (use_dst_type) {
-                               case DST_TYPE_IS_SAT:
-                                       /*      STV0299 check   */
-                                       if (dst_check_stv0299(state) < 0) {
-                                               dprintk(verbose, DST_ERROR, 1, "Unsupported");
-                                               state->tuner_type = TUNER_TYPE_MB86A15;
-                                       }
-                                       break;
-                               default:
-                                       break;
-                               }
-                               if (dst_check_mb86a15(state) < 0)
-                                       dprintk(verbose, DST_ERROR, 1, "Unsupported");
-                       /*      Single tuner            */
-                       } else {
-                               state->tuner_type = p_dst_type->tuner_type;
-                       }
-                       for (j = 0, p_tuner_list = tuner_list; j < ARRAY_SIZE(tuner_list); j++, p_tuner_list++) {
-                               if (!(strncmp(p_dst_type->device_id, p_tuner_list->fw_name, 7)) &&
-                                       p_tuner_list->tuner_type == state->tuner_type) {
-                                       dprintk(verbose, DST_ERROR, 1, "[%s] has a [%s]",
-                                               p_dst_type->device_id, p_tuner_list->tuner_name);
-                               }
-                       }
+                       dprintk(verbose, DST_ERROR, 1, "Recognise [%s]\n", p_dst_type->device_id);
+
                        break;
                }
        }
@@ -1167,26 +900,26 @@ static int dst_get_device_id(struct dst_state *state)
                use_dst_type = DST_TYPE_IS_SAT;
                use_type_flags = DST_TYPE_HAS_SYMDIV;
        }
-       dst_type_print(state, use_dst_type);
+       dst_type_print(use_dst_type);
        state->type_flags = use_type_flags;
        state->dst_type = use_dst_type;
-       dst_type_flags_print(state);
+       dst_type_flags_print(state->type_flags);
 
        return 0;
 }
 
 static int dst_probe(struct dst_state *state)
 {
-       mutex_init(&state->dst_mutex);
-       if (dst_addons & DST_TYPE_HAS_CA) {
-               if ((rdc_8820_reset(state)) < 0) {
-                       dprintk(verbose, DST_ERROR, 1, "RDC 8820 RESET Failed.");
-                       return -1;
-               }
+       sema_init(&state->dst_mutex, 1);
+       if ((rdc_8820_reset(state)) < 0) {
+               dprintk(verbose, DST_ERROR, 1, "RDC 8820 RESET Failed.");
+               return -1;
+       }
+       if (dst_addons & DST_TYPE_HAS_CA)
                msleep(4000);
-       } else {
+       else
                msleep(100);
-       }
+
        if ((dst_comm_init(state)) < 0) {
                dprintk(verbose, DST_ERROR, 1, "DST Initialization Failed.");
                return -1;
@@ -1198,6 +931,7 @@ static int dst_probe(struct dst_state *state)
        }
        if (dst_get_mac(state) < 0) {
                dprintk(verbose, DST_INFO, 1, "MAC: Unsupported command");
+               return 0;
        }
        if ((state->type_flags & DST_TYPE_HAS_MULTI_FE) || (state->type_flags & DST_TYPE_HAS_FW_BUILD)) {
                if (dst_get_tuner_info(state) < 0)
@@ -1228,13 +962,13 @@ int dst_command(struct dst_state *state, u8 *data, u8 len)
 {
        u8 reply;
 
-       mutex_lock(&state->dst_mutex);
+       down(&state->dst_mutex);
        if ((dst_comm_init(state)) < 0) {
                dprintk(verbose, DST_NOTICE, 1, "DST Communication Initialization Failed.");
                goto error;
        }
        if (write_dst(state, data, len)) {
-               dprintk(verbose, DST_INFO, 1, "Trying to recover.. ");
+               dprintk(verbose, DST_INFO, 1, "Tring to recover.. ");
                if ((dst_error_recovery(state)) < 0) {
                        dprintk(verbose, DST_ERROR, 1, "Recovery Failed.");
                        goto error;
@@ -1279,11 +1013,11 @@ int dst_command(struct dst_state *state, u8 *data, u8 len)
                dprintk(verbose, DST_INFO, 1, "checksum failure");
                goto error;
        }
-       mutex_unlock(&state->dst_mutex);
+       up(&state->dst_mutex);
        return 0;
 
 error:
-       mutex_unlock(&state->dst_mutex);
+       up(&state->dst_mutex);
        return -EIO;
 
 }
@@ -1314,10 +1048,6 @@ static int dst_get_signal(struct dst_state *state)
                        state->decode_lock = (state->rxbuffer[1]) ? 1 : 0;
                        state->decode_strength = state->rxbuffer[4] << 8;
                        state->decode_snr = state->rxbuffer[3] << 8;
-               } else if (state->dst_type == DST_TYPE_IS_ATSC) {
-                       state->decode_lock = (state->rxbuffer[6] == 0x00) ? 1 : 0;
-                       state->decode_strength = state->rxbuffer[4] << 8;
-                       state->decode_snr = state->rxbuffer[2] << 8 | state->rxbuffer[3];
                }
                state->cur_jiff = jiffies;
        }
@@ -1328,13 +1058,15 @@ static int dst_tone_power_cmd(struct dst_state *state)
 {
        u8 paket[8] = { 0x00, 0x09, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00 };
 
-       if (state->dst_type != DST_TYPE_IS_SAT)
-               return -EOPNOTSUPP;
+       if (state->dst_type == DST_TYPE_IS_TERR)
+               return 0;
        paket[4] = state->tx_tuna[4];
        paket[2] = state->tx_tuna[2];
        paket[3] = state->tx_tuna[3];
        paket[7] = dst_check_sum (paket, 7);
-       return dst_command(state, paket, 8);
+       dst_command(state, paket, 8);
+
+       return 0;
 }
 
 static int dst_get_tuna(struct dst_state *state)
@@ -1346,9 +1078,8 @@ static int dst_get_tuna(struct dst_state *state)
        state->diseq_flags &= ~(HAS_LOCK);
        if (!dst_wait_dst_ready(state, NO_DELAY))
                return -EIO;
-       if ((state->type_flags & DST_TYPE_HAS_VLF) &&
-               !(state->dst_type == DST_TYPE_IS_ATSC))
-
+       if (state->type_flags & DST_TYPE_HAS_NEWTUNE)
+               /* how to get variable length reply ???? */
                retval = read_dst(state, state->rx_tuna, 10);
        else
                retval = read_dst(state, &state->rx_tuna[2], FIXED_COMM);
@@ -1356,10 +1087,7 @@ static int dst_get_tuna(struct dst_state *state)
                dprintk(verbose, DST_DEBUG, 1, "read not successful");
                return retval;
        }
-       if ((state->type_flags & DST_TYPE_HAS_VLF) &&
-               !(state->dst_type == DST_TYPE_IS_CABLE) &&
-               !(state->dst_type == DST_TYPE_IS_ATSC)) {
-
+       if (state->type_flags & DST_TYPE_HAS_NEWTUNE) {
                if (state->rx_tuna[9] != dst_check_sum(&state->rx_tuna[0], 9)) {
                        dprintk(verbose, DST_INFO, 1, "checksum failure ? ");
                        return -EIO;
@@ -1400,15 +1128,12 @@ static int dst_write_tuna(struct dvb_frontend *fe)
                        dst_set_voltage(fe, SEC_VOLTAGE_13);
        }
        state->diseq_flags &= ~(HAS_LOCK | ATTEMPT_TUNE);
-       mutex_lock(&state->dst_mutex);
+       down(&state->dst_mutex);
        if ((dst_comm_init(state)) < 0) {
                dprintk(verbose, DST_DEBUG, 1, "DST Communication initialization failed.");
                goto error;
        }
-//     if (state->type_flags & DST_TYPE_HAS_NEWTUNE) {
-       if ((state->type_flags & DST_TYPE_HAS_VLF) &&
-               (!(state->dst_type == DST_TYPE_IS_ATSC))) {
-
+       if (state->type_flags & DST_TYPE_HAS_NEWTUNE) {
                state->tx_tuna[9] = dst_check_sum(&state->tx_tuna[0], 9);
                retval = write_dst(state, &state->tx_tuna[0], 10);
        } else {
@@ -1435,11 +1160,11 @@ static int dst_write_tuna(struct dvb_frontend *fe)
        state->diseq_flags |= ATTEMPT_TUNE;
        retval = dst_get_tuna(state);
 werr:
-       mutex_unlock(&state->dst_mutex);
+       up(&state->dst_mutex);
        return retval;
 
 error:
-       mutex_unlock(&state->dst_mutex);
+       up(&state->dst_mutex);
        return -EIO;
 }
 
@@ -1463,25 +1188,23 @@ static int dst_set_diseqc(struct dvb_frontend *fe, struct dvb_diseqc_master_cmd
        u8 paket[8] = { 0x00, 0x08, 0x04, 0xe0, 0x10, 0x38, 0xf0, 0xec };
 
        if (state->dst_type != DST_TYPE_IS_SAT)
-               return -EOPNOTSUPP;
-       if (cmd->msg_len > 0 && cmd->msg_len < 5)
-               memcpy(&paket[3], cmd->msg, cmd->msg_len);
-       else if (cmd->msg_len == 5 && state->dst_hw_cap & DST_TYPE_HAS_DISEQC5)
-               memcpy(&paket[2], cmd->msg, cmd->msg_len);
-       else
+               return 0;
+       if (cmd->msg_len == 0 || cmd->msg_len > 4)
                return -EINVAL;
+       memcpy(&paket[3], cmd->msg, cmd->msg_len);
        paket[7] = dst_check_sum(&paket[0], 7);
-       return dst_command(state, paket, 8);
+       dst_command(state, paket, 8);
+       return 0;
 }
 
 static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
 {
-       int need_cmd, retval = 0;
+       int need_cmd;
        struct dst_state *state = fe->demodulator_priv;
 
        state->voltage = voltage;
        if (state->dst_type != DST_TYPE_IS_SAT)
-               return -EOPNOTSUPP;
+               return 0;
 
        need_cmd = 0;
 
@@ -1503,9 +1226,9 @@ static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
        }
 
        if (need_cmd)
-               retval = dst_tone_power_cmd(state);
+               dst_tone_power_cmd(state);
 
-       return retval;
+       return 0;
 }
 
 static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
@@ -1514,7 +1237,7 @@ static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
 
        state->tone = tone;
        if (state->dst_type != DST_TYPE_IS_SAT)
-               return -EOPNOTSUPP;
+               return 0;
 
        switch (tone) {
        case SEC_TONE_OFF:
@@ -1530,7 +1253,9 @@ static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
        default:
                return -EINVAL;
        }
-       return dst_tone_power_cmd(state);
+       dst_tone_power_cmd(state);
+
+       return 0;
 }
 
 static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
@@ -1538,7 +1263,7 @@ static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
        struct dst_state *state = fe->demodulator_priv;
 
        if (state->dst_type != DST_TYPE_IS_SAT)
-               return -EOPNOTSUPP;
+               return 0;
        state->minicmd = minicmd;
        switch (minicmd) {
        case SEC_MINI_A:
@@ -1548,7 +1273,9 @@ static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
                state->tx_tuna[3] = 0xff;
                break;
        }
-       return dst_tone_power_cmd(state);
+       dst_tone_power_cmd(state);
+
+       return 0;
 }
 
 
@@ -1560,9 +1287,8 @@ static int dst_init(struct dvb_frontend *fe)
        static u8 sat_tuna_204[] = { 0x00, 0x00, 0x03, 0xb6, 0x01, 0x55, 0xbd, 0x50, 0x00, 0x00 };
        static u8 ter_tuna_188[] = { 0x09, 0x00, 0x03, 0xb6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00 };
        static u8 ter_tuna_204[] = { 0x00, 0x00, 0x03, 0xb6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00 };
-       static u8 cab_tuna_188[] = { 0x09, 0x00, 0x03, 0xb6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00 };
        static u8 cab_tuna_204[] = { 0x00, 0x00, 0x03, 0xb6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00 };
-       static u8 atsc_tuner[] = { 0x00, 0x00, 0x03, 0xb6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00 };
+       static u8 cab_tuna_188[] = { 0x09, 0x00, 0x03, 0xb6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00 };
 
        state->inversion = INVERSION_OFF;
        state->voltage = SEC_VOLTAGE_13;
@@ -1572,13 +1298,11 @@ static int dst_init(struct dvb_frontend *fe)
        state->bandwidth = BANDWIDTH_7_MHZ;
        state->cur_jiff = jiffies;
        if (state->dst_type == DST_TYPE_IS_SAT)
-               memcpy(state->tx_tuna, ((state->type_flags & DST_TYPE_HAS_VLF) ? sat_tuna_188 : sat_tuna_204), sizeof (sat_tuna_204));
+               memcpy(state->tx_tuna, ((state->type_flags & DST_TYPE_HAS_NEWTUNE) ? sat_tuna_188 : sat_tuna_204), sizeof (sat_tuna_204));
        else if (state->dst_type == DST_TYPE_IS_TERR)
-               memcpy(state->tx_tuna, ((state->type_flags & DST_TYPE_HAS_VLF) ? ter_tuna_188 : ter_tuna_204), sizeof (ter_tuna_204));
+               memcpy(state->tx_tuna, ((state->type_flags & DST_TYPE_HAS_NEWTUNE) ? ter_tuna_188 : ter_tuna_204), sizeof (ter_tuna_204));
        else if (state->dst_type == DST_TYPE_IS_CABLE)
-               memcpy(state->tx_tuna, ((state->type_flags & DST_TYPE_HAS_VLF) ? cab_tuna_188 : cab_tuna_204), sizeof (cab_tuna_204));
-       else if (state->dst_type == DST_TYPE_IS_ATSC)
-               memcpy(state->tx_tuna, atsc_tuner, sizeof (atsc_tuner));
+               memcpy(state->tx_tuna, ((state->type_flags & DST_TYPE_HAS_NEWTUNE) ? cab_tuna_188 : cab_tuna_204), sizeof (cab_tuna_204));
 
        return 0;
 }
@@ -1601,55 +1325,23 @@ static int dst_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
        struct dst_state *state = fe->demodulator_priv;
 
-       int retval = dst_get_signal(state);
+       dst_get_signal(state);
        *strength = state->decode_strength;
 
-       return retval;
+       return 0;
 }
 
 static int dst_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
        struct dst_state *state = fe->demodulator_priv;
 
-       int retval = dst_get_signal(state);
+       dst_get_signal(state);
        *snr = state->decode_snr;
 
-       return retval;
-}
-
-static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
-{
-       int retval = -EINVAL;
-       struct dst_state *state = fe->demodulator_priv;
-
-       if (p != NULL) {
-               retval = dst_set_freq(state, p->frequency);
-               if(retval != 0)
-                       return retval;
-               dprintk(verbose, DST_DEBUG, 1, "Set Frequency=[%d]", p->frequency);
-
-               if (state->dst_type == DST_TYPE_IS_SAT) {
-                       if (state->type_flags & DST_TYPE_HAS_OBS_REGS)
-                               dst_set_inversion(state, p->inversion);
-                       dst_set_fec(state, p->u.qpsk.fec_inner);
-                       dst_set_symbolrate(state, p->u.qpsk.symbol_rate);
-                       dst_set_polarization(state);
-                       dprintk(verbose, DST_DEBUG, 1, "Set Symbolrate=[%d]", p->u.qpsk.symbol_rate);
-
-               } else if (state->dst_type == DST_TYPE_IS_TERR)
-                       dst_set_bandwidth(state, p->u.ofdm.bandwidth);
-               else if (state->dst_type == DST_TYPE_IS_CABLE) {
-                       dst_set_fec(state, p->u.qam.fec_inner);
-                       dst_set_symbolrate(state, p->u.qam.symbol_rate);
-                       dst_set_modulation(state, p->u.qam.modulation);
-               }
-               retval = dst_write_tuna(fe);
-       }
-
-       return retval;
+       return 0;
 }
 
-static int dst_tune_frontend(struct dvb_frontend* fe,
+static int dst_set_frontend(struct dvb_frontend* fe,
                            struct dvb_frontend_parameters* p,
                            unsigned int mode_flags,
                            int *delay,
@@ -1686,11 +1378,6 @@ static int dst_tune_frontend(struct dvb_frontend* fe,
        return 0;
 }
 
-static int dst_get_tuning_algo(struct dvb_frontend *fe)
-{
-       return dst_algo;
-}
-
 static int dst_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
 {
        struct dst_state *state = fe->demodulator_priv;
@@ -1721,7 +1408,6 @@ static void dst_release(struct dvb_frontend *fe)
 static struct dvb_frontend_ops dst_dvbt_ops;
 static struct dvb_frontend_ops dst_dvbs_ops;
 static struct dvb_frontend_ops dst_dvbc_ops;
-static struct dvb_frontend_ops dst_atsc_ops;
 
 struct dst_state *dst_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter)
 {
@@ -1731,25 +1417,24 @@ struct dst_state *dst_attach(struct dst_state *state, struct dvb_adapter *dvb_ad
                return NULL;
        }
        /* determine settings based on type */
-       /* create dvb_frontend */
        switch (state->dst_type) {
        case DST_TYPE_IS_TERR:
-               memcpy(&state->frontend.ops, &dst_dvbt_ops, sizeof(struct dvb_frontend_ops));
+               memcpy(&state->ops, &dst_dvbt_ops, sizeof(struct dvb_frontend_ops));
                break;
        case DST_TYPE_IS_CABLE:
-               memcpy(&state->frontend.ops, &dst_dvbc_ops, sizeof(struct dvb_frontend_ops));
+               memcpy(&state->ops, &dst_dvbc_ops, sizeof(struct dvb_frontend_ops));
                break;
        case DST_TYPE_IS_SAT:
-               memcpy(&state->frontend.ops, &dst_dvbs_ops, sizeof(struct dvb_frontend_ops));
-               break;
-       case DST_TYPE_IS_ATSC:
-               memcpy(&state->frontend.ops, &dst_atsc_ops, sizeof(struct dvb_frontend_ops));
+               memcpy(&state->ops, &dst_dvbs_ops, sizeof(struct dvb_frontend_ops));
                break;
        default:
                dprintk(verbose, DST_ERROR, 1, "unknown DST type. please report to the LinuxTV.org DVB mailinglist.");
                kfree(state);
                return NULL;
        }
+
+       /* create dvb_frontend */
+       state->frontend.ops = &state->ops;
        state->frontend.demodulator_priv = state;
 
        return state;                           /*      Manu (DST is a card not a frontend)     */
@@ -1770,10 +1455,8 @@ static struct dvb_frontend_ops dst_dvbt_ops = {
 
        .release = dst_release,
        .init = dst_init,
-       .tune = dst_tune_frontend,
-       .set_frontend = dst_set_frontend,
+       .tune = dst_set_frontend,
        .get_frontend = dst_get_frontend,
-       .get_frontend_algo = dst_get_tuning_algo,
        .read_status = dst_read_status,
        .read_signal_strength = dst_read_signal_strength,
        .read_snr = dst_read_snr,
@@ -1796,10 +1479,8 @@ static struct dvb_frontend_ops dst_dvbs_ops = {
 
        .release = dst_release,
        .init = dst_init,
-       .tune = dst_tune_frontend,
-       .set_frontend = dst_set_frontend,
+       .tune = dst_set_frontend,
        .get_frontend = dst_get_frontend,
-       .get_frontend_algo = dst_get_tuning_algo,
        .read_status = dst_read_status,
        .read_signal_strength = dst_read_signal_strength,
        .read_snr = dst_read_snr,
@@ -1825,38 +1506,13 @@ static struct dvb_frontend_ops dst_dvbc_ops = {
 
        .release = dst_release,
        .init = dst_init,
-       .tune = dst_tune_frontend,
-       .set_frontend = dst_set_frontend,
-       .get_frontend = dst_get_frontend,
-       .get_frontend_algo = dst_get_tuning_algo,
-       .read_status = dst_read_status,
-       .read_signal_strength = dst_read_signal_strength,
-       .read_snr = dst_read_snr,
-};
-
-static struct dvb_frontend_ops dst_atsc_ops = {
-       .info = {
-               .name = "DST ATSC",
-               .type = FE_ATSC,
-               .frequency_stepsize = 62500,
-               .frequency_min = 510000000,
-               .frequency_max = 858000000,
-               .symbol_rate_min = 1000000,
-               .symbol_rate_max = 45000000,
-               .caps = FE_CAN_FEC_AUTO | FE_CAN_QAM_AUTO | FE_CAN_QAM_64 | FE_CAN_QAM_256 | FE_CAN_8VSB
-       },
-
-       .release = dst_release,
-       .init = dst_init,
-       .tune = dst_tune_frontend,
-       .set_frontend = dst_set_frontend,
+       .tune = dst_set_frontend,
        .get_frontend = dst_get_frontend,
-       .get_frontend_algo = dst_get_tuning_algo,
        .read_status = dst_read_status,
        .read_signal_strength = dst_read_signal_strength,
        .read_snr = dst_read_snr,
 };
 
-MODULE_DESCRIPTION("DST DVB-S/T/C/ATSC Combo Frontend driver");
+MODULE_DESCRIPTION("DST DVB-S/T/C Combo Frontend driver");
 MODULE_AUTHOR("Jamie Honan, Manu Abraham");
 MODULE_LICENSE("GPL");