@@ -55,9 +55,6 @@ struct spi_dma_stream {
55
55
56
56
struct spi_mcux_config {
57
57
DEVICE_MMIO_NAMED_ROM (reg_base );
58
- #ifdef CONFIG_NXP_LP_FLEXCOMM
59
- const struct device * parent_dev ;
60
- #endif
61
58
const struct device * clock_dev ;
62
59
clock_control_subsys_t clock_subsys ;
63
60
void (* irq_config_func )(const struct device * dev );
@@ -661,16 +658,7 @@ static int spi_mcux_init(const struct device *dev)
661
658
662
659
DEVICE_MMIO_NAMED_MAP (dev , reg_base , K_MEM_CACHE_NONE | K_MEM_DIRECT_MAP );
663
660
664
- #if CONFIG_NXP_LP_FLEXCOMM
665
- /* When using LP Flexcomm driver, register the interrupt handler
666
- * so we receive notification from the LP Flexcomm interrupt handler.
667
- */
668
- nxp_lp_flexcomm_setirqhandler (config -> parent_dev , dev , LP_FLEXCOMM_PERIPH_LPSPI ,
669
- spi_mcux_isr );
670
- #else
671
- /* Interrupt is managed by this driver */
672
661
config -> irq_config_func (dev );
673
- #endif
674
662
675
663
err = spi_context_cs_configure_all (& data -> ctx );
676
664
if (err < 0 ) {
@@ -849,31 +837,29 @@ static const struct spi_driver_api spi_mcux_driver_api = {
849
837
#define SPI_DMA_CHANNELS (n )
850
838
#endif /* CONFIG_SPI_MCUX_LPSPI_DMA */
851
839
852
- #define SPI_MCUX_LPSPI_MODULE_IRQ_CONNECT (n ) \
853
- do { \
854
- IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), spi_mcux_isr, \
855
- DEVICE_DT_INST_GET(n), 0); \
856
- irq_enable(DT_INST_IRQN(n)); \
857
- } while (false)
858
-
859
- #define SPI_MCUX_LPSPI_MODULE_IRQ (n ) \
860
- IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), (SPI_MCUX_LPSPI_MODULE_IRQ_CONNECT(n)))
861
-
862
- #ifdef CONFIG_NXP_LP_FLEXCOMM
863
- #define PARENT_DEV (n ) .parent_dev = DEVICE_DT_GET(DT_INST_PARENT(n)),
840
+ #if defined(CONFIG_NXP_LP_FLEXCOMM )
841
+ #define SPI_MCUX_LPSPI_IRQ_FUNC (n ) \
842
+ nxp_lp_flexcomm_setirqhandler(DEVICE_DT_GET(DT_INST_PARENT(n)), DEVICE_DT_INST_GET(n), \
843
+ LP_FLEXCOMM_PERIPH_LPSPI, spi_mcux_isr);
864
844
#else
865
- #define PARENT_DEV (n )
866
- #endif /* CONFIG_NXP_LP_FLEXCOMM */
845
+ #define SPI_MCUX_LPSPI_IRQ_FUNC (n ) \
846
+ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), spi_mcux_isr, \
847
+ DEVICE_DT_INST_GET(n), 0); \
848
+ irq_enable(DT_INST_IRQN(n));
849
+ #endif
867
850
868
851
#define SPI_MCUX_LPSPI_INIT (n ) \
869
852
PINCTRL_DT_INST_DEFINE(n); \
870
853
COND_CODE_1(CONFIG_SPI_RTIO, (SPI_MCUX_RTIO_DEFINE(n)), ()); \
871
854
\
872
- static void spi_mcux_config_func_##n(const struct device *dev); \
855
+ static void spi_mcux_config_func_##n(const struct device *dev) \
856
+ { \
857
+ SPI_MCUX_LPSPI_IRQ_FUNC(n) \
858
+ } \
873
859
\
874
860
static const struct spi_mcux_config spi_mcux_config_##n = { \
875
861
DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \
876
- PARENT_DEV(n) .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \
862
+ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \
877
863
.clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \
878
864
.irq_config_func = spi_mcux_config_func_##n, \
879
865
.pcs_sck_delay = UTIL_AND(DT_INST_NODE_HAS_PROP(n, pcs_sck_delay), \
@@ -891,15 +877,9 @@ static const struct spi_driver_api spi_mcux_driver_api = {
891
877
SPI_CONTEXT_INIT_SYNC(spi_mcux_data_##n, ctx), \
892
878
SPI_CONTEXT_CS_GPIOS_INITIALIZE(DT_DRV_INST(n), ctx) SPI_DMA_CHANNELS(n) \
893
879
IF_ENABLED(CONFIG_SPI_RTIO, (.rtio_ctx = &spi_mcux_rtio_##n,)) \
894
- \
895
880
}; \
896
881
\
897
882
DEVICE_DT_INST_DEFINE(n, spi_mcux_init, NULL, &spi_mcux_data_##n, &spi_mcux_config_##n, \
898
- POST_KERNEL, CONFIG_SPI_INIT_PRIORITY, &spi_mcux_driver_api); \
899
- \
900
- static void spi_mcux_config_func_##n(const struct device *dev) \
901
- { \
902
- SPI_MCUX_LPSPI_MODULE_IRQ(n); \
903
- }
883
+ POST_KERNEL, CONFIG_SPI_INIT_PRIORITY, &spi_mcux_driver_api);
904
884
905
885
DT_INST_FOREACH_STATUS_OKAY (SPI_MCUX_LPSPI_INIT )
0 commit comments