drivers/sensors: Switch adxl362 driver to new SPI API

Replacing legacy API calls by news ones.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2018-01-30 20:51:59 +01:00 committed by Carles Cufí
commit 94d7c9f23e
3 changed files with 47 additions and 63 deletions

View file

@ -8,7 +8,6 @@
menuconfig ADXL362
bool "ADXL362 sensor"
depends on SPI
select SPI_LEGACY_API
default n
help
Enable driver for ADXL362 Three-Axis Digital Accelerometers.

View file

@ -20,68 +20,61 @@
static struct adxl362_data adxl362_data;
static int adxl362_set_reg(struct device *dev, u16_t register_value,
u8_t register_address, u8_t count)
static int adxl362_reg_access(struct adxl362_data *ctx, u8_t cmd,
u8_t reg_addr, void *data, size_t length)
{
struct adxl362_data *adxl362_data = dev->driver_data;
u8_t buffer[4];
int ret;
u8_t access[2] = { cmd, reg_addr };
const struct spi_buf buf[2] = {
{
.buf = access,
.len = 2
},
{
.buf = data,
.len = length
}
};
struct spi_buf_set tx = {
.buffers = buf,
};
buffer[0] = ADXL362_WRITE_REG;
buffer[1] = register_address;
buffer[2] = (register_value & 0x00FF);
buffer[3] = (register_value >> 8);
if (cmd == ADXL362_READ_REG) {
const struct spi_buf_set rx = {
.buffers = buf,
.count = 2
};
ret = spi_slave_select(adxl362_data->spi,
adxl362_data->spi_slave);
if (ret) {
SYS_LOG_DBG("spi_slave_select FAIL %d\n", ret);
return ret;
tx.count = 1;
return spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx);
}
ret = spi_transceive(adxl362_data->spi, buffer, count + 2,
buffer, count + 2);
if (ret) {
SYS_LOG_DBG("spi_transceive FAIL %d\n", ret);
return ret;
}
tx.count = 2;
return 0;
return spi_write(ctx->spi, &ctx->spi_cfg, &tx);
}
static int adxl362_get_reg(struct device *dev, u8_t *read_buf,
u8_t register_address, u8_t count)
static inline int adxl362_set_reg(struct device *dev, u16_t register_value,
u8_t register_address, u8_t count)
{
struct adxl362_data *adxl362_data = dev->driver_data;
u8_t buffer[4];
u8_t index;
int ret;
buffer[0] = ADXL362_READ_REG;
buffer[1] = register_address;
for (index = 0; index < count; index++) {
buffer[index + 2] = read_buf[index];
}
return adxl362_reg_access(adxl362_data,
ADXL362_WRITE_REG,
register_address,
&register_value,
count);
}
ret = spi_slave_select(adxl362_data->spi,
adxl362_data->spi_slave);
if (ret) {
SYS_LOG_DBG("spi_slave_select FAIL %d\n", ret);
return ret;
}
static inline int adxl362_get_reg(struct device *dev, u8_t *read_buf,
u8_t register_address, u8_t count)
{
struct adxl362_data *adxl362_data = dev->driver_data;
ret = spi_transceive(adxl362_data->spi, buffer, count + 2,
buffer, count + 2);
if (ret) {
SYS_LOG_DBG("spi_transceive FAIL %d\n", ret);
return ret;
}
for (index = 0; index < count; index++) {
read_buf[index] = buffer[index + 2];
}
return 0;
return adxl362_reg_access(adxl362_data,
ADXL362_READ_REG,
register_address,
read_buf, count);
}
static int adxl362_software_reset(struct device *dev)
@ -576,7 +569,6 @@ static int adxl362_chip_init(struct device *dev)
static int adxl362_init(struct device *dev)
{
struct adxl362_data *data = dev->driver_data;
struct spi_config spi_config;
u8_t value;
int ret;
@ -587,17 +579,10 @@ static int adxl362_init(struct device *dev)
return -EINVAL;
}
spi_config.config = SPI_WORD(8) | SPI_TRANSFER_MSB | SPI_MODE_CPOL |
SPI_MODE_CPHA;
spi_config.max_sys_freq = 4;
ret = spi_configure(data->spi, &spi_config);
if (ret) {
SYS_LOG_DBG("SPI configuration error %s %d\n",
CONFIG_ADXL362_SPI_DEV_NAME, ret);
return ret;
}
data->spi_slave = CONFIG_ADXL362_SPI_DEV_SLAVE;
data->spi_cfg.operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
SPI_MODE_CPOL | SPI_MODE_CPHA;
data->spi_cfg.frequency = 8000000;
data->spi_cfg.slave = CONFIG_ADXL362_SPI_DEV_SLAVE;
adxl362_software_reset(dev);

View file

@ -156,11 +156,11 @@
struct adxl362_data {
struct device *spi;
struct spi_config spi_cfg;
s32_t acc_x;
s32_t acc_y;
s32_t acc_z;
s32_t temp;
u8_t spi_slave;
u8_t selected_range;
};