)]}'
{
  "commit": "a4c39c41bf3592684e36fa0dbbd4ab1a31f969b9",
  "tree": "548a902e3dc3999742fba83ff93c7584f995b73a",
  "parents": [
    "a7707adf9ee8de3c5b67e3793b98888f551ad00d"
  ],
  "author": {
    "name": "David Brownell",
    "email": "dbrownell@users.sourceforge.net",
    "time": "Thu Jun 19 17:52:25 2008 -0700"
  },
  "committer": {
    "name": "Greg Kroah-Hartman",
    "email": "gregkh@suse.de",
    "time": "Mon Jul 21 15:16:00 2008 -0700"
  },
  "message": "usb gadget: descriptor copying support\n\nDefine three new descriptor manipulation utilities, for use when\nsetting up functions that may have multiple instances:\n\n\tusb_copy_descriptors() to copy a vector of descriptors\n\tusb_free_descriptors() to free the copy\n\tusb_find_endpoint() to find a copied version\n\nThese will be used as follows.  Functions will continue to have static\ntables of descriptors they update, now used as __initdata templates.\n\nWhen a function creates a new instance, it patches those tables with\nrelevant interface and string IDs, plus endpoint assignments.  Then it\ncopies those morphed descriptors, associates the copies with the new\nfunction instance, and records the endpoint descriptors to use when\nactivating the endpoints.  When initialization is done, only the copies\nremain in memory.  The copies are freed on driver removal.\n\nThis ensures that each instance has descriptors which hold the right\ninstance-specific data.  Two instances in the same configuration will\nobviously never share the same interface IDs or use the same endpoints.\nInstances in different configurations won\u0027t do so either, which means\nthis is slightly less memory-efficient in some cases.\n\nThis also includes a bugfix to the epautoconf code that shows up with\nthis usage model.  It must replace the previous endpoint number when\nupdating the template descriptors, not just mask in a few more bits.\n\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a4e54b2743f008e4368b551db63d87ef88bee11d",
      "old_mode": 33188,
      "old_path": "drivers/usb/gadget/config.c",
      "new_id": "1ca1c326392a9051c4609d84ad4b9ec2284432ec",
      "new_mode": 33188,
      "new_path": "drivers/usb/gadget/config.c"
    },
    {
      "type": "modify",
      "old_id": "8bdad221fa91adc094c45ee1dea65cb0677c84e2",
      "old_mode": 33188,
      "old_path": "drivers/usb/gadget/epautoconf.c",
      "new_id": "9462e30192d8d742d419b59821cb135d89176ae3",
      "new_mode": 33188,
      "new_path": "drivers/usb/gadget/epautoconf.c"
    },
    {
      "type": "modify",
      "old_id": "cf468fbdbf8e80b504ecb3ac1d798120c066ca2f",
      "old_mode": 33188,
      "old_path": "include/linux/usb/gadget.h",
      "new_id": "0ebedaec075de8289dd6c3fb0f771c06cf5fe3bd",
      "new_mode": 33188,
      "new_path": "include/linux/usb/gadget.h"
    }
  ]
}
