Message ID | 20220408115311.237039-1-luca.weiss@fairphone.com |
---|---|
State | New |
Headers | show |
Series | [1/3] dt-bindings: input: Add bindings for Awinic AW8695 haptics | expand |
On 08/04/2022 13:53, Luca Weiss wrote: > Add a document describing the bindings for the AW8695 LRA Haptic Driver. (...) > + reset-gpios: > + maxItems: 1 > + description: GPIO connected to RSTN pin (active high) > + > + awinic,f0-preset: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Default value for the f0 of LRA > + > + awinic,f0-coefficient: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Coefficient between actual f0 and the value in the registers > + > + awinic,f0-calibration-percent: > + maxItems: 1 > + description: Limit of f0 deviation from awinic,f0-preset > + > + awinic,drive-level: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Level of drive waveform in normal driving > + > + awinic,f0-detection-play-time: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Drive waveform play times in the first period in the f0 detection Use standard unit suffixes for known units (e.g. time). > + > + awinic,f0-detection-wait-time: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Waveform wait times in the f0 detection Ditto. > + > + awinic,f0-detection-repeat: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Repeat times in the f0 detection > + > + awinic,f0-detection-trace: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Drive waveform play times in the second period and later in the f0 detection > + > + awinic,boost-debug: > + $ref: /schemas/types.yaml#/definitions/uint8-array > + minItems: 3 > + maxItems: 3 > + description: Values for BSTDBG1-3 registers Do not encode device programming model (registers) into the binding. You need to define it as a property related to hardware itself, not its registers (e.g. boost value in mV). > + > + awinic,tset: > + $ref: /schemas/types.yaml#/definitions/uint8 > + description: Value for TSET register Ditto. > + > + awinic,r-spare: > + $ref: /schemas/types.yaml#/definitions/uint8 > + description: Value for R_SPARE register Ditto. Best regards, Krzysztof
Hi Krzysztof, thanks for the review, replies are inline! On Fri Apr 8, 2022 at 5:05 PM CEST, Krzysztof Kozlowski wrote: > On 08/04/2022 13:53, Luca Weiss wrote: > > Add a document describing the bindings for the AW8695 LRA Haptic Driver. > > (...) > > > + reset-gpios: > > + maxItems: 1 > > + description: GPIO connected to RSTN pin (active high) > > + > > + awinic,f0-preset: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Default value for the f0 of LRA > > + > > + awinic,f0-coefficient: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Coefficient between actual f0 and the value in the registers > > + > > + awinic,f0-calibration-percent: > > + maxItems: 1 > > + description: Limit of f0 deviation from awinic,f0-preset > > + > > + awinic,drive-level: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Level of drive waveform in normal driving > > + > > + awinic,f0-detection-play-time: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Drive waveform play times in the first period in the f0 detection > > Use standard unit suffixes for known units (e.g. time). While the datasheet doesn't mention any time unit, the value is used to calculate the f0_trace_ms variable (which is milliseconds) but the result also depends on the awinic,f0-preset value, so it's not a raw time value. > > > + > > + awinic,f0-detection-wait-time: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Waveform wait times in the f0 detection > > Ditto. > > > + > > + awinic,f0-detection-repeat: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Repeat times in the f0 detection > > + > > + awinic,f0-detection-trace: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Drive waveform play times in the second period and later in the f0 detection > > + > > + awinic,boost-debug: > > + $ref: /schemas/types.yaml#/definitions/uint8-array > > + minItems: 3 > > + maxItems: 3 > > + description: Values for BSTDBG1-3 registers > > Do not encode device programming model (registers) into the binding. You > need to define it as a property related to hardware itself, not its > registers (e.g. boost value in mV). Unfortunately I couldn't figure the meaning for this and the two values below. The datasheet doesn't mention these registers at all and the downstream driver doesn't do anything meaningful with them (other than setting them) nor has any comment to indicate what they do. In the datasheet there's only BSTDBG4 mentioned where bits [5:1] mean PVDD output voltage setting so for these registers it could really be anthing :( Maybe someone with more knowledge about LRAs might be able to decipher what tset and r_spare is at least? I unfortunately didn't manage. Regards Luca > > > + > > + awinic,tset: > > + $ref: /schemas/types.yaml#/definitions/uint8 > > + description: Value for TSET register > > Ditto. > > > + > > + awinic,r-spare: > > + $ref: /schemas/types.yaml#/definitions/uint8 > > + description: Value for R_SPARE register > > Ditto. > > > Best regards, > Krzysztof
On 11/04/2022 10:15, Luca Weiss wrote: (...) >>> + awinic,f0-detection-play-time: >>> + $ref: /schemas/types.yaml#/definitions/uint32 >>> + description: Drive waveform play times in the first period in the f0 detection >> >> Use standard unit suffixes for known units (e.g. time). > > While the datasheet doesn't mention any time unit, the value is used to > calculate the f0_trace_ms variable (which is milliseconds) but the > result also depends on the awinic,f0-preset value, so it's not a raw > time value. I see, ok. > >> >>> + >>> + awinic,f0-detection-wait-time: >>> + $ref: /schemas/types.yaml#/definitions/uint32 >>> + description: Waveform wait times in the f0 detection >> >> Ditto. >> >>> + >>> + awinic,f0-detection-repeat: >>> + $ref: /schemas/types.yaml#/definitions/uint32 >>> + description: Repeat times in the f0 detection >>> + >>> + awinic,f0-detection-trace: >>> + $ref: /schemas/types.yaml#/definitions/uint32 >>> + description: Drive waveform play times in the second period and later in the f0 detection >>> + >>> + awinic,boost-debug: >>> + $ref: /schemas/types.yaml#/definitions/uint8-array >>> + minItems: 3 >>> + maxItems: 3 >>> + description: Values for BSTDBG1-3 registers >> >> Do not encode device programming model (registers) into the binding. You >> need to define it as a property related to hardware itself, not its >> registers (e.g. boost value in mV). > > Unfortunately I couldn't figure the meaning for this and the two values > below. > > The datasheet doesn't mention these registers at all and the downstream > driver doesn't do anything meaningful with them (other than setting them) > nor has any comment to indicate what they do. > In the datasheet there's only BSTDBG4 mentioned where bits [5:1] mean > PVDD output voltage setting so for these registers it could really be > anthing :( > > Maybe someone with more knowledge about LRAs might be able to decipher > what tset and r_spare is at least? I unfortunately didn't manage. Do you have to define them in such case in DT? Maybe it should be part of driver? Best regards, Krzysztof
Hi Krzysztof, On Mon Apr 11, 2022 at 2:52 PM CEST, Krzysztof Kozlowski wrote: > On 11/04/2022 10:15, Luca Weiss wrote: > > (...) > > >>> + awinic,f0-detection-play-time: > >>> + $ref: /schemas/types.yaml#/definitions/uint32 > >>> + description: Drive waveform play times in the first period in the f0 detection > >> > >> Use standard unit suffixes for known units (e.g. time). > > > > While the datasheet doesn't mention any time unit, the value is used to > > calculate the f0_trace_ms variable (which is milliseconds) but the > > result also depends on the awinic,f0-preset value, so it's not a raw > > time value. > > I see, ok. > > > > >> > >>> + > >>> + awinic,f0-detection-wait-time: > >>> + $ref: /schemas/types.yaml#/definitions/uint32 > >>> + description: Waveform wait times in the f0 detection > >> > >> Ditto. > >> > >>> + > >>> + awinic,f0-detection-repeat: > >>> + $ref: /schemas/types.yaml#/definitions/uint32 > >>> + description: Repeat times in the f0 detection > >>> + > >>> + awinic,f0-detection-trace: > >>> + $ref: /schemas/types.yaml#/definitions/uint32 > >>> + description: Drive waveform play times in the second period and later in the f0 detection > >>> + > >>> + awinic,boost-debug: > >>> + $ref: /schemas/types.yaml#/definitions/uint8-array > >>> + minItems: 3 > >>> + maxItems: 3 > >>> + description: Values for BSTDBG1-3 registers > >> > >> Do not encode device programming model (registers) into the binding. You > >> need to define it as a property related to hardware itself, not its > >> registers (e.g. boost value in mV). > > > > Unfortunately I couldn't figure the meaning for this and the two values > > below. > > > > The datasheet doesn't mention these registers at all and the downstream > > driver doesn't do anything meaningful with them (other than setting them) > > nor has any comment to indicate what they do. > > In the datasheet there's only BSTDBG4 mentioned where bits [5:1] mean > > PVDD output voltage setting so for these registers it could really be > > anthing :( > > > > Maybe someone with more knowledge about LRAs might be able to decipher > > what tset and r_spare is at least? I unfortunately didn't manage. > > Do you have to define them in such case in DT? Maybe it should be part > of driver? As these parameters are part of the dts downstream, I assume they differ per board or actual LRA used. But I also found other downstream dts examples on github (e.g. awinic,aw8697_haptic) and they also seemed to use the same values for these couple of registers (r_spare, tset and bstdbg). Maybe I can gather more info but it's unlikely I'll be able to get a concrete answer.. Regards Luca > > Best regards, > Krzysztof
diff --git a/Documentation/devicetree/bindings/input/awinic,aw8695-haptics.yaml b/Documentation/devicetree/bindings/input/awinic,aw8695-haptics.yaml new file mode 100644 index 000000000000..9f573daaba0e --- /dev/null +++ b/Documentation/devicetree/bindings/input/awinic,aw8695-haptics.yaml @@ -0,0 +1,133 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/input/awinic,aw8695-haptics.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Awinic AW8695 LRA Haptic Driver + +maintainers: + - Luca Weiss <luca.weiss@fairphone.com> + +properties: + compatible: + const: awinic,aw8695 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + description: GPIO connected to INTN pin (edge falling) + + reset-gpios: + maxItems: 1 + description: GPIO connected to RSTN pin (active high) + + awinic,f0-preset: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Default value for the f0 of LRA + + awinic,f0-coefficient: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Coefficient between actual f0 and the value in the registers + + awinic,f0-calibration-percent: + maxItems: 1 + description: Limit of f0 deviation from awinic,f0-preset + + awinic,drive-level: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Level of drive waveform in normal driving + + awinic,f0-detection-play-time: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Drive waveform play times in the first period in the f0 detection + + awinic,f0-detection-wait-time: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Waveform wait times in the f0 detection + + awinic,f0-detection-repeat: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Repeat times in the f0 detection + + awinic,f0-detection-trace: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Drive waveform play times in the second period and later in the f0 detection + + awinic,boost-debug: + $ref: /schemas/types.yaml#/definitions/uint8-array + minItems: 3 + maxItems: 3 + description: Values for BSTDBG1-3 registers + + awinic,tset: + $ref: /schemas/types.yaml#/definitions/uint8 + description: Value for TSET register + + awinic,r-spare: + $ref: /schemas/types.yaml#/definitions/uint8 + description: Value for R_SPARE register + + awinic,bemf-upper-threshold: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Back EMF (electromotive force) upper threshold + + awinic,bemf-lower-threshold: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Back EMF (electromotive force) lower threshold + +required: + - compatible + - reg + - interrupts + - reset-gpios + - awinic,f0-preset + - awinic,f0-coefficient + - awinic,f0-calibration-percent + - awinic,drive-level + - awinic,f0-detection-play-time + - awinic,f0-detection-wait-time + - awinic,f0-detection-repeat + - awinic,f0-detection-trace + - awinic,boost-debug + - awinic,tset + - awinic,r-spare + - awinic,bemf-upper-threshold + - awinic,bemf-lower-threshold + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/interrupt-controller/irq.h> + i2c { + #address-cells = <1>; + #size-cells = <0>; + + haptics@5a { + compatible = "awinic,aw8695"; + reg = <0x5a>; + interrupts-extended = <&tlmm 85 IRQ_TYPE_EDGE_FALLING>; + reset-gpios = <&tlmm 90 GPIO_ACTIVE_HIGH>; + + awinic,f0-preset = <2350>; + awinic,f0-coefficient = <260>; + awinic,f0-calibration-percent = <7>; + awinic,drive-level = <125>; + + awinic,f0-detection-play-time = <5>; + awinic,f0-detection-wait-time = <3>; + awinic,f0-detection-repeat = <2>; + awinic,f0-detection-trace = <15>; + + awinic,boost-debug = /bits/ 8 <0x30 0xeb 0xd4>; + awinic,tset = /bits/ 8 <0x12>; + awinic,r-spare = /bits/ 8 <0x68>; + + awinic,bemf-upper-threshold = <4104>; + awinic,bemf-lower-threshold = <1016>; + }; + };
Add a document describing the bindings for the AW8695 LRA Haptic Driver. Signed-off-by: Luca Weiss <luca.weiss@fairphone.com> --- .../bindings/input/awinic,aw8695-haptics.yaml | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/awinic,aw8695-haptics.yaml