From 0dd09971336cc89c944b0d71be97e8372cddcc00 Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Sun, 10 Sep 2017 22:25:02 +0200 Subject: [PATCH] change FSM card channel number detection to use register 0x1c --- ddbridge/ddbridge-core.c | 9 --------- ddbridge/ddbridge-hw.c | 2 +- ddbridge/ddbridge-main.c | 25 ++++++++++++++++++++++--- ddbridge/ddbridge-modulator.c | 10 ++-------- ddbridge/ddbridge.h | 1 - 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/ddbridge/ddbridge-core.c b/ddbridge/ddbridge-core.c index 22b4947..b372a15 100644 --- a/ddbridge/ddbridge-core.c +++ b/ddbridge/ddbridge-core.c @@ -4358,15 +4358,6 @@ 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); diff --git a/ddbridge/ddbridge-hw.c b/ddbridge/ddbridge-hw.c index 139684a..0ddddb6 100644 --- a/ddbridge/ddbridge-hw.c +++ b/ddbridge/ddbridge-hw.c @@ -684,10 +684,10 @@ static const struct ddb_device_id ddb_device_ids[] = { DDB_DEVID(0x0201, 0x0002, ddb_mod), DDB_DEVID(0x0201, 0x0004, ddb_mod_4), /* dummy entry ! */ DDB_DEVID(0x0203, 0x0001, ddb_mod), + DDB_DEVID(0x0210, 0x0000, ddb_mod_fsm_4), /* dummy entry ! */ 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(0x0210, 0x0004, ddb_mod_fsm_4), /* dummy entry ! */ DDB_DEVID(0x0220, 0x0001, ddb_sdr), /* testing on OctopusNet Pro */ DDB_DEVID(0x0320, 0xffff, ddb_octopro_hdin), diff --git a/ddbridge/ddbridge-main.c b/ddbridge/ddbridge-main.c index 5ef3858..245a5d5 100644 --- a/ddbridge/ddbridge-main.c +++ b/ddbridge/ddbridge-main.c @@ -287,10 +287,29 @@ static int __devinit ddb_probe(struct pci_dev *pdev, && dev->link[0].info->version <= 1) { if (ddbreadl(dev, 0x1c) == 4) dev->link[0].info = - get_ddb_info(0xdd01, 0x0201, - 0xdd01, 0x0004); + get_ddb_info(0xdd01, 0x0201, 0xdd01, 0x0004); + } + if (dev->link[0].info->type == DDB_MOD + && dev->link[0].info->version == 2) { + u32 lic = ddbreadl(dev, 0x1c) & 7; + + switch (lic) { + case 0: + dev->link[0].info = + get_ddb_info(0xdd01, 0x0210, 0xdd01, 0x0000); + break; + case 1: + dev->link[0].info = + get_ddb_info(0xdd01, 0x0210, 0xdd01, 0x0003); + break; + case 3: + dev->link[0].info = + get_ddb_info(0xdd01, 0x0210, 0xdd01, 0x0002); + break; + default: + break; + } } - stat = ddb_irq_init(dev); if (stat < 0) goto fail0; diff --git a/ddbridge/ddbridge-modulator.c b/ddbridge/ddbridge-modulator.c index 291d5f2..0fc3dae 100644 --- a/ddbridge/ddbridge-modulator.c +++ b/ddbridge/ddbridge-modulator.c @@ -468,7 +468,7 @@ static int mod_setup_max2871(struct ddb *dev, u32 *reg) return status; } -int ddb_mod_fsm_setup(struct ddb *dev, u32 MaxUsedChannels) +static int mod_fsm_setup(struct ddb *dev, u32 MaxUsedChannels) { int status = 0; u32 Capacity; @@ -500,7 +500,6 @@ int ddb_mod_fsm_setup(struct ddb *dev, u32 MaxUsedChannels) if (MaxUsedChannels == 0) MaxUsedChannels = (Capacity & FSM_CAPACITY_CUR) >> 16; - dev_info(dev->dev, "max used chan = %u\n", MaxUsedChannels); if (MaxUsedChannels <= 1) ddbwritel(dev, FSM_GAIN_N1, FSM_GAIN); else if (MaxUsedChannels <= 2) @@ -517,9 +516,6 @@ int ddb_mod_fsm_setup(struct ddb *dev, u32 MaxUsedChannels) ddbwritel(dev, FSM_GAIN_N96, FSM_GAIN); ddbwritel(dev, FSM_CONTROL_ENABLE, FSM_CONTROL); - if (MaxUsedChannels == 4) - dev->link[0].info = get_ddb_info(0xdd01, 0x0210, - 0xdd01, 0x0004); return status; } @@ -1629,17 +1625,15 @@ out: static int mod_init_2(struct ddb *dev, u32 Frequency) { - int i, streams = dev->link[0].info->port_num; + int i, status, streams = dev->link[0].info->port_num; dev->mod_base.frequency = Frequency; -#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]; diff --git a/ddbridge/ddbridge.h b/ddbridge/ddbridge.h index c92d3b5..561cb83 100644 --- a/ddbridge/ddbridge.h +++ b/ddbridge/ddbridge.h @@ -545,7 +545,6 @@ 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);