Re: [PATCHv3] ASoC: xilinx: formatter_pcm: use more devm in probe

Jonathan Cameron <[email protected]>
Newsgroups gmane.linux.sound,gmane.linux.ports.arm.kernel,gmane.linux.kernel
Organization Qualcomm
Message-ID <[email protected]>
On Fri, 14 Aug 2026 13:44:28 -0700
Rosen Penev <[email protected]> wrote:

> Use devm_clk_get_enabled() to let the clock be enabled automatically
> and cleaned up on unbind, dropping the manual clk_prepare_enable() and
> clk_disable_unprepare() calls in probe and remove. As a result, move the
> clk struct member into probe, which is the only place it's used.
> 
> Simplify the probe error paths by returning directly instead of
> jumping to clk_err, and use devm_snd_soc_register_component() return
> value directly. Also remove error message from ioremap as it throws one
> itself. Same with devm_request_irq().
> 
> Assisted-by: opencode:deepseek-v4-flash-free
> Signed-off-by: Rosen Penev <[email protected]>
> Reviewed-by: Michal Simek <[email protected]>
> Reviewed-by: Vincenzo Frascino <[email protected]>
> ---
>  v3: rebase.
>  v2: add signed-off-by. Further clean up some stuff.
>  sound/soc/xilinx/xlnx_formatter_pcm.c | 71 ++++++++-------------------
>  1 file changed, 20 insertions(+), 51 deletions(-)
> 
> diff --git a/sound/soc/xilinx/xlnx_formatter_pcm.c b/sound/soc/xilinx/xlnx_formatter_pcm.c
> index 3d6f1e4046d8..5f63fb28ea5f 100644
> --- a/sound/soc/xilinx/xlnx_formatter_pcm.c
> +++ b/sound/soc/xilinx/xlnx_formatter_pcm.c
> @@ -82,7 +82,6 @@ struct xlnx_pcm_drv_data {
>  	int mm2s_irq;
>  	struct snd_pcm_substream *play_stream;
>  	struct snd_pcm_substream *capture_stream;
> -	struct clk *axi_clk;
>  	unsigned int sysclk;
>  };
>  
> @@ -596,30 +595,19 @@ static int xlnx_formatter_pcm_probe(struct platform_device *pdev)
>  	u32 val;
>  	struct xlnx_pcm_drv_data *aud_drv_data;
>  	struct device *dev = &pdev->dev;
> +	struct clk *axi_clk;
> +
> +	axi_clk = devm_clk_get_enabled(dev, "s_axi_lite_aclk");
> +	if (IS_ERR(axi_clk))
> +		return dev_err_probe(dev, PTR_ERR(axi_clk), "failed to get s_axi_lite_aclk");
>  
>  	aud_drv_data = devm_kzalloc(dev, sizeof(*aud_drv_data), GFP_KERNEL);
>  	if (!aud_drv_data)
>  		return -ENOMEM;
>  
> -	aud_drv_data->axi_clk = devm_clk_get(dev, "s_axi_lite_aclk");
> -	if (IS_ERR(aud_drv_data->axi_clk)) {
> -		ret = PTR_ERR(aud_drv_data->axi_clk);
> -		dev_err(dev, "failed to get s_axi_lite_aclk(%d)\n", ret);
> -		return ret;
> -	}
> -	ret = clk_prepare_enable(aud_drv_data->axi_clk);
> -	if (ret) {
> -		dev_err(dev,
> -			"failed to enable s_axi_lite_aclk(%d)\n", ret);
> -		return ret;
> -	}
> -
>  	aud_drv_data->mmio = devm_platform_ioremap_resource(pdev, 0);
> -	if (IS_ERR(aud_drv_data->mmio)) {
> -		dev_err(dev, "audio formatter ioremap failed\n");
> -		ret = PTR_ERR(aud_drv_data->mmio);
> -		goto clk_err;
> -	}
> +	if (IS_ERR(aud_drv_data->mmio))
> +		return PTR_ERR(aud_drv_data->mmio);
>  
>  	val = readl(aud_drv_data->mmio + XLNX_AUD_CORE_CONFIG);
>  	if (val & AUD_CFG_MM2S_MASK) {
> @@ -628,7 +616,7 @@ static int xlnx_formatter_pcm_probe(struct platform_device *pdev)
>  					       XLNX_MM2S_OFFSET);
>  		if (ret) {
>  			dev_err(dev, "audio formatter reset failed\n");
> -			goto clk_err;
> +			return ret;

Why not dev_err_probe() for this one?  Even though maybe deferred handling
isn't useful here (I haven't checked) it still gives more compact code.

>  		}
>  		xlnx_formatter_disable_irqs(aud_drv_data->mmio +
>  					    XLNX_MM2S_OFFSET,
..

>  	if (val & AUD_CFG_S2MM_MASK) {
>  		aud_drv_data->s2mm_presence = true;
> @@ -654,7 +639,7 @@ static int xlnx_formatter_pcm_probe(struct platform_device *pdev)
>  					       XLNX_S2MM_OFFSET);
>  		if (ret) {
>  			dev_err(dev, "audio formatter reset failed\n");
> -			goto clk_err;
> +			return ret;

As above, I'd go return dev_err_probe() everywhere you now return due to
the other cleanups.

>  		}
>  		xlnx_formatter_disable_irqs(aud_drv_data->mmio +
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.