Lines Matching +full:spi +full:- +full:slave

5  * SPDX-License-Identifier:	GPL-2.0+
11 #include <spi.h>
18 #define SPI_MODE_REV (0x80000000 >> 5) /* Reverse mode - MSB first */
27 struct spi_slave *slave; in spi_setup_slave() local
32 slave = spi_alloc_slave_base(bus, cs); in spi_setup_slave()
33 if (!slave) in spi_setup_slave()
41 return slave; in spi_setup_slave()
44 void spi_free_slave(struct spi_slave *slave) in spi_free_slave() argument
46 free(slave); in spi_free_slave()
51 volatile spi8xxx_t *spi = &((immap_t *) (CONFIG_SYS_IMMR))->spi; in spi_init() local
54 * SPI pins on the MPC83xx are not muxed, so all we do is initialize in spi_init()
57 spi->mode = SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN; in spi_init()
58 spi->mode = (spi->mode & 0xfff0ffff) | BIT(16); /* Use SYSCLK / 8 in spi_init()
60 spi->event = 0xffffffff; /* Clear all SPI events */ in spi_init()
61 spi->mask = 0x00000000; /* Mask all SPI interrupts */ in spi_init()
62 spi->com = 0; /* LST bit doesn't do anything, so disregard */ in spi_init()
65 int spi_claim_bus(struct spi_slave *slave) in spi_claim_bus() argument
70 void spi_release_bus(struct spi_slave *slave) in spi_release_bus() argument
75 int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, in spi_xfer() argument
78 volatile spi8xxx_t *spi = &((immap_t *) (CONFIG_SYS_IMMR))->spi; in spi_xfer() local
84 debug("spi_xfer: slave %u:%u dout %08X din %08X bitlen %u\n", in spi_xfer()
85 slave->bus, slave->cs, *(uint *) dout, *(uint *) din, bitlen); in spi_xfer()
88 spi_cs_activate(slave); in spi_xfer()
90 spi->event = 0xffffffff; /* Clear all SPI events */ in spi_xfer()
92 /* handle data in 32-bit chunks */ in spi_xfer()
93 while (numBlks--) { in spi_xfer()
97 /* Shift data so it's msb-justified */ in spi_xfer()
98 tmpdout = *(u32 *) dout >> (32 - charSize); in spi_xfer()
104 * 4 < len <= 16 len - 1 in spi_xfer()
108 spi->mode &= ~SPI_MODE_EN; in spi_xfer()
112 spi->mode = (spi->mode & 0xff0fffff) | in spi_xfer()
115 spi->mode = (spi->mode & 0xff0fffff) | in spi_xfer()
116 ((bitlen - 1) << 20); in spi_xfer()
118 spi->mode = (spi->mode & 0xff0fffff); in spi_xfer()
120 bitlen -= 32; in spi_xfer()
124 spi->mode |= SPI_MODE_EN; in spi_xfer()
126 spi->tx = tmpdout; /* Write the data out */ in spi_xfer()
130 * Wait for SPI transmit to get out in spi_xfer()
135 event = spi->event; in spi_xfer()
137 tmpdin = spi->rx; in spi_xfer()
138 spi->event |= SPI_EV_NE; in spi_xfer()
141 *(u32 *) din = (tmpdin << (32 - charSize)); in spi_xfer()
157 puts("*** spi_xfer: Time out during SPI transfer"); in spi_xfer()
163 spi_cs_deactivate(slave); in spi_xfer()