)]}'
{
  "commit": "4dc772d274abdedcccbcebab42d4bf0016ec2e80",
  "tree": "2b7837ecf69f7590371f6cca0428ff6b8e9aec56",
  "parents": [
    "a93bd154d8571f1be84b04d7451ec72a490636d8"
  ],
  "author": {
    "name": "Daniel Kurtz",
    "email": "djkurtz@chromium.org",
    "time": "Tue Aug 23 23:02:40 2011 -0700"
  },
  "committer": {
    "name": "Dmitry Torokhov",
    "email": "dmitry.torokhov@gmail.com",
    "time": "Tue Aug 23 23:08:24 2011 -0700"
  },
  "message": "Input: synaptics - process finger (\u003c\u003d3) transitions\n\nSynaptics image sensor touchpads track 5 fingers, but only report 2.\nThis patch attempts to deal with some idiosyncrasies of these touchpads:\n\n * When there are 3 or more fingers, only two are reported.\n * The touchpad tracks the 5 fingers in slot[0] through slot[4].\n * It always reports the lowest and highest valid slots in SGM and AGM\n   packets, respectively.\n * The number of fingers is only reported in the SGM packet.  However,\n   the number of fingers can change either before or after an AGM\n   packet.\n * Thus, if an SGM reports a different number of fingers than the last\n   SGM, it is impossible to tell whether the intervening AGM corresponds\n   to the old number of fingers or the new number of fingers.\n * For example, when going from 2-\u003e3 fingers, it is not possible to tell\n   whether tell AGM contains slot[1] (old 2nd finger) or slot[2] (new\n   3rd finger).\n * When fingers are added one at at time, from 1-\u003e2-\u003e3, it is possible to\n   track which slots are contained in the SGM and AGM packets:\n     1 finger:  SGM \u003d slot[0], no AGM\n     2 fingers: SGM \u003d slot[0], AGM \u003d slot[1]\n     3 fingers: SGM \u003d slot[0], AGM \u003d slot[2]\n * It is also possible to track which slot is contained in the SGM when 1\n   of 2 fingers is removed.  This is because the touchpad sends a special\n   (0,0,0) AGM packet whenever all fingers are removed except slot[0]:\n     Last AGM \u003d\u003d (0,0,0): SGM contains slot[1]\n     Else: SGM contains slot[0]\n * However, once there are 3 fingers, if exactly 1 finger is removed, it\n   is impossible to tell which 2 slots are contained in SGM and AGM.\n   The (SGM,AGM) could be (0,1), (0,2), or (1,2). There is no way to know.\n * Similarly, if two fingers are simultaneously removed (3-\u003e1), then it\n   is only possible to know if SGM still contains slot[0].\n * Since it is not possible to reliably track which slot is being\n   reported, we invalidate the tracking_id every time the number of\n   fingers changes until this ambiguity is resolved when:\n     a) All fingers are removed.\n     b) 4 or 5 fingers are touched, generates an AGM-CONTACT packet.\n     c) All fingers are removed except slot[0].  In this special case, the\n        ambiguity is resolved since by the (0,0,0) AGM packet.\n\nBehavior of the driver:\n\nWhen 2 or more fingers are present on the touchpad, the kernel reports\nup to two MT-B slots containing the position data for two of the fingers\nreported by the touchpad.  If the identity of a finger cannot be tracked\nwhen the number-of-fingers changes, the corresponding MT-B slot will be\ninvalidated (track_id set to -1), and a new track_id will be assigned in\na subsequent input event report.\n\nThe driver always reports the total number of fingers using one of the\nEV_KEY/BTN_TOOL_*TAP events. This could differ from the number of valid\nMT-B slots for two reasons:\n a) There are more than 2 fingers on the pad.\n b) During ambiguous number-of-fingers transitions, the correct track_id\n    for one or both of the slots cannot be determined, so the slots are\n    invalidated.\n\nThus, this is a hybrid singletouch/MT-B scheme. Userspace can detect\nthis behavior by noting that the driver supports more EV_KEY/BTN_TOOL_*TAP\nevents than its maximum EV_ABS/ABS_MT_SLOT.\n\nSigned-off-by: Daniel Kurtz \u003cdjkurtz@chromium.org\u003e\nAcked-by: Chase Douglas \u003cchase.douglas@canonical.com\u003e\nAcked-by: Henrik Rydberg \u003crydberg@euromail.se\u003e\nSigned-off-by: Dmitry Torokhov \u003cdtor@mail.ru\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a7af8565e2dea09ec066eb33b00e384e439be761",
      "old_mode": 33188,
      "old_path": "drivers/input/mouse/synaptics.c",
      "new_id": "aec9cf7124f8ca7032a336713fabf6ef3a9c9637",
      "new_mode": 33188,
      "new_path": "drivers/input/mouse/synaptics.c"
    },
    {
      "type": "modify",
      "old_id": "20f57dfebed1a1777cf4eb53f77e6e177017d048",
      "old_mode": 33188,
      "old_path": "drivers/input/mouse/synaptics.h",
      "new_id": "622aea8dd7e09de66a1e573b081ece89f828e632",
      "new_mode": 33188,
      "new_path": "drivers/input/mouse/synaptics.h"
    }
  ]
}
