Re: [PATCH v6 1/2] dt-bindings: input: Add Qualcomm SPMI PMIC haptics
From: Fenglin Wu
Date: Mon Aug 24 2026 - 22:51:56 EST
On 8/7/2026 11:56 PM, Rob Herring wrote:
> On Thu, Aug 06, 2026 at 11:21:40PM -0700, Fenglin Wu wrote:
>> Add binding document for the haptics module inside Qualcomm PMIC
>> PMIH0108.
>>
>> Assisted-by: Claude:claude-4-8-opus
>> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxxxxxxxx>
>> Signed-off-by: Fenglin Wu <fenglin.wu@xxxxxxxxxxxxxxxx>
>> ---
>> .../bindings/input/qcom,spmi-haptics.yaml | 136 +++++++++++++++++++++
>> 1 file changed, 136 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/input/qcom,spmi-haptics.yaml b/Documentation/devicetree/bindings/input/qcom,spmi-haptics.yaml
>> new file mode 100644
>> index 000000000000..b1a69e9886ee
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/qcom,spmi-haptics.yaml
>> @@ -0,0 +1,136 @@
>> +# 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@xxxxxxxxxxxxxxxx>
>> +
>> +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
>> +
>> +examples:
>> + - |
>> + #include <dt-bindings/interrupt-controller/irq.h>
>> +
>> + pmic {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + haptics@f000 {
>
> No incomplete examples please. Put this in the example for the PMIC.
Thanks for the suggestion. I will change to below in next patch:
pmic@7 {
compatible = "qcom,pmih0108", "qcom,spmi-pmic";
reg = <0x7 SPMI_USID>;
#address-cells = <1>;
#size-cells = <0>;
haptics@f000 {
compatible = "qcom,pmih0108-haptics", "qcom,spmi-haptics";
reg = <0xf000>, <0xf100>;
reg-names = "cfg", "ptn";
interrupts = <0x7 0xf0 0x1 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "fifo-empty";
qcom,vmax-microvolt = <1300000>;
qcom,lra-period-us = <5880>;
};
};
>
> And please comment on sashiko report. Looks valid to me.
I just replied on that. I dropped the change which added the haptics
device in the spmi-pmic schema as it had been applied:
https://lore.kernel.org/linux-input/178602255123.2917765.7426706813083510078.b4-ty@b4/
>
> Rob