|
@@ -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;
|
|
|
}
|
|
|
|