@@ -33,22 +33,23 @@ static int hda_dsp_trace_prepare(struct snd_sof_dev *sdev, struct snd_dma_buffer
3333
3434 ret = hda_dsp_stream_hw_params (sdev , stream , dmab , NULL );
3535 if (ret < 0 )
36- dev_err (sdev -> dev , "error: hdac prepare failed: %d\n" , ret );
36+ dev_err (sdev -> dev , "hdac prepare failed: %d\n" , ret );
3737
3838 return ret ;
3939}
4040
41- int hda_dsp_trace_init (struct snd_sof_dev * sdev , u32 * stream_tag )
41+ static int hda_dma_trace_init (struct sof_client_dev * cdev ,
42+ struct snd_dma_buffer * dmab , u32 * stream_tag )
4243{
44+ struct snd_sof_dev * sdev = sof_client_dev_to_sof_dev (cdev );
4345 struct sof_intel_hda_dev * hda = sdev -> pdata -> hw_pdata ;
4446 int ret ;
4547
4648 hda -> dtrace_stream = hda_dsp_stream_get (sdev , SNDRV_PCM_STREAM_CAPTURE ,
4749 SOF_HDA_STREAM_DMI_L1_COMPATIBLE );
4850
4951 if (!hda -> dtrace_stream ) {
50- dev_err (sdev -> dev ,
51- "error: no available capture stream for DMA trace\n" );
52+ dev_err (sdev -> dev , "no available capture stream for DMA trace\n" );
5253 return - ENODEV ;
5354 }
5455
@@ -58,9 +59,9 @@ int hda_dsp_trace_init(struct snd_sof_dev *sdev, u32 *stream_tag)
5859 * initialize capture stream, set BDL address and return corresponding
5960 * stream tag which will be sent to the firmware by IPC message.
6061 */
61- ret = hda_dsp_trace_prepare (sdev , & sdev -> dmatb );
62+ ret = hda_dsp_trace_prepare (sdev , dmab );
6263 if (ret < 0 ) {
63- dev_err (sdev -> dev , "error: hdac trace init failed: %d\n" , ret );
64+ dev_err (sdev -> dev , "hdac trace init failed: %d\n" , ret );
6465 hda_dsp_stream_put (sdev , SNDRV_PCM_STREAM_CAPTURE , * stream_tag );
6566 hda -> dtrace_stream = NULL ;
6667 * stream_tag = 0 ;
@@ -69,91 +70,57 @@ int hda_dsp_trace_init(struct snd_sof_dev *sdev, u32 *stream_tag)
6970 return ret ;
7071}
7172
72- int hda_dsp_trace_release (struct snd_sof_dev * sdev )
73- {
74- struct sof_intel_hda_dev * hda = sdev -> pdata -> hw_pdata ;
75- struct hdac_stream * hstream ;
76-
77- if (hda -> dtrace_stream ) {
78- hstream = & hda -> dtrace_stream -> hstream ;
79- hda_dsp_stream_put (sdev ,
80- SNDRV_PCM_STREAM_CAPTURE ,
81- hstream -> stream_tag );
82- hda -> dtrace_stream = NULL ;
83- return 0 ;
84- }
85-
86- dev_dbg (sdev -> dev , "DMA trace stream is not opened!\n" );
87- return - ENODEV ;
88- }
89-
90- int hda_dsp_trace_trigger (struct snd_sof_dev * sdev , int cmd )
91- {
92- struct sof_intel_hda_dev * hda = sdev -> pdata -> hw_pdata ;
93-
94- return hda_dsp_stream_trigger (sdev , hda -> dtrace_stream , cmd );
95- }
96-
97- #if IS_ENABLED (CONFIG_SND_SOC_SOF_HDA_DMA_TRACE )
98- static int hda_dma_trace_init (struct sof_client_dev * cdev ,
99- struct snd_dma_buffer * dmab , u32 * stream_tag )
73+ static int hda_dma_trace_release (struct sof_client_dev * cdev )
10074{
10175 struct snd_sof_dev * sdev = sof_client_dev_to_sof_dev (cdev );
10276 struct sof_intel_hda_dev * hda = sdev -> pdata -> hw_pdata ;
103- int ret ;
104-
105- hda -> dtrace_stream = hda_dsp_stream_get (sdev , SNDRV_PCM_STREAM_CAPTURE ,
106- SOF_HDA_STREAM_DMI_L1_COMPATIBLE );
77+ struct hdac_stream * hstream ;
10778
10879 if (!hda -> dtrace_stream ) {
109- dev_err (sdev -> dev ,
110- "error: no available capture stream for DMA trace\n" );
80+ dev_dbg (sdev -> dev , "DMA trace stream is not opened!\n" );
11181 return - ENODEV ;
11282 }
11383
114- * stream_tag = hda -> dtrace_stream -> hstream .stream_tag ;
115-
116- /*
117- * initialize capture stream, set BDL address and return corresponding
118- * stream tag which will be sent to the firmware by IPC message.
119- */
120- ret = hda_dsp_trace_prepare (sdev , dmab );
121- if (ret < 0 ) {
122- dev_err (sdev -> dev , "error: hdac trace init failed: %d\n" , ret );
123- hda_dsp_stream_put (sdev , SNDRV_PCM_STREAM_CAPTURE , * stream_tag );
124- hda -> dtrace_stream = NULL ;
125- * stream_tag = 0 ;
126- }
84+ hstream = & hda -> dtrace_stream -> hstream ;
85+ hda_dsp_stream_put (sdev , SNDRV_PCM_STREAM_CAPTURE , hstream -> stream_tag );
86+ hda -> dtrace_stream = NULL ;
12787
128- return ret ;
88+ return 0 ;
12989}
13090
131- static int hda_dma_trace_release (struct sof_client_dev * cdev )
91+ static int hda_dsp_trace_trigger (struct sof_client_dev * cdev , int cmd )
13292{
13393 struct snd_sof_dev * sdev = sof_client_dev_to_sof_dev (cdev );
94+ struct sof_intel_hda_dev * hda = sdev -> pdata -> hw_pdata ;
13495
135- return hda_dsp_trace_release (sdev );
96+ return hda_dsp_stream_trigger (sdev , hda -> dtrace_stream , cmd );
13697}
13798
13899static int hda_dma_trace_start (struct sof_client_dev * cdev )
139100{
140- struct snd_sof_dev * sdev = sof_client_dev_to_sof_dev (cdev );
141-
142- return hda_dsp_trace_trigger (sdev , SNDRV_PCM_TRIGGER_START );
101+ return hda_dsp_trace_trigger (cdev , SNDRV_PCM_TRIGGER_START );
143102}
144103
145104static int hda_dma_trace_stop (struct sof_client_dev * cdev )
105+ {
106+ return hda_dsp_trace_trigger (cdev , SNDRV_PCM_TRIGGER_STOP );
107+ }
108+
109+ static void hda_dma_trace_is_available (struct sof_client_dev * cdev ,
110+ bool available )
146111{
147112 struct snd_sof_dev * sdev = sof_client_dev_to_sof_dev (cdev );
148113
149- return hda_dsp_trace_trigger ( sdev , SNDRV_PCM_TRIGGER_STOP ) ;
114+ sdev -> dtrace_is_available = available ;
150115}
151116
152117static const struct sof_dma_trace_host_ops hda_dma_trace_ops = {
153118 .init = hda_dma_trace_init ,
154119 .release = hda_dma_trace_release ,
155120 .start = hda_dma_trace_start ,
156121 .stop = hda_dma_trace_stop ,
122+
123+ .available = hda_dma_trace_is_available ,
157124};
158125
159126int hda_dma_trace_register (struct snd_sof_dev * sdev )
@@ -168,4 +135,3 @@ void hda_dma_trace_unregister(struct snd_sof_dev *sdev)
168135}
169136
170137MODULE_IMPORT_NS (SND_SOC_SOF_CLIENT );
171- #endif
0 commit comments