Messages in this thread | | | Date | Fri, 22 Mar 2013 15:48:37 +0100 | From | Benjamin Tissoires <> | Subject | Re: [PATCH 1/7] HID: input: don't register unmapped input devices |
| |
On 03/19/2013 10:25 PM, Henrik Rydberg wrote: > Hi Benjamin, > >> There is no need to register an input device containing no events. >> This allows drivers using the quirk MULTI_INPUT to register one input >> per report effectively used. >> >> For backward compatibility, we need to add a quirk to request >> this behavior. >> >> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> >> --- >> drivers/hid/hid-input.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ >> include/linux/hid.h | 1 + >> 2 files changed, 78 insertions(+) >> >> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c >> index 21b196c..7aaf7d3 100644 >> --- a/drivers/hid/hid-input.c >> +++ b/drivers/hid/hid-input.c >> @@ -1198,6 +1198,67 @@ static struct hid_input *hidinput_allocate(struct hid_device *hid) >> return hidinput; >> } >> >> +static bool hidinput_has_been_populated(struct hid_input *hidinput) >> +{ >> + int i; >> + bool r = 0; >> + >> + for (i = 0; i < BITS_TO_LONGS(EV_CNT); i++) >> + r = r || hidinput->input->evbit[i]; > > I believe there is a bit count method that will do this for you (weight). >
Actually, weight does not work here. evbit[] is an array of long, and we still need to check if each field of this array is not null.
Thus, the following can be used (r being a long here): r |= hidinput->input->evbit[i];
Cheers, Benjamin
| |