X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fopenbench-logic-sniffer%2Fols.c;h=35db8402f7b64a99eebb24304c9ede8fe1f3437a;hb=a562c3a2e5e54dbb7e0553422ac0e0c845b180ad;hp=7308d8b2063ae4701e0da19c197b98d77e541cc1;hpb=baf1d71477ea5c1dea449bc9ce72b39d02751934;p=libsigrok.git diff --git a/hardware/openbench-logic-sniffer/ols.c b/hardware/openbench-logic-sniffer/ols.c index 7308d8b2..35db8402 100644 --- a/hardware/openbench-logic-sniffer/ols.c +++ b/hardware/openbench-logic-sniffer/ols.c @@ -554,8 +554,6 @@ static int set_configuration_samplerate(struct sr_device_instance *sdi, } else if (samplerate < samplerates.low || samplerate > samplerates.high) return SR_ERR_SAMPLERATE; - ols->cur_samplerate = samplerate; - ols->period_ps = 1000000000000 / samplerate; if (samplerate > CLOCK_RATE) { ols->flag_reg |= FLAG_DEMUX; ols->cur_samplerate_divider = (CLOCK_RATE * 2 / samplerate) - 1; @@ -564,6 +562,17 @@ static int set_configuration_samplerate(struct sr_device_instance *sdi, ols->cur_samplerate_divider = (CLOCK_RATE / samplerate) - 1; } + /* Calculate actual samplerate used and complain if it is different + * from the requested. + */ + ols->cur_samplerate = CLOCK_RATE / (ols->cur_samplerate_divider + 1); + if(ols->flag_reg & FLAG_DEMUX) + ols->cur_samplerate *= 2; + ols->period_ps = 1000000000000 / ols->cur_samplerate; + if(ols->cur_samplerate != samplerate) + sr_warn("ols: can't match samplerate %" PRIu64 ", using %" PRIu64, + samplerate, ols->cur_samplerate); + return SR_OK; }