# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Configure touchpads to use Chromium Multitouch (cmt) X input driver
Section "InputClass"
    Identifier      "touchpad peppy"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    MatchProduct    "cyapa"
    Option          "Touchpad Stack Version" "1"
    Option          "Integrated Touchpad" "1"
    # Disable some causes of delay
    Option          "IIR b0" "1"
    Option          "IIR b1" "0"
    Option          "IIR b2" "0"
    Option          "IIR b3" "0"
    Option          "IIR a1" "0"
    Option          "IIR a2" "0"
    Option          "IIR Distance Threshold" "1000"
    Option          "Two Finger Vertical Close Distance Thresh" "35.0"
    Option          "Fling Buffer Suppress Zero Length Scrolls" "0"
    Option          "Pinch Enable" "0"
EndSection

Section "InputClass"
    Identifier      "touchpad peppy cyapa"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    MatchProduct    "cyapa"
    Option          "Pressure Calibration Offset" "-10.1706452244229"
    Option          "Pressure Calibration Slope" "1.82361892734539"
    # Extra filters for Cyapa
    Option          "Box Width" "1.0"
    Option          "Box Height" "1.0"
    Option          "Sensor Jump Filter Enable" "1"

    # TODO(adlr): Tune these two parameters:
    Option          "Merge Max Ratio" "0.63"
    Option          "Split Merge Max Movement" "7.1"

    Option          "Max Allowed Pressure Change Per Sec" "4000"
    Option          "Max Hysteresis Pressure Per Sec" "4000"
    Option          "Delay On Possible Liftoff" "1"
    Option          "Input Queue Max Delay" "0.019"
    Option          "Split Corrector Enabled" "1"
    # People complain that light tap clicks don't register
    Option          "Tap Minimum Pressure" "10.0"
    # Peppy's touchpad has a higher friction than the others and its
    # height offset at the bottom edge is also larger, causing thumbs
    # to have lower pressure compared to other devices.
    # Thus, decrease related thresholds here.
    Option          "Two Finger Pressure Diff Thresh" "20"
    Option          "Two Finger Pressure Diff Factor" "1.3"
    Option          "Pinch Enable" "0"
EndSection

Section "InputClass"
    Identifier      "touchpad peppy elan"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    MatchProduct    "Elan Touchpad"
    Option          "Touchpad Stack Version" "1"

    Option          "Pressure Calibration Offset" "-179.252581726842"
    Option          "Pressure Calibration Slope" "4.33133444856914"

    Option          "Tap Minimum Pressure" "15.0"

EndSection
