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