summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Wu <chasewu@google.com>2022-01-16 11:11:48 +0000
committerchasewu <chasewu@google.com>2022-02-14 16:11:57 +0800
commita824f7e29cc6e1f9a1a12b1e6b4a08cbc916c5d4 (patch)
treeed0ae76a0e58f6e89903d09e28ff88fe9a71b9a6
parentbdf53aab1b4368d3178ee07f7c3234001d839d58 (diff)
downloadamplifiers-a824f7e29cc6e1f9a1a12b1e6b4a08cbc916c5d4.tar.gz
Revert "Revert "misc: cs40l25: Add plwe ramp down interface""
This reverts commit bb43033eb703bfb38b3bb4a13756ae41f36f3250. Reason for revert: vendor release a 10.7.9 FW to solve this issue Bug: 205323128 Bug: 206645006 Test: Reproduce step: adb shell cmd vibrator_manager synced waveform 1 10 20 20 10 40 Change-Id: I38ee4a799ef28b86490509d168fd4a8a29db177c Change-Id: Idf8942f26c62c9de7c6a48501f4c3cc242c789f3
-rw-r--r--cs40l25/cs40l2x.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/cs40l25/cs40l2x.c b/cs40l25/cs40l2x.c
index 1c65044..977c09c 100644
--- a/cs40l25/cs40l2x.c
+++ b/cs40l25/cs40l2x.c
@@ -6438,10 +6438,86 @@ err_mutex:
return count;
}
+static ssize_t cs40l2x_pwle_ramp_down_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct cs40l2x_private *cs40l2x = cs40l2x_get_private(dev);
+ int ret;
+ unsigned int reg, val;
+
+ pm_runtime_get_sync(cs40l2x->dev);
+ mutex_lock(&cs40l2x->lock);
+
+ reg = cs40l2x_dsp_reg(cs40l2x, "RAMPDOWN_COEFF",
+ CS40L2X_XM_UNPACKED_TYPE,
+ cs40l2x->fw_desc->id);
+ if (!reg) {
+ ret = -EPERM;
+ goto err_mutex;
+ }
+
+ ret = regmap_read(cs40l2x->regmap, reg, &val);
+ if (ret)
+ goto err_mutex;
+
+ /* Q0.24 format */
+ ret = snprintf(buf, PAGE_SIZE, "%u\n", val);
+
+err_mutex:
+ mutex_unlock(&cs40l2x->lock);
+ pm_runtime_mark_last_busy(cs40l2x->dev);
+ pm_runtime_put_autosuspend(cs40l2x->dev);
+
+ return ret;
+}
+
+static ssize_t cs40l2x_pwle_ramp_down_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct cs40l2x_private *cs40l2x = cs40l2x_get_private(dev);
+ int ret;
+ unsigned int reg, val;
+
+ ret = kstrtou32(buf, 10, &val);
+ if (ret)
+ return -EINVAL;
+
+ pm_runtime_get_sync(cs40l2x->dev);
+ mutex_lock(&cs40l2x->lock);
+
+ reg = cs40l2x_dsp_reg(cs40l2x, "RAMPDOWN_COEFF",
+ CS40L2X_XM_UNPACKED_TYPE,
+ cs40l2x->fw_desc->id);
+ if (!reg) {
+ ret = -EPERM;
+ goto err_mutex;
+ }
+
+ /* Q0.24 format */
+ /* Zero value means that PWLE Ramp down is off */
+ ret = regmap_write(cs40l2x->regmap, reg, val);
+ if (ret)
+ goto err_mutex;
+
+ ret = count;
+
+err_mutex:
+ mutex_unlock(&cs40l2x->lock);
+ pm_runtime_mark_last_busy(cs40l2x->dev);
+ pm_runtime_put_autosuspend(cs40l2x->dev);
+
+ return ret;
+}
+
static DEVICE_ATTR(cp_trigger_index, 0660, cs40l2x_cp_trigger_index_show,
cs40l2x_cp_trigger_index_store);
static DEVICE_ATTR(cp_trigger_queue, 0660, cs40l2x_cp_trigger_queue_show,
cs40l2x_cp_trigger_queue_store);
+static DEVICE_ATTR(pwle_ramp_down, 0660, cs40l2x_pwle_ramp_down_show,
+ cs40l2x_pwle_ramp_down_store);
static DEVICE_ATTR(cp_trigger_duration, 0660, cs40l2x_cp_trigger_duration_show,
NULL);
static DEVICE_ATTR(cp_trigger_q_sub, 0660, cs40l2x_cp_trigger_q_sub_show,
@@ -6656,6 +6732,7 @@ static struct attribute *cs40l2x_dev_attrs[] = {
&dev_attr_virtual_pwle_indexes.attr,
&dev_attr_available_pwle_segments.attr,
&dev_attr_boost_ipk.attr,
+ &dev_attr_pwle_ramp_down.attr,
NULL,
};