From 4993ca75e124e8e3137b1f529370f46570f2eb24 Mon Sep 17 00:00:00 2001 From: Jeff LaBundy Date: Wed, 10 Jan 2018 01:11:34 -0600 Subject: [PATCH] misc: cs40l20: Add extended-length playback support Allowed for the MSB of the cp_trigger_index sysfs control to indicate that playback should be rendered until forcibly stopped. Change-Id: Ic9c0111a7b4110d482174bfd475697bb2ac2c17a Signed-off-by: Jeff LaBundy Signed-off-by: Ravi Vembu --- drivers/misc/cs40l20.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/misc/cs40l20.c b/drivers/misc/cs40l20.c index d289ab460ccc..355856b6c925 100644 --- a/drivers/misc/cs40l20.c +++ b/drivers/misc/cs40l20.c @@ -100,7 +100,7 @@ static ssize_t cs40l20_cp_trigger_index_store(struct device *dev, if (ret) return -EINVAL; - if (index > (cs40l20->num_waves - 1)) + if ((index & 0x7FFF) > (cs40l20->num_waves - 1)) return -EINVAL; cs40l20->cp_trigger_index = index; @@ -319,13 +319,16 @@ static void cs40l20_vibe_start_worker(struct work_struct *work) mutex_lock(&cs40l20->lock); - if (cs40l20->cp_trigger_index) + switch (cs40l20->cp_trigger_index) { + case 0x0001 ... 0x7FFF: control_reg = cs40l20_dsp_reg(cs40l20, "TRIGGERINDEX"); - else + break; + default: control_reg = cs40l20_dsp_reg(cs40l20, "TRIGGER_MS"); + } ret = regmap_write(cs40l20->regmap, - control_reg, cs40l20->cp_trigger_index); + control_reg, (cs40l20->cp_trigger_index & 0x7FFF)); if (ret) dev_err(cs40l20->dev, "Failed to start playback\n");