#include <linux/input.h>
 #include <linux/hid.h>
 
-#define map_abs(c)      do { usage->code = c; usage->type = EV_ABS; bit = input->absbit; *max = ABS_MAX; } while (0)
-#define map_rel(c)      do { usage->code = c; usage->type = EV_REL; bit = input->relbit; *max = REL_MAX; } while (0)
-#define map_key(c)      do { usage->code = c; usage->type = EV_KEY; bit = input->keybit; *max = KEY_MAX; } while (0)
-#define map_led(c)      do { usage->code = c; usage->type = EV_LED; bit = input->ledbit; *max = LED_MAX; } while (0)
+#define map_abs(c)      do { usage->code = c; usage->type = EV_ABS; *bit = input->absbit; *max = ABS_MAX; } while (0)
+#define map_rel(c)      do { usage->code = c; usage->type = EV_REL; *bit = input->relbit; *max = REL_MAX; } while (0)
+#define map_key(c)      do { usage->code = c; usage->type = EV_KEY; *bit = input->keybit; *max = KEY_MAX; } while (0)
+#define map_led(c)      do { usage->code = c; usage->type = EV_LED; *bit = input->ledbit; *max = LED_MAX; } while (0)
 
-#define map_abs_clear(c)        do { map_abs(c); clear_bit(c, bit); } while (0)
-#define map_key_clear(c)        do { map_key(c); clear_bit(c, bit); } while (0)
+#define map_abs_clear(c)        do { map_abs(c); clear_bit(c, *bit); } while (0)
+#define map_key_clear(c)        do { map_key(c); clear_bit(c, *bit); } while (0)
 
 static int quirk_belkin_wkbd(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
                return 0;
 }
 
 static int quirk_cherry_cymotion(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
                return 0;
 }
 
 static int quirk_logitech_ultrax_remote(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR)
                return 0;
 }
 
 static int quirk_chicony_tactical_pad(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR)
                return 0;
 }
 
 static int quirk_microsoft_ergonomy_kb(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR)
                return 0;
 }
 
 static int quirk_microsoft_presenter_8k(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR)
                return 0;
 }
 
 static int quirk_petalynx_remote(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if (((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR) &&
                        ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER))
 }
 
 static int quirk_logitech_wireless(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
                return 0;
 }
 
 static int quirk_cherry_genius_29e(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
                return 0;
 }
 
 static int quirk_btc_8193(struct hid_usage *usage, struct input_dev *input,
-                             unsigned long *bit, int *max)
+                             unsigned long **bit, int *max)
 {
        if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
                return 0;
 static const struct hid_input_blacklist {
        __u16 idVendor;
        __u16 idProduct;
-       int (*quirk)(struct hid_usage *, struct input_dev *, unsigned long *, int *);
+       int (*quirk)(struct hid_usage *, struct input_dev *, unsigned long **, int *);
 } hid_input_blacklist[] = {
        { VENDOR_ID_BELKIN, DEVICE_ID_BELKIN_WIRELESS_KEYBOARD, quirk_belkin_wkbd },
 
 
 int hidinput_mapping_quirks(struct hid_usage *usage, 
                                   struct input_dev *input, 
-                                  unsigned long *bit, int *max)
+                                  unsigned long **bit, int *max)
 {
        struct hid_device *device = input_get_drvdata(input);
        int i = 0;
 
 int hid_set_field(struct hid_field *, unsigned, __s32);
 int hid_input_report(struct hid_device *, int type, u8 *, int, int);
 int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
-int hidinput_mapping_quirks(struct hid_usage *, struct input_dev *, unsigned long *, int *);
+int hidinput_mapping_quirks(struct hid_usage *, struct input_dev *, unsigned long **, int *);
 void hidinput_event_quirks(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
 int hidinput_apple_event(struct hid_device *, struct input_dev *, struct hid_usage *, __s32);
 void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data, int interrupt);