]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/common/ir-functions.c
V4L/DVB (5832): ir-common: optimize bit extract function
[linux-2.6-omap-h63xx.git] / drivers / media / common / ir-functions.c
index fcb194135627f9e32bb01f8f33db53e4b2a41fdd..fe447a06e24efd9ad3961a8c07e056f6ff3feda0 100644 (file)
@@ -107,21 +107,20 @@ void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir,
 }
 
 /* -------------------------------------------------------------------------- */
-
+/* extract mask bits out of data and pack them into the result */
 u32 ir_extract_bits(u32 data, u32 mask)
 {
-       int mbit, vbit;
-       u32 value;
+       u32 vbit = 1, value = 0;
+
+       do {
+           if (mask&1) {
+               if (data&1)
+                       value |= vbit;
+               vbit<<=1;
+           }
+           data>>=1;
+       } while (mask>>=1);
 
-       value = 0;
-       vbit  = 0;
-       for (mbit = 0; mbit < 32; mbit++) {
-               if (!(mask & ((u32)1 << mbit)))
-                       continue;
-               if (data & ((u32)1 << mbit))
-                       value |= (1 << vbit);
-               vbit++;
-       }
        return value;
 }