int q6lsm_register_sound_model(struct lsm_client *client, enum lsm_detection_mode mode, bool detectfailure) { int rc; struct lsm_cmd_reg_snd_model cmd; memset(&cmd, 0, sizeof(cmd)); if (mode == LSM_MODE_KEYWORD_ONLY_DETECTION) { client->mode = 0x01; } else if (mode == LSM_MODE_USER_KEYWORD_DETECTION) { client->mode = 0x03; } else { pr_err("%s: Incorrect detection mode %d\n", __func__, mode); return -EINVAL; } client->mode |= detectfailure << 2; client->connect_to_port = get_lsm_port(); rc = q6lsm_set_params(client); if (rc < 0) { pr_err("%s: Failed to set lsm config params\n", __func__); return rc; } rc = q6lsm_send_cal(client); if (rc < 0) { pr_err("%s: Failed to send calibration data\n", __func__); return rc; } q6lsm_add_hdr(client, &cmd.hdr, sizeof(cmd), true); cmd.hdr.opcode = LSM_SESSION_CMD_REGISTER_SOUND_MODEL; cmd.model_addr_lsw = lower_32_bits(client->sound_model.phys); cmd.model_addr_msw = upper_32_bits(client->sound_model.phys); cmd.model_size = client->sound_model.size; rmb(); cmd.mem_map_handle = client->sound_model.mem_map_handle; pr_debug("%s: addr %pa, size %d, handle %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) pr_err("%s: Failed cmd op[0x%x]rc[%d]\n", __func__, cmd.hdr.opcode, rc); else pr_debug("%s: Register sound model succeeded\n", __func__); return rc; }
int q6lsm_set_data(struct lsm_client *client, enum lsm_detection_mode mode, bool detectfailure) { int rc = 0; if (!client->confidence_levels) { /* * It is possible that confidence levels are * not provided. This is not a error condition. * Return gracefully without any error */ pr_debug("%s: no conf levels to set\n", __func__); return rc; } if (mode == LSM_MODE_KEYWORD_ONLY_DETECTION) { client->mode = 0x01; } else if (mode == LSM_MODE_USER_KEYWORD_DETECTION) { client->mode = 0x03; } else { pr_err("%s: Incorrect detection mode %d\n", __func__, mode); rc = -EINVAL; goto err_ret; } client->mode |= detectfailure << 2; client->connect_to_port = get_lsm_port(); rc = q6lsm_set_params(client); if (rc < 0) { pr_err("%s: Failed to set lsm config params %d\n", __func__, rc); goto err_ret; } rc = q6lsm_send_cal(client); if (rc < 0) { pr_err("%s: Failed to send calibration data %d\n", __func__, rc); goto err_ret; } err_ret: return rc; }