Commit a739fdc2 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown

ASoC: soc-component: Convert the mark_module to void*

The mark_module of the snd_soc_component is strict snd_pcm_substream type
which prevents it to be used by compressed streams.

Change the type to void* along with the snd_soc_component_module_get()
and snd_soc_component_module_put() to allow the same mark to be used by
compressed when it's module_get_upon_open is set to 1.
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20210901095255.3617-2-peter.ujfalusi@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 22667219
...@@ -220,7 +220,7 @@ struct snd_soc_component { ...@@ -220,7 +220,7 @@ struct snd_soc_component {
int (*init)(struct snd_soc_component *component); int (*init)(struct snd_soc_component *component);
/* function mark */ /* function mark */
struct snd_pcm_substream *mark_module; void *mark_module;
struct snd_pcm_substream *mark_open; struct snd_pcm_substream *mark_open;
struct snd_pcm_substream *mark_hw_params; struct snd_pcm_substream *mark_hw_params;
struct snd_pcm_substream *mark_trigger; struct snd_pcm_substream *mark_trigger;
...@@ -391,15 +391,13 @@ void snd_soc_component_exit_regmap(struct snd_soc_component *component); ...@@ -391,15 +391,13 @@ void snd_soc_component_exit_regmap(struct snd_soc_component *component);
#define snd_soc_component_module_get_when_open(component, substream) \ #define snd_soc_component_module_get_when_open(component, substream) \
snd_soc_component_module_get(component, substream, 1) snd_soc_component_module_get(component, substream, 1)
int snd_soc_component_module_get(struct snd_soc_component *component, int snd_soc_component_module_get(struct snd_soc_component *component,
struct snd_pcm_substream *substream, void *mark, int upon_open);
int upon_open);
#define snd_soc_component_module_put_when_remove(component) \ #define snd_soc_component_module_put_when_remove(component) \
snd_soc_component_module_put(component, NULL, 0, 0) snd_soc_component_module_put(component, NULL, 0, 0)
#define snd_soc_component_module_put_when_close(component, substream, rollback) \ #define snd_soc_component_module_put_when_close(component, substream, rollback) \
snd_soc_component_module_put(component, substream, 1, rollback) snd_soc_component_module_put(component, substream, 1, rollback)
void snd_soc_component_module_put(struct snd_soc_component *component, void snd_soc_component_module_put(struct snd_soc_component *component,
struct snd_pcm_substream *substream, void *mark, int upon_open, int rollback);
int upon_open, int rollback);
static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c, static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c,
void *data) void *data)
......
...@@ -251,8 +251,7 @@ int snd_soc_component_set_jack(struct snd_soc_component *component, ...@@ -251,8 +251,7 @@ int snd_soc_component_set_jack(struct snd_soc_component *component,
EXPORT_SYMBOL_GPL(snd_soc_component_set_jack); EXPORT_SYMBOL_GPL(snd_soc_component_set_jack);
int snd_soc_component_module_get(struct snd_soc_component *component, int snd_soc_component_module_get(struct snd_soc_component *component,
struct snd_pcm_substream *substream, void *mark, int upon_open)
int upon_open)
{ {
int ret = 0; int ret = 0;
...@@ -260,25 +259,24 @@ int snd_soc_component_module_get(struct snd_soc_component *component, ...@@ -260,25 +259,24 @@ int snd_soc_component_module_get(struct snd_soc_component *component,
!try_module_get(component->dev->driver->owner)) !try_module_get(component->dev->driver->owner))
ret = -ENODEV; ret = -ENODEV;
/* mark substream if succeeded */ /* mark module if succeeded */
if (ret == 0) if (ret == 0)
soc_component_mark_push(component, substream, module); soc_component_mark_push(component, mark, module);
return soc_component_ret(component, ret); return soc_component_ret(component, ret);
} }
void snd_soc_component_module_put(struct snd_soc_component *component, void snd_soc_component_module_put(struct snd_soc_component *component,
struct snd_pcm_substream *substream, void *mark, int upon_open, int rollback)
int upon_open, int rollback)
{ {
if (rollback && !soc_component_mark_match(component, substream, module)) if (rollback && !soc_component_mark_match(component, mark, module))
return; return;
if (component->driver->module_get_upon_open == !!upon_open) if (component->driver->module_get_upon_open == !!upon_open)
module_put(component->dev->driver->owner); module_put(component->dev->driver->owner);
/* remove marked substream */ /* remove the mark from module */
soc_component_mark_pop(component, substream, module); soc_component_mark_pop(component, mark, module);
} }
int snd_soc_component_open(struct snd_soc_component *component, int snd_soc_component_open(struct snd_soc_component *component,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment