diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index eaa5e7dcc50c..22266b41b6c5 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -299,6 +299,7 @@ struct dw_hdmi { spinlock_t audio_lock; struct mutex audio_mutex; + struct dentry *debugfs_dir; unsigned int sample_rate; unsigned int audio_cts; unsigned int audio_n; @@ -4029,18 +4030,16 @@ static const struct file_operations dw_hdmi_phy_fops = { static void dw_hdmi_register_debugfs(struct device *dev, struct dw_hdmi *hdmi) { - struct dentry *debugfs_dir; - - debugfs_dir = debugfs_create_dir("dw-hdmi", NULL); - if (IS_ERR(debugfs_dir)) { + hdmi->debugfs_dir = debugfs_create_dir("dw-hdmi", NULL); + if (IS_ERR(hdmi->debugfs_dir)) { dev_err(dev, "failed to create debugfs dir!\n"); return; } - debugfs_create_file("status", 0400, debugfs_dir, + debugfs_create_file("status", 0400, hdmi->debugfs_dir, hdmi, &dw_hdmi_status_fops); - debugfs_create_file("ctrl", 0400, debugfs_dir, + debugfs_create_file("ctrl", 0400, hdmi->debugfs_dir, hdmi, &dw_hdmi_ctrl_fops); - debugfs_create_file("phy", 0400, debugfs_dir, + debugfs_create_file("phy", 0400, hdmi->debugfs_dir, hdmi, &dw_hdmi_phy_fops); } @@ -4419,6 +4418,8 @@ void dw_hdmi_remove(struct dw_hdmi *hdmi) flush_workqueue(hdmi->workqueue); destroy_workqueue(hdmi->workqueue); + debugfs_remove_recursive(hdmi->debugfs_dir); + drm_bridge_remove(&hdmi->bridge); if (hdmi->audio && !IS_ERR(hdmi->audio))