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:
Daniel DeGrasse 2022-03-07 17:44:27 -06:00 committed by Carles Cufí
commit 180a9d221e
3 changed files with 61 additions and 61 deletions

View file

@ -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.

View file

@ -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)

View file

@ -5,7 +5,7 @@ description: Kinetis ADC16
compatible: "nxp,kinetis-adc16"
include: adc-controller.yaml
include: ["adc-controller.yaml", "pinctrl-device.yaml"]
properties:
reg: