diff options
author | Roger Fang <rogerfang@google.com> | 2022-11-09 13:31:26 +0800 |
---|---|---|
committer | Roger Fang <rogerfang@google.com> | 2022-11-10 12:14:07 +0800 |
commit | 35d385c24c28edeeab94483ee9beb423b5eee3c1 (patch) | |
tree | 304b682c7fa505e153b54a2c03955f351e54db5b | |
parent | fdfb2f28321849e925996a97db4c8b02b665d8d3 (diff) | |
download | amplifiers-35d385c24c28edeeab94483ee9beb423b5eee3c1.tar.gz |
amcs: support variant speaker elememntsandroid-t-qpr2-beta-2_r0.5android-t-qpr2-beta-2_r0.4android-t-qpr2-beta-2_r0.3android-t-qpr2-beta-1_r0.6android-t-qpr2-beta-1_r0.5android-t-qpr2-beta-1_r0.4android-13.0.0_r0.76android-gs-raviole-5.10-t-qpr2-beta-1android-gs-pantah-5.10-t-qpr2-beta-1android-gs-lynx-5.10-android13-d4android-gs-bluejay-5.10-t-qpr2-beta-1
Change speaker statistics to variant numbers up to 4.
Bug: 248451580
Test: Manually test passed
Change-Id: Ie287d8ee615a98a99fb07933813533c4312f9f3c
Signed-off-by: Roger Fang <rogerfang@google.com>
-rw-r--r-- | audiometrics/audiometrics.c | 119 |
1 files changed, 73 insertions, 46 deletions
diff --git a/audiometrics/audiometrics.c b/audiometrics/audiometrics.c index 543125b..420fa40 100644 --- a/audiometrics/audiometrics.c +++ b/audiometrics/audiometrics.c @@ -169,60 +169,62 @@ static ssize_t speaker_impedance_show(struct device *dev, struct device_attribute *attr, char *buf) { struct audiometrics_priv_type *priv = NULL; - int counts = 0; + int i, length; int scale = 100000; if (IS_ERR_OR_NULL(dev)) - return -EINVAL; + return -ENODEV; priv = dev_get_drvdata(dev); if (IS_ERR_OR_NULL(priv)) - return -EINVAL; + return -ENODEV; mutex_lock(&priv->lock); - counts = scnprintf(buf, PAGE_SIZE, "%d.%05d,%d.%05d", - priv->sz.speaker_impedance[0] / scale, - priv->sz.speaker_impedance[0] % scale, - priv->sz.speaker_impedance[1] / scale, - priv->sz.speaker_impedance[1] % scale); - - mutex_unlock(&priv->lock); + length = 0; + for (i = 0; i < SPEAKER_MAX_COUNT; i++) { + if (priv->sz.speaker_impedance[i] < 0) + continue; - dev_dbg(dev, "%s: %s\n", __func__, buf); + length += scnprintf(buf + length, PAGE_SIZE - length, "%.*s%d.%05d", i, ",", + priv->sz.speaker_impedance[i] / scale, + priv->sz.speaker_impedance[i] % scale); + } - return counts; + mutex_unlock(&priv->lock); + return length; } static ssize_t speaker_temp_show(struct device *dev, struct device_attribute *attr, char *buf) { struct audiometrics_priv_type *priv = NULL; - int counts = 0; + int i, length; int scale = 100000; if (IS_ERR_OR_NULL(dev)) - return -EINVAL; + return -ENODEV; priv = dev_get_drvdata(dev); if (IS_ERR_OR_NULL(priv)) - return -EINVAL; + return -ENODEV; mutex_lock(&priv->lock); - counts = scnprintf(buf, PAGE_SIZE, "%d.%05d,%d.%05d", - priv->sz.speaker_temp[0] / scale, - priv->sz.speaker_temp[0] % scale, - priv->sz.speaker_temp[1] / scale, - priv->sz.speaker_temp[1] % scale); - - mutex_unlock(&priv->lock); + length = 0; + for (i = 0; i < SPEAKER_MAX_COUNT; i++) { + if (priv->sz.speaker_temp[i] < 0) + continue; - dev_dbg(dev, "%s: %s\n", __func__, buf); + length += scnprintf(buf + length, PAGE_SIZE - length, "%.*s%d.%05d", i, ",", + priv->sz.speaker_temp[i] / scale, + priv->sz.speaker_temp[i] % scale); + } - return counts; + mutex_unlock(&priv->lock); + return length; } @@ -230,30 +232,31 @@ static ssize_t speaker_excursion_show(struct device *dev, struct device_attribute *attr, char *buf) { struct audiometrics_priv_type *priv = NULL; - int counts = 0; + int i, length; int scale = 100000; if (IS_ERR_OR_NULL(dev)) - return -EINVAL; + return -ENODEV; priv = dev_get_drvdata(dev); if (IS_ERR_OR_NULL(priv)) - return -EINVAL; + return -ENODEV; mutex_lock(&priv->lock); - counts = scnprintf(buf, PAGE_SIZE, "%d.%05d,%d.%05d", - priv->sz.speaker_excursion[0] / scale, - priv->sz.speaker_excursion[0] % scale, - priv->sz.speaker_excursion[1] / scale, - priv->sz.speaker_excursion[1] % scale); + length = 0; + for (i = 0; i < SPEAKER_MAX_COUNT; i++) { + if (priv->sz.speaker_excursion[i] < 0) + continue; - mutex_unlock(&priv->lock); - - dev_dbg(dev, "%s: %s\n", __func__, buf); + length += scnprintf(buf + length, PAGE_SIZE - length, "%.*s%d.%05d", i, ",", + priv->sz.speaker_excursion[i] / scale, + priv->sz.speaker_excursion[i] % scale); + } - return counts; + mutex_unlock(&priv->lock); + return length; } @@ -262,27 +265,29 @@ static ssize_t speaker_heartbeat_show(struct device *dev, struct device_attribute *attr, char *buf) { struct audiometrics_priv_type *priv = NULL; - int counts = 0; + int i, length; if (IS_ERR_OR_NULL(dev)) - return -EINVAL; + return -ENODEV; priv = dev_get_drvdata(dev); if (IS_ERR_OR_NULL(priv)) - return -EINVAL; + return -ENODEV; mutex_lock(&priv->lock); - counts = scnprintf(buf, PAGE_SIZE, "%d,%d", - priv->sz.speaker_heartbeat[0], - priv->sz.speaker_heartbeat[1]); - - mutex_unlock(&priv->lock); + length = 0; + for (i = 0; i < SPEAKER_MAX_COUNT; i++) { + if (priv->sz.speaker_heartbeat[i] < 0) + continue; - dev_dbg(dev, "%s: %s\n", __func__, buf); + length += scnprintf(buf + length, PAGE_SIZE - length, "%.*s%d", i, ",", + priv->sz.speaker_heartbeat[i]); + } - return counts; + mutex_unlock(&priv->lock); + return length; } static ssize_t codec_crashed_counter_show(struct device *dev, @@ -748,6 +753,27 @@ static void init_hwinfo_revision(struct audiometrics_priv_type *priv) mutex_unlock(&priv->lock); } +static void init_suez_speaker_default(struct audiometrics_priv_type *priv) +{ + int i; + mutex_lock(&priv->lock); + for (i = 0; i < SPEAKER_MAX_COUNT && i < 2; i++) { + priv->sz.speaker_impedance[i] = 0; + priv->sz.speaker_excursion[i] = 0; + priv->sz.speaker_temp[i] = 0; + priv->sz.speaker_heartbeat[i] = 0; + } + + for (i = 2; i < SPEAKER_MAX_COUNT; i++) { + priv->sz.speaker_impedance[i] = -1; + priv->sz.speaker_excursion[i] = -1; + priv->sz.speaker_temp[i] = -1; + priv->sz.speaker_heartbeat[i] = -1; + } + mutex_unlock(&priv->lock); +} + + static int amcs_init_cdev(struct audiometrics_priv_type *priv) { int ret; @@ -843,6 +869,7 @@ static int audiometrics_platform_probe(struct platform_device *pdev) } init_hwinfo_revision(priv); + init_suez_speaker_default(priv); dev_dbg(&pdev->dev, "%s registered\n", __func__); return 0; |