return -EIO;
 }
 
-/* Wait a while until mask & reg == value. Otherwise return timeout. */
 static int lan9303_read_wait(struct lan9303 *chip, int offset, u32 mask)
 {
        int i;
        return NULL;
 }
 
-/* Wait a while until mask & reg == value. Otherwise return timeout. */
-static int lan9303_csr_reg_wait(struct lan9303 *chip, int regno,
-                               int mask, char value)
+static int lan9303_csr_reg_wait(struct lan9303 *chip, int regno, u32 mask)
 {
        int i;
 
-       for (i = 0; i < 0x1000; i++) {
+       for (i = 0; i < 25; i++) {
                u32 reg;
 
                lan9303_read_switch_reg(chip, regno, ®);
-               if ((reg & mask) == value)
+               if (!(reg & mask))
                        return 0;
                usleep_range(1000, 2000);
        }
+
        return -ETIMEDOUT;
 }
 
        lan9303_write_switch_reg(chip, LAN9303_SWE_ALR_WR_DAT_1, dat1);
        lan9303_write_switch_reg(chip, LAN9303_SWE_ALR_CMD,
                                 LAN9303_ALR_CMD_MAKE_ENTRY);
-       lan9303_csr_reg_wait(chip, LAN9303_SWE_ALR_CMD_STS, ALR_STS_MAKE_PEND,
-                            0);
+       lan9303_csr_reg_wait(chip, LAN9303_SWE_ALR_CMD_STS, ALR_STS_MAKE_PEND);
        lan9303_write_switch_reg(chip, LAN9303_SWE_ALR_CMD, 0);
 
        return 0;