@@ -135,41 +135,41 @@ static inline size_t spi_context_total_rx_len(struct spi_context *ctx);
135
135
static inline int spi_context_wait_for_completion (struct spi_context * ctx )
136
136
{
137
137
int status = 0 ;
138
- k_timeout_t timeout ;
139
-
140
- /* Do not use any timeout in the slave mode, as in this case it is not
141
- * known when the transfer will actually start and what the frequency
142
- * will be.
143
- */
144
- if (IS_ENABLED (CONFIG_SPI_SLAVE ) && spi_context_is_slave (ctx )) {
145
- timeout = K_FOREVER ;
146
- } else {
147
- uint32_t tx_len = spi_context_total_tx_len (ctx );
148
- uint32_t rx_len = spi_context_total_rx_len (ctx );
149
- uint32_t timeout_ms ;
138
+ bool wait ;
150
139
151
- timeout_ms = MAX (tx_len , rx_len ) * 8 * 1000 /
152
- ctx -> config -> frequency ;
153
- timeout_ms += CONFIG_SPI_COMPLETION_TIMEOUT_TOLERANCE ;
140
+ #ifdef CONFIG_SPI_ASYNC
141
+ wait = !ctx -> asynchronous ;
142
+ #else
143
+ wait = true;
144
+ #endif
154
145
155
- timeout = K_MSEC (timeout_ms );
156
- }
146
+ if (wait ) {
147
+ k_timeout_t timeout ;
148
+
149
+ /* Do not use any timeout in the slave mode, as in this case
150
+ * it is not known when the transfer will actually start and
151
+ * what the frequency will be.
152
+ */
153
+ if (IS_ENABLED (CONFIG_SPI_SLAVE ) && spi_context_is_slave (ctx )) {
154
+ timeout = K_FOREVER ;
155
+ } else {
156
+ uint32_t tx_len = spi_context_total_tx_len (ctx );
157
+ uint32_t rx_len = spi_context_total_rx_len (ctx );
158
+ uint32_t timeout_ms ;
159
+
160
+ timeout_ms = MAX (tx_len , rx_len ) * 8 * 1000 /
161
+ ctx -> config -> frequency ;
162
+ timeout_ms += CONFIG_SPI_COMPLETION_TIMEOUT_TOLERANCE ;
163
+
164
+ timeout = K_MSEC (timeout_ms );
165
+ }
157
166
158
- #ifdef CONFIG_SPI_ASYNC
159
- if (!ctx -> asynchronous ) {
160
167
if (k_sem_take (& ctx -> sync , timeout )) {
161
168
LOG_ERR ("Timeout waiting for transfer complete" );
162
169
return - ETIMEDOUT ;
163
170
}
164
171
status = ctx -> sync_status ;
165
172
}
166
- #else
167
- if (k_sem_take (& ctx -> sync , timeout )) {
168
- LOG_ERR ("Timeout waiting for transfer complete" );
169
- return - ETIMEDOUT ;
170
- }
171
- status = ctx -> sync_status ;
172
- #endif /* CONFIG_SPI_ASYNC */
173
173
174
174
#ifdef CONFIG_SPI_SLAVE
175
175
if (spi_context_is_slave (ctx ) && !status ) {
0 commit comments