driver/sensor: lis2ds12: make use of STdC definitions

Port the lis2ds12 sensor driver on top of the lis2ds12_StdC
HAL interface (in modules/hal/st/sensor/stmemsc/).

Signed-off-by: Armando Visconti <armando.visconti@st.com>
This commit is contained in:
Armando Visconti 2021-07-27 16:30:11 +02:00 committed by Maureen Helm
commit 1c0acad364
6 changed files with 125 additions and 302 deletions

View file

@ -34,11 +34,11 @@ static struct spi_config lis2ds12_spi_conf = {
.cs = NULL,
};
static int lis2ds12_raw_read(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t *value, uint8_t len)
static int lis2ds12_spi_read(struct lis2ds12_data *data, uint8_t reg,
uint8_t *value, uint16_t len)
{
struct spi_config *spi_cfg = &lis2ds12_spi_conf;
uint8_t buffer_tx[2] = { reg_addr | LIS2DS12_SPI_READ, 0 };
uint8_t buffer_tx[2] = { reg | LIS2DS12_SPI_READ, 0 };
const struct spi_buf tx_buf = {
.buf = buffer_tx,
.len = 2,
@ -63,10 +63,6 @@ static int lis2ds12_raw_read(struct lis2ds12_data *data, uint8_t reg_addr,
};
if (len > 64) {
return -EIO;
}
if (spi_transceive(data->comm_master, spi_cfg, &tx, &rx)) {
return -EIO;
}
@ -74,11 +70,11 @@ static int lis2ds12_raw_read(struct lis2ds12_data *data, uint8_t reg_addr,
return 0;
}
static int lis2ds12_raw_write(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t *value, uint8_t len)
static int lis2ds12_spi_write(struct lis2ds12_data *data, uint8_t reg,
uint8_t *value, uint16_t len)
{
struct spi_config *spi_cfg = &lis2ds12_spi_conf;
uint8_t buffer_tx[1] = { reg_addr & ~LIS2DS12_SPI_READ };
uint8_t buffer_tx[1] = { reg & ~LIS2DS12_SPI_READ };
const struct spi_buf tx_buf[2] = {
{
.buf = buffer_tx,
@ -94,11 +90,6 @@ static int lis2ds12_raw_write(struct lis2ds12_data *data, uint8_t reg_addr,
.count = 2
};
if (len > 64) {
return -EIO;
}
if (spi_write(data->comm_master, spi_cfg, &tx)) {
return -EIO;
}
@ -106,56 +97,17 @@ static int lis2ds12_raw_write(struct lis2ds12_data *data, uint8_t reg_addr,
return 0;
}
static int lis2ds12_spi_read_data(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t *value, uint8_t len)
{
return lis2ds12_raw_read(data, reg_addr, value, len);
}
static int lis2ds12_spi_write_data(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t *value, uint8_t len)
{
return lis2ds12_raw_write(data, reg_addr, value, len);
}
static int lis2ds12_spi_read_reg(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t *value)
{
return lis2ds12_raw_read(data, reg_addr, value, 1);
}
static int lis2ds12_spi_write_reg(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t value)
{
uint8_t tmp_val = value;
return lis2ds12_raw_write(data, reg_addr, &tmp_val, 1);
}
static int lis2ds12_spi_update_reg(struct lis2ds12_data *data, uint8_t reg_addr,
uint8_t mask, uint8_t value)
{
uint8_t tmp_val;
lis2ds12_raw_read(data, reg_addr, &tmp_val, 1);
tmp_val = (tmp_val & ~mask) | (value & mask);
return lis2ds12_raw_write(data, reg_addr, &tmp_val, 1);
}
static const struct lis2ds12_transfer_function lis2ds12_spi_transfer_fn = {
.read_data = lis2ds12_spi_read_data,
.write_data = lis2ds12_spi_write_data,
.read_reg = lis2ds12_spi_read_reg,
.write_reg = lis2ds12_spi_write_reg,
.update_reg = lis2ds12_spi_update_reg,
stmdev_ctx_t lis2ds12_spi_ctx = {
.read_reg = (stmdev_read_ptr)lis2ds12_spi_read,
.write_reg = (stmdev_write_ptr)lis2ds12_spi_write,
};
int lis2ds12_spi_init(const struct device *dev)
{
struct lis2ds12_data *data = dev->data;
data->hw_tf = &lis2ds12_spi_transfer_fn;
data->ctx = &lis2ds12_spi_ctx;
data->ctx->handle = data;
#if DT_INST_SPI_DEV_HAS_CS_GPIOS(0)
/* handle SPI CS thru GPIO if it is the case */