ARM: OMAP2+: prcm: add omap_test_timeout to prcm-common.h
[sfrench/cifs-2.6.git] / arch / arm / mach-omap2 / prcm-common.h
index 0e841fd9498ac4ee2c4daf4a58c34a070b302c60..e982598386a53a75252312f1ef2ad08c139fa1d0 100644 (file)
 #define MAX_IOPAD_LATCH_TIME                   100
 # ifndef __ASSEMBLER__
 
+/**
+ * omap_test_timeout - busy-loop, testing a condition
+ * @cond: condition to test until it evaluates to true
+ * @timeout: maximum number of microseconds in the timeout
+ * @index: loop index (integer)
+ *
+ * Loop waiting for @cond to become true or until at least @timeout
+ * microseconds have passed.  To use, define some integer @index in the
+ * calling code.  After running, if @index == @timeout, then the loop has
+ * timed out.
+ */
+#define omap_test_timeout(cond, timeout, index)                        \
+({                                                             \
+       for (index = 0; index < timeout; index++) {             \
+               if (cond)                                       \
+                       break;                                  \
+               udelay(1);                                      \
+       }                                                       \
+})
+
 /**
  * struct omap_prcm_irq - describes a PRCM interrupt bit
  * @name: a short name describing the interrupt type, e.g. "wkup" or "io"