Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: phy: aquantia: remove the use of .ack_interrupt()

In preparation of removing the .ack_interrupt() callback, we must replace
its occurrences (aka phy_clear_interrupt), from the 2 places where it is
called from (phy_enable_interrupts and phy_disable_interrupts), with
equivalent functionality.

This means that clearing interrupts now becomes something that the PHY
driver is responsible of doing, before enabling interrupts and after
clearing them. Make this driver follow the new contract.

Cc: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Ioana Ciornei and committed by
Jakub Kicinski
e11ef96d 6ab930df

+19 -17
+19 -17
drivers/net/phy/aquantia_main.c
··· 247 247 bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED; 248 248 int err; 249 249 250 + if (en) { 251 + /* Clear any pending interrupts before enabling them */ 252 + err = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_STATUS2); 253 + if (err) 254 + return err; 255 + } 256 + 250 257 err = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_MASK2, 251 258 en ? MDIO_AN_TX_VEND_INT_MASK2_LINK : 0); 252 259 if (err < 0) ··· 264 257 if (err < 0) 265 258 return err; 266 259 267 - return phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_VEND_MASK, 268 - en ? VEND1_GLOBAL_INT_VEND_MASK_GLOBAL3 | 269 - VEND1_GLOBAL_INT_VEND_MASK_AN : 0); 270 - } 260 + err = phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_VEND_MASK, 261 + en ? VEND1_GLOBAL_INT_VEND_MASK_GLOBAL3 | 262 + VEND1_GLOBAL_INT_VEND_MASK_AN : 0); 263 + if (err < 0) 264 + return err; 271 265 272 - static int aqr_ack_interrupt(struct phy_device *phydev) 273 - { 274 - int reg; 266 + if (!en) { 267 + /* Clear any pending interrupts after we have disabled them */ 268 + err = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_STATUS2); 269 + if (err) 270 + return err; 271 + } 275 272 276 - reg = phy_read_mmd(phydev, MDIO_MMD_AN, 277 - MDIO_AN_TX_VEND_INT_STATUS2); 278 - return (reg < 0) ? reg : 0; 273 + return 0; 279 274 } 280 275 281 276 static irqreturn_t aqr_handle_interrupt(struct phy_device *phydev) ··· 613 604 .name = "Aquantia AQ1202", 614 605 .config_aneg = aqr_config_aneg, 615 606 .config_intr = aqr_config_intr, 616 - .ack_interrupt = aqr_ack_interrupt, 617 607 .handle_interrupt = aqr_handle_interrupt, 618 608 .read_status = aqr_read_status, 619 609 }, ··· 621 613 .name = "Aquantia AQ2104", 622 614 .config_aneg = aqr_config_aneg, 623 615 .config_intr = aqr_config_intr, 624 - .ack_interrupt = aqr_ack_interrupt, 625 616 .handle_interrupt = aqr_handle_interrupt, 626 617 .read_status = aqr_read_status, 627 618 }, ··· 629 622 .name = "Aquantia AQR105", 630 623 .config_aneg = aqr_config_aneg, 631 624 .config_intr = aqr_config_intr, 632 - .ack_interrupt = aqr_ack_interrupt, 633 625 .handle_interrupt = aqr_handle_interrupt, 634 626 .read_status = aqr_read_status, 635 627 .suspend = aqr107_suspend, ··· 639 633 .name = "Aquantia AQR106", 640 634 .config_aneg = aqr_config_aneg, 641 635 .config_intr = aqr_config_intr, 642 - .ack_interrupt = aqr_ack_interrupt, 643 636 .handle_interrupt = aqr_handle_interrupt, 644 637 .read_status = aqr_read_status, 645 638 }, ··· 649 644 .config_init = aqr107_config_init, 650 645 .config_aneg = aqr_config_aneg, 651 646 .config_intr = aqr_config_intr, 652 - .ack_interrupt = aqr_ack_interrupt, 653 647 .handle_interrupt = aqr_handle_interrupt, 654 648 .read_status = aqr107_read_status, 655 649 .get_tunable = aqr107_get_tunable, ··· 667 663 .config_init = aqcs109_config_init, 668 664 .config_aneg = aqr_config_aneg, 669 665 .config_intr = aqr_config_intr, 670 - .ack_interrupt = aqr_ack_interrupt, 671 666 .handle_interrupt = aqr_handle_interrupt, 672 667 .read_status = aqr107_read_status, 673 668 .get_tunable = aqr107_get_tunable, ··· 683 680 .name = "Aquantia AQR405", 684 681 .config_aneg = aqr_config_aneg, 685 682 .config_intr = aqr_config_intr, 686 - .ack_interrupt = aqr_ack_interrupt, 687 683 .handle_interrupt = aqr_handle_interrupt, 688 684 .read_status = aqr_read_status, 689 685 },