ksz_write32(dev, REG_SW_ALU_VAL_D, table[3]);
 }
 
-static int ksz9477_wait_alu_ready(struct ksz_device *dev, u32 waiton,
-                                 int timeout)
+static int ksz9477_wait_alu_ready(struct ksz_device *dev)
 {
-       u32 data;
-
-       do {
-               ksz_read32(dev, REG_SW_ALU_CTRL__4, &data);
-               if (!(data & waiton))
-                       break;
-               usleep_range(1, 10);
-       } while (timeout-- > 0);
-
-       if (timeout <= 0)
-               return -ETIMEDOUT;
+       unsigned int val;
 
-       return 0;
+       return regmap_read_poll_timeout(dev->regmap[2], REG_SW_ALU_CTRL__4,
+                                       val, !(val & ALU_START), 10, 1000);
 }
 
 static int ksz9477_wait_alu_sta_ready(struct ksz_device *dev, u32 waiton,
        ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_READ | ALU_START);
 
        /* wait to be finished */
-       ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000);
-       if (ret < 0) {
+       ret = ksz9477_wait_alu_ready(dev);
+       if (ret) {
                dev_dbg(dev->dev, "Failed to read ALU\n");
                goto exit;
        }
        ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_WRITE | ALU_START);
 
        /* wait to be finished */
-       ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000);
-       if (ret < 0)
+       ret = ksz9477_wait_alu_ready(dev);
+       if (ret)
                dev_dbg(dev->dev, "Failed to write ALU\n");
 
 exit:
        ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_READ | ALU_START);
 
        /* wait to be finished */
-       ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000);
-       if (ret < 0) {
+       ret = ksz9477_wait_alu_ready(dev);
+       if (ret) {
                dev_dbg(dev->dev, "Failed to read ALU\n");
                goto exit;
        }
        ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_WRITE | ALU_START);
 
        /* wait to be finished */
-       ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000);
-       if (ret < 0)
+       ret = ksz9477_wait_alu_ready(dev);
+       if (ret)
                dev_dbg(dev->dev, "Failed to write ALU\n");
 
 exit: