aboutsummaryrefslogtreecommitdiffstats
path: root/testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch
diff options
context:
space:
mode:
authorHe Yangxuan <yangxuan8282@gmail.com>2018-12-12 04:18:06 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2018-12-20 14:35:09 +0000
commit468ce5d3db5bea1bfc4d0b21ce0460bbc508c0ff (patch)
treeeed21d01ea548aec8278a37ccf3a67357c56ed13 /testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch
parent27ddcaeab2051aaf617a81eeddfa34fb6557e64a (diff)
downloadaports-468ce5d3db5bea1bfc4d0b21ce0460bbc508c0ff.tar.bz2
aports-468ce5d3db5bea1bfc4d0b21ce0460bbc508c0ff.tar.xz
testing/linux-amlogic: upgrade to 4.19.8
Diffstat (limited to 'testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch')
-rw-r--r--testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch b/testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch
new file mode 100644
index 0000000000..fc3511a111
--- /dev/null
+++ b/testing/linux-amlogic/0009-drm-meson-Use-drm_fbdev_generic_setup.patch
@@ -0,0 +1,100 @@
+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;
+