Lines Matching +full:half +full:- +full:phase

4  * SPDX-License-Identifier: Apache-2.0
56 const struct spi_mcux_config *config = dev->config; in spi_mcux_transfer_next_packet()
57 struct spi_mcux_data *data = dev->data; in spi_mcux_transfer_next_packet()
58 ECSPI_Type *base = config->base; in spi_mcux_transfer_next_packet()
59 struct spi_context *ctx = &data->ctx; in spi_mcux_transfer_next_packet()
63 if ((ctx->tx_len == 0) && (ctx->rx_len == 0)) { in spi_mcux_transfer_next_packet()
65 spi_context_cs_control(&data->ctx, false); in spi_mcux_transfer_next_packet()
66 spi_context_complete(&data->ctx, dev, 0); in spi_mcux_transfer_next_packet()
70 transfer.channel = ctx->config->slave; in spi_mcux_transfer_next_packet()
73 transfer.rxData = &data->rx_data; in spi_mcux_transfer_next_packet()
79 switch (data->dfs) { in spi_mcux_transfer_next_packet()
81 data->tx_data = UNALIGNED_GET((uint8_t *)ctx->tx_buf); in spi_mcux_transfer_next_packet()
84 data->tx_data = UNALIGNED_GET((uint16_t *)ctx->tx_buf); in spi_mcux_transfer_next_packet()
87 data->tx_data = UNALIGNED_GET((uint32_t *)ctx->tx_buf); in spi_mcux_transfer_next_packet()
91 transfer.txData = &data->tx_data; in spi_mcux_transfer_next_packet()
99 status = ECSPI_MasterTransferNonBlocking(base, &data->handle, &transfer); in spi_mcux_transfer_next_packet()
102 spi_context_cs_control(&data->ctx, false); in spi_mcux_transfer_next_packet()
103 spi_context_complete(&data->ctx, dev, -EIO); in spi_mcux_transfer_next_packet()
109 const struct spi_mcux_config *config = dev->config; in spi_mcux_isr()
110 struct spi_mcux_data *data = dev->data; in spi_mcux_isr()
111 ECSPI_Type *base = config->base; in spi_mcux_isr()
113 ECSPI_MasterTransferHandleIRQ(base, &data->handle); in spi_mcux_isr()
120 struct spi_mcux_data *data = dev->data; in spi_mcux_master_transfer_callback()
122 if (spi_context_rx_buf_on(&data->ctx)) { in spi_mcux_master_transfer_callback()
123 switch (data->dfs) { in spi_mcux_master_transfer_callback()
125 UNALIGNED_PUT(data->rx_data, (uint8_t *)data->ctx.rx_buf); in spi_mcux_master_transfer_callback()
128 UNALIGNED_PUT(data->rx_data, (uint16_t *)data->ctx.rx_buf); in spi_mcux_master_transfer_callback()
131 UNALIGNED_PUT(data->rx_data, (uint32_t *)data->ctx.rx_buf); in spi_mcux_master_transfer_callback()
136 spi_context_update_tx(&data->ctx, data->dfs, 1); in spi_mcux_master_transfer_callback()
137 spi_context_update_rx(&data->ctx, data->dfs, 1); in spi_mcux_master_transfer_callback()
145 const struct spi_mcux_config *config = dev->config; in spi_mcux_configure()
146 struct spi_mcux_data *data = dev->data; in spi_mcux_configure()
147 ECSPI_Type *base = config->base; in spi_mcux_configure()
152 if (spi_context_configured(&data->ctx, spi_cfg)) { in spi_mcux_configure()
157 if (spi_cfg->operation & SPI_HALF_DUPLEX) { in spi_mcux_configure()
158 LOG_ERR("Half-duplex not supported"); in spi_mcux_configure()
159 return -ENOTSUP; in spi_mcux_configure()
162 if (spi_cfg->operation & SPI_TRANSFER_LSB) { in spi_mcux_configure()
163 LOG_ERR("HW byte re-ordering not supported"); in spi_mcux_configure()
164 return -ENOTSUP; in spi_mcux_configure()
167 if (!spi_cs_is_gpio(spi_cfg) && spi_cfg->slave > kECSPI_Channel3) { in spi_mcux_configure()
168 LOG_ERR("Slave %d is greater than %d", spi_cfg->slave, kECSPI_Channel3); in spi_mcux_configure()
169 return -EINVAL; in spi_mcux_configure()
172 if (clock_control_get_rate(config->clock_dev, config->clock_subsys, &clock_freq)) { in spi_mcux_configure()
174 return -EINVAL; in spi_mcux_configure()
177 word_size = SPI_WORD_SIZE_GET(spi_cfg->operation); in spi_mcux_configure()
180 return -EINVAL; in spi_mcux_configure()
186 spi_cs_is_gpio(spi_cfg) ? kECSPI_Channel0 : (ecspi_channel_source_t)spi_cfg->slave; in spi_mcux_configure()
188 (SPI_MODE_GET(spi_cfg->operation) & SPI_MODE_CPOL) in spi_mcux_configure()
191 master_config.channelConfig.phase = in spi_mcux_configure()
192 (SPI_MODE_GET(spi_cfg->operation) & SPI_MODE_CPHA) in spi_mcux_configure()
195 master_config.baudRate_Bps = spi_cfg->frequency; in spi_mcux_configure()
198 master_config.enableLoopback = (SPI_MODE_GET(spi_cfg->operation) & SPI_MODE_LOOP); in spi_mcux_configure()
202 DIV_ROUND_UP(spi_cfg->cs.delay * USEC_PER_SEC, spi_cfg->frequency); in spi_mcux_configure()
206 return -EINVAL; in spi_mcux_configure()
212 ECSPI_MasterTransferCreateHandle(base, &data->handle, in spi_mcux_configure()
216 data->word_size = word_size; in spi_mcux_configure()
217 data->dfs = bytes_per_word(word_size); in spi_mcux_configure()
218 data->ctx.config = spi_cfg; in spi_mcux_configure()
231 struct spi_mcux_data *data = dev->data; in transceive()
234 spi_context_lock(&data->ctx, asynchronous, cb, userdata, spi_cfg); in transceive()
241 spi_context_buffers_setup(&data->ctx, tx_bufs, rx_bufs, data->dfs); in transceive()
242 spi_context_cs_control(&data->ctx, true); in transceive()
245 ret = spi_context_wait_for_completion(&data->ctx); in transceive()
248 spi_context_release(&data->ctx, ret); in transceive()
275 struct spi_mcux_data *data = dev->data; in spi_mcux_release()
279 spi_context_unlock_unconditionally(&data->ctx); in spi_mcux_release()
287 const struct spi_mcux_config *config = dev->config; in spi_mcux_init()
288 struct spi_mcux_data *data = dev->data; in spi_mcux_init()
290 config->irq_config_func(dev); in spi_mcux_init()
292 ret = spi_context_cs_configure_all(&data->ctx); in spi_mcux_init()
297 ret = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); in spi_mcux_init()
302 spi_context_unlock_unconditionally(&data->ctx); in spi_mcux_init()