]> sigrok.org Git - libsigrok.git/commitdiff
kingst-la2016: introduce base clock independent from max samplerate
authorGerhard Sittig <redacted>
Mon, 7 Feb 2022 18:42:19 +0000 (19:42 +0100)
committerGerhard Sittig <redacted>
Tue, 22 Feb 2022 20:53:20 +0000 (21:53 +0100)
The LA1010 devices are said to use an 800MHz base clock to derive the
samplerate of up to 100MHz from. Add this information to the list of
known devices, and adjust the samplerate dividier code path.

Keep value 0 in that column for all devices where the base clock and the
maximum samplerate are identical. For awareness during maintenance. Make
the untypical devices stand out.

src/hardware/kingst-la2016/protocol.c
src/hardware/kingst-la2016/protocol.h

index 2378b37ded48115ee00c397f3e57eea059f57bf9..1207ca2544de1c9a71e77dc14d3aceccc79548fb 100644 (file)
  * TODO Verify the identification of models that were not tested before.
  */
 static const struct kingst_model models[] = {
-       {  2, 1, "LA2016", "la2016a1", SR_MHZ(200), 16, 1, },
-       {  2, 0, "LA2016", "la2016",   SR_MHZ(200), 16, 1, },
-       {  3, 1, "LA1016", "la1016a1", SR_MHZ(100), 16, 1, },
-       {  3, 0, "LA1016", "la1016",   SR_MHZ(100), 16, 1, },
-       {  4, 0, "LA1010", "la1010a0", SR_MHZ(100), 16, 0, },
-       {  5, 0, "LA5016", "la5016a1", SR_MHZ(500), 16, 2, },
-       {  6, 0, "LA5032", "la5032a0", SR_MHZ(500), 32, 4, },
-       {  7, 0, "LA1010", "la1010a1", SR_MHZ(100), 16, 0, },
-       {  8, 0, "LA2016", "la2016a1", SR_MHZ(200), 16, 1, },
-       {  9, 0, "LA1016", "la1016a1", SR_MHZ(100), 16, 1, },
-       { 10, 0, "LA1010", "la1010a2", SR_MHZ(100), 16, 0, },
-       { 65, 0, "LA5016", "la5016a1", SR_MHZ(500), 16, 2, },
+       {  2, 1, "LA2016", "la2016a1", SR_MHZ(200), 16, 1, 0, },
+       {  2, 0, "LA2016", "la2016",   SR_MHZ(200), 16, 1, 0, },
+       {  3, 1, "LA1016", "la1016a1", SR_MHZ(100), 16, 1, 0, },
+       {  3, 0, "LA1016", "la1016",   SR_MHZ(100), 16, 1, 0, },
+       {  4, 0, "LA1010", "la1010a0", SR_MHZ(100), 16, 0, SR_MHZ(800), },
+       {  5, 0, "LA5016", "la5016a1", SR_MHZ(500), 16, 2, 0, },
+       {  6, 0, "LA5032", "la5032a0", SR_MHZ(500), 32, 4, 0, },
+       {  7, 0, "LA1010", "la1010a1", SR_MHZ(100), 16, 0, SR_MHZ(800), },
+       {  8, 0, "LA2016", "la2016a1", SR_MHZ(200), 16, 1, 0, },
+       {  9, 0, "LA1016", "la1016a1", SR_MHZ(100), 16, 1, 0, },
+       { 10, 0, "LA1010", "la1010a2", SR_MHZ(100), 16, 0, SR_MHZ(800), },
+       { 65, 0, "LA5016", "la5016a1", SR_MHZ(500), 16, 2, 0, },
 };
 
 /* USB vendor class control requests, executed by the Cypress FX2 MCU. */
@@ -716,6 +716,7 @@ static int set_trigger_config(const struct sr_dev_inst *sdi)
 static int set_sample_config(const struct sr_dev_inst *sdi)
 {
        struct dev_context *devc;
+       uint64_t baseclock;
        uint64_t min_samplerate, eff_samplerate;
        uint64_t stream_bandwidth;
        uint16_t divider_u16;
@@ -733,15 +734,18 @@ static int set_sample_config(const struct sr_dev_inst *sdi)
                        devc->samplerate);
                return SR_ERR_ARG;
        }
-       min_samplerate = devc->model->samplerate;
+       baseclock = devc->model->baseclock;
+       if (!baseclock)
+               baseclock = devc->model->samplerate;
+       min_samplerate = baseclock;
        min_samplerate /= 65536;
        if (devc->samplerate < min_samplerate) {
                sr_err("Too low a sample rate: %" PRIu64 ".",
                        devc->samplerate);
                return SR_ERR_ARG;
        }
-       divider_u16 = devc->model->samplerate / devc->samplerate;
-       eff_samplerate = devc->model->samplerate / divider_u16;
+       divider_u16 = baseclock / devc->samplerate;
+       eff_samplerate = baseclock / divider_u16;
 
        ret = sr_sw_limits_get_remain(&devc->sw_limits,
                &limit_samples, NULL, NULL, NULL);
index 3fdf827932cc62e5744ff7c7551f97a65e57daa4..5d465d942a094948c8fb301a09ddac369bbc16b8 100644 (file)
@@ -113,6 +113,7 @@ struct kingst_model {
        uint64_t samplerate;    /* Max samplerate in Hz. */
        size_t channel_count;   /* Max channel count (16, 32). */
        uint64_t memory_bits;   /* RAM capacity in Gbit (1, 2, 4). */
+       uint64_t baseclock;     /* Base clock to derive samplerate from. */
 };
 
 struct dev_context {