Module Name:    src
Committed By:   jmcneill
Date:           Sun Jan 11 14:59:13 UTC 2015

Modified Files:
        src/sys/arch/arm/rockchip: rockchip_i2c.c

Log Message:
rkiic_wait: fix non-polled mode


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rockchip_i2c.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/rockchip/rockchip_i2c.c
diff -u src/sys/arch/arm/rockchip/rockchip_i2c.c:1.5 src/sys/arch/arm/rockchip/rockchip_i2c.c:1.6
--- src/sys/arch/arm/rockchip/rockchip_i2c.c:1.5	Thu Jan  1 22:15:40 2015
+++ src/sys/arch/arm/rockchip/rockchip_i2c.c	Sun Jan 11 14:59:13 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rockchip_i2c.c,v 1.5 2015/01/01 22:15:40 jmcneill Exp $ */
+/* $NetBSD: rockchip_i2c.c,v 1.6 2015/01/11 14:59:13 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca>
@@ -30,7 +30,7 @@
 #include "opt_rkiic.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rockchip_i2c.c,v 1.5 2015/01/01 22:15:40 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rockchip_i2c.c,v 1.6 2015/01/11 14:59:13 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -319,16 +319,21 @@ rkiic_wait(struct rkiic_softc *sc, uint3
 		retry = timeout / hz;
 		while (retry > 0) {
 			error = cv_timedwait(&sc->sc_cv, &sc->sc_lock, hz);
-			if (error && error != EWOULDBLOCK)
-				return error;
+			if (error) {
+				if (error != EWOULDBLOCK) {
+					return error;
+				} else {
+					--retry;
+				}
+			}
 			if (sc->sc_intr_ipd & mask)
 				return 0;
-			--retry;
 		}
 	}
 
 #ifdef RKIIC_DEBUG
-	device_printf(sc->sc_dev, "%s: ipd %#x\n", __func__, sc->sc_intr_ipd);
+	device_printf(sc->sc_dev, "%s: ipd %#x flags %#x\n", __func__,
+	    sc->sc_intr_ipd, flags);
 #endif
 	return ETIMEDOUT;
 }

Reply via email to