Commit 1566db04 authored by Ioana Ciornei's avatar Ioana Ciornei Committed by Jakub Kicinski

net: phy: intel-xway: implement generic .handle_interrupt() callback

In an attempt to actually support shared IRQs in phylib, we now move the
responsibility of triggering the phylib state machine or just returning
IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
3 different IRQ handling callbacks (.handle_interrupt(),
.did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
driver implement directly an IRQ handler like any other device driver.
Make this driver follow the new convention.

Cc: Mathias Kresin <dev@kresin.me>
Cc: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 470dfd80
...@@ -209,14 +209,6 @@ static int xway_gphy_ack_interrupt(struct phy_device *phydev) ...@@ -209,14 +209,6 @@ static int xway_gphy_ack_interrupt(struct phy_device *phydev)
return (reg < 0) ? reg : 0; return (reg < 0) ? reg : 0;
} }
static int xway_gphy_did_interrupt(struct phy_device *phydev)
{
int reg;
reg = phy_read(phydev, XWAY_MDIO_ISTAT);
return reg & XWAY_MDIO_INIT_MASK;
}
static int xway_gphy_config_intr(struct phy_device *phydev) static int xway_gphy_config_intr(struct phy_device *phydev)
{ {
u16 mask = 0; u16 mask = 0;
...@@ -227,6 +219,24 @@ static int xway_gphy_config_intr(struct phy_device *phydev) ...@@ -227,6 +219,24 @@ static int xway_gphy_config_intr(struct phy_device *phydev)
return phy_write(phydev, XWAY_MDIO_IMASK, mask); return phy_write(phydev, XWAY_MDIO_IMASK, mask);
} }
static irqreturn_t xway_gphy_handle_interrupt(struct phy_device *phydev)
{
int irq_status;
irq_status = phy_read(phydev, XWAY_MDIO_ISTAT);
if (irq_status < 0) {
phy_error(phydev);
return IRQ_NONE;
}
if (!(irq_status & XWAY_MDIO_INIT_MASK))
return IRQ_NONE;
phy_trigger_machine(phydev);
return IRQ_HANDLED;
}
static struct phy_driver xway_gphy[] = { static struct phy_driver xway_gphy[] = {
{ {
.phy_id = PHY_ID_PHY11G_1_3, .phy_id = PHY_ID_PHY11G_1_3,
...@@ -236,7 +246,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -236,7 +246,7 @@ static struct phy_driver xway_gphy[] = {
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.config_aneg = xway_gphy14_config_aneg, .config_aneg = xway_gphy14_config_aneg,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -248,7 +258,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -248,7 +258,7 @@ static struct phy_driver xway_gphy[] = {
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.config_aneg = xway_gphy14_config_aneg, .config_aneg = xway_gphy14_config_aneg,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -260,7 +270,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -260,7 +270,7 @@ static struct phy_driver xway_gphy[] = {
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.config_aneg = xway_gphy14_config_aneg, .config_aneg = xway_gphy14_config_aneg,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -272,7 +282,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -272,7 +282,7 @@ static struct phy_driver xway_gphy[] = {
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.config_aneg = xway_gphy14_config_aneg, .config_aneg = xway_gphy14_config_aneg,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -283,7 +293,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -283,7 +293,7 @@ static struct phy_driver xway_gphy[] = {
/* PHY_GBIT_FEATURES */ /* PHY_GBIT_FEATURES */
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -294,7 +304,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -294,7 +304,7 @@ static struct phy_driver xway_gphy[] = {
/* PHY_BASIC_FEATURES */ /* PHY_BASIC_FEATURES */
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -305,7 +315,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -305,7 +315,7 @@ static struct phy_driver xway_gphy[] = {
/* PHY_GBIT_FEATURES */ /* PHY_GBIT_FEATURES */
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -316,7 +326,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -316,7 +326,7 @@ static struct phy_driver xway_gphy[] = {
/* PHY_BASIC_FEATURES */ /* PHY_BASIC_FEATURES */
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -327,7 +337,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -327,7 +337,7 @@ static struct phy_driver xway_gphy[] = {
/* PHY_GBIT_FEATURES */ /* PHY_GBIT_FEATURES */
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -338,7 +348,7 @@ static struct phy_driver xway_gphy[] = { ...@@ -338,7 +348,7 @@ static struct phy_driver xway_gphy[] = {
/* PHY_BASIC_FEATURES */ /* PHY_BASIC_FEATURES */
.config_init = xway_gphy_config_init, .config_init = xway_gphy_config_init,
.ack_interrupt = xway_gphy_ack_interrupt, .ack_interrupt = xway_gphy_ack_interrupt,
.did_interrupt = xway_gphy_did_interrupt, .handle_interrupt = xway_gphy_handle_interrupt,
.config_intr = xway_gphy_config_intr, .config_intr = xway_gphy_config_intr,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment