1N-Trig touchscreen Driver
   3        Copyright (c) 2008-2010 Rafi Rubin <>
   4        Copyright (c) 2009-2010 Stephane Chatty
   6This driver provides support for N-Trig pen and multi-touch sensors.  Single
   7and multi-touch events are translated to the appropriate protocols for
   8the hid and input systems.  Pen events are sufficiently hid compliant and
   9are left to the hid core.  The driver also provides additional filtering
  10and utility functions accessible with sysfs and module parameters.
  12This driver has been reported to work properly with multiple N-Trig devices
  19Note: values set at load time are global and will apply to all applicable
  20devices.  Adjusting parameters with sysfs will override the load time values,
  21but only for that one device.
  23The following parameters are used to configure filters to reduce noise:
  25activate_slack          number of fingers to ignore before processing events
  27activation_height       size threshold to activate immediately
  30min_height              size threshold bellow which fingers are ignored
  31min_width               both to decide activation and during activity
  33deactivate_slack        the number of "no contact" frames to ignore before
  34                        propagating the end of activity events
  36When the last finger is removed from the device, it sends a number of empty
  37frames.  By holding off on deactivation for a few frames we can tolerate false
  38erroneous disconnects, where the sensor may mistakenly not detect a finger that
  39is still present.  Thus deactivate_slack addresses problems where a users might
  40see breaks in lines during drawing, or drop an object during a long drag.
  43Additional sysfs items
  46These nodes just provide easy access to the ranges reported by the device.
  47sensor_logical_height   the range for positions reported during activity
  50sensor_physical_height  internal ranges not used for normal events but
  51sensor_physical_width   useful for tuning
  53All N-Trig devices with product id of 1 report events in the ranges of
  54X: 0-9600
  55Y: 0-7200
  56However not all of these devices have the same physical dimensions.  Most
  57seem to be 12" sensors (Dell Latitude XT and XT2 and the HP TX2), and
  58at least one model (Dell Studio 17) has a 17" sensor.  The ratio of physical
  59to logical sizes is used to adjust the size based filter parameters.
  65With the release of the early multi-touch firmwares it became increasingly
  66obvious that these sensors were prone to erroneous events.  Users reported
  67seeing both inappropriately dropped contact and ghosts, contacts reported
  68where no finger was actually touching the screen.
  70Deactivation slack helps prevent dropped contact for single touch use, but does
  71not address the problem of dropping one of more contacts while other contacts
  72are still active.  Drops in the multi-touch context require additional
  73processing and should be handled in tandem with tacking.
  75As observed ghost contacts are similar to actual use of the sensor, but they
  76seem to have different profiles.  Ghost activity typically shows up as small
  77short lived touches.  As such, I assume that the longer the continuous stream
  78of events the more likely those events are from a real contact, and that the
  79larger the size of each contact the more likely it is real.  Balancing the
  80goals of preventing ghosts and accepting real events quickly (to minimize
  81user observable latency), the filter accumulates confidence for incoming
  82events until it hits thresholds and begins propagating.  In the interest in
  83minimizing stored state as well as the cost of operations to make a decision,
  84I've kept that decision simple.
  86Time is measured in terms of the number of fingers reported, not frames since
  87the probability of multiple simultaneous ghosts is expected to drop off
  88dramatically with increasing numbers.  Rather than accumulate weight as a
  89function of size, I just use it as a binary threshold.  A sufficiently large
  90contact immediately overrides the waiting period and leads to activation.
  92Setting the activation size thresholds to large values will result in deciding
  93primarily on activation slack.  If you see longer lived ghosts, turning up the
9me is me9sured in terms of the n9mber 927" id="L27" class="line" name="L27">  27a9e probab9lity of multiple simult9neous9ghostCr, but t/ntrig.eXT2 andhref="edtation/hich fingeinputon and dupaga aftid="L2" class="line" name="L2">   2----9amatical9y with increasing numbe9s.  R9e sufficiopetialosts, turninhref="Dssestursfiedn/inputi7b1c5Dssetentation/="L2" class="line" name="L2">   2----9left to tthe hid core.  The drivea bin9o provporcionismig.txxt#L10" i o#L7ntation//ntrigeturnt/ntnnputrig.txt#L31ss="d="L10" class="line" name="L10">  10andd utility  functions accessible witaitiita pro hretation/in
  17--0a href="D0ocumentation/input/ntrig01itiitcument9" nfef=lts w other  acc="Dorentrivt/inr
  17--0is driver0 has been reported to wo02itiit2tivitydditi0ig.txs, co.txt#L60" , eowscrivt/inrig.txt#leranput/xt#L10id="L14" class="line" name="L14">  14
<0a href="Documentation/in03itiit39" id="L19" class="line" name="L19">  19No0a href="D0ocumentation/input/ntrig04itiitef="Do doncument knationocument	    17--0a href="D0ocumentation/input/ntrig05itiit5hostdoncument href=uut/ hr, pcame iplalate wes is txt#L60" ihe
0  17--0--------
0  19No0a href="D0ocumentation/input/ntrig08itiit8gure filcumibtion/isions.  Most
  19No0te: value0s set at load time are g09itiit9her thts
  76s1nd utilityy functions accessible wiith s1sfs ans#Lumibtiona hitid="L11" class="line" name="L11">  11
  12Thhis driverr has been reported to woork p1153" id="L53" class="line" name="L53">  53A1ttached.
<  53A1ta href="DDocumentation/input/ntrigg.txt11tion/input/ntrigd="L53" class="line" name="L53">  53A1ta href="DDocumentation/input/ntrigg.txt1L16" id="L16" class="line" name="L16">  16Paarameters


  17--  24
1ote: valuees set at load time are ggloba1 and w="L24" cl">  2_cumib">">  2_cumib2" id="L12" class="line" name="L12">  12Thid utilityAdjusting parameters wit1h sys1261" id="L61" class="line" name="L61">  61
1ut only f1or that one device.
  12Thiis driver  has been reported to worrk p1L23" iTr#L74" d="L12" class="line" name="L12">  12Thitached.
  12Thia href="DDocumentation/input/ntri1g.txt1L25" id="L25" class="line" name="L25">  25a1ctivate_s1lack          number of 1finge12 actual ula etrigllxtelomaknts in mentation/dhrntritr#L7ocumenta/ine, itop off
Documentation/input/ntri1g.txt1L27" ior, but they
ire ad76" i and XT2 andsingmakger lived by Yocumentatid="L11" class="line" name="L11">  11
ngeeo  1iref=LXRdsiftatiotrig.txt="L24" clhttp://shrrc34"">LXRdtammupetyacti,atwithput/ri"lineg.nntan/isrig="L24" clmailto:lx#@l   <.no">lx#@l   <.noacti.
lx#.l   <.no 74"dput/ost/ntrig="L24" clhttp://www.redpill-l">Redpill L  the ASacti,athe devf="DoL