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
|
config ADC_MCUX_ADC16
|
||||||
bool "MCUX ADC16 driver"
|
bool "MCUX ADC16 driver"
|
||||||
depends on HAS_MCUX_ADC16
|
depends on HAS_MCUX_ADC16
|
||||||
|
select PINCTRL
|
||||||
help
|
help
|
||||||
Enable the MCUX ADC16 driver.
|
Enable the MCUX ADC16 driver.
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <drivers/adc.h>
|
#include <drivers/adc.h>
|
||||||
|
#include <drivers/pinctrl.h>
|
||||||
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
||||||
#include <drivers/dma.h>
|
#include <drivers/dma.h>
|
||||||
#include <fsl_sim.h>
|
#include <fsl_sim.h>
|
||||||
|
@ -42,6 +43,7 @@ struct mcux_adc16_config {
|
||||||
bool channel_mux_b;
|
bool channel_mux_b;
|
||||||
bool high_speed; /* ADC enable high speed mode*/
|
bool high_speed; /* ADC enable high speed mode*/
|
||||||
bool continuous_convert; /* ADC enable continuous convert*/
|
bool continuous_convert; /* ADC enable continuous convert*/
|
||||||
|
const struct pinctrl_dev_config *pincfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
#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;
|
struct mcux_adc16_data *data = dev->data;
|
||||||
ADC_Type *base = config->base;
|
ADC_Type *base = config->base;
|
||||||
adc16_config_t adc_config;
|
adc16_config_t adc_config;
|
||||||
|
int err;
|
||||||
|
|
||||||
LOG_DBG("init adc");
|
LOG_DBG("init adc");
|
||||||
ADC16_GetDefaultConfig(&adc_config);
|
ADC16_GetDefaultConfig(&adc_config);
|
||||||
|
@ -366,6 +369,11 @@ static int mcux_adc16_init(const struct device *dev)
|
||||||
ADC16_EnableHardwareTrigger(base, false);
|
ADC16_EnableHardwareTrigger(base, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT);
|
||||||
|
if (err != 0) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
data->dev = dev;
|
data->dev = dev;
|
||||||
|
|
||||||
/* dma related init */
|
/* dma related init */
|
||||||
|
@ -427,56 +435,57 @@ static const struct adc_driver_api mcux_adc16_driver_api = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
#ifdef CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA
|
||||||
#define ACD16_MCUX_INIT(n) \
|
#define ADC16_MCUX_EDMA_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 = \
|
.hw_trigger_src = \
|
||||||
DT_INST_PROP_OR(n, hw_trigger_src, 0), \
|
DT_INST_PROP_OR(n, hw_trigger_src, 0), \
|
||||||
.dma_slot = DT_INST_DMAS_CELL_BY_IDX(n, 0, source), \
|
.dma_slot = DT_INST_DMAS_CELL_BY_IDX(n, 0, source), \
|
||||||
.trg_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, offset), \
|
.trg_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, offset), \
|
||||||
.trg_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, bits), \
|
.trg_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 0, bits), \
|
||||||
.alt_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, offset), \
|
.alt_offset = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, offset), \
|
||||||
.alt_bits = DT_INST_CLOCKS_CELL_BY_IDX(n, 1, bits), \
|
.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))
|
||||||
static struct mcux_adc16_data mcux_adc16_data_##n = { \
|
#define ADC16_MCUX_IRQ_INIT(n)
|
||||||
ADC_CONTEXT_INIT_TIMER(mcux_adc16_data_##n, ctx), \
|
#define ADC16_MCUX_IRQ_DECLARE(n)
|
||||||
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);
|
|
||||||
#else
|
#else
|
||||||
|
#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), \
|
||||||
|
mcux_adc16_isr, \
|
||||||
|
DEVICE_DT_INST_GET(n), 0); \
|
||||||
|
\
|
||||||
|
irq_enable(DT_INST_IRQN(n)); \
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_ADC_MCUX_ADC16_ENABLE_EDMA */
|
||||||
|
|
||||||
|
|
||||||
#define ACD16_MCUX_INIT(n) \
|
#define ACD16_MCUX_INIT(n) \
|
||||||
static void mcux_adc16_config_func_##n(const struct device *dev); \
|
ADC16_MCUX_IRQ_DECLARE(n) \
|
||||||
|
PINCTRL_DT_INST_DEFINE(n); \
|
||||||
|
\
|
||||||
static const struct mcux_adc16_config mcux_adc16_config_##n = { \
|
static const struct mcux_adc16_config mcux_adc16_config_##n = { \
|
||||||
.base = (ADC_Type *)DT_INST_REG_ADDR(n), \
|
.base = (ADC_Type *)DT_INST_REG_ADDR(n), \
|
||||||
.irq_config_func = mcux_adc16_config_func_##n, \
|
ADC16_MCUX_IRQ_INIT(n) \
|
||||||
.channel_mux_b = DT_INST_PROP(n, channel_mux_b), \
|
.channel_mux_b = DT_INST_PROP(n, channel_mux_b), \
|
||||||
.clk_source = DT_INST_PROP_OR(n, clk_source, 0), \
|
.clk_source = DT_INST_PROP_OR(n, clk_source, 0), \
|
||||||
.long_sample = DT_INST_PROP_OR(n, long_sample, 0), \
|
.long_sample = DT_INST_PROP_OR(n, long_sample, 0), \
|
||||||
.high_speed = DT_INST_PROP(n, high_speed), \
|
.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 = \
|
.continuous_convert = \
|
||||||
DT_INST_PROP(n, continuous_convert), \
|
DT_INST_PROP(n, continuous_convert), \
|
||||||
|
ADC16_MCUX_EDMA_INIT(n) \
|
||||||
}; \
|
}; \
|
||||||
|
\
|
||||||
static struct mcux_adc16_data mcux_adc16_data_##n = { \
|
static struct mcux_adc16_data mcux_adc16_data_##n = { \
|
||||||
ADC_CONTEXT_INIT_TIMER(mcux_adc16_data_##n, ctx), \
|
ADC_CONTEXT_INIT_TIMER(mcux_adc16_data_##n, ctx), \
|
||||||
ADC_CONTEXT_INIT_LOCK(mcux_adc16_data_##n, ctx), \
|
ADC_CONTEXT_INIT_LOCK(mcux_adc16_data_##n, ctx), \
|
||||||
ADC_CONTEXT_INIT_SYNC(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, \
|
DEVICE_DT_INST_DEFINE(n, &mcux_adc16_init, \
|
||||||
|
@ -486,15 +495,5 @@ static const struct adc_driver_api mcux_adc16_driver_api = {
|
||||||
POST_KERNEL, \
|
POST_KERNEL, \
|
||||||
CONFIG_ADC_INIT_PRIORITY, \
|
CONFIG_ADC_INIT_PRIORITY, \
|
||||||
&mcux_adc16_driver_api); \
|
&mcux_adc16_driver_api); \
|
||||||
\
|
|
||||||
static void mcux_adc16_config_func_##n(const struct device *dev) \
|
|
||||||
{ \
|
|
||||||
IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
|
|
||||||
mcux_adc16_isr, \
|
|
||||||
DEVICE_DT_INST_GET(n), 0); \
|
|
||||||
\
|
|
||||||
irq_enable(DT_INST_IRQN(n)); \
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DT_INST_FOREACH_STATUS_OKAY(ACD16_MCUX_INIT)
|
DT_INST_FOREACH_STATUS_OKAY(ACD16_MCUX_INIT)
|
||||||
|
|
|
@ -5,7 +5,7 @@ description: Kinetis ADC16
|
||||||
|
|
||||||
compatible: "nxp,kinetis-adc16"
|
compatible: "nxp,kinetis-adc16"
|
||||||
|
|
||||||
include: adc-controller.yaml
|
include: ["adc-controller.yaml", "pinctrl-device.yaml"]
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
reg:
|
reg:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue