From bbb551ce8a6e13f18f4f1258941e3887b2889c21 Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Fri, 28 Sep 2018 00:27:09 +0200 Subject: [PATCH 1/5] disable debuging messages --- lib/ddzap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ddzap.c b/lib/ddzap.c index 46b7f50..346f835 100644 --- a/lib/ddzap.c +++ b/lib/ddzap.c @@ -114,7 +114,7 @@ int main(int argc, char **argv) break; } - dd = dddvb_init(config, 0xffff); + dd = dddvb_init(config, 0);//0xffff); if (!dd) { printf("dddvb_init failed\n"); exit(-1); From 0fa1f815c53eef3d0c3006a5e00460ac45a3b946 Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Fri, 28 Sep 2018 00:27:58 +0200 Subject: [PATCH 2/5] remove debugging messages --- ddbridge/ddbridge-sx8.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/ddbridge/ddbridge-sx8.c b/ddbridge/ddbridge-sx8.c index 7754a98..cb78cf4 100644 --- a/ddbridge/ddbridge-sx8.c +++ b/ddbridge/ddbridge-sx8.c @@ -237,7 +237,6 @@ static int start(struct dvb_frontend *fe, u32 flags, u32 modmask, u32 ts_config) if (sx8_base->demod_in_use[i]) used_demods++; } - printk("used_ldpc_bitrate = %u\n", used_ldpc_bitrate); if ((used_ldpc_bitrate >= MAX_LDPC_BITRATE) || ((ts_config & SX8_TSCONFIG_MODE_MASK) > SX8_TSCONFIG_MODE_NORMAL && used_demods > 0)) { @@ -443,14 +442,12 @@ static int set_input(struct dvb_frontend *fe, int input) struct sx8 *state = fe->demodulator_priv; struct dtv_frontend_properties *p = &fe->dtv_property_cache; - printk("fe %u, set input = %u\n", state->mci.nr, input); if (input >= SX8_TUNER_NUM) return -EINVAL; if (state->mci.tuner == input) return 0; stop(fe); state->mci.tuner = p->input = input; - printk("fe %u, input = %u\n", state->mci.nr, input); return 0; } From dc45a08c105b233b1f7b6b51fefb02b6ac6eaf37 Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Fri, 28 Sep 2018 00:28:18 +0200 Subject: [PATCH 3/5] add more delivery systems for M4 --- ddbridge/ddbridge-m4.c | 126 +++++++++++++++++++++++++++++++--------- ddbridge/ddbridge-mci.h | 2 +- dvb-core/dvb_frontend.h | 2 +- 3 files changed, 101 insertions(+), 29 deletions(-) diff --git a/ddbridge/ddbridge-m4.c b/ddbridge/ddbridge-m4.c index 507efaf..758f9b5 100644 --- a/ddbridge/ddbridge-m4.c +++ b/ddbridge/ddbridge-m4.c @@ -46,7 +46,6 @@ static int stop(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; struct mci_command cmd; - struct mci_base *mci_base = state->mci.base; if (!state->started) return -1; @@ -62,8 +61,6 @@ static int stop(struct dvb_frontend *fe) static int search_s2(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; - struct mci_base *mci_base = state->mci.base; - struct m4_base *m4_base = (struct m4_base *) mci_base; struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct mci_command cmd; int stat; @@ -72,11 +69,12 @@ static int search_s2(struct dvb_frontend *fe) cmd.command = MCI_CMD_SEARCH_DVBS; cmd.dvbs2_search.flags = 3; cmd.dvbs2_search.s2_modulation_mask = 3; - cmd.dvbs2_search.retry = 2; + cmd.dvbs2_search.retry = 0; cmd.dvbs2_search.frequency = p->frequency * 1000; cmd.dvbs2_search.symbol_rate = p->symbol_rate; cmd.dvbs2_search.scrambling_sequence_index = 0; //p->scrambling_sequence_index; - cmd.dvbs2_search.input_stream_id = p->stream_id; + if (p->stream_id != NO_STREAM_ID_FILTER) + cmd.dvbs2_search.input_stream_id = p->stream_id; cmd.tuner = state->mci.nr; cmd.demod = state->mci.tuner; cmd.output = state->mci.nr; @@ -90,8 +88,6 @@ static int search_s2(struct dvb_frontend *fe) static int search_c(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; - struct mci_base *mci_base = state->mci.base; - struct m4_base *m4_base = (struct m4_base *) mci_base; struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct mci_command cmd; int stat; @@ -109,7 +105,7 @@ static int search_c(struct dvb_frontend *fe) cmd.dvbc_search.bandwidth = MCI_BANDWIDTH_8MHZ; break; } - cmd.dvbc_search.retry = 2; + cmd.dvbc_search.retry = 0; cmd.dvbc_search.frequency = p->frequency; cmd.tuner = state->mci.tuner; cmd.demod = state->mci.demod; @@ -124,8 +120,6 @@ static int search_c(struct dvb_frontend *fe) static int search_t(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; - struct mci_base *mci_base = state->mci.base; - struct m4_base *m4_base = (struct m4_base *) mci_base; struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct mci_command cmd; int stat; @@ -146,7 +140,7 @@ static int search_t(struct dvb_frontend *fe) cmd.dvbt_search.bandwidth = MCI_BANDWIDTH_8MHZ; break; } - cmd.dvbt_search.retry = 2; + cmd.dvbt_search.retry = 0; cmd.dvbt_search.frequency = p->frequency; cmd.tuner = state->mci.tuner; cmd.demod = state->mci.demod; @@ -158,15 +152,85 @@ static int search_t(struct dvb_frontend *fe) return stat; } -static int search_t2(struct dvb_frontend *fe) +static int search_isdbs(struct dvb_frontend *fe) +{ + struct m4 *state = fe->demodulator_priv; + struct dtv_frontend_properties *p = &fe->dtv_property_cache; + struct mci_command cmd; + int stat; + + memset(&cmd, 0, sizeof(cmd)); + cmd.command = MCI_CMD_SEARCH_ISDBS; + cmd.isdbs_search.retry = 0; + if (p->stream_id != NO_STREAM_ID_FILTER) { + cmd.isdbs_search.flags = (p->stream_id & 0xffff0000) ? 0 : 1; + cmd.isdbs_search.tsid = p->stream_id; + } + cmd.isdbs_search.frequency = p->frequency * 1000; + cmd.tuner = state->mci.nr; + cmd.demod = state->mci.tuner; + cmd.output = state->mci.nr; + + stat = ddb_mci_cmd(&state->mci, &cmd, NULL); + if (stat) + stop(fe); + return stat; +} + +static int search_isdbc(struct dvb_frontend *fe) +{ + struct m4 *state = fe->demodulator_priv; + struct dtv_frontend_properties *p = &fe->dtv_property_cache; + struct mci_command cmd; + int stat; + + memset(&cmd, 0, sizeof(cmd)); + cmd.command = MCI_CMD_SEARCH_ISDBC; + cmd.isdbc_search.retry = 0; + if (p->stream_id != NO_STREAM_ID_FILTER) { + cmd.isdbc_search.flags = (p->stream_id & 0xffff0000) ? 0 : 1; + cmd.isdbc_search.tsid = p->stream_id; + cmd.isdbc_search.onid = (p->stream_id & 0x10000) >> 16; + } + cmd.isdbc_search.bandwidth = MCI_BANDWIDTH_6MHZ; + cmd.isdbc_search.frequency = p->frequency; + cmd.demod = state->mci.tuner; + cmd.output = state->mci.nr; + + stat = ddb_mci_cmd(&state->mci, &cmd, NULL); + if (stat) + stop(fe); + return stat; +} + +static int search_j83b(struct dvb_frontend *fe) +{ + struct m4 *state = fe->demodulator_priv; + struct dtv_frontend_properties *p = &fe->dtv_property_cache; + struct mci_command cmd; + int stat; + + memset(&cmd, 0, sizeof(cmd)); + cmd.command = MCI_CMD_SEARCH_J83B; + cmd.j83b_search.flags = 0; + cmd.j83b_search.retry = 0; + cmd.j83b_search.bandwidth = MCI_BANDWIDTH_6MHZ; + cmd.j83b_search.frequency = p->frequency; + cmd.demod = state->mci.tuner; + cmd.output = state->mci.nr; + + stat = ddb_mci_cmd(&state->mci, &cmd, NULL); + if (stat) + stop(fe); + return stat; +} + +static int search_t2(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; - struct mci_base *mci_base = state->mci.base; - struct m4_base *m4_base = (struct m4_base *) mci_base; struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct mci_command cmd; int stat; - u32 flags = 0; memset(&cmd, 0, sizeof(cmd)); cmd.command = MCI_CMD_SEARCH_DVBT2; @@ -187,7 +251,7 @@ static int search_t2(struct dvb_frontend *fe) cmd.dvbt_search.bandwidth = MCI_BANDWIDTH_8MHZ; break; } - cmd.dvbt2_search.retry = 2; + cmd.dvbt2_search.retry = 0; cmd.dvbt2_search.frequency = p->frequency; if (p->stream_id != NO_STREAM_ID_FILTER) { cmd.dvbt2_search.plp = p->stream_id & 0xff; @@ -207,12 +271,9 @@ static int search_t2(struct dvb_frontend *fe) static int search_c2(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; - struct mci_base *mci_base = state->mci.base; - struct m4_base *m4_base = (struct m4_base *) mci_base; struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct mci_command cmd; int stat; - u32 flags = 0; memset(&cmd, 0, sizeof(cmd)); cmd.command = MCI_CMD_SEARCH_DVBC2; @@ -224,7 +285,7 @@ static int search_c2(struct dvb_frontend *fe) cmd.dvbc2_search.bandwidth = MCI_BANDWIDTH_8MHZ; break; } - cmd.dvbc2_search.retry = 2; + cmd.dvbc2_search.retry = 0; cmd.dvbc2_search.frequency = p->frequency; if (p->stream_id != NO_STREAM_ID_FILTER) { cmd.dvbc2_search.plp = p->stream_id & 0xff; @@ -243,12 +304,9 @@ static int search_c2(struct dvb_frontend *fe) static int search_isdbt(struct dvb_frontend *fe) { struct m4 *state = fe->demodulator_priv; - struct mci_base *mci_base = state->mci.base; - struct m4_base *m4_base = (struct m4_base *) mci_base; struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct mci_command cmd; int stat; - u32 flags = 0; memset(&cmd, 0, sizeof(cmd)); cmd.command = MCI_CMD_SEARCH_ISDBT; @@ -263,7 +321,7 @@ static int search_isdbt(struct dvb_frontend *fe) cmd.isdbt_search.bandwidth = MCI_BANDWIDTH_6MHZ; break; } - cmd.isdbt_search.retry = 2; + cmd.isdbt_search.retry = 0; cmd.isdbt_search.frequency = p->frequency; cmd.tuner = state->mci.tuner; cmd.demod = state->mci.demod; @@ -296,6 +354,9 @@ static int set_parameters(struct dvb_frontend *fe) case SYS_DVBC_ANNEX_A: res = search_c(fe); break; + case SYS_DVBC_ANNEX_B: + res = search_j83b(fe); + break; case SYS_DVBT: state->iq_constellation_tap = 5; res = search_t(fe); @@ -309,6 +370,13 @@ static int set_parameters(struct dvb_frontend *fe) case SYS_ISDBT: res = search_isdbt(fe); break; + case SYS_ISDBS: + res = search_isdbs(fe); + break; + case SYS_DVBC_ANNEX_C: + case SYS_ISDBC: + res = search_isdbc(fe); + break; default: return -EINVAL; } @@ -329,7 +397,9 @@ static int read_status(struct dvb_frontend *fe, enum fe_status *status) if (stat) return stat; *status = 0x00; - ddb_mci_get_info(&state->mci); + stat = ddb_mci_get_info(&state->mci); + if (stat) + return stat; ddb_mci_get_strength(fe); if (res.status == MCI_DEMOD_WAIT_SIGNAL) *status = 0x01; @@ -397,8 +467,10 @@ static int get_frontend(struct dvb_frontend *fe, struct dtv_frontend_properties } static struct dvb_frontend_ops m4_ops = { - .delsys = { SYS_DVBC_ANNEX_A, SYS_DVBT, SYS_DVBT2, SYS_DVBC2, SYS_ISDBT, - SYS_DVBS, SYS_DVBS2, }, + .delsys = { SYS_DVBC_ANNEX_A, SYS_DVBC_ANNEX_B, SYS_DVBC_ANNEX_C, + SYS_ISDBC, SYS_DVBC2, + SYS_DVBT, SYS_DVBT2, SYS_ISDBT, + SYS_DVBS, SYS_DVBS2, SYS_ISDBS, }, .info = { .name = "M4", .frequency_min = 950000, /* DVB-T: 47125000 */ diff --git a/ddbridge/ddbridge-mci.h b/ddbridge/ddbridge-mci.h index d7fd015..0dcd5d1 100644 --- a/ddbridge/ddbridge-mci.h +++ b/ddbridge/ddbridge-mci.h @@ -285,7 +285,7 @@ struct mci_command { u8 rsvd1; u8 retry; u32 frequency; - } j83b_Search; + } j83b_search; struct { u8 tap; diff --git a/dvb-core/dvb_frontend.h b/dvb-core/dvb_frontend.h index 7c2bffc..b5c48b5 100644 --- a/dvb-core/dvb_frontend.h +++ b/dvb-core/dvb_frontend.h @@ -55,7 +55,7 @@ * Maximum number of Delivery systems per frontend. It * should be smaller or equal to 32 */ -#define MAX_DELSYS 8 +#define MAX_DELSYS 16 /** * struct dvb_frontend_tune_settings - parameters to adjust frontend tuning From 448b07091d63da46e89970aecfa7b461db42b125 Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Sun, 7 Oct 2018 18:07:14 +0200 Subject: [PATCH 4/5] initial support for SDR IQ card --- apps/flashprog.c | 6 ++++- ddbridge/ddbridge-hw.c | 19 ++++++++++--- ddbridge/ddbridge-main.c | 1 + ddbridge/ddbridge-modulator.c | 51 ++++++++++++++++++++++++++++++----- 4 files changed, 65 insertions(+), 12 deletions(-) diff --git a/apps/flashprog.c b/apps/flashprog.c index 0d330ba..a13f9e2 100644 --- a/apps/flashprog.c +++ b/apps/flashprog.c @@ -267,7 +267,11 @@ int main(int argc, char **argv) break; case 0x0220: fname="SDRModulatorV1A_DD01_0220.fpga"; - printf("SDRModulator\n"); + printf("SDRModulator ATV\n"); + break; + case 0x0221: + fname="SDRModulatorV1A_DD01_0221_IQ.fpga"; + printf("SDRModulator IQ\n"); break; default: printf("UNKNOWN\n"); diff --git a/ddbridge/ddbridge-hw.c b/ddbridge/ddbridge-hw.c index fce71f3..64a0dbe 100644 --- a/ddbridge/ddbridge-hw.c +++ b/ddbridge/ddbridge-hw.c @@ -517,10 +517,20 @@ static const struct ddb_info ddb_mod_fsm_4 = { .lostlock_irq = 9, }; -static const struct ddb_info ddb_sdr = { +static const struct ddb_info ddb_sdr_atv = { .type = DDB_MOD, - .name = "Digital Devices SDR", - .version = 3, + .name = "Digital Devices SDR ATV", + .version = 16, + .regmap = &octopus_sdr_map, + .port_num = 16, + .temp_num = 1, + .tempmon_irq = 8, +}; + +static const struct ddb_info ddb_sdr_iq = { + .type = DDB_MOD, + .name = "Digital Devices SDR IQ", + .version = 17, .regmap = &octopus_sdr_map, .port_num = 16, .temp_num = 1, @@ -777,7 +787,8 @@ static const struct ddb_device_id ddb_device_ids[] = { DDB_DEVID(0x0210, 0x0001, ddb_mod_fsm_24), DDB_DEVID(0x0210, 0x0002, ddb_mod_fsm_16), DDB_DEVID(0x0210, 0x0003, ddb_mod_fsm_8), - DDB_DEVID(0x0220, 0x0001, ddb_sdr), + DDB_DEVID(0x0220, 0x0001, ddb_sdr_atv), + DDB_DEVID(0x0221, 0x0001, ddb_sdr_iq), /* testing on OctopusNet Pro */ DDB_DEVID(0x0320, 0xffff, ddb_octopro_hdin), diff --git a/ddbridge/ddbridge-main.c b/ddbridge/ddbridge-main.c index 92bcbb5..f5c2a57 100644 --- a/ddbridge/ddbridge-main.c +++ b/ddbridge/ddbridge-main.c @@ -424,6 +424,7 @@ static const struct pci_device_id ddb_id_table[] __devinitconst = { DDB_DEVICE_ANY(0x0203), DDB_DEVICE_ANY(0x0210), DDB_DEVICE_ANY(0x0220), + DDB_DEVICE_ANY(0x0221), DDB_DEVICE_ANY(0x0320), DDB_DEVICE_ANY(0x0321), DDB_DEVICE_ANY(0x0322), diff --git a/ddbridge/ddbridge-modulator.c b/ddbridge/ddbridge-modulator.c index 4acb10e..9dadb05 100644 --- a/ddbridge/ddbridge-modulator.c +++ b/ddbridge/ddbridge-modulator.c @@ -292,7 +292,7 @@ int ddbridge_mod_output_start(struct ddb_output *output) struct ddb_mod *mod = &dev->mod[output->nr]; u32 Symbolrate = mod->symbolrate; - if (dev->link[0].info->version < 3) + if (dev->link[0].info->version < 16) mod_calc_rateinc(mod); mod->LastInPacketCount = 0; @@ -311,7 +311,7 @@ int ddbridge_mod_output_start(struct ddb_output *output) mod->State = CM_STARTUP; mod->StateCounter = CM_STARTUP_DELAY; - if (dev->link[0].info->version == 3) + if (dev->link[0].info->version >= 16) mod->Control = 0xfffffff0 & ddbreadl(dev, CHANNEL_CONTROL(output->nr)); else @@ -363,11 +363,11 @@ int ddbridge_mod_output_start(struct ddb_output *output) CHANNEL_SETTINGS(output->nr)); mod->Control |= (CHANNEL_CONTROL_ENABLE_IQ | CHANNEL_CONTROL_ENABLE_DVB); - } else if (dev->link[0].info->version == 3) { + } else if (dev->link[0].info->version >= 16) { mod->Control |= (CHANNEL_CONTROL_ENABLE_IQ | CHANNEL_CONTROL_ENABLE_DVB); } - if (dev->link[0].info->version < 3) { + if (dev->link[0].info->version < 16) { mod_set_rateinc(dev, output->nr); mod_set_incs(output); } @@ -1499,7 +1499,7 @@ static int mod3_prop_proc(struct ddb_mod *mod, struct dtv_property *tvp) static int mod_prop_proc(struct ddb_mod *mod, struct dtv_property *tvp) { - if (mod->port->dev->link[0].info->version == 3) + if (mod->port->dev->link[0].info->version >= 16) return mod3_prop_proc(mod, tvp); switch (tvp->cmd) { case MODULATOR_SYMBOL_RATE: @@ -1592,7 +1592,7 @@ int ddbridge_mod_do_ioctl(struct file *file, unsigned int cmd, void *parg) (struct dtv_properties __user *) parg; int i, ret = 0; - if (dev->link[0].info->version == 3 && cmd != FE_SET_PROPERTY) + if (dev->link[0].info->version >= 16 && cmd != FE_SET_PROPERTY) return -EINVAL; mutex_lock(&dev->ioctl_mutex); switch (cmd) { @@ -1852,6 +1852,41 @@ static int mod_init_3(struct ddb *dev, u32 Frequency) return ret; } +static int mod_init_sdr_iq(struct ddb *dev, u32 Frequency) +{ + int streams = dev->link[0].info->port_num; + int i, ret = 0; + + ret = mod_setup_max2871(dev, max2871_sdr); + if (ret) + dev_err(dev->dev, "PLL setup failed\n"); + ret = rfdac_init(dev); + if (ret) + ret = rfdac_init(dev); + if (ret) + dev_err(dev->dev, "RFDAC setup failed\n"); + + ddbwritel(dev, 0x3000, 0x244); + ddbwritel(dev, 0x01, 0x240); + + //mod3_set_base_frequency(dev, 602000000); + for (i = 0; i < streams; i++) { + struct ddb_mod *mod = &dev->mod[i]; + + ddbwritel(dev, 0x00, SDR_CHANNEL_CONTROL(i)); + ddbwritel(dev, 0x306, SDR_CHANNEL_CONFIG(i)); + ddbwritel(dev, 0x72492492, SDR_CHANNEL_ARICW(i)); + //mod3_set_frequency(mod, Frequency + 8000000 * i); + ddbwritel(dev, 0x00011f80, SDR_CHANNEL_RGAIN(i)); + } + ddbwritel(dev, -699050667, SDR_CHANNEL_CFCW(0)); + ddbwritel(dev, 699050667, SDR_CHANNEL_CFCW(1)); + + mod_set_attenuator(dev, 0); + mod_set_vga(dev, 64); + return ret; +} + int ddbridge_mod_init(struct ddb *dev) { switch (dev->link[0].info->version) { @@ -1860,8 +1895,10 @@ int ddbridge_mod_init(struct ddb *dev) return mod_init_1(dev, 722000000); case 2: return mod_init_2(dev, 114000000); - case 3: + case 16: return mod_init_3(dev, 503250000); + case 17: + return mod_init_sdr_iq(dev, 503250000); default: return -1; } From 67f0820a53387aed941b692d9413588c665d841f Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Mon, 19 Nov 2018 19:10:29 +0100 Subject: [PATCH 5/5] use default FPGA image values --- ddbridge/ddbridge-modulator.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/ddbridge/ddbridge-modulator.c b/ddbridge/ddbridge-modulator.c index 9dadb05..8d94395 100644 --- a/ddbridge/ddbridge-modulator.c +++ b/ddbridge/ddbridge-modulator.c @@ -1,7 +1,7 @@ /* * ddbridge-modulator.c: Digital Devices modulator cards * - * Copyright (C) 2010-2017 Digital Devices GmbH + * Copyright (C) 2010-2018 Digital Devices GmbH * Marcus Metzler * Ralph Metzler * @@ -1852,7 +1852,8 @@ static int mod_init_3(struct ddb *dev, u32 Frequency) return ret; } -static int mod_init_sdr_iq(struct ddb *dev, u32 Frequency) + +static int mod_init_sdr_iq(struct ddb *dev) { int streams = dev->link[0].info->port_num; int i, ret = 0; @@ -1866,7 +1867,6 @@ static int mod_init_sdr_iq(struct ddb *dev, u32 Frequency) if (ret) dev_err(dev->dev, "RFDAC setup failed\n"); - ddbwritel(dev, 0x3000, 0x244); ddbwritel(dev, 0x01, 0x240); //mod3_set_base_frequency(dev, 602000000); @@ -1874,16 +1874,11 @@ static int mod_init_sdr_iq(struct ddb *dev, u32 Frequency) struct ddb_mod *mod = &dev->mod[i]; ddbwritel(dev, 0x00, SDR_CHANNEL_CONTROL(i)); - ddbwritel(dev, 0x306, SDR_CHANNEL_CONFIG(i)); - ddbwritel(dev, 0x72492492, SDR_CHANNEL_ARICW(i)); - //mod3_set_frequency(mod, Frequency + 8000000 * i); - ddbwritel(dev, 0x00011f80, SDR_CHANNEL_RGAIN(i)); } - ddbwritel(dev, -699050667, SDR_CHANNEL_CFCW(0)); - ddbwritel(dev, 699050667, SDR_CHANNEL_CFCW(1)); mod_set_attenuator(dev, 0); - mod_set_vga(dev, 64); + udelay(10); + mod_set_vga(dev, 120); return ret; } @@ -1898,7 +1893,7 @@ int ddbridge_mod_init(struct ddb *dev) case 16: return mod_init_3(dev, 503250000); case 17: - return mod_init_sdr_iq(dev, 503250000); + return mod_init_sdr_iq(dev); default: return -1; }