@@ -25,6 +25,7 @@ SOF_DEFINE_REG_UUID(dolby_dax_audio_processing);
2525#define DAX_CP_MASK 0x8
2626#define DAX_VOLUME_MASK 0x10
2727#define DAX_CTC_MASK 0x20
28+ #define DAX_TUNING_FILE_MASK 0x40
2829#define DAX_PROCESSING_MASK 0x10000
2930#define DAX_RESET_MASK 0x20000
3031#define DAX_FREE_MASK 0x40000
@@ -241,24 +242,21 @@ static bool is_enabled(struct processing_module *mod)
241242 return dax_ctx -> enable && dax_ctx -> p_dax ;
242243}
243244
244- static int set_tuning_file (struct processing_module * mod , void * value , uint32_t size )
245+ static int set_tuning_file (struct processing_module * mod )
245246{
246- int ret = 0 ;
247+ int ret = - EINVAL ;
247248 struct comp_dev * dev = mod -> dev ;
248249 struct dax_adapter_data * adapter_data = module_get_private_data (mod );
249250 struct sof_dax * dax_ctx = & adapter_data -> dax_ctx ;
250251
251- if (dax_buffer_alloc (mod , & dax_ctx -> tuning_file_buffer , size ) != 0 ) {
252- comp_err (dev , "allocate %u bytes failed for tuning file" , size );
253- ret = - ENOMEM ;
254- } else {
255- memcpy_s (dax_ctx -> tuning_file_buffer .addr ,
256- dax_ctx -> tuning_file_buffer .free ,
257- value ,
258- size );
252+ if (adapter_data -> tmp_tuning_buf .addr && adapter_data -> tmp_tuning_buf .size > 0 ) {
253+ dax_buffer_release (mod , & dax_ctx -> tuning_file_buffer );
254+ dax_ctx -> tuning_file_buffer = adapter_data -> tmp_tuning_buf ;
255+ memset (& adapter_data -> tmp_tuning_buf , 0 , sizeof (adapter_data -> tmp_tuning_buf ));
256+ ret = 0 ;
259257 }
260258
261- comp_info (dev , "allocated: tuning %u , ret %d" , dax_ctx -> tuning_file_buffer .size , ret );
259+ comp_info (dev , "apply tuning %p , ret %d" , dax_ctx -> tuning_file_buffer .addr , ret );
262260 return ret ;
263261}
264262
@@ -367,7 +365,19 @@ static int dax_set_param_wrapper(struct processing_module *mod,
367365
368366 switch (id ) {
369367 case DAX_PARAM_ID_TUNING_FILE :
370- set_tuning_file (mod , value , size );
368+ if (dax_buffer_alloc (mod , & adapter_data -> tmp_tuning_buf , size ) != 0 ) {
369+ comp_err (dev , "allocate %u bytes failed for tuning file" , size );
370+ ret = - ENOMEM ;
371+ } else {
372+ memcpy_s (adapter_data -> tmp_tuning_buf .addr ,
373+ adapter_data -> tmp_tuning_buf .free ,
374+ value ,
375+ size );
376+ flag_process (adapter_data , DAX_TUNING_FILE_MASK , DAX_FLAG_SET );
377+ comp_info (dev , "allocated: tuning %p, size %u" ,
378+ adapter_data -> tmp_tuning_buf .addr ,
379+ adapter_data -> tmp_tuning_buf .size );
380+ }
371381 break ;
372382 case DAX_PARAM_ID_ENABLE :
373383 tmp_val = * ((int32_t * )value );
@@ -488,6 +498,12 @@ static void check_and_update_settings(struct processing_module *mod)
488498 if (!is_enabled (mod ))
489499 return ;
490500
501+ if (flag_process (adapter_data , DAX_TUNING_FILE_MASK , DAX_FLAG_READ_AND_CLEAR )) {
502+ set_tuning_file (mod );
503+ flag_process (adapter_data , DAX_DEVICE_MASK , DAX_FLAG_SET );
504+ flag_process (adapter_data , DAX_VOLUME_MASK , DAX_FLAG_SET );
505+ }
506+
491507 if (flag_process (adapter_data , DAX_DEVICE_MASK , DAX_FLAG_READ_AND_CLEAR )) {
492508 set_device (mod , dax_ctx -> out_device );
493509 set_tuning_device (mod , dax_ctx -> tuning_device );
@@ -547,6 +563,7 @@ static int sof_dax_free(struct processing_module *mod)
547563 dax_buffer_release (mod , & dax_ctx -> tuning_file_buffer );
548564 mod_data_blob_handler_free (mod , dax_ctx -> blob_handler );
549565 dax_ctx -> blob_handler = NULL ;
566+ dax_buffer_release (mod , & adapter_data -> tmp_tuning_buf );
550567 mod_free (mod , adapter_data );
551568 module_set_private_data (mod , NULL );
552569 }
0 commit comments