baylibre-acme: Set update_interval when modifing samplerate.
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 <bgolaszewski@baylibre.com>
This commit is contained in:
parent
1fe04eb8d6
commit
7c91c22a31
|
@ -250,6 +250,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)
|
||||
|
|
|
@ -295,6 +295,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)
|
||||
{
|
||||
|
|
|
@ -84,6 +84,9 @@ SR_PRIV gboolean bl_acme_register_probe(struct sr_dev_inst *sdi, int type,
|
|||
SR_PRIV int bl_acme_get_probe_type(const struct sr_channel_group *cg);
|
||||
SR_PRIV int bl_acme_probe_has_pws(const struct sr_channel_group *cg);
|
||||
|
||||
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,
|
||||
|
|
Loading…
Reference in New Issue