• Kuninori Morimoto's avatar
    ASoC: soc-pcm: add soc_pcm_hw_clean() and call it from soc_pcm_hw_params/free() · 4662c596
    Kuninori Morimoto authored
    soc_pcm_hw_params() does rollback when failed (A),
    but, it is almost same as soc_pcm_hw_free().
    
    	static int soc_pcm_hw_params(xxx)
    	{
    		...
    		if (ret < 0)
    			goto xxx_err;
    		...
    		return ret;
    
     ^	component_err:
     |		...
     |	interface_err:
    (A)		...
     |	codec_err:
     |		...
     v		return ret;
    	}
    
    The difference is
    soc_pcm_hw_free() is for all dai/component/substream,
    rollback          is for succeeded part only.
    
    This kind of duplicated code can be a hotbed of bugs,
    thus, we want to share soc_pcm_hw_free() and rollback.
    
    Now, soc_pcm_hw_params/free() are handling
    	1) snd_soc_link_hw_params/free()
    	2) snd_soc_pcm_component_hw_params/free()
    	3) snd_soc_dai_hw_params/free()
    
    Now, 1) to 3) are handled.
    This patch adds new soc_pcm_hw_clean() and call it from
    soc_pcm_hw_params() as rollback, and from soc_pcm_hw_free() as
    normal close handler.
    
    Other difference is that soc_pcm_hw_free() handles digital mute
    if it was last user. Rollback also handles it by this patch.
    Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Link: https://lore.kernel.org/r/87h7rhgqab.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    4662c596
soc-pcm.c 78.4 KB