From d153bc1d480d71ab2230536dc4cf2d9243c29495 Mon Sep 17 00:00:00 2001 From: "Vangala, Amarnath" Date: Fri, 8 Oct 2021 18:22:27 +0530 Subject: [PATCH] ASoC: Lahaina: correction to CPS payload CPS Threshold values to be written to the slave device were not properly packed. Code change to correct the payload as per the specification. Change-Id: Ie5bbfca0875d16467160f96d20219c4946f81a72 Signed-off-by: Vangala, Amarnath --- asoc/lahaina.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/asoc/lahaina.c b/asoc/lahaina.c index 5805f93ea2dc..32880abbbc3c 100644 --- a/asoc/lahaina.c +++ b/asoc/lahaina.c @@ -5109,7 +5109,7 @@ static int msm_snd_cdc_dma_startup(struct snd_pcm_substream *substream) static void set_cps_config(struct snd_soc_pcm_runtime *rtd, u32 num_ch, u32 ch_mask) { - int i = 0; + int i = 0, j = 0; int val = 0; u8 dev_num = 0; int ch_configured = 0; @@ -5118,6 +5118,7 @@ static void set_cps_config(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai_link *dai_link = rtd->dai_link; struct msm_asoc_mach_data *pdata = snd_soc_card_get_drvdata(rtd->card); + struct lpass_swr_spkr_dep_cfg_t *spkr_dep_cfg_ptr; if (!pdata) { pr_err("%s: pdata is NULL\n", __func__); @@ -5176,9 +5177,11 @@ static void set_cps_config(struct snd_soc_pcm_runtime *rtd, return; } + spkr_dep_cfg_ptr = &(pdata->cps_config.spkr_dep_cfg[i]); + /* Clear stale dev num info */ - pdata->cps_config.spkr_dep_cfg[i].vbatt_pkd_reg_addr &= 0xFFFF; - pdata->cps_config.spkr_dep_cfg[i].temp_pkd_reg_addr &= 0xFFFF; + spkr_dep_cfg_ptr->vbatt_pkd_reg_addr &= 0xFFFF; + spkr_dep_cfg_ptr->temp_pkd_reg_addr &= 0xFFFF; val = 0; @@ -5192,11 +5195,22 @@ static void set_cps_config(struct snd_soc_pcm_runtime *rtd, val |= (i*2) << 16; /* Update dev num in packed reg addr */ - pdata->cps_config.spkr_dep_cfg[i].vbatt_pkd_reg_addr |= val; + spkr_dep_cfg_ptr->vbatt_pkd_reg_addr |= val; val &= 0xFF0FFFF; val |= ((i*2)+1) << 16; - pdata->cps_config.spkr_dep_cfg[i].temp_pkd_reg_addr |= val; + spkr_dep_cfg_ptr->temp_pkd_reg_addr |= val; + + /* Retain dev_num from val */ + val &= 0x00F00000; + for (j = 0; j < MAX_CPS_LEVELS; j++) + { + val &= 0xFFF0FFFF; + val |= ((i * 3) + j) << 16; + spkr_dep_cfg_ptr->value_normal_thrsd[j] |= val; + spkr_dep_cfg_ptr->value_low1_thrsd[j] |= val; + spkr_dep_cfg_ptr->value_low2_thrsd[j] |= val; + } i++; ch_configured++; }