ipq40xx: refresh ess driver and phy with new api
[openwrt/staging/mkresin.git] / target / linux / ipq40xx / files / drivers / net / phy / qca807x.c
index 16d7a80455efe7dcb609d95fc85497bb060d323f..8d523548e52fc921c55718e842a2c1953c764b63 100644 (file)
@@ -610,6 +610,7 @@ static int qca807x_config_intr(struct phy_device *phydev)
        return ret;
 }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
 static int qca807x_ack_intr(struct phy_device *phydev)
 {
        int ret;
@@ -618,6 +619,33 @@ static int qca807x_ack_intr(struct phy_device *phydev)
 
        return (ret < 0) ? ret : 0;
 }
+#else
+static irqreturn_t qca807x_handle_interrupt(struct phy_device *phydev)
+{
+       int irq_status, int_enabled;
+
+       irq_status = phy_read(phydev, QCA807X_INTR_STATUS);
+       if (irq_status < 0) {
+               phy_error(phydev);
+               return IRQ_NONE;
+       }
+
+       /* Read the current enabled interrupts */
+       int_enabled = phy_read(phydev, QCA807X_INTR_ENABLE);
+       if (int_enabled < 0) {
+               phy_error(phydev);
+               return IRQ_NONE;
+       }
+
+       /* See if this was one of our enabled interrupts */
+       if (!(irq_status & int_enabled))
+               return IRQ_NONE;
+
+       phy_trigger_machine(phydev);
+
+       return IRQ_HANDLED;
+}
+#endif
 
 static int qca807x_led_config(struct phy_device *phydev)
 {
@@ -779,7 +807,11 @@ static struct phy_driver qca807x_drivers[] = {
                .config_init    = qca807x_config,
                .read_status    = qca807x_read_status,
                .config_intr    = qca807x_config_intr,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
                .ack_interrupt  = qca807x_ack_intr,
+#else
+               .handle_interrupt = qca807x_handle_interrupt,
+#endif
                .soft_reset     = genphy_soft_reset,
                .get_tunable    = qca807x_get_tunable,
                .set_tunable    = qca807x_set_tunable,
@@ -799,7 +831,11 @@ static struct phy_driver qca807x_drivers[] = {
                .config_init    = qca807x_config,
                .read_status    = qca807x_read_status,
                .config_intr    = qca807x_config_intr,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
                .ack_interrupt  = qca807x_ack_intr,
+#else
+               .handle_interrupt = qca807x_handle_interrupt,
+#endif
                .soft_reset     = genphy_soft_reset,
                .get_tunable    = qca807x_get_tunable,
                .set_tunable    = qca807x_set_tunable,