lkml.org 
[lkml]   [2022]   [Mar]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 068/121] drm/vc4: hdmi: Unregister codec device on unbind
    Date
    From: Maxime Ripard <maxime@cerno.tech>

    [ Upstream commit e40945ab7c7f966d0c37b7bd7b0596497dfe228d ]

    On bind we will register the HDMI codec device but we don't unregister
    it on unbind, leading to a device leakage. Unregister our device at
    unbind.

    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220127111452.222002-1-maxime@cerno.tech
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/vc4/vc4_hdmi.c | 8 ++++++++
    drivers/gpu/drm/vc4/vc4_hdmi.h | 1 +
    2 files changed, 9 insertions(+)

    diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
    index 24f11c07bc3c..2f53ba54b81a 100644
    --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
    +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
    @@ -1522,6 +1522,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi)
    dev_err(dev, "Couldn't register the HDMI codec: %ld\n", PTR_ERR(codec_pdev));
    return PTR_ERR(codec_pdev);
    }
    + vc4_hdmi->audio.codec_pdev = codec_pdev;

    dai_link->cpus = &vc4_hdmi->audio.cpu;
    dai_link->codecs = &vc4_hdmi->audio.codec;
    @@ -1561,6 +1562,12 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi)

    }

    +static void vc4_hdmi_audio_exit(struct vc4_hdmi *vc4_hdmi)
    +{
    + platform_device_unregister(vc4_hdmi->audio.codec_pdev);
    + vc4_hdmi->audio.codec_pdev = NULL;
    +}
    +
    static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv)
    {
    struct vc4_hdmi *vc4_hdmi = priv;
    @@ -2299,6 +2306,7 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master,
    kfree(vc4_hdmi->hdmi_regset.regs);
    kfree(vc4_hdmi->hd_regset.regs);

    + vc4_hdmi_audio_exit(vc4_hdmi);
    vc4_hdmi_cec_exit(vc4_hdmi);
    vc4_hdmi_hotplug_exit(vc4_hdmi);
    vc4_hdmi_connector_destroy(&vc4_hdmi->connector);
    diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
    index 33e9f665ab8e..c0492da73683 100644
    --- a/drivers/gpu/drm/vc4/vc4_hdmi.h
    +++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
    @@ -113,6 +113,7 @@ struct vc4_hdmi_audio {
    struct snd_soc_dai_link_component platform;
    struct snd_dmaengine_dai_dma_data dma_data;
    struct hdmi_audio_infoframe infoframe;
    + struct platform_device *codec_pdev;
    bool streaming;
    };

    --
    2.34.1


    \
     
     \ /
      Last update: 2022-03-14 13:39    [W:4.055 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site