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

net: phy: icplus: remove the use .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: Martin Blumenstingl <martin.blumenstingl@googlemail.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
12ae7ba3 25497b7f

+25 -13
+25 -13
drivers/net/phy/icplus.c
··· 272 272 return phy_write(phydev, IP10XX_SPEC_CTRL_STATUS, c); 273 273 } 274 274 275 + static int ip101a_g_ack_interrupt(struct phy_device *phydev) 276 + { 277 + int err = phy_read(phydev, IP101A_G_IRQ_CONF_STATUS); 278 + 279 + if (err < 0) 280 + return err; 281 + 282 + return 0; 283 + } 284 + 275 285 static int ip101a_g_config_intr(struct phy_device *phydev) 276 286 { 277 287 u16 val; 288 + int err; 278 289 279 - if (phydev->interrupts == PHY_INTERRUPT_ENABLED) 290 + if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { 291 + err = ip101a_g_ack_interrupt(phydev); 292 + if (err) 293 + return err; 294 + 280 295 /* INTR pin used: Speed/link/duplex will cause an interrupt */ 281 296 val = IP101A_G_IRQ_PIN_USED; 282 - else 297 + err = phy_write(phydev, IP101A_G_IRQ_CONF_STATUS, val); 298 + } else { 283 299 val = IP101A_G_IRQ_ALL_MASK; 300 + err = phy_write(phydev, IP101A_G_IRQ_CONF_STATUS, val); 301 + if (err) 302 + return err; 284 303 285 - return phy_write(phydev, IP101A_G_IRQ_CONF_STATUS, val); 304 + err = ip101a_g_ack_interrupt(phydev); 305 + } 306 + 307 + return err; 286 308 } 287 309 288 310 static irqreturn_t ip101a_g_handle_interrupt(struct phy_device *phydev) ··· 325 303 phy_trigger_machine(phydev); 326 304 327 305 return IRQ_HANDLED; 328 - } 329 - 330 - static int ip101a_g_ack_interrupt(struct phy_device *phydev) 331 - { 332 - int err = phy_read(phydev, IP101A_G_IRQ_CONF_STATUS); 333 - if (err < 0) 334 - return err; 335 - 336 - return 0; 337 306 } 338 307 339 308 static struct phy_driver icplus_driver[] = { ··· 353 340 /* PHY_BASIC_FEATURES */ 354 341 .probe = ip101a_g_probe, 355 342 .config_intr = ip101a_g_config_intr, 356 - .ack_interrupt = ip101a_g_ack_interrupt, 357 343 .handle_interrupt = ip101a_g_handle_interrupt, 358 344 .config_init = &ip101a_g_config_init, 359 345 .suspend = genphy_suspend,