summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/input/qcom,spmi-haptics.yaml
blob: e6cdaed9ce5be13678ba7eba5895611c902a3189 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/qcom,spmi-haptics.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Haptics device inside Qualcomm Technologies, Inc. PMIC

maintainers:
  - Fenglin Wu <fenglin.wu@oss.qualcomm.com>

description: |
  Certain Qualcomm PMICs integrate a haptics module, such as the HAP530_HV haptics
  module in the PMIH0108 PMIC, which drives an LRA (Linear Resonant Actuator) with
  an output voltage up to 10 V. Several play modes are supported in HAP530_HV:

    DIRECT_PLAY: The hardware outputs sinusoidal waveforms whose period is
      defined by qcom,lra-period-us and whose peak voltage is defined by
      qcom,vmax-microvolt. The driving amplitude can be scaled in the range
      [0, 255] via a single register byte.  Hardware-based LRA auto-resonance
      tracking is enabled by default in this mode, allowing the haptics engine
      to follow the actual resonant frequency of the LRA and update the driving
      period accordingly to achieve stronger vibration magnitude.

    FIFO: The hardware can play an arbitrary waveform composed of a sequence
      of 8-bit samples at a configurable play rate.  Samples are pre-filled
      into the internal FIFO memory of the haptics module and continuously
      replenished via the FIFO-empty IRQ until all samples have been played.
      An 8K-byte FIFO memory bank is available in the HAP530_HV haptics module,
      shared between the FIFO and PAT_MEM play modes. The memory partition
      between the two modes is configurable via registers, and FIFO mode always
      uses the 1st partition starting from offset 0.

    PAT_MEM: This mode is very similar to FIFO streaming mode but without the
      data refilling capability. It is designed mainly for short, latency-critical
      vibrations. The memory space for PAT_MEM mode must be reserved for dedicated
      usage, and the waveform data should be preloaded and remain unchanged
      thereafter. The haptics module can play the waveform data from the memory
      region specified by the PAT_MEM play start address and length registers.

    In either FIFO mode or PAT_MEM mode, the following play rates are supported:
      -- 0(T_LRA): each FIFO byte drives one full sinusoidal cycle with the
        period defined in qcom,lra-period-us.
      -- 1/2/3(T_LRA_DIV_2/4/8): each FIFO byte drives a half/quarter/eighth
        sinusoidal cycle with the period defined in qcom,lra-period-us.
      -- 4/5/6(T_LRA_X_2/4/8): each FIFO byte drives 2/4/8 sinusoidal cycles
        with the period defined in qcom,lra-period-us.
      -- 8/9/10/11/12/13(8KHz/16KHz/24KHz/32KHz/44.1KHz/48KHz): the FIFO
        data is treated as PCM samples and drives the output with an
        arbitrarily shaped waveform.  This mode is typically used to define
        custom driving waveforms for specific vibration effects such as fast
        attack, crisp brake, etc.

    The drive voltage in FIFO or PAT_MEM mode can exceed the value defined in
    qcom,vmax-microvolt to achieve a special vibration effect, but the waveform
    must be short enough to prevent the LRA from being damaged by operating at
    an overvoltage.

    Also, hardware-based LRA auto-resonance tracking is normally disabled in
    FIFO or PAT_MEM mode, as these modes are intended to drive arbitrary
    waveforms that may not follow the resonant frequency; autonomous hardware
    resonance correction would interfere with the intended output.

properties:
  compatible:
    items:
      - const: qcom,pmih0108-haptics
      - const: qcom,spmi-haptics

  reg:
    items:
      - description: HAP_CFG module base address
      - description: HAP_PTN module base address

  reg-names:
    items:
      - const: cfg
      - const: ptn

  interrupts:
    maxItems: 1

  interrupt-names:
    items:
      - const: fifo-empty

  qcom,vmax-microvolt:
    description:
      Maximum allowed output driving voltage in microvolts, must be a multiple
      of 50,000 uV. This is the peak driving voltage in DIRECT_PLAY mode,
      which outputs sinusoidal waveforms. The value should be equal to the
      square root of 2 times the Vrms voltage of the LRA.
    minimum: 50000
    maximum: 10000000
    multipleOf: 50000

  qcom,lra-period-us:
    description:
      LRA actuator initial resonance period in microseconds
      (1,000,000 / resonant_freq_hz).  Used to configure T_LRA-based play
      rates and the auto-resonance zero-crossing window. It could be also used
      as the initial period if the LRA wants to be driven off resonance.
    minimum: 5
    maximum: 20475
    multipleOf: 5

required:
  - compatible
  - reg
  - reg-names
  - interrupts
  - interrupt-names
  - qcom,vmax-microvolt
  - qcom,lra-period-us

additionalProperties: false