drivers: adc: enable pinctrl for kinetis adc_16 mcux driver
Enable pinctrl for kinetis adc16 mcux driver Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
This commit is contained in:
parent
7260cb7dc1
commit
180a9d221e
3 changed files with 61 additions and 61 deletions
|
@ -12,6 +12,7 @@ config ADC_MCUX_ADC12
|
|||
config ADC_MCUX_ADC16
|
||||
bool "MCUX ADC16 driver"
|
||||
depends on HAS_MCUX_ADC16
|
||||
select PINCTRL
|
||||
help
|
||||
Enable the MCUX ADC16 driver.
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include <errno.h>
|
||||
#include <drivers/adc.h>
|
||||
#include <drivers/pinctrl.h>
|
||||
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
||||
#include <drivers/dma.h>
|
||||
#include <fsl_sim.h>
|
||||
|
@ -42,6 +43,7 @@ struct mcux_adc16_config {
|
|||
bool channel_mux_b;
|
||||
bool high_speed; /* ADC enable high speed mode*/
|
||||
bool continuous_convert; /* ADC enable continuous convert*/
|
||||
const struct pinctrl_dev_config *pincfg;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
||||
|
@ -322,6 +324,7 @@ static int mcux_adc16_init(const struct device *dev)
|
|||
struct mcux_adc16_data *data = dev->data;
|
||||
ADC_Type *base = config->base;
|
||||
adc16_config_t adc_config;
|
||||
int err;
|
||||
|
||||
LOG_DBG("init adc");
|
||||
ADC16_GetDefaultConfig(&adc_config);
|
||||
|
@ -366,6 +369,11 @@ static int mcux_adc16_init(const struct device *dev)
|
|||
ADC16_EnableHardwareTrigger(base, false);
|
||||
}
|
||||
|
||||
err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT);
|
||||
if (err != 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
data->dev = dev;
|
||||
|
||||
/* dma related init */
|
||||
|
@ -427,66 +435,23 @@ static const struct adc_driver_api mcux_adc16_driver_api = {
|
|||
};
|
||||
|
||||
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
||||
#define ACD16_MCUX_INIT(n) \
|
||||
static const struct mcux_adc16_config mcux_adc16_config_##n = { \
|
||||
.base = (ADC_Type *)DT_INST_REG_ADDR(n), \
|
||||
.channel_mux_b = DT_INST_PROP(n, channel_mux_b), \
|
||||
.clk_source = DT_INST_PROP_OR(n, clk_source, 0), \
|
||||
.long_sample = DT_INST_PROP_OR(n, long_sample, 0), \
|
||||
.high_speed = DT_INST_PROP(n, high_speed), \
|
||||
.periodic_trigger = DT_INST_PROP(n, periodic_trigger), \
|
||||
.continuous_convert = \
|
||||
DT_INST_PROP(n, continuous_convert), \
|
||||
.hw_trigger_src = \
|
||||
DT_INST_PROP_OR(n, hw_trigger_src, 0), \
|
||||
.dma_slot = DT_INST_DMAS_CELL_BY_IDX(n, 0, source), \
|
||||
.trg_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, offset), \
|
||||
.trg_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, bits), \
|
||||
.alt_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, offset), \
|
||||
.alt_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, bits), \
|
||||
}; \
|
||||
\
|
||||
static struct mcux_adc16_data mcux_adc16_data_##n = { \
|
||||
ADC_CONTEXT_INIT_TIMER(mcux_adc16_data_##n, ctx), \
|
||||
ADC_CONTEXT_INIT_LOCK(mcux_adc16_data_##n, ctx), \
|
||||
ADC_CONTEXT_INIT_SYNC(mcux_adc16_data_##n, ctx), \
|
||||
.dev_dma = DEVICE_DT_GET(DT_INST_DMAS_CTLR_BY_NAME(n, adc##n)), \
|
||||
}; \
|
||||
\
|
||||
DEVICE_DT_INST_DEFINE(n, &mcux_adc16_init, \
|
||||
NULL, \
|
||||
&mcux_adc16_data_##n, \
|
||||
&mcux_adc16_config_##n, \
|
||||
POST_KERNEL, \
|
||||
CONFIG_ADC_INIT_PRIORITY, \
|
||||
&mcux_adc16_driver_api);
|
||||
#define ADC16_MCUX_EDMA_INIT(n) \
|
||||
.hw_trigger_src = \
|
||||
DT_INST_PROP_OR(n, hw_trigger_src, 0), \
|
||||
.dma_slot = DT_INST_DMAS_CELL_BY_IDX(n, 0, source), \
|
||||
.trg_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, offset), \
|
||||
.trg_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, bits), \
|
||||
.alt_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, offset), \
|
||||
.alt_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, bits),
|
||||
#define ADC16_MCUX_EDMA_DATA(n) \
|
||||
.dev_dma = DEVICE_DT_GET(DT_INST_DMAS_CTLR_BY_NAME(n, adc##n))
|
||||
#define ADC16_MCUX_IRQ_INIT(n)
|
||||
#define ADC16_MCUX_IRQ_DECLARE(n)
|
||||
#else
|
||||
#define ACD16_MCUX_INIT(n) \
|
||||
static void mcux_adc16_config_func_##n(const struct device *dev); \
|
||||
static const struct mcux_adc16_config mcux_adc16_config_##n = { \
|
||||
.base = (ADC_Type *)DT_INST_REG_ADDR(n), \
|
||||
.irq_config_func = mcux_adc16_config_func_##n, \
|
||||
.channel_mux_b = DT_INST_PROP(n, channel_mux_b), \
|
||||
.clk_source = DT_INST_PROP_OR(n, clk_source, 0), \
|
||||
.long_sample = DT_INST_PROP_OR(n, long_sample, 0), \
|
||||
.high_speed = DT_INST_PROP(n, high_speed), \
|
||||
.continuous_convert = \
|
||||
DT_INST_PROP(n, continuous_convert), \
|
||||
}; \
|
||||
static struct mcux_adc16_data mcux_adc16_data_##n = { \
|
||||
ADC_CONTEXT_INIT_TIMER(mcux_adc16_data_##n, ctx), \
|
||||
ADC_CONTEXT_INIT_LOCK(mcux_adc16_data_##n, ctx), \
|
||||
ADC_CONTEXT_INIT_SYNC(mcux_adc16_data_##n, ctx), \
|
||||
}; \
|
||||
\
|
||||
DEVICE_DT_INST_DEFINE(n, &mcux_adc16_init, \
|
||||
NULL, \
|
||||
&mcux_adc16_data_##n, \
|
||||
&mcux_adc16_config_##n, \
|
||||
POST_KERNEL, \
|
||||
CONFIG_ADC_INIT_PRIORITY, \
|
||||
&mcux_adc16_driver_api); \
|
||||
\
|
||||
#define ADC16_MCUX_EDMA_INIT(n)
|
||||
#define ADC16_MCUX_EDMA_DATA(n)
|
||||
#define ADC16_MCUX_IRQ_INIT(n) .irq_config_func = mcux_adc16_config_func_##n,
|
||||
#define ADC16_MCUX_IRQ_DECLARE(n) \
|
||||
static void mcux_adc16_config_func_##n(const struct device *dev) \
|
||||
{ \
|
||||
IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
|
||||
|
@ -495,6 +460,40 @@ static const struct adc_driver_api mcux_adc16_driver_api = {
|
|||
\
|
||||
irq_enable(DT_INST_IRQN(n)); \
|
||||
}
|
||||
#endif
|
||||
#endif /* CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA */
|
||||
|
||||
|
||||
#define ACD16_MCUX_INIT(n) \
|
||||
ADC16_MCUX_IRQ_DECLARE(n) \
|
||||
PINCTRL_DT_INST_DEFINE(n); \
|
||||
\
|
||||
static const struct mcux_adc16_config mcux_adc16_config_##n = { \
|
||||
.base = (ADC_Type *)DT_INST_REG_ADDR(n), \
|
||||
ADC16_MCUX_IRQ_INIT(n) \
|
||||
.channel_mux_b = DT_INST_PROP(n, channel_mux_b), \
|
||||
.clk_source = DT_INST_PROP_OR(n, clk_source, 0), \
|
||||
.long_sample = DT_INST_PROP_OR(n, long_sample, 0), \
|
||||
.high_speed = DT_INST_PROP(n, high_speed), \
|
||||
.periodic_trigger = DT_INST_PROP(n, periodic_trigger), \
|
||||
.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \
|
||||
.continuous_convert = \
|
||||
DT_INST_PROP(n, continuous_convert), \
|
||||
ADC16_MCUX_EDMA_INIT(n) \
|
||||
}; \
|
||||
\
|
||||
static struct mcux_adc16_data mcux_adc16_data_##n = { \
|
||||
ADC_CONTEXT_INIT_TIMER(mcux_adc16_data_##n, ctx), \
|
||||
ADC_CONTEXT_INIT_LOCK(mcux_adc16_data_##n, ctx), \
|
||||
ADC_CONTEXT_INIT_SYNC(mcux_adc16_data_##n, ctx), \
|
||||
ADC16_MCUX_EDMA_DATA(n) \
|
||||
}; \
|
||||
\
|
||||
DEVICE_DT_INST_DEFINE(n, &mcux_adc16_init, \
|
||||
NULL, \
|
||||
&mcux_adc16_data_##n, \
|
||||
&mcux_adc16_config_##n, \
|
||||
POST_KERNEL, \
|
||||
CONFIG_ADC_INIT_PRIORITY, \
|
||||
&mcux_adc16_driver_api); \
|
||||
|
||||
DT_INST_FOREACH_STATUS_OKAY(ACD16_MCUX_INIT)
|
||||
|
|
|
@ -5,7 +5,7 @@ description: Kinetis ADC16
|
|||
|
||||
compatible: "nxp,kinetis-adc16"
|
||||
|
||||
include: adc-controller.yaml
|
||||
include: ["adc-controller.yaml", "pinctrl-device.yaml"]
|
||||
|
||||
properties:
|
||||
reg:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue