drivers/adc: Switch ti_adc108s102 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-31 09:48:30 +01:00 committed by Carles Cufí
commit d620c16a0d
4 changed files with 31 additions and 71 deletions

View file

@ -19,33 +19,12 @@ config PWM
config SPI config SPI
def_bool y def_bool y
config ADC
def_bool y
config SHARED_IRQ config SHARED_IRQ
def_bool y def_bool y
config PCI_ENUMERATION config PCI_ENUMERATION
def_bool y def_bool y
if ADC
config ADC_TI_ADC108S102
def_bool y
if ADC_TI_ADC108S102
config ADC_TI_ADC108S102_SPI_PORT_NAME
default "SPI_0"
config ADC_TI_ADC108S102_SPI_CONFIGURATION
default 0x81
config ADC_TI_ADC108S102_SPI_MAX_FREQ
default 0x20000000
endif # ADC_TI_AC108S102
endif # ADC
if GPIO && I2C if GPIO && I2C
config GPIO_PCAL9535A config GPIO_PCAL9535A
@ -131,7 +110,4 @@ config SPI_INIT_PRIORITY
config PINMUX_INIT_PRIORITY config PINMUX_INIT_PRIORITY
default 80 if PINMUX default 80 if PINMUX
config ADC_INIT_PRIORITY
default 95
endif # BOARD_GALILEO endif # BOARD_GALILEO

View file

@ -9,7 +9,6 @@
menuconfig ADC_TI_ADC108S102 menuconfig ADC_TI_ADC108S102
bool "TI adc108s102 chip driver" bool "TI adc108s102 chip driver"
select SPI select SPI
select SPI_LEGACY_API
select ADC_0 select ADC_0
default n default n
help help
@ -23,17 +22,11 @@ config ADC_TI_ADC108S102_SPI_PORT_NAME
help help
Master SPI port name through which adc108s102 chip is accessed. Master SPI port name through which adc108s102 chip is accessed.
config ADC_TI_ADC108S102_SPI_CONFIGURATION config ADC_TI_ADC108S102_SPI_FREQ
hex "Master SPI port configuration" int "Master SPI port max frequency"
default 0x0 default 0
help help
Master SPI port configuration flags used to access adc108s102 chip. Master SPI port frequency used to access adc108s102 chip.
config ADC_TI_ADC108S102_SPI_MAX_FREQ
hex "Master SPI port max frequency"
default 0x0
help
Master SPI port maximum frequency used to access adc108s102 chip.
config ADC_TI_ADC108S102_SPI_SLAVE config ADC_TI_ADC108S102_SPI_SLAVE
int "SPI slave slot" int "SPI slave slot"

View file

