@@ -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+
323334static 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+
505528static 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