Skip to content

Commit 33da2d8

Browse files
rfvirgiltiwai
authored andcommitted
ASoC: cs35l56: Add support for CS35L56 B2 silicon
This adds support for changed firmware addresses on the B2 revision of CS35L56 silicon. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent ab91835 commit 33da2d8

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

include/sound/cs35l56.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@
8585
#define CS35L56_DSP1_XMEM_UNPACKED24_0 0x2800000
8686
#define CS35L56_DSP1_FW_VER 0x2800010
8787
#define CS35L56_DSP1_HALO_STATE 0x28021E0
88+
#define CS35L56_B2_DSP1_HALO_STATE 0x2803D20
8889
#define CS35L56_DSP1_PM_CUR_STATE 0x2804308
90+
#define CS35L56_B2_DSP1_PM_CUR_STATE 0x2804678
8991
#define CS35L56_DSP1_XMEM_UNPACKED24_8191 0x2807FFC
9092
#define CS35L56_DSP1_CORE_BASE 0x2B80000
9193
#define CS35L56_DSP1_SCRATCH1 0x2B805C0

sound/soc/codecs/cs35l56-shared.c

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,17 @@ static const struct cs35l56_fw_reg cs35l56_fw_reg = {
320320
.posture_number = CS35L56_MAIN_POSTURE_NUMBER,
321321
};
322322

323+
static const struct cs35l56_fw_reg cs35l56_b2_fw_reg = {
324+
.fw_ver = CS35L56_DSP1_FW_VER,
325+
.halo_state = CS35L56_B2_DSP1_HALO_STATE,
326+
.pm_cur_stat = CS35L56_B2_DSP1_PM_CUR_STATE,
327+
.prot_sts = CS35L56_PROTECTION_STATUS,
328+
.transducer_actual_ps = CS35L56_TRANSDUCER_ACTUAL_PS,
329+
.user_mute = CS35L56_MAIN_RENDER_USER_MUTE,
330+
.user_volume = CS35L56_MAIN_RENDER_USER_VOLUME,
331+
.posture_number = CS35L56_MAIN_POSTURE_NUMBER,
332+
};
333+
323334
static const struct cs35l56_fw_reg cs35l63_fw_reg = {
324335
.fw_ver = CS35L63_DSP1_FW_VER,
325336
.halo_state = CS35L63_DSP1_HALO_STATE,
@@ -335,7 +346,14 @@ static void cs35l56_set_fw_reg_table(struct cs35l56_base *cs35l56_base)
335346
{
336347
switch (cs35l56_base->type) {
337348
default:
338-
cs35l56_base->fw_reg = &cs35l56_fw_reg;
349+
switch (cs35l56_base->rev) {
350+
case 0xb0:
351+
cs35l56_base->fw_reg = &cs35l56_fw_reg;
352+
break;
353+
default:
354+
cs35l56_base->fw_reg = &cs35l56_b2_fw_reg;
355+
break;
356+
}
339357
break;
340358
case 0x63:
341359
cs35l56_base->fw_reg = &cs35l63_fw_reg;
@@ -502,6 +520,11 @@ static const struct reg_sequence cs35l56_system_reset_seq[] = {
502520
REG_SEQ0(CS35L56_DSP_VIRTUAL1_MBOX_1, CS35L56_MBOX_CMD_SYSTEM_RESET),
503521
};
504522

523+
static const struct reg_sequence cs35l56_b2_system_reset_seq[] = {
524+
REG_SEQ0(CS35L56_B2_DSP1_HALO_STATE, 0),
525+
REG_SEQ0(CS35L56_DSP_VIRTUAL1_MBOX_1, CS35L56_MBOX_CMD_SYSTEM_RESET),
526+
};
527+
505528
static const struct reg_sequence cs35l63_system_reset_seq[] = {
506529
REG_SEQ0(CS35L63_DSP1_HALO_STATE, 0),
507530
REG_SEQ0(CS35L56_DSP_VIRTUAL1_MBOX_1, CS35L56_MBOX_CMD_SYSTEM_RESET),
@@ -524,9 +547,18 @@ void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire)
524547
case 0x54:
525548
case 0x56:
526549
case 0x57:
527-
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
528-
cs35l56_system_reset_seq,
529-
ARRAY_SIZE(cs35l56_system_reset_seq));
550+
switch (cs35l56_base->rev) {
551+
case 0xb0:
552+
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
553+
cs35l56_system_reset_seq,
554+
ARRAY_SIZE(cs35l56_system_reset_seq));
555+
break;
556+
default:
557+
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
558+
cs35l56_b2_system_reset_seq,
559+
ARRAY_SIZE(cs35l56_b2_system_reset_seq));
560+
break;
561+
}
530562
break;
531563
case 0x63:
532564
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,

0 commit comments

Comments
 (0)