spi.c 1.9 KB

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