From f02aa2831e169a9f17eebb2784db4c95944ba927 Mon Sep 17 00:00:00 2001 From: Andrey Gusakov Date: Mon, 25 Sep 2017 07:13:29 +0300 Subject: [PATCH] MOST: dim2: add timeouts Get rid from loop hang if device not functional Signed-off-by: Andrey Gusakov Signed-off-by: Vladimir Barinov --- drivers/staging/most/hdm-dim2/dim2_hal.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/staging/most/hdm-dim2/dim2_hal.c b/drivers/staging/most/hdm-dim2/dim2_hal.c index 231138c..ee0e307 100644 --- a/drivers/staging/most/hdm-dim2/dim2_hal.c +++ b/drivers/staging/most/hdm-dim2/dim2_hal.c @@ -18,6 +18,7 @@ #include "dim2_errors.h" #include "dim2_reg.h" #include +#include /* * Size factor for isochronous DBR buffer. @@ -148,11 +149,16 @@ static void free_dbr(int offs, int size) static void dim2_transfer_madr(u32 val) { + int timeout = 1000; dimcb_io_write(&g.dim2->MADR, val); /* wait for transfer completion */ - while ((dimcb_io_read(&g.dim2->MCTL) & 1) != 1) + while ((dimcb_io_read(&g.dim2->MCTL) & 1) != 1) { + if (--timeout == 0) + break; + udelay(1); continue; + } dimcb_io_write(&g.dim2->MCTL, 0); /* clear transfer complete */ } -- 1.9.1