1 /*
2  * Copyright  2019 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 #ifndef TFA_HAPTIC_FW_DEFS_H_
8 #define TFA_HAPTIC_FW_DEFS_H_
9 
10 /* base version */
11 #define FW_VERSION      0x0b0000 /* patch version in hex */
12 #define FW_VERSION_MASK 0xff0000 /* version check mask */
13 #define FW_XMEM_VERSION 0x11ff   /* TFA9894 xmem version offset */
14 
15 /* firmware constants */
16 #define FW_XMEM_NR_OBJECTS1     6 /* nr of objects in table1 */
17 #define FW_XMEM_NR_OBJECTS2     5 /* nr of objects in table2 */
18 #define FW_XMEM_OBJECTSIZE      8
19 #define FW_XMEM_OBJECTSTATESIZE 8
20 
21 #define FW_CMDOBJSEL_TABLE2_OFFFSET 64
22 
23 #define FW_XMEM_CMDOBJSEL0       4102                     /* pObjState */
24 #define FW_XMEM_CMDOBJSEL1       (FW_XMEM_CMDOBJSEL0 + FW_XMEM_OBJECTSTATESIZE)
25 #define FW_XMEM_SAMPCNT0         (FW_XMEM_CMDOBJSEL0 + 2) /* ->timeCnt */
26 #define FW_XMEM_SAMPCNT1         (FW_XMEM_CMDOBJSEL1 + 2)
27 #define FW_XMEM_F0               4052                     /* fResOut */
28 #define FW_XMEM_R0               4053                     /* Rf0Out */
29 #define FW_XMEM_GENOBJECTS1      4054                     /* objectArray */
30 #define FW_XMEM_GENOBJECTS2      3152                     /* objectArray2 */
31 #define FW_XMEM_F0_R0_RANGES     4134                     /* ZfresMax */
32 #define FW_XMEM_DISF0TRC         4359                     /* disF0Trc */
33 #define FW_XMEM_DELAY_ATTACK_SMP 4361                     /* duckLraPar->delayAttackSmp */
34 #define FW_XMEM_RECALCSEL        4363                     /* recalcSelector */
35 
36 /* note: obj offsets is a table index, the interface index starts at 1 */
37 #define FW_HB_CAL_OBJ     (FW_XMEM_NR_OBJECTS1 - 2) /* calibration object */
38 #define FW_HB_STOP_OBJ    (FW_XMEM_NR_OBJECTS1 - 1) /* silence object */
39 #define FW_HB_SILENCE_OBJ FW_HB_STOP_OBJ            /* same as stop */
40 #define FW_HB_RECALC_OBJ  3                         /* default recalc object */
41 #define FW_HB_MAX_OBJ     (FW_XMEM_NR_OBJECTS1 + FW_XMEM_NR_OBJECTS2)
42 #define FW_HB_SEQ_OBJ     FW_HB_MAX_OBJ             /* sequencer virtual objects base */
43 
44 #define FW_XMEM_R0_SHIFT 11                         /* Q13.11 */
45 #define FW_XMEM_F0_SHIFT 11                         /* Q13.11 */
46 
47 enum tfa_haptic_object_type
48 {
49     object_wave    = 0,
50     object_tone    = 1,
51     object_silence = 2
52 };
53 
54 /* Tone Generator object definition */
55 struct haptic_tone_object
56 {
57     int32_t type;
58     int32_t freq;
59     int32_t level;
60     int32_t durationCntMax;
61     int32_t boostBrakeOn;
62     int32_t trackerOn;
63     int32_t boostLength;
64     int32_t reserved;
65 };
66 
67 /* Wave table object definition */
68 struct haptic_wave_object
69 {
70     int32_t type;
71     int32_t offset;
72     int32_t level;
73     int32_t durationCntMax;
74     int32_t upSampSel;
75     int32_t reserved[3];
76 };
77 
78 #endif /* TFA_HAPTIC_FW_DEFS_H_ */
79