From 8399f68a3ff44e72b2267d43aaba677b0dbd48b4 Mon Sep 17 00:00:00 2001 From: Jan Losinski Date: Thu, 12 Jan 2017 04:45:08 +0100 Subject: [PATCH] fx2lafw: Use wide_sampling only if necessary. This changes the fx2lafw code to only enable the wide_sampling (16bit) method, if at least one of the higher eight channels is enabled. This has the benefit, that we can use higher samplerates on 16bit LA devices if we use only the first eight channels. The wide sampling is also enabled if we have one or more analog channels. Signed-off-by: Jan Losinski --- src/hardware/fx2lafw/api.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hardware/fx2lafw/api.c b/src/hardware/fx2lafw/api.c index 370b1c0e..4e4c3cfa 100644 --- a/src/hardware/fx2lafw/api.c +++ b/src/hardware/fx2lafw/api.c @@ -383,8 +383,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc = fx2lafw_dev_new(); devc->profile = prof; - if ((prof->dev_caps & DEV_CAPS_16BIT) || (prof->dev_caps & DEV_CAPS_AX_ANALOG)) - devc->sample_wide = TRUE; sdi->priv = devc; devices = g_slist_append(devices, sdi); @@ -981,6 +979,7 @@ static int configure_channels(const struct sr_dev_inst *sdi) const GSList *l; int p; struct sr_channel *ch; + uint32_t channel_mask = 0, num_analog = 0; devc = sdi->priv; @@ -991,12 +990,18 @@ static int configure_channels(const struct sr_dev_inst *sdi) for (l = sdi->channels, p = 0; l; l = l->next, p++) { ch = l->data; if ((p <= NUM_CHANNELS) && (ch->type == SR_CHANNEL_ANALOG)) { + num_analog++; devc->ch_enabled[p] = ch->enabled; devc->enabled_analog_channels = g_slist_append(devc->enabled_analog_channels, ch); + } else { + channel_mask |= ch->enabled << p; } } + /* Use no wide sampling if we have only the first 8 channels set. */ + devc->sample_wide = (channel_mask > 0xff || num_analog > 0); + return SR_OK; }