diff options
author | vincenttew <vincenttew@google.com> | 2020-12-10 19:48:53 +0800 |
---|---|---|
committer | Vincent Tew <vincenttew@google.com> | 2020-12-10 13:06:49 +0000 |
commit | a7f89abccc4ef351cecc94dd0c417da72380988d (patch) | |
tree | 372d5c541bc5fb5b737e723c9c0576ea22e9c277 | |
parent | 3f4bf1e3af834d58424369e17ee7ad99eee391d4 (diff) | |
download | msm-extra-a7f89abccc4ef351cecc94dd0c417da72380988d.tar.gz |
asoc: codecs: performance improvement for suez
not using floting or double division caculation in
kernel it may cause performance issue
Bug: 175092754
Test: stress GCA with touch sound enable
Signed-off-by: vincenttew <vincenttew@google.com>
Change-Id: I96a123758954afd4a5723306f09013c1a38314ab
-rw-r--r-- | asoc/codecs/tas256x/algo/src/tas25xx-algo-kbin-intf.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/asoc/codecs/tas256x/algo/src/tas25xx-algo-kbin-intf.c b/asoc/codecs/tas256x/algo/src/tas25xx-algo-kbin-intf.c index b3847540..d31290d2 100644 --- a/asoc/codecs/tas256x/algo/src/tas25xx-algo-kbin-intf.c +++ b/asoc/codecs/tas256x/algo/src/tas25xx-algo-kbin-intf.c @@ -53,22 +53,23 @@ static int tas25xx_get_re_common(int channel); struct device *tas25xx_algo_get_device(void); /*Max value supported is 2^8*/ -static uint8_t trans_val_to_user_m(uint32_t val, uint8_t qformat) +static int trans_val_to_user_m(int val, int qformat, int scale) { - uint32_t ret = (uint32_t)(((long long)val * 1000) >> qformat) % 1000; - return (uint8_t)(ret / 10); + int ret = (int)(((long long)val * scale) >> qformat) % scale; + return ret; } /*Max value supported is 2^8*/ -static uint8_t trans_val_to_user_i(uint32_t val, uint8_t qformat) +static int trans_val_to_user_i(int val, int qformat) { return ((val * 100) >> qformat) / 100; } #if IS_ENABLED(CONFIG_SND_SOC_CODEC_DETECT) -static double trans_val_to_double(uint32_t val, uint8_t qformat) +static int trans_val_to_int(int val, int scale, int qformat) { - return (double)((double)(val) / (double)((unsigned int)1 << (qformat))); + return trans_val_to_user_i(val, qformat) * scale + + trans_val_to_user_m(val, qformat, scale); } #endif @@ -168,12 +169,12 @@ static void query_tisa_algo(struct work_struct *wrk) s_allow_dsp_query = temp; #if IS_ENABLED(CONFIG_SND_SOC_CODEC_DETECT) - codec_misc_amp_put(0, trans_val_to_double(re_l, QFORMAT19) * scale); - codec_misc_amp_put(1, trans_val_to_double(re_r, QFORMAT19) * scale); + codec_misc_amp_put(0, (long)trans_val_to_int(re_l, scale, QFORMAT19)); + codec_misc_amp_put(1, (long)trans_val_to_int(re_r, scale, QFORMAT19)); #endif pr_debug("[TI-SmartPA:%s] Re value is %02d.%02d (%d), %02d.%02d (%d) \n", __func__, - (int32_t)trans_val_to_user_i(re_l, QFORMAT19), (int32_t)trans_val_to_user_m(re_l, QFORMAT19), re_l, - (int32_t)trans_val_to_user_i(re_r, QFORMAT19), (int32_t)trans_val_to_user_m(re_r, QFORMAT19), re_r); + (int32_t)trans_val_to_user_i(re_l, QFORMAT19), (int32_t)trans_val_to_user_m(re_l, QFORMAT19, 100), re_l, + (int32_t)trans_val_to_user_i(re_r, QFORMAT19), (int32_t)trans_val_to_user_m(re_r, QFORMAT19, 100), re_r); usleep_range (sleep_us, sleep_us_max); } |