3 #include <linux/types.h>
4 #include <sound/apr_audio-v2.h>
5 #include <linux/delay.h>
7 /* Elliptic Labs UltraSound Module */
8 #define ELLIPTIC_ULTRASOUND_DISABLE 0
9 #define ELLIPTIC_ULTRASOUND_ENABLE 1
10 #define ELLIPTIC_ULTRASOUND_SET_PARAMS 2
11 #define ELLIPTIC_ULTRASOUND_GET_PARAMS 3
12 #define ELLIPTIC_ULTRASOUND_RAMP_DOWN 4
14 /** Param ID definition */
15 #define ELLIPTIC_ULTRASOUND_PARAM_ID_UPS_DATA 3
16 #define ELLIPTIC_ULTRASOUND_PARAM_ID_CALIBRATION_DATA 11
17 #define ELLIPTIC_ULTRASOUND_PARAM_ID_ENGINE_VERSION 12
19 #define ELLIPTIC_ENABLE_APR_SIZE 16
20 #define ELLIPTIC_COFIG_SET_PARAM_SIZE 96
22 #define ELLIPTIC_ULTRASOUND_MODULE_TX 0x0F010201
23 #define ELLIPTIC_ULTRASOUND_MODULE_RX 0x0FF10202
24 #define ULTRASOUND_OPCODE 0x0FF10204
26 #define ELLIPTIC_DATA_READ_BUSY 0
27 #define ELLIPTIC_DATA_READ_OK 1
28 #define ELLIPTIC_DATA_READ_CANCEL 2
30 /** 512 byte APR payload */
31 #define ELLIPTIC_GET_PARAMS_SIZE 128
32 /** System config size is 96 bytes */
33 /* #define ELLIPTIC_SET_PARAMS_SIZE 128 */
34 #define ELLIPTIC_SET_PARAMS_SIZE 108
37 #define ELLIPTIC_SYSTEM_CONFIGURATION 0
39 #define ELLIPTIC_SYSTEM_CONFIGURATION_LATENCY 0
40 #define ELLIPTIC_SYSTEM_CONFIGURATION_SENSITIVITY 1
41 #define ELLIPTIC_SYSTEM_CONFIGURATION_SPEAKER_SCALING 2
42 #define ELLIPTIC_SYSTEM_CONFIGURATION_MICROPHONE_INDEX 3
43 #define ELLIPTIC_SYSTEM_CONFIGURATION_OPERATION_MODE 4
44 #define ELLIPTIC_SYSTEM_CONFIGURATION_OPERATION_MODE_FLAGS 5
45 #define ELLIPTIC_SYSTEM_CONFIGURATION_LOG_LEVEL 6
47 #define ELLIPTIC_CALIBRATION 1
48 #define ELLIPTIC_CALIBRATION_STATE 0
49 #define ELLIPTIC_CALIBRATION_PROFILE 1
50 #define ELLIPTIC_ULTRASOUND_GAIN 2
52 #define ELLIPTIC_SYSTEM_CONFIGURATION_SIZE 96
53 #define ELLIPTIC_CALIBRATION_DATA_SIZE 64
54 #define ELLIPTIC_VERSION_INFO_SIZE 16
55 #define ELLIPTIC_BRANCH_INFO_SIZE 32
57 #define ELLIPTIC_PORT_ID SLIMBUS_1_TX
59 /** Sequence of Elliptic Labs Ultrasound module parameters */
60 struct afe_ultrasound_set_params_t {
61 uint32_t payload[ELLIPTIC_SET_PARAMS_SIZE];
64 struct afe_ultrasound_config_command {
66 struct afe_port_cmd_set_param_v2 param;
67 struct afe_port_param_data_v2 pdata;
68 struct afe_ultrasound_set_params_t prot_config;
71 /** Sequence of Elliptic Labs Ultrasound module parameters */
72 struct afe_ultrasound_get_params_t {
73 uint32_t payload[ELLIPTIC_GET_PARAMS_SIZE];
76 struct afe_ultrasound_get_calib {
77 struct afe_port_cmd_get_param_v2 get_param;
78 struct afe_port_param_data_v2 pdata;
79 struct afe_ultrasound_get_params_t res_cfg;
82 struct afe_ultrasound_calib_get_resp {
83 struct afe_ultrasound_get_params_t res_cfg;
86 /** Elliptic APR public */
88 int32_t ultrasound_apr_set(int32_t port_id, uint32_t *param_id,
89 u8 *user_params, int32_t length);
91 int32_t elliptic_process_apr_payload(uint32_t *payload);
94 typedef struct afe_ultrasound_state {
95 atomic_t us_apr_state;
99 wait_queue_head_t *ptr_wait;
101 struct afe_ultrasound_calib_get_resp *ptr_ultrasound_calib_data;
102 } afe_ultrasound_state_t;
104 extern afe_ultrasound_state_t elus_afe;