diff --git a/ddbridge/ddbridge-core.c b/ddbridge/ddbridge-core.c index 5a8d161..22b4947 100644 --- a/ddbridge/ddbridge-core.c +++ b/ddbridge/ddbridge-core.c @@ -4358,10 +4358,20 @@ int ddb_init(struct ddb *dev) ddb_gtl_init(dev); ddb_init_boards(dev); + if (dev->link[0].info->type == DDB_MOD && + dev->link[0].info->version == 2) { + int ret = ddb_mod_fsm_setup(dev, 0); + if (ret < 0) { + dev_err(dev->dev, "FSM setup failed!\n"); + return ret; + } + } if (ddb_i2c_init(dev) < 0) goto fail; ddb_ports_init(dev); + if (dev->link[0].info->type == DDB_MOD) + ddbridge_mod_init(dev); if (ddb_buffers_alloc(dev) < 0) { dev_info(dev->dev, "Could not allocate buffer memory\n"); @@ -4377,8 +4387,6 @@ int ddb_init(struct ddb *dev) ddbwritel(dev, 1, GPIO_DIRECTION); ddbwritel(dev, 1, GPIO_OUTPUT); } - if (dev->link[0].info->type == DDB_MOD) - ddbridge_mod_init(dev); return 0; fail3: diff --git a/ddbridge/ddbridge-modulator.c b/ddbridge/ddbridge-modulator.c index c63cb6e..291d5f2 100644 --- a/ddbridge/ddbridge-modulator.c +++ b/ddbridge/ddbridge-modulator.c @@ -468,8 +468,7 @@ static int mod_setup_max2871(struct ddb *dev, u32 *reg) return status; } -static int mod_fsm_setup(struct ddb *dev, u32 FrequencyPlan, - u32 MaxUsedChannels) +int ddb_mod_fsm_setup(struct ddb *dev, u32 MaxUsedChannels) { int status = 0; u32 Capacity; @@ -1630,16 +1629,17 @@ out: static int mod_init_2(struct ddb *dev, u32 Frequency) { - int status, i; - int streams = dev->link[0].info->port_num; + int i, streams = dev->link[0].info->port_num; dev->mod_base.frequency = Frequency; - status = mod_fsm_setup(dev, 0, 0); +#if 0 + status = mod_fsm_setup(dev, 0); if (status) { dev_err(dev->dev, "FSM setup failed!\n"); return -1; } +#endif for (i = 0; i < streams; i++) { struct ddb_mod *mod = &dev->mod[i]; @@ -1790,11 +1790,15 @@ static int mod_init_3(struct ddb *dev, u32 Frequency) int ddbridge_mod_init(struct ddb *dev) { - if (dev->link[0].info->version <= 1) + switch (dev->link[0].info->version) { + case 0: + case 1: return mod_init_1(dev, 722000000); - if (dev->link[0].info->version == 2) + case 2: return mod_init_2(dev, 114000000); - if (dev->link[0].info->version == 3) + case 3: return mod_init_3(dev, 503250000); - return -1; + default: + return -1; + } } diff --git a/ddbridge/ddbridge.h b/ddbridge/ddbridge.h index 561cb83..c92d3b5 100644 --- a/ddbridge/ddbridge.h +++ b/ddbridge/ddbridge.h @@ -545,6 +545,7 @@ int ddbridge_mod_init(struct ddb *dev); void ddbridge_mod_output_stop(struct ddb_output *output); int ddbridge_mod_output_start(struct ddb_output *output); void ddbridge_mod_rate_handler(unsigned long data); +int ddb_mod_fsm_setup(struct ddb *dev, u32 MaxUsedChannels); void ddb_device_destroy(struct ddb *dev); void ddb_nsd_detach(struct ddb *dev);