diff options
| -rw-r--r-- | include/sound/soc.h | 9 | ||||
| -rw-r--r-- | sound/soc/intel/skylake/skl-pcm.c | 2 | ||||
| -rw-r--r-- | sound/soc/soc-core.c | 4 | 
3 files changed, 10 insertions, 5 deletions
| diff --git a/include/sound/soc.h b/include/sound/soc.h index 1e2be35ed36f..482b4ea87c3c 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -802,8 +802,13 @@ struct snd_soc_component_driver {  	int probe_order;  	int remove_order; -	/* signal if the module handling the component cannot be removed */ -	unsigned int ignore_module_refcount:1; +	/* +	 * signal if the module handling the component should not be removed +	 * if a pcm is open. Setting this would prevent the module +	 * refcount being incremented in probe() but allow it be incremented +	 * when a pcm is opened and decremented when it is closed. +	 */ +	unsigned int module_get_upon_open:1;  	/* bits */  	unsigned int idle_bias_on:1; diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c index 57031b6d4d45..9735e2412251 100644 --- a/sound/soc/intel/skylake/skl-pcm.c +++ b/sound/soc/intel/skylake/skl-pcm.c @@ -1475,7 +1475,7 @@ static const struct snd_soc_component_driver skl_component  = {  	.ops		= &skl_platform_ops,  	.pcm_new	= skl_pcm_new,  	.pcm_free	= skl_pcm_free, -	.ignore_module_refcount = 1, /* do not increase the refcount in core */ +	.module_get_upon_open = 1, /* increment refcount when a pcm is opened */  };  int skl_platform_register(struct device *dev) diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index d88757659729..46e3ab0fced4 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -947,7 +947,7 @@ static void soc_cleanup_component(struct snd_soc_component *component)  	snd_soc_dapm_free(snd_soc_component_get_dapm(component));  	soc_cleanup_component_debugfs(component);  	component->card = NULL; -	if (!component->driver->ignore_module_refcount) +	if (!component->driver->module_get_upon_open)  		module_put(component->dev->driver->owner);  } @@ -1381,7 +1381,7 @@ static int soc_probe_component(struct snd_soc_card *card,  		return 0;  	} -	if (!component->driver->ignore_module_refcount && +	if (!component->driver->module_get_upon_open &&  	    !try_module_get(component->dev->driver->owner))  		return -ENODEV; | 
