| # 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 |