Skip to content

Commit 823a036

Browse files
simontrimmerbroonie
authored andcommitted
ASoC: cs35l56: Log tuning unique identifiers during firmware load
The cs35l56 smart amplifier has some informational firmware controls that are populated by a tuning bin file to unique values - logging these during firmware load identifies the specific configuration being used on that device instance. Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com> Link: https://patch.msgid.link/47762a5f1ce2b178ad863c6698296aea09b72e10.1747142267.git.simont@opensource.cirrus.com Acked-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 82f2b0b commit 823a036

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

include/sound/cs35l56.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ void cs35l56_init_cs_dsp(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_ds
332332
int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base);
333333
int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
334334
bool *fw_missing, unsigned int *fw_version);
335+
void cs35l56_log_tuning(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp);
335336
int cs35l56_hw_init(struct cs35l56_base *cs35l56_base);
336337
int cs35l56_get_speaker_id(struct cs35l56_base *cs35l56_base);
337338
int cs35l56_get_bclk_freq_id(unsigned int freq);

sound/soc/codecs/cs35l56-shared.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,33 @@ int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
770770
}
771771
EXPORT_SYMBOL_NS_GPL(cs35l56_read_prot_status, "SND_SOC_CS35L56_SHARED");
772772

773+
void cs35l56_log_tuning(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp)
774+
{
775+
__be32 pid, sid, tid;
776+
int ret;
777+
778+
scoped_guard(mutex, &cs_dsp->pwr_lock) {
779+
ret = cs_dsp_coeff_read_ctrl(cs_dsp_get_ctl(cs_dsp, "AS_PRJCT_ID",
780+
WMFW_ADSP2_XM, 0x9f212),
781+
0, &pid, sizeof(pid));
782+
if (!ret)
783+
ret = cs_dsp_coeff_read_ctrl(cs_dsp_get_ctl(cs_dsp, "AS_CHNNL_ID",
784+
WMFW_ADSP2_XM, 0x9f212),
785+
0, &sid, sizeof(sid));
786+
if (!ret)
787+
ret = cs_dsp_coeff_read_ctrl(cs_dsp_get_ctl(cs_dsp, "AS_SNPSHT_ID",
788+
WMFW_ADSP2_XM, 0x9f212),
789+
0, &tid, sizeof(tid));
790+
}
791+
792+
if (ret)
793+
dev_warn(cs35l56_base->dev, "Can't read tuning IDs");
794+
else
795+
dev_info(cs35l56_base->dev, "Tuning PID: %#x, SID: %#x, TID: %#x\n",
796+
be32_to_cpu(pid), be32_to_cpu(sid), be32_to_cpu(tid));
797+
}
798+
EXPORT_SYMBOL_NS_GPL(cs35l56_log_tuning, "SND_SOC_CS35L56_SHARED");
799+
773800
int cs35l56_hw_init(struct cs35l56_base *cs35l56_base)
774801
{
775802
int ret;
@@ -1050,3 +1077,4 @@ MODULE_AUTHOR("Richard Fitzgerald <rf@opensource.cirrus.com>");
10501077
MODULE_AUTHOR("Simon Trimmer <simont@opensource.cirrus.com>");
10511078
MODULE_LICENSE("GPL");
10521079
MODULE_IMPORT_NS("SND_SOC_CS_AMP_LIB");
1080+
MODULE_IMPORT_NS("FW_CS_DSP");

sound/soc/codecs/cs35l56.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ static void cs35l56_dsp_work(struct work_struct *work)
827827
else
828828
cs35l56_patch(cs35l56, firmware_missing);
829829

830+
cs35l56_log_tuning(&cs35l56->base, &cs35l56->dsp.cs_dsp);
830831
err:
831832
pm_runtime_mark_last_busy(cs35l56->base.dev);
832833
pm_runtime_put_autosuspend(cs35l56->base.dev);

0 commit comments

Comments
 (0)