Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (c) 2010 ASIX Electronics Corporation
0004  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
0005  *
0006  * ASIX AX88796C SPI Fast Ethernet Linux driver
0007  */
0008 
0009 #ifndef _AX88796C_SPI_H
0010 #define _AX88796C_SPI_H
0011 
0012 #include <linux/spi/spi.h>
0013 #include <linux/types.h>
0014 
0015 /* Definition of SPI command */
0016 #define AX_SPICMD_WRITE_TXQ     0x02
0017 #define AX_SPICMD_READ_REG      0x03
0018 #define AX_SPICMD_READ_STATUS       0x05
0019 #define AX_SPICMD_READ_RXQ      0x0B
0020 #define AX_SPICMD_BIDIR_WRQ     0xB2
0021 #define AX_SPICMD_WRITE_REG     0xD8
0022 #define AX_SPICMD_EXIT_PWD      0xAB
0023 
0024 extern const u8 ax88796c_rx_cmd_buf[];
0025 extern const u8 ax88796c_tx_cmd_buf[];
0026 
0027 struct axspi_data {
0028     struct spi_device   *spi;
0029     struct spi_message  rx_msg;
0030     struct spi_transfer spi_rx_xfer[2];
0031     u8          cmd_buf[6];
0032     u8          rx_buf[6];
0033     u8          comp;
0034 };
0035 
0036 struct spi_status {
0037     u16 isr;
0038     u8 status;
0039 #   define AX_STATUS_READY      0x80
0040 };
0041 
0042 int axspi_read_rxq(struct axspi_data *ax_spi, void *data, int len);
0043 int axspi_write_txq(const struct axspi_data *ax_spi, void *data, int len);
0044 u16 axspi_read_reg(struct axspi_data *ax_spi, u8 reg);
0045 int axspi_write_reg(struct axspi_data *ax_spi, u8 reg, u16 value);
0046 int axspi_read_status(struct axspi_data *ax_spi, struct spi_status *status);
0047 int axspi_wakeup(struct axspi_data *ax_spi);
0048 
0049 static inline u16 AX_READ(struct axspi_data *ax_spi, u8 offset)
0050 {
0051     return axspi_read_reg(ax_spi, offset);
0052 }
0053 
0054 static inline int AX_WRITE(struct axspi_data *ax_spi, u16 value, u8 offset)
0055 {
0056     return axspi_write_reg(ax_spi, offset, value);
0057 }
0058 
0059 static inline int AX_READ_STATUS(struct axspi_data *ax_spi,
0060                  struct spi_status *status)
0061 {
0062     return axspi_read_status(ax_spi, status);
0063 }
0064 
0065 static inline int AX_WAKEUP(struct axspi_data *ax_spi)
0066 {
0067     return axspi_wakeup(ax_spi);
0068 }
0069 #endif