@@ -214,6 +214,8 @@ static bool cs35l56_readable_reg(struct device *dev, unsigned int reg)
214
214
case CS35L56_DSP_VIRTUAL1_MBOX_6 :
215
215
case CS35L56_DSP_VIRTUAL1_MBOX_7 :
216
216
case CS35L56_DSP_VIRTUAL1_MBOX_8 :
217
+ case CS35L56_DIE_STS1 :
218
+ case CS35L56_DIE_STS2 :
217
219
case CS35L56_DSP_RESTRICT_STS1 :
218
220
case CS35L56_DSP1_SYS_INFO_ID ... CS35L56_DSP1_SYS_INFO_END :
219
221
case CS35L56_DSP1_AHBM_WINDOW_DEBUG_0 :
@@ -802,13 +804,29 @@ static int cs35l56_read_silicon_uid(struct cs35l56_base *cs35l56_base, u64 *uid)
802
804
unique_id |= (u32 )pte .x | ((u32 )pte .y << 8 ) | ((u32 )pte .wafer_id << 16 ) |
803
805
((u32 )pte .dvs << 24 );
804
806
805
- dev_dbg (cs35l56_base -> dev , "UniqueID = %#llx\n" , unique_id );
806
-
807
807
* uid = unique_id ;
808
808
809
809
return 0 ;
810
810
}
811
811
812
+ static int cs35l63_read_silicon_uid (struct cs35l56_base * cs35l56_base , u64 * uid )
813
+ {
814
+ u32 tmp [2 ];
815
+ int ret ;
816
+
817
+ ret = regmap_bulk_read (cs35l56_base -> regmap , CS35L56_DIE_STS1 , tmp , ARRAY_SIZE (tmp ));
818
+ if (ret ) {
819
+ dev_err (cs35l56_base -> dev , "Cannot obtain CS35L56_DIE_STS: %d\n" , ret );
820
+ return ret ;
821
+ }
822
+
823
+ * uid = tmp [1 ];
824
+ * uid <<= 32 ;
825
+ * uid |= tmp [0 ];
826
+
827
+ return 0 ;
828
+ }
829
+
812
830
/* Firmware calibration controls */
813
831
const struct cirrus_amp_cal_controls cs35l56_calibration_controls = {
814
832
.alg_id = 0x9f210 ,
@@ -829,10 +847,25 @@ int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base)
829
847
if (cs35l56_base -> secured )
830
848
return 0 ;
831
849
832
- ret = cs35l56_read_silicon_uid (cs35l56_base , & silicon_uid );
850
+ switch (cs35l56_base -> type ) {
851
+ case 0x54 :
852
+ case 0x56 :
853
+ case 0x57 :
854
+ ret = cs35l56_read_silicon_uid (cs35l56_base , & silicon_uid );
855
+ break ;
856
+ case 0x63 :
857
+ ret = cs35l63_read_silicon_uid (cs35l56_base , & silicon_uid );
858
+ break ;
859
+ default :
860
+ ret = - ENODEV ;
861
+ break ;
862
+ }
863
+
833
864
if (ret < 0 )
834
865
return ret ;
835
866
867
+ dev_dbg (cs35l56_base -> dev , "UniqueID = %#llx\n" , silicon_uid );
868
+
836
869
ret = cs_amp_get_efi_calibration_data (cs35l56_base -> dev , silicon_uid ,
837
870
cs35l56_base -> cal_index ,
838
871
& cs35l56_base -> cal_data );
0 commit comments