From 123266fcaf16601dbeebed64e73c8292bfb8f5fc Mon Sep 17 00:00:00 2001 From: Trent Piepho Date: Wed, 11 Jul 2007 20:28:44 -0300 Subject: [PATCH] --- yaml --- r: 61372 b: refs/heads/master c: d67be61ebe5efaf9c4c11bf168781d678854c966 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/common/ir-functions.c | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index d459309137e0..e00382d2d6a8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ba2cf98249795f03792d1409a3b6aaa589ea0745 +refs/heads/master: d67be61ebe5efaf9c4c11bf168781d678854c966 diff --git a/trunk/drivers/media/common/ir-functions.c b/trunk/drivers/media/common/ir-functions.c index fcb194135627..fe447a06e24e 100644 --- a/trunk/drivers/media/common/ir-functions.c +++ b/trunk/drivers/media/common/ir-functions.c @@ -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; }