Skip to content

Commit 5c13e07

Browse files
hjelmelanddavem330
authored andcommitted
net: dsa: lan9303: Introduce lan9303_read_wait
Simplify lan9303_indirect_phy_wait_for_completion() and lan9303_switch_wait_for_completion() by using a new function lan9303_read_wait() Changes v1 -> v2: - param 'mask' type u32 - removed param 'value' (will probably never be used) - add newline before return Signed-off-by: Egil Hjelmeland <[email protected]> Reviewed-by: Vivien Didelot <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f4d87ad commit 5c13e07

File tree

1 file changed

+27
-32
lines changed

1 file changed

+27
-32
lines changed

drivers/net/dsa/lan9303-core.c

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,29 @@ static int lan9303_read(struct regmap *regmap, unsigned int offset, u32 *reg)
249249
return -EIO;
250250
}
251251

252+
/* Wait a while until mask & reg == value. Otherwise return timeout. */
253+
static int lan9303_read_wait(struct lan9303 *chip, int offset, u32 mask)
254+
{
255+
int i;
256+
257+
for (i = 0; i < 25; i++) {
258+
u32 reg;
259+
int ret;
260+
261+
ret = lan9303_read(chip->regmap, offset, &reg);
262+
if (ret) {
263+
dev_err(chip->dev, "%s failed to read offset %d: %d\n",
264+
__func__, offset, ret);
265+
return ret;
266+
}
267+
if (!(reg & mask))
268+
return 0;
269+
usleep_range(1000, 2000);
270+
}
271+
272+
return -ETIMEDOUT;
273+
}
274+
252275
static int lan9303_virt_phy_reg_read(struct lan9303 *chip, int regnum)
253276
{
254277
int ret;
@@ -274,22 +297,8 @@ static int lan9303_virt_phy_reg_write(struct lan9303 *chip, int regnum, u16 val)
274297

275298
static int lan9303_indirect_phy_wait_for_completion(struct lan9303 *chip)
276299
{
277-
int ret, i;
278-
u32 reg;
279-
280-
for (i = 0; i < 25; i++) {
281-
ret = lan9303_read(chip->regmap, LAN9303_PMI_ACCESS, &reg);
282-
if (ret) {
283-
dev_err(chip->dev,
284-
"Failed to read pmi access status: %d\n", ret);
285-
return ret;
286-
}
287-
if (!(reg & LAN9303_PMI_ACCESS_MII_BUSY))
288-
return 0;
289-
usleep_range(1000, 2000);
290-
}
291-
292-
return -EIO;
300+
return lan9303_read_wait(chip, LAN9303_PMI_ACCESS,
301+
LAN9303_PMI_ACCESS_MII_BUSY);
293302
}
294303

295304
static int lan9303_indirect_phy_read(struct lan9303 *chip, int addr, int regnum)
@@ -366,22 +375,8 @@ EXPORT_SYMBOL_GPL(lan9303_indirect_phy_ops);
366375

367376
static int lan9303_switch_wait_for_completion(struct lan9303 *chip)
368377
{
369-
int ret, i;
370-
u32 reg;
371-
372-
for (i = 0; i < 25; i++) {
373-
ret = lan9303_read(chip->regmap, LAN9303_SWITCH_CSR_CMD, &reg);
374-
if (ret) {
375-
dev_err(chip->dev,
376-
"Failed to read csr command status: %d\n", ret);
377-
return ret;
378-
}
379-
if (!(reg & LAN9303_SWITCH_CSR_CMD_BUSY))
380-
return 0;
381-
usleep_range(1000, 2000);
382-
}
383-
384-
return -EIO;
378+
return lan9303_read_wait(chip, LAN9303_SWITCH_CSR_CMD,
379+
LAN9303_SWITCH_CSR_CMD_BUSY);
385380
}
386381

387382
static int lan9303_write_switch_reg(struct lan9303 *chip, u16 regnum, u32 val)

0 commit comments

Comments
 (0)