mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 07:51:31 -04:00
drm/mediatek: Remove all conflicting aperture devices during probe
If a device has a framebuffer available it might be already used as display by simple-framebuffer or simpledrm when mediatek-drm is probed. This is actually helpful when porting to a new device as framebuffers are simple to setup in device trees and fbcon can be used to monitor the kernel boot process. When drm-mediatek loads a new fb device is initialized, however fbcon remains attached to the initial framebuffer which is no longer connected to the actual display - the early fb is never removed. We can gracefully transition from framebuffer handling to drm-managed display by calling aperture_remove_all_conflicting_devices before registering mediatek-drm. This takes care of unloading other fb devices/drivers and disconnects fbcon which then automatically reconnects to mediatekdrmfb as soon as it's available. The function is invoked just before drm_dev_register() to kick out the existing framebuffer as late as possible to reduce the time the screen is unresponsive. Signed-off-by: Luca Leonardo Scorcia <l.scorcia@gmail.com> Reviewed-by: CK Hu <ck.hu@mediatek.com> Link: https://patchwork.kernel.org/project/dri-devel/patch/20260212192605.263160-1-l.scorcia@gmail.com/ Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
This commit is contained in:
committed by
Chun-Kuang Hu
parent
76255024ca
commit
86d5f60dea
@@ -4,6 +4,7 @@
|
||||
* Author: YT SHEN <yt.shen@mediatek.com>
|
||||
*/
|
||||
|
||||
#include <linux/aperture.h>
|
||||
#include <linux/component.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
@@ -670,6 +671,10 @@ static int mtk_drm_bind(struct device *dev)
|
||||
if (ret < 0)
|
||||
goto err_free;
|
||||
|
||||
ret = aperture_remove_all_conflicting_devices(DRIVER_NAME);
|
||||
if (ret < 0)
|
||||
dev_err(dev, "Error %d while removing conflicting aperture devices", ret);
|
||||
|
||||
ret = drm_dev_register(drm, 0);
|
||||
if (ret < 0)
|
||||
goto err_deinit;
|
||||
|
||||
Reference in New Issue
Block a user