@@ -253,7 +253,8 @@ int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base)
253253 if (ret )
254254 return ret ;
255255
256- ret = regmap_read_poll_timeout (cs35l56_base -> regmap , CS35L56_DSP1_PM_CUR_STATE ,
256+ ret = regmap_read_poll_timeout (cs35l56_base -> regmap ,
257+ cs35l56_base -> fw_reg -> pm_cur_stat ,
257258 val , (val == CS35L56_HALO_STATE_SHUTDOWN ),
258259 CS35L56_HALO_STATE_POLL_US ,
259260 CS35L56_HALO_STATE_TIMEOUT_US );
@@ -278,7 +279,9 @@ int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base)
278279 CS35L56_HALO_STATE_POLL_US ,
279280 CS35L56_HALO_STATE_TIMEOUT_US ,
280281 false,
281- cs35l56_base -> regmap , CS35L56_DSP1_HALO_STATE , & val );
282+ cs35l56_base -> regmap ,
283+ cs35l56_base -> fw_reg -> halo_state ,
284+ & val );
282285
283286 if (poll_ret ) {
284287 dev_err (cs35l56_base -> dev , "Firmware boot timed out(%d): HALO_STATE=%#x\n" ,
@@ -395,9 +398,17 @@ void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire)
395398 return ;
396399 }
397400
398- regmap_multi_reg_write_bypassed (cs35l56_base -> regmap ,
399- cs35l56_system_reset_seq ,
400- ARRAY_SIZE (cs35l56_system_reset_seq ));
401+ switch (cs35l56_base -> type ) {
402+ case 0x54 :
403+ case 0x56 :
404+ case 0x57 :
405+ regmap_multi_reg_write_bypassed (cs35l56_base -> regmap ,
406+ cs35l56_system_reset_seq ,
407+ ARRAY_SIZE (cs35l56_system_reset_seq ));
408+ break ;
409+ default :
410+ break ;
411+ }
401412
402413 /* On SoundWire the registers won't be accessible until it re-enumerates. */
403414 if (is_soundwire )
@@ -514,7 +525,9 @@ int cs35l56_is_fw_reload_needed(struct cs35l56_base *cs35l56_base)
514525 return ret ;
515526 }
516527
517- ret = regmap_read (cs35l56_base -> regmap , CS35L56_PROTECTION_STATUS , & val );
528+ ret = regmap_read (cs35l56_base -> regmap ,
529+ cs35l56_base -> fw_reg -> prot_sts ,
530+ & val );
518531 if (ret )
519532 dev_err (cs35l56_base -> dev , "Failed to read PROTECTION_STATUS: %d\n" , ret );
520533 else
@@ -562,7 +575,7 @@ int cs35l56_runtime_suspend_common(struct cs35l56_base *cs35l56_base)
562575
563576 /* Firmware must have entered a power-save state */
564577 ret = regmap_read_poll_timeout (cs35l56_base -> regmap ,
565- CS35L56_TRANSDUCER_ACTUAL_PS ,
578+ cs35l56_base -> fw_reg -> transducer_actual_ps ,
566579 val , (val >= CS35L56_PS3 ),
567580 CS35L56_PS3_POLL_US ,
568581 CS35L56_PS3_TIMEOUT_US );
@@ -752,15 +765,17 @@ int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
752765 unsigned int prot_status ;
753766 int ret ;
754767
755- ret = regmap_read (cs35l56_base -> regmap , CS35L56_PROTECTION_STATUS , & prot_status );
768+ ret = regmap_read (cs35l56_base -> regmap ,
769+ cs35l56_base -> fw_reg -> prot_sts , & prot_status );
756770 if (ret ) {
757771 dev_err (cs35l56_base -> dev , "Get PROTECTION_STATUS failed: %d\n" , ret );
758772 return ret ;
759773 }
760774
761775 * fw_missing = !!(prot_status & CS35L56_FIRMWARE_MISSING );
762776
763- ret = regmap_read (cs35l56_base -> regmap , CS35L56_DSP1_FW_VER , fw_version );
777+ ret = regmap_read (cs35l56_base -> regmap ,
778+ cs35l56_base -> fw_reg -> fw_ver , fw_version );
764779 if (ret ) {
765780 dev_err (cs35l56_base -> dev , "Get FW VER failed: %d\n" , ret );
766781 return ret ;
@@ -1045,6 +1060,15 @@ const struct regmap_config cs35l56_regmap_sdw = {
10451060};
10461061EXPORT_SYMBOL_NS_GPL (cs35l56_regmap_sdw , "SND_SOC_CS35L56_SHARED" );
10471062
1063+ const struct cs35l56_fw_reg cs35l56_fw_reg = {
1064+ .fw_ver = CS35L56_DSP1_FW_VER ,
1065+ .halo_state = CS35L56_DSP1_HALO_STATE ,
1066+ .pm_cur_stat = CS35L56_DSP1_PM_CUR_STATE ,
1067+ .prot_sts = CS35L56_PROTECTION_STATUS ,
1068+ .transducer_actual_ps = CS35L56_TRANSDUCER_ACTUAL_PS ,
1069+ };
1070+ EXPORT_SYMBOL_NS_GPL (cs35l56_fw_reg , "SND_SOC_CS35L56_SHARED" );
1071+
10481072MODULE_DESCRIPTION ("ASoC CS35L56 Shared" );
10491073MODULE_AUTHOR ("Richard Fitzgerald <rf@opensource.cirrus.com>" );
10501074MODULE_AUTHOR ("Simon Trimmer <simont@opensource.cirrus.com>" );
0 commit comments