xref: /linux-6.15/drivers/net/phy/qcom/qcom-phy-lib.c (revision 6fb76097)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <linux/phy.h>
4 #include <linux/module.h>
5 
6 #include "qcom.h"
7 
8 MODULE_DESCRIPTION("Qualcomm PHY driver Common Functions");
9 MODULE_AUTHOR("Matus Ujhelyi");
10 MODULE_AUTHOR("Christian Marangi <[email protected]>");
11 MODULE_LICENSE("GPL");
12 
13 int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
14 {
15 	int ret;
16 
17 	ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
18 	if (ret < 0)
19 		return ret;
20 
21 	return phy_read(phydev, AT803X_DEBUG_DATA);
22 }
23 EXPORT_SYMBOL_GPL(at803x_debug_reg_read);
24 
25 int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
26 			  u16 clear, u16 set)
27 {
28 	u16 val;
29 	int ret;
30 
31 	ret = at803x_debug_reg_read(phydev, reg);
32 	if (ret < 0)
33 		return ret;
34 
35 	val = ret & 0xffff;
36 	val &= ~clear;
37 	val |= set;
38 
39 	return phy_write(phydev, AT803X_DEBUG_DATA, val);
40 }
41 EXPORT_SYMBOL_GPL(at803x_debug_reg_mask);
42 
43 int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
44 {
45 	int ret;
46 
47 	ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
48 	if (ret < 0)
49 		return ret;
50 
51 	return phy_write(phydev, AT803X_DEBUG_DATA, data);
52 }
53 EXPORT_SYMBOL_GPL(at803x_debug_reg_write);
54