Re: [PATCH] ASoC: hdac_hda: fix HDA patch loader support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 21 Sep 2023 08:43:17 +0200,
Bard Liao wrote:
> 
> The array size is irrelevant with SNDRV_CARDS. dev_index is from
> codec address and the available codec number is HDA_MAX_CODECS.
> Also, hda_pvt->fw is for a temporary use, no need to add a new extra
> field in hdac_hda_priv{}.
> 
> Fixes: 842a62a75e70 ("ASoC: hdac_hda: add HDA patch loader support")
> Signed-off-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx>
> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx>

Reviewed-by: Takashi Iwai <tiwai@xxxxxxx>


thanks,

Takashi

> ---
>  sound/soc/codecs/hdac_hda.c | 15 ++++++++-------
>  sound/soc/codecs/hdac_hda.h |  3 ---
>  2 files changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/sound/soc/codecs/hdac_hda.c b/sound/soc/codecs/hdac_hda.c
> index 8f5d97949d3d..355f30779a34 100644
> --- a/sound/soc/codecs/hdac_hda.c
> +++ b/sound/soc/codecs/hdac_hda.c
> @@ -37,10 +37,10 @@
>  				 SNDRV_PCM_RATE_192000)
>  
>  #ifdef CONFIG_SND_HDA_PATCH_LOADER
> -static char *loadable_patch[SNDRV_CARDS];
> +static char *loadable_patch[HDA_MAX_CODECS];
>  
>  module_param_array_named(patch, loadable_patch, charp, NULL, 0444);
> -MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");
> +MODULE_PARM_DESC(patch, "Patch file array for Intel HD audio interface. The array index is the codec address.");
>  #endif
>  
>  static int hdac_hda_dai_open(struct snd_pcm_substream *substream,
> @@ -434,20 +434,21 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component)
>  
>  #ifdef CONFIG_SND_HDA_PATCH_LOADER
>  	if (loadable_patch[hda_pvt->dev_index] && *loadable_patch[hda_pvt->dev_index]) {
> +		const struct firmware *fw;
> +
>  		dev_info(&hdev->dev, "Applying patch firmware '%s'\n",
>  			 loadable_patch[hda_pvt->dev_index]);
> -		ret = request_firmware(&hda_pvt->fw, loadable_patch[hda_pvt->dev_index],
> +		ret = request_firmware(&fw, loadable_patch[hda_pvt->dev_index],
>  				       &hdev->dev);
>  		if (ret < 0)
>  			goto error_no_pm;
> -		if (hda_pvt->fw) {
> -			ret = snd_hda_load_patch(hcodec->bus, hda_pvt->fw->size, hda_pvt->fw->data);
> +		if (fw) {
> +			ret = snd_hda_load_patch(hcodec->bus, fw->size, fw->data);
>  			if (ret < 0) {
>  				dev_err(&hdev->dev, "failed to load hda patch %d\n", ret);
>  				goto error_no_pm;
>  			}
> -			release_firmware(hda_pvt->fw);
> -			hda_pvt->fw = NULL;
> +			release_firmware(fw);
>  		}
>  	}
>  #endif
> diff --git a/sound/soc/codecs/hdac_hda.h b/sound/soc/codecs/hdac_hda.h
> index b7a12aea8d32..d03a5d4e7288 100644
> --- a/sound/soc/codecs/hdac_hda.h
> +++ b/sound/soc/codecs/hdac_hda.h
> @@ -27,9 +27,6 @@ struct hdac_hda_priv {
>  	struct hdac_hda_pcm pcm[HDAC_DAI_ID_NUM];
>  	bool need_display_power;
>  	int dev_index;
> -#ifdef CONFIG_SND_HDA_PATCH_LOADER
> -	const struct firmware *fw;
> -#endif
>  };
>  
>  struct hdac_ext_bus_ops *snd_soc_hdac_hda_get_ops(void);
> -- 
> 2.25.1
> 



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux