summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvincenttew <vincenttew@google.com>2020-12-10 19:48:53 +0800
committerVincent Tew <vincenttew@google.com>2020-12-10 13:06:49 +0000
commita7f89abccc4ef351cecc94dd0c417da72380988d (patch)
tree372d5c541bc5fb5b737e723c9c0576ea22e9c277
parent3f4bf1e3af834d58424369e17ee7ad99eee391d4 (diff)
downloadmsm-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.c21
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);
}