@ -20,14 +20,26 @@
static inline int _ti_adc108s102_sampling(struct device *dev) static inline int _ti_adc108s102_sampling(struct device *dev)
{ {
struct ti_adc108s102_data *adc = dev->driver_data; struct ti_adc108s102_data *adc = dev->driver_data;
const struct spi_buf tx_buf = {
.buf = adc->cmd_buffer,
.len = ADC108S102_CMD_BUFFER_SIZE
};
const struct spi_buf_set tx = {
.buffers = &tx_buf,
.count = 1
};
const struct spi_buf rx_buf = {
.buf = adc->sampling_buffer,
.len = ADC108S102_SAMPLING_BUFFER_SIZE
};
const struct spi_buf_set rx = {
.buffers = &rx_buf,
.count = 1
};
SYS_LOG_DBG("Sampling!"); SYS_LOG_DBG("Sampling!");
/* SPI deals with u8_t buffers so multiplying by 2 the length */ return spi_transceive(adc->spi, &adc->spi_cfg, &tx, &rx);
return spi_transceive(adc->spi, adc->cmd_buffer,
adc->cmd_buf_len * 2,
adc->sampling_buffer,
adc->sampling_buf_len * 2);
} }
static inline void _ti_adc108s102_handle_result(struct device *dev) static inline void _ti_adc108s102_handle_result(struct device *dev)
@ -143,23 +155,10 @@ static inline int _verify_entries(struct adc_seq_table *seq_table)
static int ti_adc108s102_read(struct device *dev, static int ti_adc108s102_read(struct device *dev,
struct adc_seq_table *seq_table) struct adc_seq_table *seq_table)
{ {
const struct ti_adc108s102_config *config = dev->config->config_info;
struct ti_adc108s102_data *adc = dev->driver_data; struct ti_adc108s102_data *adc = dev->driver_data;
struct spi_config spi_conf;
int ret = 0; int ret = 0;
s32_t delay; s32_t delay;
spi_conf.config = config->spi_config_flags;
spi_conf.max_sys_freq = config->spi_freq;
if (spi_configure(adc->spi, &spi_conf)) {
return -EIO;
}
if (spi_slave_select(adc->spi, config->spi_slave)) {
return -EIO;
}
/* Resetting all internal channel data */ /* Resetting all internal channel data */
memset(adc->chans, 0, ADC108S102_CHANNELS_SIZE); memset(adc->chans, 0, ADC108S102_CHANNELS_SIZE);
@ -201,14 +200,19 @@ static const struct adc_driver_api ti_adc108s102_api = {
static int ti_adc108s102_init(struct device *dev) static int ti_adc108s102_init(struct device *dev)
{ {
const struct ti_adc108s102_config *config = dev->config->config_info;
struct ti_adc108s102_data *adc = dev->driver_data; struct ti_adc108s102_data *adc = dev->driver_data;
adc->spi = device_get_binding((char *)config->spi_port); adc->spi = device_get_binding(
CONFIG_ADC_TI_ADC108S102_SPI_PORT_NAME);
if (!adc->spi) { if (!adc->spi) {
return -EPERM; return -EINVAL;
} }
adc->spi_cfg.operation = SPI_WORD_SET(16);
adc->spi_cfg.frequency = CONFIG_ADC_TI_ADC108S102_SPI_FREQ;
adc->spi_cfg.slave = CONFIG_ADC_TI_ADC108S102_SPI_SLAVE;
SYS_LOG_DBG("ADC108s102 initialized"); SYS_LOG_DBG("ADC108s102 initialized");
dev->driver_api = &ti_adc108s102_api; dev->driver_api = &ti_adc108s102_api;
@ -220,16 +224,9 @@ static int ti_adc108s102_init(struct device *dev)
static struct ti_adc108s102_data adc108s102_data; static struct ti_adc108s102_data adc108s102_data;
static const struct ti_adc108s102_config adc108s102_config = {
.spi_port = CONFIG_ADC_TI_ADC108S102_SPI_PORT_NAME,
.spi_config_flags = CONFIG_ADC_TI_ADC108S102_SPI_CONFIGURATION,
.spi_freq = CONFIG_ADC_TI_ADC108S102_SPI_MAX_FREQ,
.spi_slave = CONFIG_ADC_TI_ADC108S102_SPI_SLAVE,
};
DEVICE_INIT(adc108s102, CONFIG_ADC_0_NAME, DEVICE_INIT(adc108s102, CONFIG_ADC_0_NAME,
ti_adc108s102_init, ti_adc108s102_init,
&adc108s102_data, &adc108s102_config, &adc108s102_data, NULL,
POST_KERNEL, CONFIG_ADC_INIT_PRIORITY); POST_KERNEL, CONFIG_ADC_INIT_PRIORITY);
#endif /* CONFIG_ADC_TI_ADC108S102 */ #endif /* CONFIG_ADC_TI_ADC108S102 */

View file

@ -32,13 +32,6 @@ extern "C" {
#define ADC108S102_RESULT(_res_) \ #define ADC108S102_RESULT(_res_) \
(sys_be16_to_cpu(_res_) & ADC108S102_RESULT_MASK) (sys_be16_to_cpu(_res_) & ADC108S102_RESULT_MASK)
struct ti_adc108s102_config {
const char *spi_port;
u32_t spi_config_flags;
u32_t spi_freq;
u32_t spi_slave;
};
struct ti_adc108s102_chan { struct ti_adc108s102_chan {
u32_t buf_idx; u32_t buf_idx;
}; };
@ -47,6 +40,7 @@ struct ti_adc108s102_data {
u16_t cmd_buffer[ADC108S102_CMD_BUFFER_SIZE]; u16_t cmd_buffer[ADC108S102_CMD_BUFFER_SIZE];
u16_t sampling_buffer[ADC108S102_SAMPLING_BUFFER_SIZE]; u16_t sampling_buffer[ADC108S102_SAMPLING_BUFFER_SIZE];
struct device *spi; struct device *spi;
struct spi_config spi_cfg;
struct ti_adc108s102_chan chans[ADC108S102_CHANNELS]; struct ti_adc108s102_chan chans[ADC108S102_CHANNELS];
struct adc_seq_table *seq_table; struct adc_seq_table *seq_table;