Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | Chunfeng Yun <> | Subject | [PATCH 09/10] usb: phy: phy-mv-usb: convert to readl_poll_timeout_atomic() | Date | Wed, 19 Aug 2020 20:41:04 +0800 |
| |
Use readl_poll_timeout_atomic() to simplify code
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> --- drivers/usb/phy/phy-mv-usb.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/phy/phy-mv-usb.c b/drivers/usb/phy/phy-mv-usb.c index ce767ec..008ed58 100644 --- a/drivers/usb/phy/phy-mv-usb.c +++ b/drivers/usb/phy/phy-mv-usb.c @@ -8,6 +8,7 @@ #include <linux/module.h> #include <linux/kernel.h> #include <linux/io.h> +#include <linux/iopoll.h> #include <linux/uaccess.h> #include <linux/device.h> #include <linux/proc_fs.h> @@ -135,8 +136,8 @@ static int mv_otg_set_timer(struct mv_otg *mvotg, unsigned int id, static int mv_otg_reset(struct mv_otg *mvotg) { - unsigned int loops; u32 tmp; + int ret; /* Stop the controller */ tmp = readl(&mvotg->op_regs->usbcmd); @@ -146,15 +147,12 @@ static int mv_otg_reset(struct mv_otg *mvotg) /* Reset the controller to get default values */ writel(USBCMD_CTRL_RESET, &mvotg->op_regs->usbcmd); - loops = 500; - while (readl(&mvotg->op_regs->usbcmd) & USBCMD_CTRL_RESET) { - if (loops == 0) { - dev_err(&mvotg->pdev->dev, + ret = readl_poll_timeout_atomic(&mvotg->op_regs->usbcmd, tmp, + (tmp & USBCMD_CTRL_RESET), 20, 10000); + if (ret < 0) { + dev_err(&mvotg->pdev->dev, "Wait for RESET completed TIMEOUT\n"); - return -ETIMEDOUT; - } - loops--; - udelay(20); + return ret; } writel(0x0, &mvotg->op_regs->usbintr); -- 1.9.1 | ![\](/images/icornerr.gif) |