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:
parent
dabaaa1e5d
commit
1c0acad364
6 changed files with 125 additions and 302 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue