Skip to content

Commit d7fa1ed

Browse files
committed
sensor/lsm6dso16is: add upload_fw API support
Add support to upload_fw API in order to be able to upload a ISPU configuration. Signed-off-by: Armando Visconti <[email protected]>
1 parent 4507e3a commit d7fa1ed

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

drivers/sensor/st/lsm6dso16is/Kconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ menuconfig LSM6DSO16IS
1818

1919
if LSM6DSO16IS
2020

21+
config LSM6DSO16IS_ISPU_ENABLE
22+
bool "ISPU Enable"
23+
select USE_ST_MEMS_ISPU
24+
2125
choice LSM6DSO16IS_TRIGGER_MODE
2226
prompt "Trigger mode"
2327
help

drivers/sensor/st/lsm6dso16is/lsm6dso16is.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,13 +710,39 @@ static int lsm6dso16is_channel_get(const struct device *dev,
710710
return 0;
711711
}
712712

713+
static int lsm6dso16is_upload_ispu(const struct device *dev,
714+
const void *fw_buf,
715+
size_t fw_len)
716+
{
717+
const struct lsm6dso16is_config *cfg = dev->config;
718+
stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx;
719+
const struct mems_conf_op *bufp = (const struct mems_conf_op *)fw_buf;
720+
int i;
721+
722+
/* Load ISPU configuration */
723+
for ( i = 0; i < fw_len; i++ ) {
724+
switch(bufp[i].type) {
725+
case MEMS_CONF_OP_TYPE_DELAY:
726+
k_msleep(bufp[i].data);
727+
break;
728+
729+
case MEMS_CONF_OP_TYPE_WRITE:
730+
ctx->write_reg(ctx->handle, bufp[i].address, (uint8_t *)&bufp[i].data, 1);
731+
break;
732+
}
733+
}
734+
735+
return 0;
736+
}
737+
713738
static DEVICE_API(sensor, lsm6dso16is_driver_api) = {
714739
.attr_set = lsm6dso16is_attr_set,
715740
#if CONFIG_LSM6DSO16IS_TRIGGER
716741
.trigger_set = lsm6dso16is_trigger_set,
717742
#endif
718743
.sample_fetch = lsm6dso16is_sample_fetch,
719744
.channel_get = lsm6dso16is_channel_get,
745+
.upload_fw = lsm6dso16is_upload_ispu,
720746
};
721747

722748
static int lsm6dso16is_init_chip(const struct device *dev)

drivers/sensor/st/lsm6dso16is/lsm6dso16is.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <zephyr/sys/util.h>
1818
#include <stmemsc.h>
1919
#include "lsm6dso16is_reg.h"
20+
#include "mems_conf_shared_types.h"
2021

2122
#if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi)
2223
#include <zephyr/drivers/spi.h>

0 commit comments

Comments
 (0)