[RFC PATCH 3/3] ASoC: Intel: kbl-rt5660: use .exit() dailink callback to release gpiod
Andy Shevchenko
andriy.shevchenko at linux.intel.com
Thu Mar 5 14:27:43 CET 2020
On Thu, Mar 05, 2020 at 07:06:16AM -0600, Pierre-Louis Bossart wrote:
> The gpiod handling is inspired from the bdw-rt5677 code. Apply same
gpiod -> GPIO descriptor
> fix to avoid reference count issue while removing modules for
> consistency.
>
> The SOF driver does not yet support this machine driver, and module
> load/unload with the SKL driver isn't well supported, so this was not
> tested on a device.
>
> Suggested-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> ---
> sound/soc/intel/boards/kbl_rt5660.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/intel/boards/kbl_rt5660.c b/sound/soc/intel/boards/kbl_rt5660.c
> index e23dea9ab79a..3ff3afd36536 100644
> --- a/sound/soc/intel/boards/kbl_rt5660.c
> +++ b/sound/soc/intel/boards/kbl_rt5660.c
> @@ -165,8 +165,8 @@ static int kabylake_rt5660_codec_init(struct snd_soc_pcm_runtime *rtd)
> dev_warn(component->dev, "Failed to add driver gpios\n");
>
> /* Request rt5660 GPIO for lineout mute control, return if fails */
> - ctx->gpio_lo_mute = devm_gpiod_get(component->dev, "lineout-mute",
> - GPIOD_OUT_HIGH);
> + ctx->gpio_lo_mute = gpiod_get(component->dev, "lineout-mute",
> + GPIOD_OUT_HIGH);
> if (IS_ERR(ctx->gpio_lo_mute)) {
> dev_err(component->dev, "Can't find GPIO_MUTE# gpio\n");
> return PTR_ERR(ctx->gpio_lo_mute);
> @@ -207,6 +207,14 @@ static int kabylake_rt5660_codec_init(struct snd_soc_pcm_runtime *rtd)
> return 0;
> }
>
> +static void kabylake_rt5660_codec_exit(struct snd_soc_pcm_runtime *rtd)
> +{
> + struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(rtd->card);
> +
> + if (!IS_ERR(ctx->gpio_lo_mute))
Same comment as per previous patch.
> + gpiod_put(ctx->gpio_lo_mute));
> +}
> +
> static int kabylake_hdmi_init(struct snd_soc_pcm_runtime *rtd, int device)
> {
> struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(rtd->card);
> @@ -421,6 +429,7 @@ static struct snd_soc_dai_link kabylake_rt5660_dais[] = {
> .id = 0,
> .no_pcm = 1,
> .init = kabylake_rt5660_codec_init,
> + .exit = kabylake_rt5660_codec_exit,
> .dai_fmt = SND_SOC_DAIFMT_I2S |
> SND_SOC_DAIFMT_NB_NF |
> SND_SOC_DAIFMT_CBS_CFS,
> --
> 2.20.1
>
--
With Best Regards,
Andy Shevchenko
More information about the Alsa-devel
mailing list