blob: 2cd11af8b8d4897f9dae06a019ff5a029003f765 [file] [log] [blame]
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "AHAL: Gain"
#include "PalApi.h"
#include "PalDefs.h"
#include "audio_extn.h"
#include "AudioCommon.h"
extern "C" {
#define CHECK_SERVICES_REGISTERED() \
({ \
if(!AudioExtn::isServiceRegistered()) { \
AHAL_ERR("service not registered"); \
return 0; \
} \
})
__attribute__ ((visibility ("default")))
int audio_hw_get_gain_level_mapping(struct pal_amp_db_and_gain_table *mapping_tbl,
int table_size) {
CHECK_SERVICES_REGISTERED();
int ret = 0;
size_t payload_size = 0;
pal_param_gain_lvl_map_t gain_lvl_map;
gain_lvl_map.mapping_tbl = mapping_tbl;
gain_lvl_map.table_size = table_size;
gain_lvl_map.filled_size = 0;
ret = pal_get_param(PAL_PARAM_ID_GAIN_LVL_MAP,
(void **)&gain_lvl_map,
&payload_size, nullptr);
if (ret != 0) {
AHAL_ERR("fail to get PAL_PARAM_ID_GAIN_LVL_MAP %d", ret);
gain_lvl_map.filled_size = 0;
}
return gain_lvl_map.filled_size;
}
__attribute__ ((visibility ("default")))
bool audio_hw_send_gain_dep_calibration(int level) {
CHECK_SERVICES_REGISTERED();
int32_t ret = 0;
pal_param_gain_lvl_cal_t gain_lvl_cal;
gain_lvl_cal.level = level;
ret = pal_set_param(PAL_PARAM_ID_GAIN_LVL_CAL, (void*)&gain_lvl_cal, sizeof(pal_param_gain_lvl_cal_t));
if (ret != 0) {
AHAL_ERR("fail to set PAL_PARAM_ID_GAIN_LVL_CAL %d",ret);
}
return (ret != 0) ? false: true;
}
__attribute__ ((visibility ("default")))
bool audio_hw_send_linear_gain(int32_t gain) {
CHECK_SERVICES_REGISTERED();
int32_t ret = 0;
pal_param_mspp_linear_gain_t linear_gain;
linear_gain.gain = gain;
ret = pal_set_param(PAL_PARAM_ID_MSPP_LINEAR_GAIN, (void*)&linear_gain, sizeof(pal_param_mspp_linear_gain_t));
if (ret != 0) {
AHAL_ERR("fail to set PAL_PARAM_ID_MSPP_LINEAR_GAIN %d",ret);
}
return (ret != 0) ? false: true;
}
} /* extern "C" */