|
@@ -58,7 +58,7 @@ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
|
|
EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams);
|
|
EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams);
|
|
|
|
|
|
/* DPCM stream event, send event to FE and all active BEs. */
|
|
/* DPCM stream event, send event to FE and all active BEs. */
|
|
-static int dpcm_dapm_stream_event(struct snd_soc_pcm_runtime *fe, int dir,
|
|
|
|
|
|
+int dpcm_dapm_stream_event(struct snd_soc_pcm_runtime *fe, int dir,
|
|
int event)
|
|
int event)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
@@ -773,7 +773,7 @@ static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe,
|
|
}
|
|
}
|
|
|
|
|
|
/* disconnect a BE and FE */
|
|
/* disconnect a BE and FE */
|
|
-static void dpcm_be_disconnect(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+void dpcm_be_disconnect(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm, *d;
|
|
struct snd_soc_dpcm *dpcm, *d;
|
|
|
|
|
|
@@ -869,7 +869,7 @@ static int widget_in_list(struct snd_soc_dapm_widget_list *list,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_path_get(struct snd_soc_pcm_runtime *fe,
|
|
|
|
|
|
+int dpcm_path_get(struct snd_soc_pcm_runtime *fe,
|
|
int stream, struct snd_soc_dapm_widget_list **list_)
|
|
int stream, struct snd_soc_dapm_widget_list **list_)
|
|
{
|
|
{
|
|
struct snd_soc_dai *cpu_dai = fe->cpu_dai;
|
|
struct snd_soc_dai *cpu_dai = fe->cpu_dai;
|
|
@@ -891,11 +891,6 @@ static int dpcm_path_get(struct snd_soc_pcm_runtime *fe,
|
|
return paths;
|
|
return paths;
|
|
}
|
|
}
|
|
|
|
|
|
-static inline void dpcm_path_put(struct snd_soc_dapm_widget_list **list)
|
|
|
|
-{
|
|
|
|
- kfree(*list);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int dpcm_prune_paths(struct snd_soc_pcm_runtime *fe, int stream,
|
|
static int dpcm_prune_paths(struct snd_soc_pcm_runtime *fe, int stream,
|
|
struct snd_soc_dapm_widget_list **list_)
|
|
struct snd_soc_dapm_widget_list **list_)
|
|
{
|
|
{
|
|
@@ -965,7 +960,7 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
|
|
continue;
|
|
continue;
|
|
|
|
|
|
/* don't connect if FE is not running */
|
|
/* don't connect if FE is not running */
|
|
- if (!fe->dpcm[stream].runtime)
|
|
|
|
|
|
+ if (!fe->dpcm[stream].runtime && !fe->fe_compr)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
/* newly connected FE and BE */
|
|
/* newly connected FE and BE */
|
|
@@ -990,7 +985,7 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
|
|
* Find the corresponding BE DAIs that source or sink audio to this
|
|
* Find the corresponding BE DAIs that source or sink audio to this
|
|
* FE substream.
|
|
* FE substream.
|
|
*/
|
|
*/
|
|
-static int dpcm_process_paths(struct snd_soc_pcm_runtime *fe,
|
|
|
|
|
|
+int dpcm_process_paths(struct snd_soc_pcm_runtime *fe,
|
|
int stream, struct snd_soc_dapm_widget_list **list, int new)
|
|
int stream, struct snd_soc_dapm_widget_list **list, int new)
|
|
{
|
|
{
|
|
if (new)
|
|
if (new)
|
|
@@ -999,7 +994,7 @@ static int dpcm_process_paths(struct snd_soc_pcm_runtime *fe,
|
|
return dpcm_prune_paths(fe, stream, list);
|
|
return dpcm_prune_paths(fe, stream, list);
|
|
}
|
|
}
|
|
|
|
|
|
-static void dpcm_clear_pending_state(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+void dpcm_clear_pending_state(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
|
|
|
|
@@ -1037,7 +1032,7 @@ static void dpcm_be_dai_startup_unwind(struct snd_soc_pcm_runtime *fe,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_be_dai_startup(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+int dpcm_be_dai_startup(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
int err, count = 0;
|
|
int err, count = 0;
|
|
@@ -1186,7 +1181,7 @@ be_err:
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_be_dai_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+int dpcm_be_dai_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
|
|
|
|
@@ -1247,7 +1242,7 @@ static int dpcm_fe_dai_shutdown(struct snd_pcm_substream *substream)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_be_dai_hw_free(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+int dpcm_be_dai_hw_free(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
|
|
|
|
@@ -1312,7 +1307,7 @@ static int dpcm_fe_dai_hw_free(struct snd_pcm_substream *substream)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
int ret;
|
|
int ret;
|
|
@@ -1442,7 +1437,7 @@ static int dpcm_do_trigger(struct snd_soc_dpcm *dpcm,
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream,
|
|
|
|
|
|
+int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream,
|
|
int cmd)
|
|
int cmd)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
@@ -1610,7 +1605,7 @@ out:
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-static int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
|
|
|
|
|
|
+int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
|
|
{
|
|
{
|
|
struct snd_soc_dpcm *dpcm;
|
|
struct snd_soc_dpcm *dpcm;
|
|
int ret = 0;
|
|
int ret = 0;
|