Author: thompsa
Date: Wed May 13 18:06:52 2009
New Revision: 192055
URL: http://svn.freebsd.org/changeset/base/192055

Log:
  Make sure collections have the usage field set.
  
  Submitted by: Hans Petter Selasky

Modified:
  head/sys/dev/usb/usb_hid.c

Modified: head/sys/dev/usb/usb_hid.c
==============================================================================
--- head/sys/dev/usb/usb_hid.c  Wed May 13 18:05:40 2009        (r192054)
+++ head/sys/dev/usb/usb_hid.c  Wed May 13 18:06:52 2009        (r192055)
@@ -309,6 +309,7 @@ hid_get_item(struct hid_data *s, struct 
                                c->kind = hid_collection;
                                c->collection = dval;
                                c->collevel++;
+                               c->usage = s->usage_last;
                                *h = *c;
                                return (1);
                        case 11:        /* Feature */
@@ -408,6 +409,9 @@ hid_get_item(struct hid_data *s, struct 
                                if (bSize != 4)
                                        dval = (dval & mask) | c->_usage_page;
 
+                               /* set last usage, in case of a collection */
+                               s->usage_last = dval;
+
                                if (s->nusage < MAXUSAGE) {
                                        s->usages_min[s->nusage] = dval;
                                        s->usages_max[s->nusage] = dval;
@@ -630,9 +634,11 @@ hid_is_collection(const void *desc, usb2
        if (hd == NULL)
                return (0);
 
-       err = hid_get_item(hd, &hi) &&
-           hi.kind == hid_collection &&
-           hi.usage == usage;
+       while ((err = hid_get_item(hd, &hi))) {
+                if (hi.kind == hid_collection &&
+                    hi.usage == usage)
+                       break;
+       }
        hid_end_parse(hd);
        return (err);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to