forked from Openwrt/openwrt
8a9273d51e
Copy backport, hack, pending patch and config from 6.1 to 6.6. Signed-off-by: Weijie Gao <hackpascal@gmail.com>
79 lines
2.4 KiB
Diff
79 lines
2.4 KiB
Diff
From 30dd62191d3dd97c08f7f9dc9ce77ffab457e4fb Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Fri, 8 Dec 2023 15:51:56 +0100
|
|
Subject: [PATCH 09/13] net: phy: at803x: move specific at8031 config_intr to
|
|
dedicated function
|
|
|
|
Move specific at8031 config_intr bits to dedicated function to make
|
|
at803x_config_initr more generic.
|
|
|
|
This is needed in preparation for PHY driver split as qca8081 share the
|
|
same function to setup interrupts.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 30 ++++++++++++++++++++++++------
|
|
1 file changed, 24 insertions(+), 6 deletions(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -990,7 +990,6 @@ static int at803x_ack_interrupt(struct p
|
|
|
|
static int at803x_config_intr(struct phy_device *phydev)
|
|
{
|
|
- struct at803x_priv *priv = phydev->priv;
|
|
int err;
|
|
int value;
|
|
|
|
@@ -1007,10 +1006,6 @@ static int at803x_config_intr(struct phy
|
|
value |= AT803X_INTR_ENABLE_DUPLEX_CHANGED;
|
|
value |= AT803X_INTR_ENABLE_LINK_FAIL;
|
|
value |= AT803X_INTR_ENABLE_LINK_SUCCESS;
|
|
- if (priv->is_fiber) {
|
|
- value |= AT803X_INTR_ENABLE_LINK_FAIL_BX;
|
|
- value |= AT803X_INTR_ENABLE_LINK_SUCCESS_BX;
|
|
- }
|
|
|
|
err = phy_write(phydev, AT803X_INTR_ENABLE, value);
|
|
} else {
|
|
@@ -1617,6 +1612,29 @@ static int at8031_set_wol(struct phy_dev
|
|
return ret;
|
|
}
|
|
|
|
+static int at8031_config_intr(struct phy_device *phydev)
|
|
+{
|
|
+ struct at803x_priv *priv = phydev->priv;
|
|
+ int err, value = 0;
|
|
+
|
|
+ if (phydev->interrupts == PHY_INTERRUPT_ENABLED &&
|
|
+ priv->is_fiber) {
|
|
+ /* Clear any pending interrupts */
|
|
+ err = at803x_ack_interrupt(phydev);
|
|
+ if (err)
|
|
+ return err;
|
|
+
|
|
+ value |= AT803X_INTR_ENABLE_LINK_FAIL_BX;
|
|
+ value |= AT803X_INTR_ENABLE_LINK_SUCCESS_BX;
|
|
+
|
|
+ err = phy_set_bits(phydev, AT803X_INTR_ENABLE, value);
|
|
+ if (err)
|
|
+ return err;
|
|
+ }
|
|
+
|
|
+ return at803x_config_intr(phydev);
|
|
+}
|
|
+
|
|
static int qca83xx_config_init(struct phy_device *phydev)
|
|
{
|
|
u8 switch_revision;
|
|
@@ -2137,7 +2155,7 @@ static struct phy_driver at803x_driver[]
|
|
.write_page = at803x_write_page,
|
|
.get_features = at803x_get_features,
|
|
.read_status = at803x_read_status,
|
|
- .config_intr = at803x_config_intr,
|
|
+ .config_intr = at8031_config_intr,
|
|
.handle_interrupt = at803x_handle_interrupt,
|
|
.get_tunable = at803x_get_tunable,
|
|
.set_tunable = at803x_set_tunable,
|