dprintk("%s: dst_gpio_enb error (err == %i, mask == %02x, enb == %02x)\n", __FUNCTION__, err, mask, enbb);
                return -EREMOTEIO;
        }
-
-       msleep(1);
-
+       udelay(1000);
        /* because complete disabling means no output, no need to do output packet */
        if (enbb == 0)
                return 0;
                dprintk("%s: dst_gpio_outb ERROR !\n", __FUNCTION__);
                return -1;
        }
-       msleep(1);
-
+       udelay(1000);
        if (dst_gpio_outb(state, RDC_8820_RESET, RDC_8820_RESET, RDC_8820_RESET, DELAY) < 0) {
                dprintk("%s: dst_gpio_outb ERROR !\n", __FUNCTION__);
                return -1;
                dprintk("%s: dst_gpio_outb ERROR !\n", __FUNCTION__);
                return -1;
        }
-       msleep(1);
-
+       udelay(1000);
        return 0;
 }
 EXPORT_SYMBOL(dst_pio_enable);
                dprintk("%s: dst_gpio_outb ERROR !\n", __FUNCTION__);
                return -1;
        }
+       if (state->type_flags & DST_TYPE_HAS_FW_1)
+               udelay(1000);
 
        return 0;
 }
                                dprintk("%s: dst wait ready after %d\n", __FUNCTION__, i);
                        return 1;
                }
-               msleep(1);
+               msleep(35);
        }
        if (verbose > 1)
                dprintk("%s: dst wait NOT ready after %d\n", __FUNCTION__, i);
                dprintk("%s: RDC 8820 State RESET Failed.\n", __FUNCTION__);
                return -1;
        }
+       if (state->type_flags & DST_TYPE_HAS_FW_1)
+               msleep(100);
+       else
+               msleep(5);
+
        return 0;
 }
 EXPORT_SYMBOL(dst_comm_init);
        u8 *val;
 
        state->frequency = freq;
+       if (debug > 4)
+               dprintk("%s: set Frequency %u\n", __FUNCTION__, freq);
 
-       // dprintk("%s: set frequency %u\n", __FUNCTION__, freq);
        if (state->dst_type == DST_TYPE_IS_SAT) {
                freq = freq / 1000;
                if (freq < 950 || freq > 2150)
        if (state->dst_type == DST_TYPE_IS_TERR) {
                return 0;
        }
-       // dprintk("%s: set srate %u\n", __FUNCTION__, srate);
+       if (debug > 4)
+               dprintk("%s: set symrate %u\n", __FUNCTION__, srate);
        srate /= 1000;
        val = &state->tx_tuna[0];
 
                sval <<= 20;
                do_div(sval, 88000);
                symcalc = (u32) sval;
-               // dprintk("%s: set symcalc %u\n", __FUNCTION__, symcalc);
+
+               if (debug > 4)
+                       dprintk("%s: set symcalc %u\n", __FUNCTION__, symcalc);
+
                val[5] = (u8) (symcalc >> 12);
                val[6] = (u8) (symcalc >> 4);
                val[7] = (u8) (symcalc << 4);
                printk(" 0x%x firmware version = 2", DST_TYPE_HAS_FW_2);
        if (type_flags & DST_TYPE_HAS_FW_3)
                printk(" 0x%x firmware version = 3", DST_TYPE_HAS_FW_3);
+//     if ((type_flags & DST_TYPE_HAS_FW_BUILD) && new_fw)
 
        printk("\n");
 }
                .dst_type = DST_TYPE_IS_SAT,
                .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1,
                .dst_feature = DST_TYPE_HAS_CA
-       },      /* unknown to vendor    */
+       },      /*      An OEM board    */
 
        {
                .device_id = "DSTMCI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_SAT,
-               .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_2,
+               .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD,
                .dst_feature = DST_TYPE_HAS_CA | DST_TYPE_HAS_DISEQC3 | DST_TYPE_HAS_DISEQC4
                                                        | DST_TYPE_HAS_MOTO | DST_TYPE_HAS_MAC
        },
                .device_id = "DCT-CI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_CABLE,
-               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1                                                                     | DST_TYPE_HAS_FW_2,
+               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1
+                                                       | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD,
                .dst_feature = DST_TYPE_HAS_CA
        },
 
                .device_id = "DTT-CI",
                .offset = 1,
                .dst_type = DST_TYPE_IS_TERR,
-               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_2,
+               .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD,
                .dst_feature = 0
        },
 
                dprintk("%s: DST Initialization Failed.\n", __FUNCTION__);
                return -1;
        }
-
+       msleep(100);
        if (dst_get_device_id(state) < 0) {
                dprintk("%s: unknown device.\n", __FUNCTION__);
                return -1;
                dprintk("%s: PIO Disable Failed.\n", __FUNCTION__);
                return -1;
        }
+       if (state->type_flags & DST_TYPE_HAS_FW_1)
+               udelay(3000);
 
        if (read_dst(state, &reply, GET_ACK)) {
                if (verbose > 1)
        }
        if (len >= 2 && data[0] == 0 && (data[1] == 1 || data[1] == 3))
                return 0;
+
+//     udelay(3000);
+       if (state->type_flags & DST_TYPE_HAS_FW_1)
+               udelay(3000);
+       else
+               udelay(2000);
+
        if (!dst_wait_dst_ready(state, NO_DELAY))
                return -1;
 
        if (!dst_wait_dst_ready(state, NO_DELAY))
                return 0;
 
-       msleep(10);
-
        if (state->type_flags & DST_TYPE_HAS_NEWTUNE) {
                /* how to get variable length reply ???? */
                retval = read_dst(state, state->rx_tuna, 10);
        int retval;
        u8 reply;
 
-       dprintk("%s: type_flags 0x%x \n", __FUNCTION__, state->type_flags);
+       if (debug > 4)
+               dprintk("%s: type_flags 0x%x \n", __FUNCTION__, state->type_flags);
+
        state->decode_freq = 0;
        state->decode_lock = state->decode_strength = state->decode_snr = 0;
        if (state->dst_type == DST_TYPE_IS_SAT) {