6363#define TONE_GAIN (v ) Q_CONVERT_FLOAT(v, 31)
6464
6565/* Set default tone amplitude and frequency */
66- #define TONE_AMPLITUDE_DEFAULT TONE_GAIN(0.5) /* -6 dB */
67- #define TONE_FREQUENCY_DEFAULT TONE_FREQ(82.41) /* E2 note */
68-
66+ #define TONE_AMPLITUDE_DEFAULT TONE_GAIN(0.1) /* -20 dB */
67+ #define TONE_FREQUENCY_DEFAULT TONE_FREQ(997.0)
6968#define TONE_NUM_FS 13 /* Table size for 8-192 kHz range */
7069
7170/* 2*pi/Fs lookup tables in Q1.31 for each Fs */
@@ -422,6 +421,8 @@ static struct comp_dev *tone_new(struct sof_ipc_comp *comp)
422421 comp_set_drvdata (dev , cd );
423422 cd -> tone_func = tone_s32_default ;
424423
424+ cd -> rate = ipc_tone -> sample_rate ;
425+
425426 /* Reset tone generator and set channels volumes to default */
426427 for (i = 0 ; i < PLATFORM_MAX_CHANNELS ; i ++ )
427428 tonegen_reset (& cd -> sg [i ]);
@@ -448,17 +449,38 @@ static int tone_params(struct comp_dev *dev)
448449
449450 trace_tone ("par" );
450451
452+ /* Tone supports only S32_LE PCM format atm */
453+ if (config -> frame_fmt != SOF_IPC_FRAME_S32_LE )
454+ return - EINVAL ;
455+
456+ trace_value (config -> frame_fmt );
457+ dev -> params .frame_fmt = config -> frame_fmt ;
458+
451459 /* Need to compute this in non-host endpoint */
452- dev -> frame_bytes =
453- dev -> params .sample_container_bytes * dev -> params .channels ;
460+ dev -> frame_bytes = comp_frame_bytes (dev );
454461
455462 /* calculate period size based on config */
456463 cd -> period_bytes = dev -> frames * dev -> frame_bytes ;
457464
458- /* EQ supports only S32_LE PCM format */
459- if (config -> frame_fmt != SOF_IPC_FRAME_S32_LE )
460- return - EINVAL ;
465+ return 0 ;
466+ }
461467
468+ static int tone_cmd_get_value (struct comp_dev * dev ,
469+ struct sof_ipc_ctrl_data * cdata )
470+ {
471+ struct comp_data * cd = comp_get_drvdata (dev );
472+ int j ;
473+
474+ trace_tone ("mgt" );
475+
476+ if (cdata -> cmd == SOF_CTRL_CMD_SWITCH ) {
477+ for (j = 0 ; j < cdata -> num_elems ; j ++ ) {
478+ cdata -> chanv [j ].channel = j ;
479+ cdata -> chanv [j ].value = !cd -> sg [j ].mute ;
480+ trace_value (j );
481+ trace_value (cd -> sg [j ].mute );
482+ }
483+ }
462484 return 0 ;
463485}
464486
@@ -480,6 +502,7 @@ static int tone_cmd_set_value(struct comp_dev *dev, struct sof_ipc_ctrl_data *cd
480502 trace_tone_error ("che" );
481503 return - EINVAL ;
482504 }
505+
483506 if (val )
484507 tonegen_unmute (& cd -> sg [ch ]);
485508 else
@@ -583,6 +606,9 @@ static int tone_cmd(struct comp_dev *dev, int cmd, void *data)
583606 case COMP_CMD_SET_VALUE :
584607 ret = tone_cmd_set_value (dev , cdata );
585608 break ;
609+ case COMP_CMD_GET_VALUE :
610+ ret = tone_cmd_get_value (dev , cdata );
611+ break ;
586612 }
587613
588614 return ret ;
@@ -641,7 +667,6 @@ static int tone_prepare(struct comp_dev * dev)
641667 return ret ;
642668
643669 cd -> channels = dev -> params .channels ;
644- cd -> rate = dev -> params .rate ;
645670 tracev_value (cd -> channels );
646671 tracev_value (cd -> rate );
647672
0 commit comments