135 lines
3.7 KiB
C
135 lines
3.7 KiB
C
/*
|
|
* Copyright (c) 2013, Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
#ifndef __Q6LSM_H__
|
|
#define __Q6LSM_H__
|
|
|
|
#include <linux/list.h>
|
|
#include <linux/msm_ion.h>
|
|
#include <sound/apr_audio-v2.h>
|
|
#include <sound/lsm_params.h>
|
|
#include <mach/qdsp6v2/apr.h>
|
|
|
|
typedef void (*app_cb)(uint32_t opcode, uint32_t token,
|
|
uint32_t *payload, void *priv);
|
|
|
|
struct lsm_sound_model {
|
|
dma_addr_t phys;
|
|
void *data;
|
|
uint32_t size; /* size of buffer */
|
|
uint32_t actual_size; /* actual number of bytes read by DSP */
|
|
struct ion_handle *handle;
|
|
struct ion_client *client;
|
|
uint32_t mem_map_handle;
|
|
};
|
|
|
|
struct lsm_client {
|
|
int session;
|
|
app_cb cb;
|
|
atomic_t cmd_state;
|
|
void *priv;
|
|
struct apr_svc *apr;
|
|
struct apr_svc *mmap_apr;
|
|
struct mutex cmd_lock;
|
|
struct lsm_sound_model sound_model;
|
|
wait_queue_head_t cmd_wait;
|
|
uint16_t mode;
|
|
uint16_t connect_to_port;
|
|
uint16_t user_sensitivity;
|
|
uint16_t kw_sensitivity;
|
|
bool started;
|
|
};
|
|
|
|
struct lsm_stream_cmd_open_tx {
|
|
struct apr_hdr hdr;
|
|
uint16_t app_id;
|
|
uint16_t reserved;
|
|
uint32_t sampling_rate;
|
|
} __packed;
|
|
|
|
struct lsm_param_payload_common {
|
|
uint32_t module_id;
|
|
uint32_t param_id;
|
|
uint16_t param_size;
|
|
uint16_t reserved;
|
|
} __packed;
|
|
|
|
struct lsm_param_op_mode {
|
|
struct lsm_param_payload_common common;
|
|
uint32_t minor_version;
|
|
uint16_t mode;
|
|
uint16_t reserved;
|
|
} __packed;
|
|
|
|
struct lsm_param_connect_to_port {
|
|
struct lsm_param_payload_common common;
|
|
uint32_t minor_version;
|
|
/* AFE port id that receives voice wake up data */
|
|
uint16_t port_id;
|
|
uint16_t reserved;
|
|
} __packed;
|
|
|
|
struct lsm_param_kw_detect_sensitivity {
|
|
struct lsm_param_payload_common common;
|
|
uint32_t minor_version;
|
|
/* scale factor to change the keyword confidence thresholds */
|
|
uint16_t keyword_sensitivity;
|
|
uint16_t reserved;
|
|
} __packed;
|
|
|
|
struct lsm_param_user_detect_sensitivity {
|
|
struct lsm_param_payload_common common;
|
|
uint32_t minor_version;
|
|
/* scale factor to change the user confidence thresholds */
|
|
uint16_t user_sensitivity;
|
|
uint16_t reserved;
|
|
} __packed;
|
|
|
|
struct lsm_params_payload {
|
|
struct lsm_param_connect_to_port connect_to_port;
|
|
struct lsm_param_op_mode op_mode;
|
|
struct lsm_param_kw_detect_sensitivity kwds;
|
|
struct lsm_param_user_detect_sensitivity uds;
|
|
} __packed;
|
|
|
|
struct lsm_cmd_set_params {
|
|
struct apr_hdr hdr;
|
|
uint32_t data_payload_size;
|
|
uint32_t data_payload_addr_lsw;
|
|
uint32_t data_payload_addr_msw;
|
|
uint32_t mem_map_handle;
|
|
struct lsm_params_payload payload;
|
|
} __packed;
|
|
|
|
struct lsm_cmd_reg_snd_model {
|
|
struct apr_hdr hdr;
|
|
uint32_t model_size;
|
|
uint32_t model_addr_lsw;
|
|
uint32_t model_addr_msw;
|
|
uint32_t mem_map_handle;
|
|
} __packed;
|
|
|
|
struct lsm_client *q6lsm_client_alloc(app_cb cb, void *priv);
|
|
void q6lsm_client_free(struct lsm_client *client);
|
|
int q6lsm_open(struct lsm_client *client);
|
|
int q6lsm_start(struct lsm_client *client, bool wait);
|
|
int q6lsm_stop(struct lsm_client *client, bool wait);
|
|
int q6lsm_snd_model_buf_alloc(struct lsm_client *client, uint32_t len);
|
|
int q6lsm_snd_model_buf_free(struct lsm_client *client);
|
|
int q6lsm_close(struct lsm_client *client);
|
|
int q6lsm_register_sound_model(struct lsm_client *client,
|
|
enum lsm_detection_mode mode, u16 minkeyword,
|
|
u16 minuser, bool detectfailure);
|
|
int q6lsm_deregister_sound_model(struct lsm_client *client);
|
|
|
|
#endif /* __Q6LSM_H__ */
|