cs35l41: workaround for fixing speaker low volume issue

- once cirrus new 96k firmware is ready, revert this
- not sending mailbox command to firmware, instead of mute/unmute command

Mot-CRs-fixed: (CR) (CR)

Change-Id: I22b6d368499edd99da5238f0e7393eb8d5c79fcc
Signed-off-by: huangys <huangys@motorola.com>
Reviewed-on: https://gerrit.mot.com/1241093
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Master Yoda
Reviewed-by: Guobin Zhang <zhanggb@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
huangys 2018-09-12 20:00:14 +08:00 • committed by Yuesheng Huang
commit 9830e98ff4
3 changed files with 26 additions and 1 deletions

View file

@ -61,6 +61,7 @@ struct cs35l41_private {
int extclk_freq;
int extclk_cfg;
int sclk;
unsigned int cspl_cmd_reg;
unsigned int cspl_cmd;
bool tdm_mode;
bool i2s_mode;

View file

@ -44,6 +44,8 @@
#include "cs35l41.h"
#include <sound/cs35l41.h>
#define WORKAROUND_CSPL_VOLUME
static const char * const cs35l41_supplies[] = {
"VA",
"VP",
@ -174,6 +176,14 @@ static int cs35l41_dsp_load_ev(struct snd_soc_dapm_widget *w,
wm_halo_event(w, kcontrol, event);
cs35l41->halo_booted = true;
}
regmap_write(cs35l41->regmap, cs35l41->cspl_cmd_reg,
CS35L41_CSPL_CMD_UNMUTE);
return 0;
case SND_SOC_DAPM_PRE_PMD:
regmap_write(cs35l41->regmap, cs35l41->cspl_cmd_reg,
CS35L41_CSPL_CMD_MUTE);
default:
return 0;
}
@ -257,6 +267,10 @@ static int cs35l41_set_csplmboxcmd(struct cs35l41_private *cs35l41,
int ret;
unsigned int sts;
#ifdef WORKAROUND_CSPL_VOLUME
pr_info("%s: workaround cspl volume\n", __func__);
return 0;
#endif
/* Reset DSP sticky bit */
regmap_write(cs35l41->regmap, CS35L41_IRQ2_STATUS2,
1 << CS35L41_CSPL_MBOX_CMD_DRV_SHIFT);
@ -831,7 +845,8 @@ static const struct snd_soc_dapm_widget cs35l41_dapm_widgets[] = {
SND_SOC_NOPM, 0, 0, cs35l41_dsp_power_ev,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
SND_SOC_DAPM_OUT_DRV_E("DSP1", SND_SOC_NOPM, 0, 0, NULL, 0,
cs35l41_dsp_load_ev, SND_SOC_DAPM_POST_PMU),
cs35l41_dsp_load_ev,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
SND_SOC_DAPM_OUTPUT("SPK"),
SND_SOC_DAPM_SWITCH("AMP Enable", SND_SOC_NOPM, 0, 1, &amp_enable_ctrl),
@ -1919,9 +1934,11 @@ int cs35l41_probe(struct cs35l41_private *cs35l41,
"Failed to apply A0 errata patch %d\n", ret);
goto err;
}
cs35l41->cspl_cmd_reg = CS35L41_CSPL_COMMAND_REV_A0;
break;
case CS35L41_REVID_B0:
regmap_write(cs35l41->regmap, CS35L41_BSTCVRT_DCM_CTRL, 0x51);
cs35l41->cspl_cmd_reg = CS35L41_CSPL_COMMAND_REV_B0;
break;
}

View file

@ -733,6 +733,13 @@ extern const struct cs35l41_otp_map_element_t
#define CS35L41_REGSTRIDE 4
#define CS35L41_MBOXWAIT 100
#define CS35L41_CSPL_CMD_NONE 0
#define CS35L41_CSPL_CMD_MUTE 1
#define CS35L41_CSPL_CMD_UNMUTE 2
#define CS35L41_CSPL_CMD_REINIT 3
#define CS35L41_CSPL_COMMAND_REV_A0 0x02800210
#define CS35L41_CSPL_COMMAND_REV_B0 0x02800234
#define CS35L41_DSP_VIRT1_MBOX_SHIFT 20
#define CS35L41_DSP_VIRT2_MBOX_SHIFT 21
#define CS35L41_CSPL_MBOX_STS CS35L41_DSP_MBOX_2