summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Fang <rogerfang@google.com>2022-11-09 13:31:26 +0800
committerRoger Fang <rogerfang@google.com>2022-11-10 12:14:07 +0800
commit35d385c24c28edeeab94483ee9beb423b5eee3c1 (patch)
tree304b682c7fa505e153b54a2c03955f351e54db5b
parentfdfb2f28321849e925996a97db4c8b02b665d8d3 (diff)
downloadamplifiers-35d385c24c28edeeab94483ee9beb423b5eee3c1.tar.gz
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.c119
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;