spi.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Common SPI Interface: Controller-specific definitions
  4. *
  5. * Copyright (c) 2022 Matthias Schiffer <[email protected]>
  6. *
  7. * Based on U-boot's spi.h:
  8. *
  9. * (C) Copyright 2001
  10. * Gerald Van Baren, Custom IDEAS, [email protected].
  11. */
  12. #pragma once
  13. #include <types.h>
  14. /* SPI mode flags */
  15. #define SPI_CPHA BIT(0) /* clock phase (1 = SPI_CLOCK_PHASE_SECOND) */
  16. #define SPI_CPOL BIT(1) /* clock polarity (1 = SPI_POLARITY_HIGH) */
  17. #define SPI_MODE_0 (0|0) /* (original MicroWire) */
  18. #define SPI_MODE_1 (0|SPI_CPHA)
  19. #define SPI_MODE_2 (SPI_CPOL|0)
  20. #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
  21. struct spi_transfer {
  22. const void *tx_buf;
  23. void *rx_buf;
  24. size_t len;
  25. };
  26. static inline size_t spi_message_len(const struct spi_transfer *msg, int n) {
  27. size_t total = 0;
  28. for (int i = 0; i < n; i++) {
  29. total += msg[i].len;
  30. }
  31. return total;
  32. }
  33. int spi_init(unsigned int cs, unsigned int max_hz, unsigned int mode);
  34. int spi_claim_bus(void);
  35. void spi_release_bus(void);
  36. int spi_xfer(const struct spi_transfer *msg, int n);
  37. size_t spi_max_xfer(void);