Both ina2xx and tmp401 linux drivers used by baylibre-acme expose
the standard hwmon update_interval attribute, which affects the internal
update interval of the chip.

When setting samplerate for data acquisition try to modify this attribute
accordingly.

Signed-off-by: Bartosz Golaszewski <bgolaszew...@baylibre.com>
---
 src/hardware/baylibre-acme/api.c      |  1 +
 src/hardware/baylibre-acme/protocol.c | 37 +++++++++++++++++++++++++++++++++++
 src/hardware/baylibre-acme/protocol.h |  3 +++
 3 files changed, 41 insertions(+)

diff --git a/src/hardware/baylibre-acme/api.c b/src/hardware/baylibre-acme/api.c
index def373d..92e1d49 100644
--- a/src/hardware/baylibre-acme/api.c
+++ b/src/hardware/baylibre-acme/api.c
@@ -241,6 +241,7 @@ static int config_set(uint32_t key, GVariant *data,
                        break;
                }
                devc->samplerate = samplerate;
+               bl_acme_maybe_set_update_interval(sdi, samplerate);
                break;
        case SR_CONF_PROBE_FACTOR:
                if (!cg)
diff --git a/src/hardware/baylibre-acme/protocol.c 
b/src/hardware/baylibre-acme/protocol.c
index 656e89f..814f11d 100644
--- a/src/hardware/baylibre-acme/protocol.c
+++ b/src/hardware/baylibre-acme/protocol.c
@@ -281,6 +281,43 @@ static int get_shunt_path(const struct sr_channel_group 
*cg, GString *path)
        return ret;
 }
 
+/*
+ * Try setting the update_interval sysfs attribute for each probe according
+ * to samplerate.
+ */
+SR_PRIV void bl_acme_maybe_set_update_interval(const struct sr_dev_inst *sdi,
+                                              uint64_t samplerate)
+{
+       struct sr_channel_group *cg;
+       struct channel_group_priv *cgp;
+       GString *hwmon;
+       GSList *l;
+       FILE *fd;
+
+       for (l = sdi->channel_groups; l != NULL; l = l->next) {
+               cg = l->data;
+               cgp = cg->priv;
+
+               hwmon = g_string_sized_new(64);
+               g_string_append_printf(hwmon,
+                               "/sys/class/hwmon/hwmon%d/update_interval",
+                               cgp->hwmon_num);
+
+               if (g_file_test(hwmon->str, G_FILE_TEST_EXISTS)) {
+                       fd = g_fopen(hwmon->str, "w");
+                       if (!fd) {
+                               g_string_free(hwmon, TRUE);
+                               continue;
+                       }
+
+                       g_fprintf(fd, "%" PRIu64 "\n", 1000 / samplerate);
+                       fclose(fd);
+               }
+
+               g_string_free(hwmon, TRUE);
+       }
+}
+
 SR_PRIV int bl_acme_get_shunt(const struct sr_channel_group *cg,
                              uint64_t *shunt)
 {
diff --git a/src/hardware/baylibre-acme/protocol.h 
b/src/hardware/baylibre-acme/protocol.h
index 3972aa2..5f21965 100644
--- a/src/hardware/baylibre-acme/protocol.h
+++ b/src/hardware/baylibre-acme/protocol.h
@@ -81,6 +81,9 @@ SR_PRIV gboolean bl_acme_detect_probe(unsigned int addr,
 SR_PRIV gboolean bl_acme_register_probe(struct sr_dev_inst *sdi, int type,
                                        unsigned int addr, int prb_num);
 
+SR_PRIV void bl_acme_maybe_set_update_interval(const struct sr_dev_inst *sdi,
+                                              uint64_t samplerate);
+
 SR_PRIV int bl_acme_get_shunt(const struct sr_channel_group *cg,
                              uint64_t *shunt);
 SR_PRIV int bl_acme_set_shunt(const struct sr_channel_group *cg,
-- 
2.1.4


------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel

Reply via email to