summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Liao <rogerliao@google.com>2021-10-08 04:29:50 +0000
committerRoger Liao <rogerliao@google.com>2021-10-08 04:29:50 +0000
commit94907e32aa7d0c53595a204495925cb307b31ab1 (patch)
treeceeace8624a525e78aa84815c2722ebab82ee303
parentaaad7003272facb3e7eb2c768520885390ccb963 (diff)
parenta8b571edb296fef9866c339301a9f59be2c6d4e9 (diff)
downloadamplifiers-94907e32aa7d0c53595a204495925cb307b31ab1.tar.gz
Merge "Merge android12-gs-pixel-5.10-sc-qpr2 into android12-gs-pixel-5.10-sc-v2" into android12-gs-pixel-5.10-sc-v2
-rw-r--r--cs40l25/cs40l2x.c7
-rw-r--r--cs40l25/include/linux/mfd/cs40l2x.h2
-rw-r--r--cs40l25/snd-soc-codec-cs40l2x.c16
3 files changed, 10 insertions, 15 deletions
diff --git a/cs40l25/cs40l2x.c b/cs40l25/cs40l2x.c
index 17d4ee2..1c65044 100644
--- a/cs40l25/cs40l2x.c
+++ b/cs40l25/cs40l2x.c
@@ -266,13 +266,14 @@ static int cs40l2x_write_pwle(struct cs40l2x_private *cs40l2x, void *buf,
return dspmem_chunk_bytes(&ch);
}
-static void cs40l2x_set_state(struct cs40l2x_private *cs40l2x, bool state)
+void cs40l2x_set_state(struct cs40l2x_private *cs40l2x, bool state)
{
if (cs40l2x->vibe_state != state) {
cs40l2x->vibe_state = state;
cs40l2x_sysfs_notify(cs40l2x, "vibe_state");
}
}
+EXPORT_SYMBOL(cs40l2x_set_state);
static void cs40l2x_set_gpio_event(struct cs40l2x_private *cs40l2x, bool value)
{
@@ -6806,9 +6807,9 @@ static void cs40l2x_vibe_mode_worker(struct work_struct *work)
dev_err(dev, "Failed to ground amplifier outputs\n");
goto err_exit;
}
- cs40l2x_set_state(cs40l2x, CS40L2X_VIBE_STATE_STOPPED);
- cs40l2x_wl_relax(cs40l2x);
}
+ cs40l2x_set_state(cs40l2x, CS40L2X_VIBE_STATE_STOPPED);
+ cs40l2x_wl_relax(cs40l2x);
if (cs40l2x->dyn_f0_enable) {
ret = cs40l2x_read_dyn_f0_table(cs40l2x);
diff --git a/cs40l25/include/linux/mfd/cs40l2x.h b/cs40l25/include/linux/mfd/cs40l2x.h
index d25919b..2c7d404 100644
--- a/cs40l25/include/linux/mfd/cs40l2x.h
+++ b/cs40l25/include/linux/mfd/cs40l2x.h
@@ -1535,6 +1535,8 @@ int cs40l2x_coeff_file_parse(struct cs40l2x_private *cs40l2x,
int cs40l2x_ack_write(struct cs40l2x_private *cs40l2x, unsigned int reg,
unsigned int write_val, unsigned int reset_val);
+void cs40l2x_set_state(struct cs40l2x_private *cs40l2x, bool state);
+
struct cs40l2x_virtual_waveform {
bool is_xm;
unsigned int index;
diff --git a/cs40l25/snd-soc-codec-cs40l2x.c b/cs40l25/snd-soc-codec-cs40l2x.c
index ae694df..de4aff8 100644
--- a/cs40l25/snd-soc-codec-cs40l2x.c
+++ b/cs40l25/snd-soc-codec-cs40l2x.c
@@ -130,8 +130,7 @@ static int cs40l2x_swap_ext_clk(struct cs40l2x_codec *priv,
{
struct device *dev = priv->dev;
struct regmap *regmap = priv->regmap;
- struct cs40l2x_private *core = priv->core;
- int clk_cfg, ret;
+ int clk_cfg;
if (src == CS40L2X_32KHZ_CLK)
clk_cfg = cs40l2x_get_clk_config(CS40L2X_MCLK_FREQ);
@@ -143,11 +142,6 @@ static int cs40l2x_swap_ext_clk(struct cs40l2x_codec *priv,
return -EINVAL;
}
- ret = cs40l2x_ack_write(core, CS40L2X_MBOX_POWERCONTROL,
- CS40L2X_PWRCTL_FORCE_STBY, CS40L2X_PWRCTL_NONE);
- if (ret)
- return ret;
-
regmap_update_bits(regmap, CS40L2X_PLL_CLK_CTRL,
CS40L2X_PLL_OPEN_LOOP_MASK,
CS40L2X_PLL_OPEN_LOOP_MASK);
@@ -173,8 +167,7 @@ static int cs40l2x_swap_ext_clk(struct cs40l2x_codec *priv,
usleep_range(1000, 1500);
- return cs40l2x_ack_write(core, CS40L2X_MBOX_POWERCONTROL,
- CS40L2X_PWRCTL_WAKE, CS40L2X_PWRCTL_NONE);
+ return 0;
}
static int cs40l2x_clk_en(struct snd_soc_dapm_widget *w,
@@ -191,11 +184,9 @@ static int cs40l2x_clk_en(struct snd_soc_dapm_widget *w,
dev_info(dev, "%s: SND_SOC_DAPM_POST_PMU\n", __func__);
mutex_lock(&core->lock);
core->a2h_enable = true;
+ cs40l2x_set_state(core, CS40L2X_VIBE_STATE_RUNNING);
mutex_unlock(&core->lock);
- if (!completion_done(&core->hap_done))
- wait_for_completion(&core->hap_done);
-
ret = cs40l2x_swap_ext_clk(priv, CS40L2X_SCLK);
if (ret)
return ret;
@@ -208,6 +199,7 @@ static int cs40l2x_clk_en(struct snd_soc_dapm_widget *w,
mutex_lock(&core->lock);
core->a2h_enable = false;
+ cs40l2x_set_state(core, CS40L2X_VIBE_STATE_STOPPED);
mutex_unlock(&core->lock);
break;
default: