ax88796c_spi.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2010 ASIX Electronics Corporation
  4. * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  5. *
  6. * ASIX AX88796C SPI Fast Ethernet Linux driver
  7. */
  8. #ifndef _AX88796C_SPI_H
  9. #define _AX88796C_SPI_H
  10. #include <linux/spi/spi.h>
  11. #include <linux/types.h>
  12. /* Definition of SPI command */
  13. #define AX_SPICMD_WRITE_TXQ 0x02
  14. #define AX_SPICMD_READ_REG 0x03
  15. #define AX_SPICMD_READ_STATUS 0x05
  16. #define AX_SPICMD_READ_RXQ 0x0B
  17. #define AX_SPICMD_BIDIR_WRQ 0xB2
  18. #define AX_SPICMD_WRITE_REG 0xD8
  19. #define AX_SPICMD_EXIT_PWD 0xAB
  20. extern const u8 ax88796c_rx_cmd_buf[];
  21. extern const u8 ax88796c_tx_cmd_buf[];
  22. struct axspi_data {
  23. struct spi_device *spi;
  24. struct spi_message rx_msg;
  25. struct spi_transfer spi_rx_xfer[2];
  26. u8 cmd_buf[6];
  27. u8 rx_buf[6];
  28. u8 comp;
  29. };
  30. struct spi_status {
  31. u16 isr;
  32. u8 status;
  33. # define AX_STATUS_READY 0x80
  34. };
  35. int axspi_read_rxq(struct axspi_data *ax_spi, void *data, int len);
  36. int axspi_write_txq(const struct axspi_data *ax_spi, void *data, int len);
  37. u16 axspi_read_reg(struct axspi_data *ax_spi, u8 reg);
  38. int axspi_write_reg(struct axspi_data *ax_spi, u8 reg, u16 value);
  39. int axspi_read_status(struct axspi_data *ax_spi, struct spi_status *status);
  40. int axspi_wakeup(struct axspi_data *ax_spi);
  41. static inline u16 AX_READ(struct axspi_data *ax_spi, u8 offset)
  42. {
  43. return axspi_read_reg(ax_spi, offset);
  44. }
  45. static inline int AX_WRITE(struct axspi_data *ax_spi, u16 value, u8 offset)
  46. {
  47. return axspi_write_reg(ax_spi, offset, value);
  48. }
  49. static inline int AX_READ_STATUS(struct axspi_data *ax_spi,
  50. struct spi_status *status)
  51. {
  52. return axspi_read_status(ax_spi, status);
  53. }
  54. static inline int AX_WAKEUP(struct axspi_data *ax_spi)
  55. {
  56. return axspi_wakeup(ax_spi);
  57. }
  58. #endif