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 | |
9 | #ifndef _AX88796C_SPI_H |
10 | #define _AX88796C_SPI_H |
11 | |
12 | #include <linux/spi/spi.h> |
13 | #include <linux/types.h> |
14 | |
15 | /* Definition of SPI command */ |
16 | #define AX_SPICMD_WRITE_TXQ 0x02 |
17 | #define AX_SPICMD_READ_REG 0x03 |
18 | #define AX_SPICMD_READ_STATUS 0x05 |
19 | #define AX_SPICMD_READ_RXQ 0x0B |
20 | #define AX_SPICMD_BIDIR_WRQ 0xB2 |
21 | #define AX_SPICMD_WRITE_REG 0xD8 |
22 | #define AX_SPICMD_EXIT_PWD 0xAB |
23 | |
24 | extern const u8 ax88796c_rx_cmd_buf[]; |
25 | extern const u8 ax88796c_tx_cmd_buf[]; |
26 | |
27 | struct axspi_data { |
28 | struct spi_device *spi; |
29 | struct spi_message rx_msg; |
30 | struct spi_transfer spi_rx_xfer[2]; |
31 | u8 cmd_buf[6]; |
32 | u8 rx_buf[6]; |
33 | u8 comp; |
34 | }; |
35 | |
36 | struct spi_status { |
37 | u16 isr; |
38 | u8 status; |
39 | # define AX_STATUS_READY 0x80 |
40 | }; |
41 | |
42 | int axspi_read_rxq(struct axspi_data *ax_spi, void *data, int len); |
43 | int axspi_write_txq(const struct axspi_data *ax_spi, void *data, int len); |
44 | u16 axspi_read_reg(struct axspi_data *ax_spi, u8 reg); |
45 | int axspi_write_reg(struct axspi_data *ax_spi, u8 reg, u16 value); |
46 | int axspi_read_status(struct axspi_data *ax_spi, struct spi_status *status); |
47 | int axspi_wakeup(struct axspi_data *ax_spi); |
48 | |
49 | static inline u16 AX_READ(struct axspi_data *ax_spi, u8 offset) |
50 | { |
51 | return axspi_read_reg(ax_spi, reg: offset); |
52 | } |
53 | |
54 | static inline int AX_WRITE(struct axspi_data *ax_spi, u16 value, u8 offset) |
55 | { |
56 | return axspi_write_reg(ax_spi, reg: offset, value); |
57 | } |
58 | |
59 | static inline int AX_READ_STATUS(struct axspi_data *ax_spi, |
60 | struct spi_status *status) |
61 | { |
62 | return axspi_read_status(ax_spi, status); |
63 | } |
64 | |
65 | static inline int AX_WAKEUP(struct axspi_data *ax_spi) |
66 | { |
67 | return axspi_wakeup(ax_spi); |
68 | } |
69 | #endif |
70 | |