xref: /linux/drivers/net/phy/air_phy_lib.h (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
1dddfadd7SLouis-Alexis Eyraud /* SPDX-License-Identifier: GPL-2.0+ */
2dddfadd7SLouis-Alexis Eyraud /*
3dddfadd7SLouis-Alexis Eyraud  * Copyright (C) 2026 Airoha Technology Corp.
4dddfadd7SLouis-Alexis Eyraud  * Copyright (C) 2026 Collabora Ltd.
5dddfadd7SLouis-Alexis Eyraud  *                    Louis-Alexis Eyraud <louisalexis.eyraud@collabora.com>
6dddfadd7SLouis-Alexis Eyraud  */
7dddfadd7SLouis-Alexis Eyraud 
8dddfadd7SLouis-Alexis Eyraud #ifndef __AIR_PHY_LIB_H
9dddfadd7SLouis-Alexis Eyraud #define __AIR_PHY_LIB_H
10dddfadd7SLouis-Alexis Eyraud 
11dddfadd7SLouis-Alexis Eyraud #include <linux/phy.h>
12dddfadd7SLouis-Alexis Eyraud 
13*d44646fcSJakub Kicinski #define AIR_EXT_PAGE_ACCESS		0x1f
14*d44646fcSJakub Kicinski 
155226bb66SLouis-Alexis Eyraud #define AIR_PHY_PAGE_STANDARD		0x0000
165226bb66SLouis-Alexis Eyraud #define AIR_PHY_PAGE_EXTENDED_1		0x0001
175226bb66SLouis-Alexis Eyraud #define AIR_PHY_PAGE_EXTENDED_4		0x0004
185226bb66SLouis-Alexis Eyraud 
195226bb66SLouis-Alexis Eyraud /* MII Registers Page 4*/
205226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_MODE			0x10
215226bb66SLouis-Alexis Eyraud #define   AIR_BPBUS_MODE_ADDR_FIXED		0x0000
225226bb66SLouis-Alexis Eyraud #define   AIR_BPBUS_MODE_ADDR_INCR		BIT(15)
235226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_WR_ADDR_HIGH		0x11
245226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_WR_ADDR_LOW		0x12
255226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_WR_DATA_HIGH		0x13
265226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_WR_DATA_LOW		0x14
275226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_RD_ADDR_HIGH		0x15
285226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_RD_ADDR_LOW		0x16
295226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_RD_DATA_HIGH		0x17
305226bb66SLouis-Alexis Eyraud #define AIR_BPBUS_RD_DATA_LOW		0x18
315226bb66SLouis-Alexis Eyraud 
32e08f0ea6SLouis-Alexis Eyraud int air_phy_buckpbus_reg_modify(struct phy_device *phydev, u32 pbus_address,
335226bb66SLouis-Alexis Eyraud 				u32 mask, u32 set);
34e08f0ea6SLouis-Alexis Eyraud int air_phy_buckpbus_reg_read(struct phy_device *phydev, u32 pbus_address,
355226bb66SLouis-Alexis Eyraud 			      u32 *pbus_data);
36e08f0ea6SLouis-Alexis Eyraud int air_phy_buckpbus_reg_write(struct phy_device *phydev, u32 pbus_address,
375226bb66SLouis-Alexis Eyraud 			       u32 pbus_data);
38dddfadd7SLouis-Alexis Eyraud int air_phy_read_page(struct phy_device *phydev);
39dddfadd7SLouis-Alexis Eyraud int air_phy_write_page(struct phy_device *phydev, int page);
40dddfadd7SLouis-Alexis Eyraud 
41dddfadd7SLouis-Alexis Eyraud #endif /* __AIR_PHY_LIB_H */
42