@@ -36,6 +36,9 @@ LOG_MODULE_REGISTER(spi_mcux_lpspi, CONFIG_SPI_LOG_LEVEL);
36
36
#define DEV_CFG (_dev ) ((const struct spi_mcux_config *)(_dev)->config)
37
37
#define DEV_DATA (_dev ) ((struct spi_mcux_data *)(_dev)->data)
38
38
39
+ /* Argument to MCUX SDK IRQ handler */
40
+ #define LPSPI_IRQ_HANDLE_ARG COND_CODE_1(CONFIG_NXP_LP_FLEXCOMM, (LPSPI_GetInstance(base)), (base))
41
+
39
42
#ifdef CONFIG_SPI_MCUX_LPSPI_DMA
40
43
#include <zephyr/drivers/dma.h>
41
44
@@ -85,13 +88,41 @@ struct spi_mcux_data {
85
88
#endif
86
89
};
87
90
91
+ static int spi_mcux_transfer_next_packet (const struct device * dev );
88
92
#ifdef CONFIG_SPI_RTIO
89
93
static void spi_mcux_iodev_complete (const struct device * dev , int status );
90
94
static inline int transceive_rtio (const struct device * dev , const struct spi_config * spi_cfg ,
91
95
const struct spi_buf_set * tx_bufs ,
92
96
const struct spi_buf_set * rx_bufs );
93
97
#endif
94
98
99
+ static void spi_mcux_isr (const struct device * dev )
100
+ {
101
+ struct spi_mcux_data * data = dev -> data ;
102
+ LPSPI_Type * base = (LPSPI_Type * )DEVICE_MMIO_NAMED_GET (dev , reg_base );
103
+
104
+ LPSPI_MasterTransferHandleIRQ (LPSPI_IRQ_HANDLE_ARG , & data -> handle );
105
+ }
106
+
107
+ static void spi_mcux_master_callback (LPSPI_Type * base , lpspi_master_handle_t * handle ,
108
+ status_t status , void * userData )
109
+ {
110
+ struct spi_mcux_data * data = userData ;
111
+
112
+ #ifdef CONFIG_SPI_RTIO
113
+ struct spi_rtio * rtio_ctx = data -> rtio_ctx ;
114
+
115
+ if (rtio_ctx -> txn_head != NULL ) {
116
+ spi_mcux_iodev_complete (data -> dev , status );
117
+ return ;
118
+ }
119
+ #endif
120
+ spi_context_update_tx (& data -> ctx , 1 , data -> transfer_len );
121
+ spi_context_update_rx (& data -> ctx , 1 , data -> transfer_len );
122
+
123
+ spi_mcux_transfer_next_packet (data -> dev );
124
+ }
125
+
95
126
static int spi_mcux_transfer_next_packet (const struct device * dev )
96
127
{
97
128
/* const struct spi_mcux_config *config = dev->config; */
@@ -155,38 +186,6 @@ static int spi_mcux_transfer_next_packet(const struct device *dev)
155
186
return 0 ;
156
187
}
157
188
158
- static void spi_mcux_isr (const struct device * dev )
159
- {
160
- /* const struct spi_mcux_config *config = dev->config; */
161
- struct spi_mcux_data * data = dev -> data ;
162
- LPSPI_Type * base = (LPSPI_Type * )DEVICE_MMIO_NAMED_GET (dev , reg_base );
163
-
164
- #if CONFIG_NXP_LP_FLEXCOMM
165
- LPSPI_MasterTransferHandleIRQ (LPSPI_GetInstance (base ), & data -> handle );
166
- #else
167
- LPSPI_MasterTransferHandleIRQ (base , & data -> handle );
168
- #endif
169
- }
170
-
171
- static void spi_mcux_master_transfer_callback (LPSPI_Type * base , lpspi_master_handle_t * handle ,
172
- status_t status , void * userData )
173
- {
174
- struct spi_mcux_data * data = userData ;
175
-
176
- #ifdef CONFIG_SPI_RTIO
177
- struct spi_rtio * rtio_ctx = data -> rtio_ctx ;
178
-
179
- if (rtio_ctx -> txn_head != NULL ) {
180
- spi_mcux_iodev_complete (data -> dev , status );
181
- return ;
182
- }
183
- #endif
184
- spi_context_update_tx (& data -> ctx , 1 , data -> transfer_len );
185
- spi_context_update_rx (& data -> ctx , 1 , data -> transfer_len );
186
-
187
- spi_mcux_transfer_next_packet (data -> dev );
188
- }
189
-
190
189
static int spi_mcux_configure (const struct device * dev , const struct spi_config * spi_cfg )
191
190
{
192
191
const struct spi_mcux_config * config = dev -> config ;
@@ -264,8 +263,7 @@ static int spi_mcux_configure(const struct device *dev, const struct spi_config
264
263
base -> CR |= LPSPI_CR_DBGEN_MASK ;
265
264
}
266
265
267
- LPSPI_MasterTransferCreateHandle (base , & data -> handle , spi_mcux_master_transfer_callback ,
268
- data );
266
+ LPSPI_MasterTransferCreateHandle (base , & data -> handle , spi_mcux_master_callback , data );
269
267
270
268
LPSPI_SetDummyData (base , 0 );
271
269
0 commit comments