Lines Matching +full:spi +full:- +full:half +full:- +full:duplex

4  * SPDX-License-Identifier: Apache-2.0
14 #include <zephyr/drivers/spi.h>
15 #include <zephyr/drivers/spi/rtio.h>
35 struct spi_oc_simple_data *spi, in spi_oc_simple_configure() argument
41 if (spi_context_configured(&spi->ctx, config)) { in spi_oc_simple_configure()
46 if (config->operation & SPI_HALF_DUPLEX) { in spi_oc_simple_configure()
47 LOG_ERR("Half-duplex not supported"); in spi_oc_simple_configure()
48 return -ENOTSUP; in spi_oc_simple_configure()
51 /* Simple SPI only supports master mode */ in spi_oc_simple_configure()
52 if (spi_context_is_slave(&spi->ctx)) { in spi_oc_simple_configure()
54 return -ENOTSUP; in spi_oc_simple_configure()
57 if ((config->operation & (SPI_MODE_LOOP | SPI_TRANSFER_LSB)) || in spi_oc_simple_configure()
59 (config->operation & in spi_oc_simple_configure()
62 return -EINVAL; in spi_oc_simple_configure()
65 /* SPI mode */ in spi_oc_simple_configure()
66 if (SPI_MODE_GET(config->operation) & SPI_MODE_CPOL) { in spi_oc_simple_configure()
70 if (SPI_MODE_GET(config->operation) & SPI_MODE_CPHA) { in spi_oc_simple_configure()
76 if ((config->frequency << (i + 1)) > in spi_oc_simple_configure()
85 /* Configure and Enable SPI controller */ in spi_oc_simple_configure()
88 spi->ctx.config = config; in spi_oc_simple_configure()
98 const struct spi_oc_simple_cfg *info = dev->config; in spi_oc_simple_transceive()
99 struct spi_oc_simple_data *spi = SPI_OC_SIMPLE_DATA(dev); in spi_oc_simple_transceive() local
100 struct spi_context *ctx = &spi->ctx; in spi_oc_simple_transceive()
107 /* Lock the SPI Context */ in spi_oc_simple_transceive()
110 spi_oc_simple_configure(info, spi, config); in spi_oc_simple_transceive()
114 spi_context_cs_control(&spi->ctx, true); in spi_oc_simple_transceive()
116 sys_write8(1 << config->slave, SPI_OC_SIMPLE_SPSS(info)); in spi_oc_simple_transceive()
128 sys_write8(*ctx->tx_buf, in spi_oc_simple_transceive()
144 *ctx->rx_buf = rx_byte; in spi_oc_simple_transceive()
150 /* Clear chip-select */ in spi_oc_simple_transceive()
152 spi_context_cs_control(&spi->ctx, false); in spi_oc_simple_transceive()
154 sys_write8(0 << config->slave, SPI_OC_SIMPLE_SPSS(info)); in spi_oc_simple_transceive()
172 return -ENOTSUP; in spi_oc_simple_transceive_async()
179 spi_context_unlock_unconditionally(&SPI_OC_SIMPLE_DATA(dev)->ctx); in spi_oc_simple_release()
183 static DEVICE_API(spi, spi_oc_simple_api) = {
198 const struct spi_oc_simple_cfg *info = dev->config; in spi_oc_simple_init()
199 struct spi_oc_simple_data *data = dev->data; in spi_oc_simple_init()
204 err = spi_context_cs_configure_all(&data->ctx); in spi_oc_simple_init()
210 spi_context_unlock_unconditionally(&SPI_OC_SIMPLE_DATA(dev)->ctx); in spi_oc_simple_init()