Qualcomm Technologies, Inc. Haptics driver QPNP (Qualcomm Technologies, Inc. Plug N Play) Haptics is a peripheral on some QTI PMICs. It can be interfaced with the host processor via SPMI or I2C bus. Haptics peripheral can support different actuators or vibrators, 1. Eccentric Rotation Mass (ERM) 2. Linear Resonant Actuator (LRA) Also, it can support multiple modes of operation: Direct, Buffer, PWM or Audio. Haptics device is described under a single level of node. Properties: - compatible Usage: required Value type: Definition: "qcom,qpnp-haptics". - reg Usage: required Value type: Definition: Base address of haptics peripheral. - interrupts Usage: required Value type: Definition: Peripheral interrupt specifier. - interrupt-names Usage: required Value type: Definition: Interrupt names. This list must match up 1-to-1 with the interrupts specified in the 'interrupts' property. Currently supported interrupts are short-circuit and play. - qcom,pmic-revid Usage: required Value type: Definition: Should specify the phandle of PMIC's revid module. This is used to identify the PMIC subtype. - qcom,pmic-misc Usage: optional Value type: Definition: Should specify the phandle of PMIC's misc module. This is used to read the clock trim error register under MISC peripheral. - qcom,misc-clk-trim-error-reg Usage: optional Value type: Definition: Register offset in MISC peripheral to read the clock trim error. If this is specified, then qcom,pmic-misc should be specified. - qcom,actuator-type Usage: optional Value type: Definition: Allowed values are 0 for LRA and 1 for ERM. If this is not specified, then LRA type will be used by default. - qcom,play-mode Usage: optional Value type: Definition: Allowed values are: "direct", "buffer", "pwm", "auto". If not specified for LRA actuator, auto mode will be selected by default. - qcom,wave-shape Usage: optional Value type: Definition: Wave shape to be played. Allowed values: "sine" or "square". Default value is "square". - qcom,wave-play-rate-us Usage: optional Value type: Definition: Wave sample duration in microseconds. This should match with the frequency the vibrator supports. Allowed values are: 0 to 20475. Default value is 5715. - qcom,max-play-time-us Usage: optional Value type: Definition: Maximum play time supported in microseconds. Default value is 15000. - qcom,vmax-mv Usage: optional Value type: Definition: Maximum output voltage in millivolts. Value specified here will be rounded off to the closest multiple of 116 mV. Allowed values: 0 to 3596. Default value is 3596. - qcom,ilim-ma Usage: optional Value type: Definition: Output current limit in mA. Allowed values: 400 or 800. Default value is 400. - qcom,en-brake Usage: optional Value type: Definition: Enables internal reverse braking. - qcom,brake-pattern Usage: optional Value type: Definition: Brake pattern to be applied. If specified, should be having 4 elements. Allowed values for each element are: 0, 1: Vmax/4, 2: Vmax/2, 3: Vmax. - qcom,sc-dbc-cycles Usage: optional Value type: Definition: Short circuit debounce cycles for internal PWM. Allowed values: 0, 8, 16 or 32. Following properties are specific only to LRA vibrators. - qcom,lra-auto-mode Usage: optional Value type: Definition: If specified, a set of pre-configured settings will be applied based on the pattern duration. For example, for a duration of < 20 ms (short duration), one set of settings will be applied and for a duration of >= 20 ms (long duration), another set of settings will be applied. The parameters configured in the driver when this property is specified is based on the LRA tested internally. Those parameters should be fine-tuned or adjusted based on the LRA used on different hardware platforms. - qcom,lra-auto-res-mode Usage: optional Value type: Definition: Auto resonance method. Allowed values are: For pmi8998 and chips earlier, "none" : No auto resonance "zxd" : Zero crossing detection method "qwd" : Quarter wave drive method "max-qwd" : Maximum QWD "zxd-eop" : ZXD + End of Pattern For pm660, "zxd" : Zero crossing detection method "qwd" : Quarter wave drive method - qcom,lra-high-z Usage: optional Value type: Definition: High Z configuration for auto resonance. Allowed values are: "none", "opt1", "opt2" and "opt3". For pm660, "opt0" is valid value for 1 LRA period. - qcom,lra-res-cal-period Usage: optional Value type: Definition: Auto resonance calibration period. Allowed values are: For pmi8998 and chips earlier: 4, 8, 16, and 32. For pm660: 4, 8, 16, 32, 64, 128 and 256. - qcom,lra-qwd-drive-duration Usage: optional Value type: Definition: LRA drive duration in QWD mode. Applies only for pm660 currently. Allowed values are: 0 and 1, for 1/4 and 3/8 LRA period. respectively. - qcom,lra-calibrate-at-eop Usage: optional Value type: Definition: Enables calibration at end of pattern. Applies only for pm660 currently. Allowed values are: 0 and 1. - qcom,auto-res-err-recovery-hw Usage: optional Value type: Definition: Enables Hardware auto resonance error recovery. Applies only for pm660 currently. - qcom,drive-period-code-max-variation-pct Usage: optional Value type: Definition: Maximum allowed variation of LRA drive period code in percentage above which RATE_CFG registers will not be updated by SW when auto resonance is enabled and auto resonance error correction algorithm is running. If not specified, default value is 25%. - qcom,drive-period-code-min-variation-pct Usage: optional Value type: Definition: Minimum allowed variation of LRA drive period code in percentage below which RATE_CFG registers will not be updated by SW when auto resonance is enabled and auto resonance error correction algorithm is running. If not specified, default value is 25%. Following properties are applicable only when "qcom,play-mode" is set to "buffer". - qcom,wave-rep-cnt Usage: optional Value type: Definition: Repetition count for wave form. Allowed values are: 1, 2, 4, 8, 16, 32, 64 and 128. Default value is 1. - qcom,wave-samp-rep-cnt Usage: optional Value type: Definition: Repetition count for each sample of wave form. Allowed values are: 1, 2, 4 and 8. Default value is 1. - qcom,wave-samples Usage: optional Value type: Definition: Wave samples in an array of 32 elements. Each element takes the following representation, bit 0: unused, bits[5:1] : amplitude, bit 6: overdrive, bit 7: sign. Default sample value is 0x3E. Since the hardware supports configuring upto 8 samples, a set of 8 samples will be configured initially and the next set will be configured upon the play interrupt until all the samples are configured and played. Following properties are applicable only when "qcom,play-mode" is set to "pwm". - pwms Usage: required, if "qcom,play-mode" is set to "pwm". Value type: Definition: PWM device that is feeding its output to Haptics. - qcom,period-us Usage: required, if "qcom,play-mode" is set to "pwm". Value type: Definition: PWM period in us. - qcom,duty-us Usage: required, if "qcom,play-mode" is set to "pwm". Value type: Definition: PWM duty cycle in us. - qcom,ext-pwm-freq-khz Usage: optional Value type: Definition: Frequency for external PWM in KHz. Allowed values are: 25, 50, 75 and 100. - qcom,ext-pwm-dtest-line Usage: optional Value type: Definition: DTEST line which is used for external PWM. Example: qcom,haptics@c000 { compatible = "qcom,qpnp-haptics"; reg = <0xc000 0x100>; interrupts = <0x3 0xc0 0x0 IRQ_TYPE_EDGE_RISING>, <0x3 0xc0 0x1 IRQ_TYPE_EDGE_BOTH>; interrupt-names = "hap-sc-irq", "hap-play-irq"; qcom,pmic-revid = <&pmi8998_revid>; qcom,pmic-misc = <&pmi8998_misc>; qcom,misc-clk-trim-error-reg = <0xf3>; qcom,actuator-type = <0>; qcom,play-mode = "direct"; qcom,vmax-mv = <3200>; qcom,ilim-ma = <800>; qcom,sc-dbc-cycles = <8>; qcom,wave-play-rate-us = <6667>; qcom,en-brake; qcom,brake-pattern = <0x3 0x0 0x0 0x0>; qcom,lra-high-z = "opt1"; qcom,lra-auto-res-mode = "qwd"; qcom,lra-res-cal-period = <4>; };