Loading sound/soc/msm/qdsp6v2/q6lsm.c +90 −48 Original line number Diff line number Diff line Loading @@ -82,6 +82,8 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv) uint32_t *payload; if (!client || !data) { pr_err("%s: client %p data %p\n", __func__, client, data); WARN_ON(1); return -EINVAL; } Loading @@ -95,7 +97,7 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv) payload = data->payload; pr_debug("%s: Session %d opcode 0x%x token 0x%x payload size %d\n" "payload [0] = %x\n", __func__, client->session, "payload [0] = 0x%x\n", __func__, client->session, data->opcode, data->token, data->payload_size, payload[0]); if (data->opcode == APR_BASIC_RSP_RESULT) { Loading Loading @@ -172,7 +174,7 @@ static void *q6lsm_mmap_apr_reg(void) apr_register("ADSP", "LSM", q6lsm_mmapcallback, 0x0FFFFFFFF, &lsm_common); if (!lsm_common.apr) { pr_debug("%s Unable to register APR LSM common port\n", pr_debug("%s: Unable to register APR LSM common port\n", __func__); atomic_dec(&lsm_common.apr_users); } Loading @@ -198,7 +200,6 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) struct lsm_client *client; int n; pr_debug("%s: enter\n", __func__); client = kzalloc(sizeof(struct lsm_client), GFP_KERNEL); if (!client) return NULL; Loading @@ -210,8 +211,9 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) client->session = n; client->cb = cb; client->priv = priv; pr_debug("%s:Client session %d\n", __func__, client->session); if (CHECK_SESSION(client->session)) { pr_err("%s: Client session %d\n", __func__, client->session); kfree(client); return NULL; } Loading @@ -225,7 +227,7 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) goto fail; } pr_debug("%s Registering the common port with APR\n", __func__); pr_debug("%s: Registering the common port with APR\n", __func__); client->mmap_apr = q6lsm_mmap_apr_reg(); if (!client->mmap_apr) { pr_err("%s: APR registration failed\n", __func__); Loading @@ -247,7 +249,7 @@ void q6lsm_client_free(struct lsm_client *client) if (!client) return; if (CHECK_SESSION(client->session)) { pr_err("%s: Invalid Session %d", __func__, client->session); pr_err("%s: Invalid Session %d\n", __func__, client->session); return; } apr_deregister(client->apr); Loading Loading @@ -336,6 +338,7 @@ int q6lsm_open(struct lsm_client *client, uint16_t app_id) open.app_id = client->app_id; break; default: pr_err("%s: default err 0x%x\n", __func__, client->app_id); rc = -EINVAL; break; } Loading Loading @@ -366,15 +369,17 @@ static int q6lsm_set_operation_mode( op_mode->minor_version = QLSM_PARAM_ID_MINOR_VERSION; op_mode->mode = mode; op_mode->reserved = 0; pr_debug("%s: mode = %x", __func__, mode); pr_debug("%s: mode = 0x%x", __func__, mode); return 0; } static int q6lsm_set_port_connected( struct lsm_param_connect_to_port *connect_to_port, uint16_t connected_port) { if (connect_to_port == NULL) if (connect_to_port == NULL) { pr_err("%s: err with connect_to_port\n", __func__); return -EINVAL; } connect_to_port->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; connect_to_port->common.param_id = LSM_PARAM_ID_CONNECT_TO_PORT; connect_to_port->common.param_size = Loading @@ -392,8 +397,10 @@ static int q6lsm_set_kw_sensitivity( struct lsm_param_kw_detect_sensitivity *kwds, uint16_t kw_sensitivity) { if (kwds == NULL) if (kwds == NULL) { pr_err("%s: err with kwds\n", __func__); return -EINVAL; } kwds->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; kwds->common.param_id = LSM_PARAM_ID_KEYWORD_DETECT_SENSITIVITY; kwds->common.param_size = Loading @@ -402,7 +409,7 @@ static int q6lsm_set_kw_sensitivity( kwds->common.reserved = 0; kwds->minor_version = QLSM_PARAM_ID_MINOR_VERSION; kwds->keyword_sensitivity = kw_sensitivity; pr_debug("%s: KW = %d", __func__, kw_sensitivity); pr_debug("%s: KW = %d\n", __func__, kw_sensitivity); kwds->reserved = 0; return 0; } Loading @@ -411,8 +418,10 @@ static int q6lsm_set_user_sensitivity( struct lsm_param_user_detect_sensitivity *uds, uint16_t user_sensitivity) { if (uds == NULL) if (uds == NULL) { pr_err("%s: err with uds\n", __func__); return -EINVAL; } uds->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; uds->common.param_id = LSM_PARAM_ID_USER_DETECT_SENSITIVITY; uds->common.param_size = Loading @@ -435,22 +444,24 @@ static int q6lsm_set_confidence_level( uint8_t i = 0; uint8_t padd_size = 0; if (cfl == NULL) if (cfl == NULL) { pr_err("%s: err with cfl\n", __func__); return -EINVAL; } padd_size = (4 - (num_confidence_level % 4)) - 1; cfl->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; cfl->common.param_id = LSM_PARAM_ID_MIN_CONFIDENCE_LEVELS; cfl->common.param_size = ((sizeof(uint8_t) + num_confidence_level + padd_size)) * sizeof(uint8_t); cfl->num_confidence_levels = num_confidence_level; pr_debug("%s: CMD PARAM SIZE = %d", __func__, cfl->common.param_size); pr_debug("%s: CMD PARAM SIZE = %d\n", __func__, cfl->common.param_size); memset(&cfl->confidence_level[0], 0, sizeof(uint8_t) * MAX_NUM_CONFIDENCE); memcpy(&cfl->confidence_level[0], confidence_level, num_confidence_level); pr_debug("%s: Num conf_level = %d", __func__, num_confidence_level); pr_debug("%s: Num conf_level = %d\n", __func__, num_confidence_level); for (i = 0; i < num_confidence_level; i++) pr_debug("%s: Confi value = %d", __func__, pr_debug("%s: Confi value = %d\n", __func__, cfl->confidence_level[i]); return 0; } Loading Loading @@ -507,23 +518,31 @@ static int q6lsm_set_params(struct lsm_client *client) } rc = q6lsm_set_operation_mode(op_mode, client->mode); if (rc) if (rc) { pr_err("%s: err operation rc %d\n", __func__, rc); goto exit; } rc = q6lsm_set_port_connected(connect_to_port, client->connect_to_port); if (rc) if (rc) { pr_err("%s: err port rc %d\n", __func__, rc); goto exit; } if (client->snd_model_ver_inuse == SND_MODEL_IN_USE_V1) { rc = q6lsm_set_kw_sensitivity(kwds, client->kw_sensitivity); if (rc) if (rc) { pr_err("%s: err set_kw rc %d\n", __func__, rc); goto exit; } rc = q6lsm_set_user_sensitivity(uds, client->user_sensitivity); if (rc) if (rc) { pr_err("%s: err set user rc %d\n", __func__, rc); goto exit; } } rc = q6lsm_apr_send_pkt(client, client->apr, param_data, true, NULL); if (rc) Loading @@ -546,17 +565,20 @@ static int q6lsm_set_params(struct lsm_client *client) rc = q6lsm_set_confidence_level(cfl, client->num_confidence_levels, client->confidence_levels); if (rc) if (rc) { pr_err("%s: err confidence rc %d\n", __func__, rc); goto exit; } rc = q6lsm_apr_send_pkt(client, client->apr, param_data, true, NULL); if (rc) if (rc) { pr_err("%s: err packet rc %d\n", __func__, rc); goto exit; } } pr_debug("%s: leave %d\n", __func__, rc); exit: pr_debug("%s: rc =%x", __func__, rc); return rc; } Loading Loading @@ -607,12 +629,14 @@ int q6lsm_register_sound_model(struct lsm_client *client, rc = q6lsm_set_params(client); if (rc < 0) { pr_err("%s: Failed to set lsm config params\n", __func__); pr_err("%s: Failed to set lsm config params %d\n", __func__, rc); return rc; } rc = q6lsm_send_cal(client); if (rc < 0) { pr_err("%s: Failed to send calibration data\n", __func__); pr_err("%s: Failed to send calibration data %d\n", __func__, rc); return rc; } Loading @@ -625,7 +649,7 @@ int q6lsm_register_sound_model(struct lsm_client *client, rmb(); cmd.mem_map_handle = client->sound_model.mem_map_handle; pr_debug("%s: addr %pa, size %d, handle %x\n", __func__, pr_debug("%s: addr %pa, size %d, handle 0x%x\n", __func__, &client->sound_model.phys, cmd.model_size, cmd.mem_map_handle); rc = q6lsm_apr_send_pkt(client, client->apr, &cmd, true, NULL); if (rc) Loading @@ -642,13 +666,19 @@ int q6lsm_deregister_sound_model(struct lsm_client *client) int rc; struct lsm_cmd_reg_snd_model cmd; if (!client || !client->apr) { if (!client) { pr_err("APR handle NULL\n"); return -EINVAL; } pr_debug("%s: session[%d]", __func__, client->session); if (CHECK_SESSION(client->session)) if (!client->apr) { pr_err("APR client handle NULL\n"); return -EINVAL; } if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } memset(&cmd, 0, sizeof(cmd)); q6lsm_add_hdr(client, &cmd.hdr, sizeof(cmd.hdr), false); Loading Loading @@ -696,14 +726,18 @@ static int q6lsm_memory_map_regions(struct lsm_client *client, pr_debug("%s: dma_addr_p 0x%pa, dma_buf_sz %d, mmap_p 0x%p, session %d\n", __func__, &dma_addr_p, dma_buf_sz, mmap_p, client->session); if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } cmd_size = sizeof(struct avs_cmd_shared_mem_map_regions) + sizeof(struct avs_shared_map_region_payload); mmap_region_cmd = kzalloc(cmd_size, GFP_KERNEL); if (!mmap_region_cmd) if (!mmap_region_cmd) { pr_err("%s: memory allocation failed\n", __func__); return -ENOMEM; } mmap_regions = (struct avs_cmd_shared_mem_map_regions *)mmap_region_cmd; q6lsm_add_mmaphdr(client, &mmap_regions->hdr, cmd_size, true, Loading Loading @@ -738,8 +772,10 @@ static int q6lsm_memory_unmap_regions(struct lsm_client *client, struct avs_cmd_shared_mem_unmap_regions unmap; int rc = 0; int cmd_size = 0; if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } cmd_size = sizeof(struct avs_cmd_shared_mem_unmap_regions); q6lsm_add_mmaphdr(client, &unmap.hdr, cmd_size, true, (client->session << 8)); Loading @@ -763,8 +799,10 @@ static int q6lsm_send_cal(struct lsm_client *client) struct cal_block_data *cal_block = NULL; pr_debug("%s: Session id %d\n", __func__, client->session); if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } if (lsm_common.cal_data == NULL) goto done; Loading Loading @@ -812,14 +850,17 @@ int q6lsm_snd_model_buf_free(struct lsm_client *client) int rc; pr_debug("%s: Session id %d\n", __func__, client->session); if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } mutex_lock(&client->cmd_lock); rc = q6lsm_memory_unmap_regions(client, client->sound_model.mem_map_handle); if (rc < 0) pr_err("%s CMD Memory_unmap_regions failed\n", __func__); pr_err("%s: CMD Memory_unmap_regions failed %d\n", __func__, rc); if (client->sound_model.data) { msm_audio_ion_free(client->sound_model.client, Loading Loading @@ -927,8 +968,8 @@ static int q6lsm_mmapcallback(struct apr_client_data *data, void *priv) command); } default: pr_debug("%s: command 0x%x return code 0x%x\n", __func__, command, retcode); pr_debug("%s: command 0x%x return code 0x%x opcode 0x%x\n", __func__, command, retcode, data->opcode); break; } if (client->cb) Loading Loading @@ -996,6 +1037,7 @@ int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len) (pad_zero + client->sound_model.data + client->sound_model.size)); } else { pr_err("%s: sound model busy\n", __func__); rc = -EBUSY; goto fail; } Loading @@ -1005,7 +1047,7 @@ int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len) len, &client->sound_model.mem_map_handle); if (rc < 0) { pr_err("%s:CMD Memory_map_regions failed\n", __func__); pr_err("%s: CMD Memory_map_regions failed %d\n", __func__, rc); goto exit; } Loading @@ -1032,7 +1074,7 @@ static int q6lsm_cmd(struct lsm_client *client, int opcode, bool wait) hdr.opcode = opcode; break; default: pr_err("%s: Invalid opcode %d\n", __func__, opcode); pr_err("%s: Invalid opcode 0x%x\n", __func__, opcode); return -EINVAL; } rc = q6lsm_apr_send_pkt(client, client->apr, &hdr, wait, NULL); Loading Loading @@ -1062,7 +1104,7 @@ static int q6lsm_alloc_cal(int32_t cal_type, size_t data_size, void *data) { int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_alloc_cal(data_size, data, lsm_common.cal_data, 0, NULL); Loading @@ -1080,7 +1122,7 @@ static int q6lsm_dealloc_cal(int32_t cal_type, size_t data_size, void *data) { int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_dealloc_cal(data_size, data, lsm_common.cal_data); Loading @@ -1098,7 +1140,7 @@ static int q6lsm_set_cal(int32_t cal_type, size_t data_size, void *data) { int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_set_cal(data_size, data, lsm_common.cal_data, 0, NULL); Loading @@ -1114,7 +1156,7 @@ done: static void lsm_delete_cal_data(void) { pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); cal_utils_destroy_cal_types(1, &lsm_common.cal_data); return; Loading @@ -1129,7 +1171,7 @@ static int q6lsm_init_cal_data(void) q6lsm_set_cal, NULL, NULL} }, {NULL, NULL, cal_utils_match_ion_map} }; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_create_cal_types(1, &lsm_common.cal_data, &cal_type_info); Loading @@ -1149,7 +1191,7 @@ err: static int __init q6lsm_init(void) { int i = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); spin_lock_init(&lsm_session_lock); spin_lock_init(&mmap_lock); mutex_init(&lsm_common.apr_lock); Loading Loading
sound/soc/msm/qdsp6v2/q6lsm.c +90 −48 Original line number Diff line number Diff line Loading @@ -82,6 +82,8 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv) uint32_t *payload; if (!client || !data) { pr_err("%s: client %p data %p\n", __func__, client, data); WARN_ON(1); return -EINVAL; } Loading @@ -95,7 +97,7 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv) payload = data->payload; pr_debug("%s: Session %d opcode 0x%x token 0x%x payload size %d\n" "payload [0] = %x\n", __func__, client->session, "payload [0] = 0x%x\n", __func__, client->session, data->opcode, data->token, data->payload_size, payload[0]); if (data->opcode == APR_BASIC_RSP_RESULT) { Loading Loading @@ -172,7 +174,7 @@ static void *q6lsm_mmap_apr_reg(void) apr_register("ADSP", "LSM", q6lsm_mmapcallback, 0x0FFFFFFFF, &lsm_common); if (!lsm_common.apr) { pr_debug("%s Unable to register APR LSM common port\n", pr_debug("%s: Unable to register APR LSM common port\n", __func__); atomic_dec(&lsm_common.apr_users); } Loading @@ -198,7 +200,6 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) struct lsm_client *client; int n; pr_debug("%s: enter\n", __func__); client = kzalloc(sizeof(struct lsm_client), GFP_KERNEL); if (!client) return NULL; Loading @@ -210,8 +211,9 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) client->session = n; client->cb = cb; client->priv = priv; pr_debug("%s:Client session %d\n", __func__, client->session); if (CHECK_SESSION(client->session)) { pr_err("%s: Client session %d\n", __func__, client->session); kfree(client); return NULL; } Loading @@ -225,7 +227,7 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) goto fail; } pr_debug("%s Registering the common port with APR\n", __func__); pr_debug("%s: Registering the common port with APR\n", __func__); client->mmap_apr = q6lsm_mmap_apr_reg(); if (!client->mmap_apr) { pr_err("%s: APR registration failed\n", __func__); Loading @@ -247,7 +249,7 @@ void q6lsm_client_free(struct lsm_client *client) if (!client) return; if (CHECK_SESSION(client->session)) { pr_err("%s: Invalid Session %d", __func__, client->session); pr_err("%s: Invalid Session %d\n", __func__, client->session); return; } apr_deregister(client->apr); Loading Loading @@ -336,6 +338,7 @@ int q6lsm_open(struct lsm_client *client, uint16_t app_id) open.app_id = client->app_id; break; default: pr_err("%s: default err 0x%x\n", __func__, client->app_id); rc = -EINVAL; break; } Loading Loading @@ -366,15 +369,17 @@ static int q6lsm_set_operation_mode( op_mode->minor_version = QLSM_PARAM_ID_MINOR_VERSION; op_mode->mode = mode; op_mode->reserved = 0; pr_debug("%s: mode = %x", __func__, mode); pr_debug("%s: mode = 0x%x", __func__, mode); return 0; } static int q6lsm_set_port_connected( struct lsm_param_connect_to_port *connect_to_port, uint16_t connected_port) { if (connect_to_port == NULL) if (connect_to_port == NULL) { pr_err("%s: err with connect_to_port\n", __func__); return -EINVAL; } connect_to_port->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; connect_to_port->common.param_id = LSM_PARAM_ID_CONNECT_TO_PORT; connect_to_port->common.param_size = Loading @@ -392,8 +397,10 @@ static int q6lsm_set_kw_sensitivity( struct lsm_param_kw_detect_sensitivity *kwds, uint16_t kw_sensitivity) { if (kwds == NULL) if (kwds == NULL) { pr_err("%s: err with kwds\n", __func__); return -EINVAL; } kwds->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; kwds->common.param_id = LSM_PARAM_ID_KEYWORD_DETECT_SENSITIVITY; kwds->common.param_size = Loading @@ -402,7 +409,7 @@ static int q6lsm_set_kw_sensitivity( kwds->common.reserved = 0; kwds->minor_version = QLSM_PARAM_ID_MINOR_VERSION; kwds->keyword_sensitivity = kw_sensitivity; pr_debug("%s: KW = %d", __func__, kw_sensitivity); pr_debug("%s: KW = %d\n", __func__, kw_sensitivity); kwds->reserved = 0; return 0; } Loading @@ -411,8 +418,10 @@ static int q6lsm_set_user_sensitivity( struct lsm_param_user_detect_sensitivity *uds, uint16_t user_sensitivity) { if (uds == NULL) if (uds == NULL) { pr_err("%s: err with uds\n", __func__); return -EINVAL; } uds->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; uds->common.param_id = LSM_PARAM_ID_USER_DETECT_SENSITIVITY; uds->common.param_size = Loading @@ -435,22 +444,24 @@ static int q6lsm_set_confidence_level( uint8_t i = 0; uint8_t padd_size = 0; if (cfl == NULL) if (cfl == NULL) { pr_err("%s: err with cfl\n", __func__); return -EINVAL; } padd_size = (4 - (num_confidence_level % 4)) - 1; cfl->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP; cfl->common.param_id = LSM_PARAM_ID_MIN_CONFIDENCE_LEVELS; cfl->common.param_size = ((sizeof(uint8_t) + num_confidence_level + padd_size)) * sizeof(uint8_t); cfl->num_confidence_levels = num_confidence_level; pr_debug("%s: CMD PARAM SIZE = %d", __func__, cfl->common.param_size); pr_debug("%s: CMD PARAM SIZE = %d\n", __func__, cfl->common.param_size); memset(&cfl->confidence_level[0], 0, sizeof(uint8_t) * MAX_NUM_CONFIDENCE); memcpy(&cfl->confidence_level[0], confidence_level, num_confidence_level); pr_debug("%s: Num conf_level = %d", __func__, num_confidence_level); pr_debug("%s: Num conf_level = %d\n", __func__, num_confidence_level); for (i = 0; i < num_confidence_level; i++) pr_debug("%s: Confi value = %d", __func__, pr_debug("%s: Confi value = %d\n", __func__, cfl->confidence_level[i]); return 0; } Loading Loading @@ -507,23 +518,31 @@ static int q6lsm_set_params(struct lsm_client *client) } rc = q6lsm_set_operation_mode(op_mode, client->mode); if (rc) if (rc) { pr_err("%s: err operation rc %d\n", __func__, rc); goto exit; } rc = q6lsm_set_port_connected(connect_to_port, client->connect_to_port); if (rc) if (rc) { pr_err("%s: err port rc %d\n", __func__, rc); goto exit; } if (client->snd_model_ver_inuse == SND_MODEL_IN_USE_V1) { rc = q6lsm_set_kw_sensitivity(kwds, client->kw_sensitivity); if (rc) if (rc) { pr_err("%s: err set_kw rc %d\n", __func__, rc); goto exit; } rc = q6lsm_set_user_sensitivity(uds, client->user_sensitivity); if (rc) if (rc) { pr_err("%s: err set user rc %d\n", __func__, rc); goto exit; } } rc = q6lsm_apr_send_pkt(client, client->apr, param_data, true, NULL); if (rc) Loading @@ -546,17 +565,20 @@ static int q6lsm_set_params(struct lsm_client *client) rc = q6lsm_set_confidence_level(cfl, client->num_confidence_levels, client->confidence_levels); if (rc) if (rc) { pr_err("%s: err confidence rc %d\n", __func__, rc); goto exit; } rc = q6lsm_apr_send_pkt(client, client->apr, param_data, true, NULL); if (rc) if (rc) { pr_err("%s: err packet rc %d\n", __func__, rc); goto exit; } } pr_debug("%s: leave %d\n", __func__, rc); exit: pr_debug("%s: rc =%x", __func__, rc); return rc; } Loading Loading @@ -607,12 +629,14 @@ int q6lsm_register_sound_model(struct lsm_client *client, rc = q6lsm_set_params(client); if (rc < 0) { pr_err("%s: Failed to set lsm config params\n", __func__); pr_err("%s: Failed to set lsm config params %d\n", __func__, rc); return rc; } rc = q6lsm_send_cal(client); if (rc < 0) { pr_err("%s: Failed to send calibration data\n", __func__); pr_err("%s: Failed to send calibration data %d\n", __func__, rc); return rc; } Loading @@ -625,7 +649,7 @@ int q6lsm_register_sound_model(struct lsm_client *client, rmb(); cmd.mem_map_handle = client->sound_model.mem_map_handle; pr_debug("%s: addr %pa, size %d, handle %x\n", __func__, pr_debug("%s: addr %pa, size %d, handle 0x%x\n", __func__, &client->sound_model.phys, cmd.model_size, cmd.mem_map_handle); rc = q6lsm_apr_send_pkt(client, client->apr, &cmd, true, NULL); if (rc) Loading @@ -642,13 +666,19 @@ int q6lsm_deregister_sound_model(struct lsm_client *client) int rc; struct lsm_cmd_reg_snd_model cmd; if (!client || !client->apr) { if (!client) { pr_err("APR handle NULL\n"); return -EINVAL; } pr_debug("%s: session[%d]", __func__, client->session); if (CHECK_SESSION(client->session)) if (!client->apr) { pr_err("APR client handle NULL\n"); return -EINVAL; } if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } memset(&cmd, 0, sizeof(cmd)); q6lsm_add_hdr(client, &cmd.hdr, sizeof(cmd.hdr), false); Loading Loading @@ -696,14 +726,18 @@ static int q6lsm_memory_map_regions(struct lsm_client *client, pr_debug("%s: dma_addr_p 0x%pa, dma_buf_sz %d, mmap_p 0x%p, session %d\n", __func__, &dma_addr_p, dma_buf_sz, mmap_p, client->session); if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } cmd_size = sizeof(struct avs_cmd_shared_mem_map_regions) + sizeof(struct avs_shared_map_region_payload); mmap_region_cmd = kzalloc(cmd_size, GFP_KERNEL); if (!mmap_region_cmd) if (!mmap_region_cmd) { pr_err("%s: memory allocation failed\n", __func__); return -ENOMEM; } mmap_regions = (struct avs_cmd_shared_mem_map_regions *)mmap_region_cmd; q6lsm_add_mmaphdr(client, &mmap_regions->hdr, cmd_size, true, Loading Loading @@ -738,8 +772,10 @@ static int q6lsm_memory_unmap_regions(struct lsm_client *client, struct avs_cmd_shared_mem_unmap_regions unmap; int rc = 0; int cmd_size = 0; if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } cmd_size = sizeof(struct avs_cmd_shared_mem_unmap_regions); q6lsm_add_mmaphdr(client, &unmap.hdr, cmd_size, true, (client->session << 8)); Loading @@ -763,8 +799,10 @@ static int q6lsm_send_cal(struct lsm_client *client) struct cal_block_data *cal_block = NULL; pr_debug("%s: Session id %d\n", __func__, client->session); if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } if (lsm_common.cal_data == NULL) goto done; Loading Loading @@ -812,14 +850,17 @@ int q6lsm_snd_model_buf_free(struct lsm_client *client) int rc; pr_debug("%s: Session id %d\n", __func__, client->session); if (CHECK_SESSION(client->session)) if (CHECK_SESSION(client->session)) { pr_err("%s: session[%d]", __func__, client->session); return -EINVAL; } mutex_lock(&client->cmd_lock); rc = q6lsm_memory_unmap_regions(client, client->sound_model.mem_map_handle); if (rc < 0) pr_err("%s CMD Memory_unmap_regions failed\n", __func__); pr_err("%s: CMD Memory_unmap_regions failed %d\n", __func__, rc); if (client->sound_model.data) { msm_audio_ion_free(client->sound_model.client, Loading Loading @@ -927,8 +968,8 @@ static int q6lsm_mmapcallback(struct apr_client_data *data, void *priv) command); } default: pr_debug("%s: command 0x%x return code 0x%x\n", __func__, command, retcode); pr_debug("%s: command 0x%x return code 0x%x opcode 0x%x\n", __func__, command, retcode, data->opcode); break; } if (client->cb) Loading Loading @@ -996,6 +1037,7 @@ int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len) (pad_zero + client->sound_model.data + client->sound_model.size)); } else { pr_err("%s: sound model busy\n", __func__); rc = -EBUSY; goto fail; } Loading @@ -1005,7 +1047,7 @@ int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len) len, &client->sound_model.mem_map_handle); if (rc < 0) { pr_err("%s:CMD Memory_map_regions failed\n", __func__); pr_err("%s: CMD Memory_map_regions failed %d\n", __func__, rc); goto exit; } Loading @@ -1032,7 +1074,7 @@ static int q6lsm_cmd(struct lsm_client *client, int opcode, bool wait) hdr.opcode = opcode; break; default: pr_err("%s: Invalid opcode %d\n", __func__, opcode); pr_err("%s: Invalid opcode 0x%x\n", __func__, opcode); return -EINVAL; } rc = q6lsm_apr_send_pkt(client, client->apr, &hdr, wait, NULL); Loading Loading @@ -1062,7 +1104,7 @@ static int q6lsm_alloc_cal(int32_t cal_type, size_t data_size, void *data) { int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_alloc_cal(data_size, data, lsm_common.cal_data, 0, NULL); Loading @@ -1080,7 +1122,7 @@ static int q6lsm_dealloc_cal(int32_t cal_type, size_t data_size, void *data) { int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_dealloc_cal(data_size, data, lsm_common.cal_data); Loading @@ -1098,7 +1140,7 @@ static int q6lsm_set_cal(int32_t cal_type, size_t data_size, void *data) { int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_set_cal(data_size, data, lsm_common.cal_data, 0, NULL); Loading @@ -1114,7 +1156,7 @@ done: static void lsm_delete_cal_data(void) { pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); cal_utils_destroy_cal_types(1, &lsm_common.cal_data); return; Loading @@ -1129,7 +1171,7 @@ static int q6lsm_init_cal_data(void) q6lsm_set_cal, NULL, NULL} }, {NULL, NULL, cal_utils_match_ion_map} }; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); ret = cal_utils_create_cal_types(1, &lsm_common.cal_data, &cal_type_info); Loading @@ -1149,7 +1191,7 @@ err: static int __init q6lsm_init(void) { int i = 0; pr_debug("%s\n", __func__); pr_debug("%s:\n", __func__); spin_lock_init(&lsm_session_lock); spin_lock_init(&mmap_lock); mutex_init(&lsm_common.apr_lock); Loading