mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-27 17:21:34 +00:00
100 lines
3.3 KiB
Diff
100 lines
3.3 KiB
Diff
From a753ec94679503680fcf86ffad3f3d3eb817c6b9 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
|
Date: Sat, 8 Sep 2018 15:46:33 +0200
|
|
Subject: [PATCH] drm/meson: Use drm_fbdev_generic_setup()
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The CMA helper is already using the drm_fb_helper_generic_probe part of
|
|
the generic fbdev emulation. This patch makes full use of the generic
|
|
fbdev emulation by using its drm_client callbacks. This means that
|
|
drm_mode_config_funcs->output_poll_changed and drm_driver->lastclose are
|
|
now handled by the emulation code. Additionally fbdev unregister happens
|
|
automatically on drm_dev_unregister().
|
|
|
|
The drm_fbdev_generic_setup() call is put after drm_dev_register() in the
|
|
driver. This is done to highlight the fact that fbdev emulation is an
|
|
internal client that makes use of the driver, it is not part of the
|
|
driver as such. If fbdev setup fails, an error is printed, but the driver
|
|
succeeds probing.
|
|
|
|
Cc: Neil Armstrong <narmstrong@baylibre.com>
|
|
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|
|
|
---
|
|
drivers/gpu/drm/meson/meson_drv.c | 19 ++-----------------
|
|
drivers/gpu/drm/meson/meson_drv.h | 1 -
|
|
2 files changed, 2 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
|
|
index b55e03d..3997e3e 100644
|
|
--- a/drivers/gpu/drm/meson/meson_drv.c
|
|
+++ b/drivers/gpu/drm/meson/meson_drv.c
|
|
@@ -69,15 +69,7 @@
|
|
* - Powering Up HDMI controller and PHY
|
|
*/
|
|
|
|
-static void meson_fb_output_poll_changed(struct drm_device *dev)
|
|
-{
|
|
- struct meson_drm *priv = dev->dev_private;
|
|
-
|
|
- drm_fbdev_cma_hotplug_event(priv->fbdev);
|
|
-}
|
|
-
|
|
static const struct drm_mode_config_funcs meson_mode_config_funcs = {
|
|
- .output_poll_changed = meson_fb_output_poll_changed,
|
|
.atomic_check = drm_atomic_helper_check,
|
|
.atomic_commit = drm_atomic_helper_commit,
|
|
.fb_create = drm_gem_fb_create,
|
|
@@ -314,13 +306,6 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
|
|
|
|
drm_mode_config_reset(drm);
|
|
|
|
- priv->fbdev = drm_fbdev_cma_init(drm, 32,
|
|
- drm->mode_config.num_connector);
|
|
- if (IS_ERR(priv->fbdev)) {
|
|
- ret = PTR_ERR(priv->fbdev);
|
|
- goto free_drm;
|
|
- }
|
|
-
|
|
drm_kms_helper_poll_init(drm);
|
|
|
|
platform_set_drvdata(pdev, priv);
|
|
@@ -329,6 +314,8 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
|
|
if (ret)
|
|
goto free_drm;
|
|
|
|
+ drm_fbdev_generic_setup(drm, 32);
|
|
+
|
|
return 0;
|
|
|
|
free_drm:
|
|
@@ -345,7 +332,6 @@ static int meson_drv_bind(struct device *dev)
|
|
static void meson_drv_unbind(struct device *dev)
|
|
{
|
|
struct drm_device *drm = dev_get_drvdata(dev);
|
|
- struct meson_drm *priv = drm->dev_private;
|
|
|
|
if (priv->canvas) {
|
|
meson_canvas_free(priv->canvas, priv->canvas_id_osd1);
|
|
@@ -356,7 +342,6 @@ static void meson_drv_unbind(struct device *dev)
|
|
|
|
drm_dev_unregister(drm);
|
|
drm_kms_helper_poll_fini(drm);
|
|
- drm_fbdev_cma_fini(priv->fbdev);
|
|
drm_mode_config_cleanup(drm);
|
|
drm_dev_put(drm);
|
|
|
|
diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h
|
|
index a955354..4dccf4c 100644
|
|
--- a/drivers/gpu/drm/meson/meson_drv.h
|
|
+++ b/drivers/gpu/drm/meson/meson_drv.h
|
|
@@ -40,7 +40,6 @@ struct meson_drm {
|
|
|
|
struct drm_device *drm;
|
|
struct drm_crtc *crtc;
|
|
- struct drm_fbdev_cma *fbdev;
|
|
struct drm_plane *primary_plane;
|
|
struct drm_plane *overlay_plane;
|
|
|