443 lines
15 KiB
YAML
443 lines
15 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/input/qcom,hv-haptics.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Qualcomm Technologies, Inc. PMIC High-Voltage Haptics
|
|
|
|
maintainers:
|
|
- Fenglin Wu <quic_fenglinw@quicinc.com>
|
|
|
|
description: |
|
|
The High-Voltage Haptics module in QTI PMICs can support either ERM or LRA
|
|
actuators with drive voltage up to 10 V. It has several pattern sources (such
|
|
as DIRECT_PLAY, PATTERN1, PATTERN2, FIFO, and SWR) which can be used for
|
|
playing different vibration effects.
|
|
|
|
This haptics device supports two levels of nodes. The main node defines the
|
|
hardware configuration based on the actuator used in the platform. Child nodes
|
|
define the configurations for different haptics effects that can be supported.
|
|
|
|
properties:
|
|
compatible:
|
|
enum:
|
|
- qcom,hv-haptics
|
|
- qcom,pm8350b-haptics
|
|
- qcom,pm5100-haptics
|
|
|
|
reg:
|
|
minItems: 2
|
|
items:
|
|
- description: HAPTICS_CFG module register base address
|
|
- description: HAPTICS_PATTERN module register base address
|
|
- description: HAPTICS_BOOST module register base address (N/A for PM5100)
|
|
|
|
interrupts:
|
|
items:
|
|
- description: FIFO empty interrupt
|
|
|
|
interrupt-names:
|
|
items:
|
|
- const: fifo-empty
|
|
|
|
qcom,vmax-mv:
|
|
description: |
|
|
The maximum allowed actuator output voltage in millivolts. The value will
|
|
be rounded to the closest multiple of 50 mV.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
minimum: 0
|
|
maximum: 11000
|
|
default: 5000
|
|
|
|
qcom,brake-mode:
|
|
description: |
|
|
Vibration brake mode. See "BRAKE_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2, 3]
|
|
default: 3 # AUTO brake mode
|
|
|
|
qcom,brake-disable:
|
|
description: Boolean flag indicating that vibration brake is disabled.
|
|
type: boolean
|
|
|
|
qcom,brake-pattern:
|
|
description: |
|
|
Brake pattern byte array. The array needs to be specified as 8-bit using
|
|
'/bits/ 8' parameter. The pattern will be played at the end of the playing
|
|
waveform if manual brake mode (either open-loop or closed-loop) is
|
|
selected. If this property is not specified, or if it contains all zero
|
|
values, then manual brake is disabled.
|
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
|
minItems: 1
|
|
maxItems: 8
|
|
|
|
qcom,fifo-empty-threshold:
|
|
description: |
|
|
FIFO empty threshold. The "fifo-empty" IRQ will be triggered when the
|
|
number of the samples in the FIFO is less than the threshold.
|
|
|
|
PM8350B v1: allowed values: 0 - 104 (multiples of 4); default: 48
|
|
PM8350B v2: allowed values: 0 - 640 (multiples of 40); default: 280
|
|
PM5100: allowed values: 0 - 1024 (multiples of 32); default: 288
|
|
PM8550B: allowed values: 0 - 2048 (multiples of 32); default: 288
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
minimum: 0
|
|
maximum: 2048
|
|
|
|
qcom,use-erm:
|
|
description: |
|
|
Boolean flag indicating that the hardware is driving an ERM actuator. If
|
|
this is not specified, then an LRA actuator is assumed.
|
|
type: boolean
|
|
|
|
nvmem-cells:
|
|
items:
|
|
- description: |
|
|
Closed-loop brake calibration settings NVMEM cell phandle. Not
|
|
applicable for PM5100.
|
|
|
|
nvmem-cell-names:
|
|
items:
|
|
- const: hap_cl_brake
|
|
|
|
nvmem:
|
|
items:
|
|
- description:
|
|
Haptics configuration NVMEM phandle. Not applicable for PM5100.
|
|
|
|
nvmem-names:
|
|
items:
|
|
- const: hap_cfg_sdam
|
|
|
|
qcom,pbs-client:
|
|
description: |
|
|
PBS client phandle used for triggering PBS to configure haptics short
|
|
circuit current (ISC) during LRA impedance detection. Not applicable for
|
|
PM5100.
|
|
$ref: /schemas/types.yaml#/definitions/phandle
|
|
|
|
qcom,lra-period-us:
|
|
description: LRA actuator initial resonance period in microseconds.
|
|
minimum: 5
|
|
maximum: 20475
|
|
|
|
qcom,drv-sig-shape:
|
|
description: |
|
|
LRA drive signal shape. See "WF_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2]
|
|
default: 1 # sine
|
|
|
|
qcom,brake-sig-shape:
|
|
description: |
|
|
LRA reverse brake signal shape. See "WF_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2]
|
|
default: 1 # sine
|
|
|
|
qcom,brake-sine-gain:
|
|
description: |
|
|
LRA brake signal gain when using sine brake signal shape. See
|
|
"BRAKE_SINE_GAIN_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2, 3]
|
|
default: 0 # X1
|
|
|
|
qcom,rt-imp-detect:
|
|
description: |
|
|
Boolean flag indicating that hardware based real-time impedance
|
|
measurement is used when detecting LRA impedance. This is only applicable
|
|
for HAP525_HV haptics module.
|
|
type: boolean
|
|
|
|
qcom,sw-cmd-freq-detect:
|
|
description: |
|
|
Boolean flag indicating that software command based frequency detection
|
|
method is used for LRA resonant frequency detection.
|
|
type: boolean
|
|
|
|
patternProperties:
|
|
".*hap-swr-slave-reg$":
|
|
description: |
|
|
Haptics soundwire (SWR) slave regulator subnode. Used by the swr-haptics
|
|
module to control the online status of the soundwire slave. This property
|
|
should be named "qcom,hap-swr-slave-reg".
|
|
$ref: /schemas/regulator/regulator.yaml#
|
|
|
|
properties:
|
|
regulator-name: true
|
|
|
|
additionalProperties: false
|
|
|
|
"^(effect|primitive)_[0-9]+$":
|
|
description: Vibration effect subnode
|
|
type: object
|
|
|
|
properties:
|
|
qcom,effect-id:
|
|
description: |
|
|
Effect ID that a client can request to play the corresponding effect
|
|
defined in this child node. The ID is normally defined and sent from
|
|
userspace for a certain user notification event.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
|
|
qcom,primitive-id:
|
|
description: |
|
|
Effect primitive ID that a client can request to play the
|
|
corresponding primitive defined in this child node. The ID is normally
|
|
defined and sent from userspace for a certain user notification event.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
|
|
qcom,wf-vmax-mv:
|
|
description: |
|
|
The maximum allowed actuator output voltage in millivolts for this
|
|
effect. The value will be rounded to the closest multiple of 50 mV.
|
|
If this property is not specified, then the top level limit specified
|
|
by the parent node "qcom,vmax-mv" property will be used.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
minimum: 0
|
|
maximum: 11000
|
|
|
|
qcom,wf-pattern-data:
|
|
description: |
|
|
Pattern data specified via 8 3-tuples. Each tuple will be played in
|
|
PATTERN1 source mode by default.
|
|
$ref: /schemas/types.yaml#/definitions/uint32-matrix
|
|
minItems: 1
|
|
maxItems: 8
|
|
items:
|
|
items:
|
|
- description: 9-bit pattern amplitude
|
|
minimum: 0
|
|
maximum: 0x1ff
|
|
- description: |
|
|
Play period for this pattern amplitude. See "S_PERIOD_*"
|
|
constants in include/dt-bindings/input/qcom,hv-haptics.h.
|
|
minimum: 0
|
|
maximum: 13
|
|
- description: |
|
|
Flag indicating that the frequency of the LRA drive signal will
|
|
be doubled when playing this pattern.
|
|
enum: [0, 1]
|
|
|
|
qcom,wf-pattern-preload:
|
|
description: |
|
|
Boolean flag indicating that the effect pattern should be preloaded
|
|
into PATTERN2 source during initialization and then never changed.
|
|
This is used to achieve a low latency response as register
|
|
configurations occur only once instead of for each play event. This
|
|
property may only be specified only in one effect subnode.
|
|
type: boolean
|
|
|
|
qcom,wf-pattern-period-us:
|
|
description: |
|
|
Play period in microseconds for each pattern entry specified in
|
|
"qcom,wf-pattern-data".
|
|
minimum: 5
|
|
maximum: 20475
|
|
|
|
qcom,wf-fifo-data:
|
|
description: |
|
|
Byte array of patterns which will be filled into the FIFO memory and
|
|
played when FIFO mode is selected. The array needs to be specified as
|
|
8-bit using '/bits/ 8' parameter, or using '[]' instead of '<>'.
|
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
|
|
|
qcom,wf-fifo-period:
|
|
description: |
|
|
Play period for each FIFO pattern entry specified in
|
|
"qcom,wf-fifo-data". See "S_PERIOD_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13]
|
|
|
|
qcom,wf-fifo-preload:
|
|
description: |
|
|
Boolean flag indicating that the FIFO effect data should be preloaded
|
|
into pattern memory during boot up.
|
|
|
|
In HAP525_HV PMIC haptics module, there are four pattern memory
|
|
partitions with configurable size. Each partition can be used for
|
|
preloading one FIFO effect.
|
|
|
|
The total FIFO memory space is 2K bytes. 640 bytes of this is reserved
|
|
for FIFO streaming mode which loads the FIFO data at runtime. The rest
|
|
of the FIFO space can be used for pattern memory partitions.
|
|
|
|
This feature is only available for HAP525_HV PMIC haptics module. This
|
|
module is present on PMICs like PM8550B.
|
|
type: boolean
|
|
|
|
qcom,wf-brake-mode:
|
|
description: |
|
|
Vibration brake mode for this effect. See "BRAKE_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
|
|
If this property is not specified, then the top level brake mode
|
|
specified by the parent node "qcom,brake-mode" property will be used.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2, 3]
|
|
|
|
qcom,wf-brake-pattern:
|
|
description: |
|
|
Brake pattern byte array. The array needs to be specified as 8-bit
|
|
using '/bits/ 8' parameter. The pattern will be played at the end of
|
|
the playing waveform if manual brake mode (either open-loop or
|
|
closed-loop) is selected.
|
|
|
|
If this property is not specified, then the top level brake pattern
|
|
specified by the parent node "qcom,brake-pattern" property will be
|
|
used.
|
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
|
minItems: 1
|
|
maxItems: 8
|
|
|
|
qcom,wf-brake-disable:
|
|
description: |
|
|
Boolean flag indicating that vibration brake is disabled for this
|
|
effect.
|
|
type: boolean
|
|
|
|
qcom,wf-brake-sine-gain:
|
|
description: |
|
|
LRA brake signal gain when using sine brake signal shape. See
|
|
"BRAKE_SINE_GAIN_*" constants in
|
|
include/dt-bindings/input/qcom,hv-haptics.h.
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
enum: [0, 1, 2, 3]
|
|
|
|
qcom,wf-auto-res-disable:
|
|
description: |
|
|
Boolean flag indicating that this effect is played with LRA auto
|
|
resonance feature disabled.
|
|
type: boolean
|
|
|
|
allOf:
|
|
- oneOf:
|
|
- required:
|
|
- qcom,effect-id
|
|
- required:
|
|
- qcom,primitive-id
|
|
- anyOf:
|
|
- required:
|
|
- qcom,wf-pattern-data
|
|
- required:
|
|
- qcom,wf-fifo-data
|
|
|
|
additionalProperties: false
|
|
|
|
required:
|
|
- compatible
|
|
- reg
|
|
- interrupts
|
|
- interrupt-names
|
|
|
|
allOf:
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
const: qcom,pm5100-haptics
|
|
then:
|
|
properties:
|
|
reg:
|
|
maxItems: 2
|
|
nvmem-cells: false
|
|
nvmem-cell-names: false
|
|
nvmem: false
|
|
nvmem-names: false
|
|
qcom,pbs-client: false
|
|
- if:
|
|
required:
|
|
- qcom,use-erm
|
|
then:
|
|
properties:
|
|
qcom,lra-period-us: false
|
|
qcom,drv-sig-shape: false
|
|
qcom,brake-sig-shape: false
|
|
qcom,brake-sine-gain: false
|
|
else:
|
|
required:
|
|
- qcom,lra-period-us
|
|
|
|
additionalProperties: false
|
|
|
|
examples:
|
|
- |
|
|
#include <dt-bindings/input/qcom,hv-haptics.h>
|
|
#include <dt-bindings/interrupt-controller/irq.h>
|
|
|
|
pmic {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
qcom,hv-haptics@f000 {
|
|
compatible = "qcom,hv-haptics";
|
|
reg = <0xf000>, <0xf100>, <0xf200>;
|
|
interrupts = <0x3 0xf0 0x1 IRQ_TYPE_EDGE_BOTH>;
|
|
interrupt-names = "fifo-empty";
|
|
nvmem-cell-names = "hap_cl_brake";
|
|
nvmem-cells = <&hap_cl_brake>;
|
|
nvmem-names = "hap_cfg_sdam";
|
|
nvmem = <&pmk8350_sdam_46>;
|
|
qcom,pbs-client = <&pm8350b_pbs2>;
|
|
qcom,vmax-mv = <900>;
|
|
qcom,brake-mode = <BRAKE_CLOSE_LOOP>;
|
|
qcom,brake-pattern = /bits/ 8 <0xff 0x3f 0x1f>;
|
|
qcom,lra-period-us = <5880>;
|
|
qcom,drv-sig-shape = <WF_SINE>;
|
|
qcom,brake-sig-shape = <WF_SINE>;
|
|
|
|
qcom,hap-swr-slave-reg {
|
|
regulator-name = "hap-swr-slave-reg";
|
|
};
|
|
|
|
effect_0 {
|
|
/* CLICK effect */
|
|
qcom,effect-id = <0>;
|
|
qcom,wf-vmax-mv = <8000>;
|
|
qcom,wf-pattern-data =
|
|
<0x01f S_PERIOD_T_LRA 0>,
|
|
<0x03f S_PERIOD_T_LRA 0>,
|
|
<0x05f S_PERIOD_T_LRA 0>,
|
|
<0x07f S_PERIOD_T_LRA 0>,
|
|
<0x17f S_PERIOD_T_LRA 0>,
|
|
<0x15f S_PERIOD_T_LRA 0>,
|
|
<0x13f S_PERIOD_T_LRA 0>,
|
|
<0x11f S_PERIOD_T_LRA 0>;
|
|
qcom,wf-pattern-period-us = <5000>;
|
|
qcom,wf-brake-pattern = /bits/ 8 <0xff 0x7f 0x3f>;
|
|
qcom,wf-pattern-preload;
|
|
qcom,wf-auto-res-disable;
|
|
};
|
|
|
|
effect_1 {
|
|
/* DOUBLE_CLICK effect */
|
|
qcom,effect-id = <1>;
|
|
qcom,wf-vmax-mv = <5000>;
|
|
qcom,wf-fifo-data = /bits/ 8
|
|
<0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
|
|
0xff 0xff 0xff 0xff 0xff 0xff 0xff>;
|
|
qcom,wf-fifo-period = <S_PERIOD_F_8KHZ>;
|
|
qcom,wf-brake-pattern = /bits/ 8 <0x7f 0x5f 0x3f>;
|
|
qcom,wf-auto-res-disable;
|
|
};
|
|
|
|
primitive_0 {
|
|
qcom,primitive-id = <0>;
|
|
qcom,wf-vmax-mv = <8000>;
|
|
qcom,wf-pattern-data =
|
|
<0x0ff S_PERIOD_T_LRA 0>,
|
|
<0x07f S_PERIOD_T_LRA 0>;
|
|
qcom,wf-pattern-period-us = <5000>;
|
|
qcom,wf-brake-pattern = /bits/ 8 <0xff 0x7f 0x3f>;
|
|
qcom,wf-auto-res-disable;
|
|
};
|
|
};
|
|
};
|