diff options
author | Chase Wu <chasewu@google.com> | 2022-01-16 11:11:48 +0000 |
---|---|---|
committer | chasewu <chasewu@google.com> | 2022-02-14 16:11:57 +0800 |
commit | a824f7e29cc6e1f9a1a12b1e6b4a08cbc916c5d4 (patch) | |
tree | ed0ae76a0e58f6e89903d09e28ff88fe9a71b9a6 | |
parent | bdf53aab1b4368d3178ee07f7c3234001d839d58 (diff) | |
download | amplifiers-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.c | 77 |
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, }; |