6 #include <soc/addressmap.h>
25 "amoor.w %0, %2, %1\n"
68 const void *dout,
size_t bytesout,
69 void *din,
size_t bytesin)
77 while (bytesout || bytesin) {
173 if ((
bus > 2) || (cs != 0))
179 || (
config->endianness > 1)
180 || (
config->bits_per_frame > 8))
226 || (
config->cmd_proto > 2)
227 || (
config->addr_proto > 2)
228 || (
config->data_proto > 2)
229 || (
config->cmd_code > 255)
230 || (
config->pad_code > 255))
static void write32(void *addr, uint32_t val)
static uint32_t read32(const void *addr)
const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
const size_t spi_ctrlr_bus_map_count
int clock_get_tlclk_khz(void)
#define FU540_SPI_PROTO_S
#define FU540_SPI_ENDIAN_BIG
#define FU540_SPI_POL_LEADING
#define FU540_SPI_PHA_LOW
static uint8_t spi_rx(volatile struct spi_ctrl *spictrl)
Wait until SPI receive queue has data and read byte.
int fu540_spi_mmap(const struct spi_slave *slave, const struct fu540_spi_mmap_config *config)
static void spi_release_bus_(const struct spi_slave *slave)
static int spi_xfer_(const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin)
static struct spi_ctrl * spictrls[]
static void spi_tx(volatile struct spi_ctrl *spictrl, uint8_t in)
Wait until SPI is ready for transmission and transmit byte.
struct spi_ctrlr fu540_spi_ctrlr
int fu540_spi_setup(unsigned int bus, unsigned int cs, struct spi_slave *slave, struct fu540_spi_config *config)
static int spi_setup_(const struct spi_slave *slave)
static int spi_claim_bus_(const struct spi_slave *slave)
#define FU540_SPI_CSMODE_OFF
#define FU540_SPI_CSMODE_AUTO
static unsigned int spi_min_clk_divisor(unsigned int input_khz, unsigned int max_target_khz)
Get smallest clock divisor that divides input_khz to a quotient less than or equal to max_target_khz;...
#define FU540_SPI_CSMODE_HOLD
static struct spi_slave slave
SPI control register memory map.
int(* xfer)(const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin)
const struct spi_ctrlr * ctrlr