field->index = report->maxfield++;
        report->field[field->index] = field;
        field->usage = (struct hid_usage *)(field + 1);
-       field->value = (unsigned *)(field->usage + usages);
+       field->value = (s32 *)(field->usage + usages);
        field->report = report;
 
        return field;
 
 
        { VENDOR_ID_SUNPLUS, DEVICE_ID_SUNPLUS_WDESKTOP, quirk_sunplus_wdesktop },
 
-       { 0, 0, 0 }
+       { 0, 0, NULL }
 };
 
 int hidinput_mapping_quirks(struct hid_usage *usage, 
 
 /*
  * Traverse the supplied list of reports and find the longest
  */
-static void hid_find_max_report(struct hid_device *hid, unsigned int type, int *max)
+static void hid_find_max_report(struct hid_device *hid, unsigned int type,
+               unsigned int *max)
 {
        struct hid_report *report;
-       int size;
+       unsigned int size;
 
        list_for_each_entry(report, &hid->report_enum[type].report_list, list) {
                size = ((report->size - 1) >> 3) + 1;
        struct hid_descriptor *hdesc;
        struct hid_device *hid;
        u32 quirks = 0;
-       unsigned rsize = 0;
+       unsigned int insize = 0, rsize = 0;
        char *rdesc;
-       int n, len, insize = 0;
+       int n, len;
        struct usbhid_device *usbhid;
 
        quirks = usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor),