c2c741ccce
Initial backport of at803x PHY driver cleanup. This is in preparation for split and addition of new PHY Family based on at803x needed for ipq807x and other IPQ Series SoC. Other affected patch are automatically refreshed with make target/linux/refresh Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
119 lines
3.8 KiB
Diff
119 lines
3.8 KiB
Diff
From e0e9ada1df6133513249861c1d91c1dbefd9383b Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Thu, 4 Jan 2024 22:30:39 +0100
|
|
Subject: [PATCH 2/4] net: phy: at803x: refactor qca808x cable test get status
|
|
function
|
|
|
|
Refactor qca808x cable test get status function to remove code
|
|
duplication and clean things up.
|
|
|
|
The same logic is applied to each pair hence it can be generalized and
|
|
moved to a common function.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Reviewed-by: Simon Horman <horms@kernel.org>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 80 ++++++++++++++++++++++++----------------
|
|
1 file changed, 49 insertions(+), 31 deletions(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -2035,10 +2035,43 @@ static int qca808x_cable_test_start(stru
|
|
return 0;
|
|
}
|
|
|
|
+static int qca808x_cable_test_get_pair_status(struct phy_device *phydev, u8 pair,
|
|
+ u16 status)
|
|
+{
|
|
+ u16 pair_code;
|
|
+ int length;
|
|
+
|
|
+ switch (pair) {
|
|
+ case ETHTOOL_A_CABLE_PAIR_A:
|
|
+ pair_code = FIELD_GET(QCA808X_CDT_CODE_PAIR_A, status);
|
|
+ break;
|
|
+ case ETHTOOL_A_CABLE_PAIR_B:
|
|
+ pair_code = FIELD_GET(QCA808X_CDT_CODE_PAIR_B, status);
|
|
+ break;
|
|
+ case ETHTOOL_A_CABLE_PAIR_C:
|
|
+ pair_code = FIELD_GET(QCA808X_CDT_CODE_PAIR_C, status);
|
|
+ break;
|
|
+ case ETHTOOL_A_CABLE_PAIR_D:
|
|
+ pair_code = FIELD_GET(QCA808X_CDT_CODE_PAIR_D, status);
|
|
+ break;
|
|
+ default:
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ ethnl_cable_test_result(phydev, pair,
|
|
+ qca808x_cable_test_result_trans(pair_code));
|
|
+
|
|
+ if (qca808x_cdt_fault_length_valid(pair_code)) {
|
|
+ length = qca808x_cdt_fault_length(phydev, pair);
|
|
+ ethnl_cable_test_fault_length(phydev, pair, length);
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static int qca808x_cable_test_get_status(struct phy_device *phydev, bool *finished)
|
|
{
|
|
int ret, val;
|
|
- int pair_a, pair_b, pair_c, pair_d;
|
|
|
|
*finished = false;
|
|
|
|
@@ -2057,36 +2090,21 @@ static int qca808x_cable_test_get_status
|
|
if (val < 0)
|
|
return val;
|
|
|
|
- pair_a = FIELD_GET(QCA808X_CDT_CODE_PAIR_A, val);
|
|
- pair_b = FIELD_GET(QCA808X_CDT_CODE_PAIR_B, val);
|
|
- pair_c = FIELD_GET(QCA808X_CDT_CODE_PAIR_C, val);
|
|
- pair_d = FIELD_GET(QCA808X_CDT_CODE_PAIR_D, val);
|
|
-
|
|
- ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_A,
|
|
- qca808x_cable_test_result_trans(pair_a));
|
|
- ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_B,
|
|
- qca808x_cable_test_result_trans(pair_b));
|
|
- ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_C,
|
|
- qca808x_cable_test_result_trans(pair_c));
|
|
- ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_D,
|
|
- qca808x_cable_test_result_trans(pair_d));
|
|
-
|
|
- if (qca808x_cdt_fault_length_valid(pair_a)) {
|
|
- val = qca808x_cdt_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_A);
|
|
- ethnl_cable_test_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_A, val);
|
|
- }
|
|
- if (qca808x_cdt_fault_length_valid(pair_b)) {
|
|
- val = qca808x_cdt_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_B);
|
|
- ethnl_cable_test_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_B, val);
|
|
- }
|
|
- if (qca808x_cdt_fault_length_valid(pair_c)) {
|
|
- val = qca808x_cdt_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_C);
|
|
- ethnl_cable_test_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_C, val);
|
|
- }
|
|
- if (qca808x_cdt_fault_length_valid(pair_d)) {
|
|
- val = qca808x_cdt_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_D);
|
|
- ethnl_cable_test_fault_length(phydev, ETHTOOL_A_CABLE_PAIR_D, val);
|
|
- }
|
|
+ ret = qca808x_cable_test_get_pair_status(phydev, ETHTOOL_A_CABLE_PAIR_A, val);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = qca808x_cable_test_get_pair_status(phydev, ETHTOOL_A_CABLE_PAIR_B, val);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = qca808x_cable_test_get_pair_status(phydev, ETHTOOL_A_CABLE_PAIR_C, val);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = qca808x_cable_test_get_pair_status(phydev, ETHTOOL_A_CABLE_PAIR_D, val);
|
|
+ if (ret)
|
|
+ return ret;
|
|
|
|
*finished = true;
|
|
|