1. 11 10月, 2017 1 次提交
    • J
      Revert "HID: wacom: generic: Send BTN_TOOL_PEN in prox once the pen enters range" · 2f84723d
      Jason Gerecke 提交于
      This reverts commit 3e70969e.
      
      This commit causes a few problems for userspace. The most noteworthy are
      problems related to the distinguishing of different pens and pointer jumps
      when entering proximity. Userspace is written with the expectation that a
      pen will provide its tool ID and serial number (if available) in the very
      first in-prox report. By sending BTN_TOOL_PEN when the tablet starts
      communicating rather than waiting until a tool ID/serial number is
      available, userspace ends up treating all pens as being the same and
      lacking a serial number. Similarly, userspace assumes that the first
      report will contain X/Y data, but by marking the pen as being in-prox
      without an X/Y coordinate, userspace ends up warping the pen to the last-
      known X/Y location. As of commit 5b40104e ("HID: wacom: generic: Reset
      events back to zero when pen leaves") this means warping to (0,0).
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Acked-by: NBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      2f84723d
  2. 14 9月, 2017 6 次提交
    • J
      HID: wacom: generic: Reset events back to zero when pen leaves · 5b40104e
      Jason Gerecke 提交于
      As a pen leaves, we need to be sure to reset all events back to zero
      so that userspace is able to get the complete pen state when it enters
      proximity again.
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Reviewed-by: NPing Cheng <ping.cheng@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      5b40104e
    • J
      HID: wacom: generic: Send BTN_TOOL_PEN in prox once the pen enters range · 3e70969e
      Jason Gerecke 提交于
      When a pen is first able to to be sensed by the tablet, we would like
      to inform userspace that a tool is nearby so that it can attempt to
      perform palm rejection. Unfortunately, we don't know any information
      about the tool that is nearby, so the best we can do is send a prox
      event for a generic BTN_TOOL_PEN. If the pen later comes closer and
      enters proximity, we can determine the actual tool type and send
      BTN_TOOL_PEN out of prox if necessary.
      Signed-off-by: NPing Cheng <ping.cheng@wacom.com>
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      3e70969e
    • J
      HID: wacom: generic: Leave tool in prox until it completely leaves sense · 4affc233
      Jason Gerecke 提交于
      The legacy Intuos codepath and tablet behavior (e.g. the 1st-gen Intuos
      Pro, Cintiq 27, etc.) would result in a BTN_TOOL_* event not being cleared
      to zero until the tool had completely left the sensing range of the
      tablet. Before the final "out of prox" packet would be sent, zero or
      more "in range" packets could be sent to indicate that a pen was still
      detectable but not within a useful distance. These "in range" packets
      were used by the driver to keep touch input disabled at greater pen
      distances. In addition to keeping the `stylus_in_proximity` flag set,
      the driver would leave the current BTN_TOOL_* marked as being in
      proximity as well.
      
      The new HID codepath also sets `stylus_in_proximity` based on the "sense"
      flag, but does not leave the current BTN_TOOL_* marked as being in prox.
      This information is potentially useful to for a future userspace-based
      palm rejection, so this patch modifies the driver to continue sending it.
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Reviewed-by: NPing Cheng <ping.cheng@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      4affc233
    • J
      HID: wacom: generic: Use generic codepath terminology in wacom_wac_pen_report · 7690dd18
      Jason Gerecke 提交于
      The terminology used to describe the various degrees of pen proximity
      within the wacom_wac_pen_report function does not match that used elsewhere
      in the generic codepath. Specifically, the names of the variables "prox"
      and "range" were inspired by the non-generic codepaths. To make the generic
      codepath internally consistent, replace these terms with "range" and "sense"
      respectively.
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Signed-off-by: NPing Cheng <ping.cheng@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      7690dd18
    • J
      HID: wacom: generic: Clear ABS_MISC when tool leaves proximity · 92380b57
      Jason Gerecke 提交于
      The tool ID information sent in ABS_MISC is expected to be reset to 0
      when a tool leaves proximity. Not doing this can cause problems if a
      tool is removed and then re-introduced. Kernel event filtering will
      prevent the (identical) ABS_MISC event from being sent when the tool
      re-enters proxmity. This can cause userspace to not properly set the
      tool ID.
      
      Fixes: f85c9dc6 ("HID: wacom: generic: Support tool ID and additional tool types")
      Cc: stable # v4.10 <stable@vger.kernel.org>
      Signed-off-by: NPing Cheng <ping.cheng@wacom.com>
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      92380b57
    • J
      HID: wacom: generic: Send MSC_SERIAL and ABS_MISC when leaving prox · 993f0d93
      Jason Gerecke 提交于
      The latest generation of pro devices (MobileStudio Pro, 2nd-gen Intuos
      Pro, Cintiq Pro) send a serial number of '0' whenever the pen is too far
      away for reliable communication. Userspace defines that a serial number
      of '0' is invalid, so we need to be careful not to actually forward
      this value. Additionally, since EMR ISDv4 devices do not support serial
      numbers or tool IDs, we'd like to not send these events if they aren't
      necessary.
      
      The existing code achieves these goals by adding a check for a non-zero
      serial number within the wacom_wac_pen_report function. The MSC_SERIAL
      and ABS_MISC events are only sent if the serial number is non-zero. This
      code fails, however when the pen for a pro device leaves proximity. When
      the pen leaves prox and the tablet sends a serial of 0, wacom_wac_pen_event
      dutifully clears the serial number. When wacom_wac_pen_report is called,
      it does not send either the MSC_SERIAL of the exiting tool nor an ABS_MISC
      event.
      
      This patch prevents the wacom_wac_pen_event function from clearing an
      already-set serial number. This ensures that we have the serial number
      handy when exiting proximity, but requires us to manually clear it
      afterwards to ensure the driver does not send stale data (e.g. when
      switching between AES pens that report a serial nubmer of 0 for the
      first few fully in-proximity packets).
      
      Fixes: f85c9dc6 ("HID: wacom: generic: Support tool ID and additional tool types")
      Cc: stable # v4.10 <stable@vger.kernel.org>
      Signed-off-by: NPing Cheng <ping.cheng@wacom.com>
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      993f0d93
  3. 06 9月, 2017 3 次提交
  4. 08 8月, 2017 1 次提交
    • J
      HID: wacom: Do not completely map WACOM_HID_WD_TOUCHRINGSTATUS usage · 8d411cbf
      Jason Gerecke 提交于
      The WACOM_HID_WD_TOUCHRINGSTATUS usage is a single bit which tells us
      whether the touchring is currently in use or not. Because we need to
      reset the axis value to 0 when the finger is removed, we call
      'wacom_map_usage' to ensure that the required type/code values are
      associated with the usage. The 'wacom_map_usage' also sets up the axis
      range and resolution, however, which is not desired in this particular
      case.
      
      Although xf86-input-wacom doesn't do really do anything with the ring's
      range or resolution, the libinput driver (for Wayland environments)
      uses these values to provide proper angle indications to userspace.
      
      Fixes: 60a22186 ("HID: wacom: generic: add support for touchring")
      Cc: stable@vger.kernel.org
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      8d411cbf
  5. 27 6月, 2017 1 次提交
  6. 06 5月, 2017 5 次提交
  7. 05 5月, 2017 1 次提交
    • J
      HID: wacom: Have wacom_tpc_irq guard against possible NULL dereference · 2ac97f0f
      Jason Gerecke 提交于
      The following Smatch complaint was generated in response to commit
      2a6cdbdd ("HID: wacom: Introduce new 'touch_input' device"):
      
          drivers/hid/wacom_wac.c:1586 wacom_tpc_irq()
                   error: we previously assumed 'wacom->touch_input' could be null (see line 1577)
      
      The 'touch_input' and 'pen_input' variables point to the 'struct input_dev'
      used for relaying touch and pen events to userspace, respectively. If a
      device does not have a touch interface or pen interface, the associated
      input variable is NULL. The 'wacom_tpc_irq()' function is responsible for
      forwarding input reports to a more-specific IRQ handler function. An
      unknown report could theoretically be mistaken as e.g. a touch report
      on a device which does not have a touch interface. This can be prevented
      by only calling the pen/touch functions are called when the pen/touch
      pointers are valid.
      
      Fixes: 2a6cdbdd ("HID: wacom: Introduce new 'touch_input' device")
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Reviewed-by: NPing Cheng <ping.cheng@wacom.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      2ac97f0f
  8. 20 4月, 2017 1 次提交
    • J
      HID: wacom: Override incorrect logical maximum contact identifier · 6f107fab
      Jason Gerecke 提交于
      It apears that devices designed around Wacom's G11 chipset (e.g. Lenovo
      ThinkPad Yoga 260, Lenovo ThinkPad X1 Yoga, Dell XPS 12 9250, Dell Venue
      8 Pro 5855, etc.) suffer from a common issue in their HID descriptors.
      The logical maximum is not updated for the "Contact Identifier" usage,
      leaving it as just "1" despite these devices being capable of tracking
      far more touches.
      
      Commit 60a22186 began ignoring usages with out-of-range values,
      causing problems for devices based on this chipset. Touches after
      the first will have an out-of-range Contact Identifier, and ignoring
      that usage will cause the kernel to incorrectly slot each finger's
      events (along with all the knock-on userspace effects that entails).
      
      This commit checks for these buggy descriptors and updates the maximum
      where required. Prior chipsets have used "255" as the maximum (and the
      G11, at least, doesn't seem to actually use IDs outside the range of
      1..CONTACTMAX) so continue using this value.
      
      Cc: stable@vger.kernel.org
      Fixes: 60a22186 ("HID: wacom: generic: add support for touchring")
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      6f107fab
  9. 19 4月, 2017 1 次提交
    • J
      HID: wacom: Treat HID_DG_TOOLSERIALNUMBER as unsigned · 286f3f47
      Jason Gerecke 提交于
      Because HID_DG_TOOLSERIALNUMBER doesn't first cast the value recieved from HID
      to an unsigned type, sign-extension rules can cause the value of
      wacom_wac->serial[0] to inadvertently wind up with all 32 of its highest bits
      set if the highest bit of "value" was set.
      
      This can cause problems for Tablet PC devices which use AES sensors and the
      xf86-input-wacom userspace driver. It is not uncommon for AES sensors to send a
      serial number of '0' while the pen is entering or leaving proximity. The
      xf86-input-wacom driver ignores events with a serial number of '0' since it
      cannot match them up to an in-use tool.  To ensure the xf86-input-wacom driver
      does not ignore the final out-of-proximity event, the kernel does not send
      MSC_SERIAL events when the value of wacom_wac->serial[0] is '0'. If the highest
      bit of HID_DG_TOOLSERIALNUMBER is set by an in-prox pen which later leaves
      proximity and sends a '0' for HID_DG_TOOLSERIALNUMBER, then only the lowest 32
      bits of wacom_wac->serial[0] are actually cleared, causing the kernel to send
      an MSC_SERIAL event. Since the 'input_event' function takes an 'int' as
      argument, only those lowest (now-cleared) 32 bits of wacom_wac->serial[0] are
      sent to userspace, causing xf86-input-wacom to ignore the event. If the event
      was the final out-of-prox event, then xf86-input-wacom may remain in a state
      where it believes the pen is in proximity and refuses to allow other devices
      under its control (e.g. the touchscreen) to move the cursor.
      
      It should be noted that EMR devices and devices which use both the
      HID_DG_TOOLSERIALNUMBER and WACOM_HID_WD_SERIALHI usages (in that order) would
      be immune to this issue. It appears only AES devices are affected.
      
      Fixes: f85c9dc6 ("HID: wacom: generic: Support tool ID and additional tool types")
      Cc: stable@vger.kernel.org
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Acked-by: NBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      286f3f47
  10. 06 4月, 2017 2 次提交
  11. 30 3月, 2017 1 次提交
  12. 21 3月, 2017 2 次提交
  13. 06 3月, 2017 3 次提交
  14. 14 2月, 2017 1 次提交
  15. 03 2月, 2017 1 次提交
  16. 27 1月, 2017 8 次提交
  17. 19 1月, 2017 1 次提交
    • J
      HID: wacom: Fix sibling detection regression · a9ce7856
      Jason Gerecke 提交于
      Commit 345857bb ("HID: wacom: generic: Add support for sensor offsets") included
      a change to the operation and location of the call to 'wacom_add_shared_data'
      in 'wacom_parse_and_register'. The modifications included moving it higher up
      so that it would occur before the call to 'wacom_retrieve_hid_descriptor'. This
      was done to prevent a crash that would have occured when the report containing
      tablet offsets was fed into the driver with 'wacom_hid_report_raw_event'
      (specifically: the various 'wacom_wac_*_report' functions were written with the
      assumption that they would only be called once tablet setup had completed;
      'wacom_wac_pen_report' in particular dereferences 'shared' which wasn't yet
      allocated).
      
      Moving the call to 'wacom_add_shared_data' effectively prevented the crash but
      also broke the sibiling detection code which assumes that the HID descriptor
      has been read and the various device_type flags set.
      
      To fix this situation, we restore the original 'wacom_add_shared_data'
      operation and location and instead implement an alternative change that can
      also prevent the crash. Specifically, we notice that the report functions
      mentioned above expect to be called only for input reports.  By adding a check,
      we can prevent feature reports (such as the offset report) from
      causing trouble.
      
      Fixes: 345857bb ("HID: wacom: generic: Add support for sensor offsets")
      Signed-off-by: NJason Gerecke <jason.gerecke@wacom.com>
      Tested-by: NPing Cheng <pingc@wacom.com>
      Reviewed-by: NBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Signed-off-by: NJiri Kosina <jkosina@suse.cz>
      a9ce7856
  18. 09 12月, 2016 1 次提交