spi.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. ******************************************************************************
  3. * @file spi.c
  4. * @author StarFive Technology
  5. * @version V1.0
  6. * @date 07/24/2020
  7. * @brief
  8. ******************************************************************************
  9. * @copy
  10. *
  11. * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15. * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17. *
  18. * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
  19. */
  20. #include <comdef.h>
  21. #include <spi.h>
  22. #define SPI_CONTROLLER_NUM 1
  23. struct spi_operation *operations[SPI_CONTROLLER_NUM];
  24. int spi_register(unsigned int bus, struct spi_operation *operation)
  25. {
  26. if(bus> SPI_CONTROLLER_NUM-1)
  27. return -1;
  28. operations[bus] = operation;
  29. return 0;
  30. }
  31. int spi_unregister(unsigned int bus)
  32. {
  33. if(bus> SPI_CONTROLLER_NUM-1)
  34. return -1;
  35. operations[bus] = 0;
  36. return 0;
  37. }
  38. struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
  39. unsigned int max_hz, unsigned int mode, unsigned int bus_width)
  40. {
  41. if(bus> SPI_CONTROLLER_NUM-1)
  42. return NULL;
  43. if(operations[bus]->setup_slave)
  44. {
  45. return operations[bus]->setup_slave(bus,cs,max_hz,mode,bus_width);
  46. }
  47. return NULL;
  48. }
  49. int spi_xfer(struct spi_slave *slave, unsigned int bitlen, void *dout,
  50. void *din, unsigned long flags,int bit_mode)
  51. {
  52. unsigned int bus = slave->bus;
  53. int ret = -1;
  54. if(bus> SPI_CONTROLLER_NUM-1)
  55. return -1;
  56. if(operations[bus]->spi_xfer)
  57. ret = operations[bus]->spi_xfer(slave, bitlen, dout, din, flags, bit_mode);
  58. return ret;
  59. }