Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3820952 authored by Noralf Trønnes's avatar Noralf Trønnes
Browse files

drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini()



Use drm_fb_cma_fbdev_init_with_funcs() and drm_fb_cma_fbdev_fini() which
relies on the fact that drm_device holds a pointer to the drm_fb_helper
structure. This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.
Remove todo entry.

Cc: David Lechner <david@lechnology.com>
Signed-off-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Acked-by: default avatarDavid Lechner <david@lechnology.com>
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Tested-by: default avatarDavid Lechner <david@lechnolgy.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171208193743.34450-11-noralf@tronnes.org
parent bdecd835
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -395,11 +395,6 @@ those drivers as simple as possible, so lots of room for refactoring:
  one of the ideas for having a shared dsi/dbi helper, abstracting away the
  transport details more.

- tinydrm_lastclose could be drm_fb_helper_lastclose. Only thing we need
  for that is to store the drm_fb_helper pointer somewhere in
  drm_device->mode_config. And then we could roll that out to all the
  drivers.

- tinydrm_gem_cma_prime_import_sg_table should probably go into the cma
  helpers, as a _vmapped variant (since not every driver needs the vmap).
  And tinydrm_gem_cma_free_object could the be merged into
+5 −32
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc_helper.h>
#include <drm/drm_fb_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/tinydrm/tinydrm.h>
#include <linux/device.h>
@@ -35,23 +36,6 @@
 * and registers the DRM device using devm_tinydrm_register().
 */

/**
 * tinydrm_lastclose - DRM lastclose helper
 * @drm: DRM device
 *
 * This function ensures that fbdev is restored when drm_lastclose() is called
 * on the last drm_release(). Drivers can use this as their
 * &drm_driver->lastclose callback.
 */
void tinydrm_lastclose(struct drm_device *drm)
{
	struct tinydrm_device *tdev = drm->dev_private;

	DRM_DEBUG_KMS("\n");
	drm_fbdev_cma_restore_mode(tdev->fbdev_cma);
}
EXPORT_SYMBOL(tinydrm_lastclose);

/**
 * tinydrm_gem_cma_prime_import_sg_table - Produce a CMA GEM object from
 *     another driver's scatter/gather table of pinned pages
@@ -214,35 +198,24 @@ EXPORT_SYMBOL(devm_tinydrm_init);
static int tinydrm_register(struct tinydrm_device *tdev)
{
	struct drm_device *drm = tdev->drm;
	int bpp = drm->mode_config.preferred_depth;
	struct drm_fbdev_cma *fbdev;
	int ret;

	ret = drm_dev_register(tdev->drm, 0);
	if (ret)
		return ret;

	fbdev = drm_fbdev_cma_init_with_funcs(drm, bpp ? bpp : 32,
					      drm->mode_config.num_connector,
					      tdev->fb_funcs);
	if (IS_ERR(fbdev))
		DRM_ERROR("Failed to initialize fbdev: %ld\n", PTR_ERR(fbdev));
	else
		tdev->fbdev_cma = fbdev;
	ret = drm_fb_cma_fbdev_init_with_funcs(drm, 0, 0, tdev->fb_funcs);
	if (ret)
		DRM_ERROR("Failed to initialize fbdev: %d\n", ret);

	return 0;
}

static void tinydrm_unregister(struct tinydrm_device *tdev)
{
	struct drm_fbdev_cma *fbdev_cma = tdev->fbdev_cma;

	drm_atomic_helper_shutdown(tdev->drm);
	/* don't restore fbdev in lastclose, keep pipeline disabled */
	tdev->fbdev_cma = NULL;
	drm_fb_cma_fbdev_fini(tdev->drm);
	drm_dev_unregister(tdev->drm);
	if (fbdev_cma)
		drm_fbdev_cma_fini(fbdev_cma);
}

static void devm_tinydrm_register_release(void *data)
+2 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/spi/spi.h>
#include <video/mipi_display.h>

#include <drm/drm_fb_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/tinydrm/mipi-dbi.h>
#include <drm/tinydrm/tinydrm-helpers.h>
@@ -381,7 +382,7 @@ static struct drm_driver ili9225_driver = {
				  DRIVER_ATOMIC,
	.fops			= &ili9225_fops,
	TINYDRM_GEM_DRIVER_OPS,
	.lastclose		= tinydrm_lastclose,
	.lastclose		= drm_fb_helper_lastclose,
	.name			= "ili9225",
	.desc			= "Ilitek ILI9225",
	.date			= "20171106",
+2 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
 * (at your option) any later version.
 */

#include <drm/drm_fb_helper.h>
#include <drm/drm_modeset_helper.h>
#include <drm/tinydrm/ili9341.h>
#include <drm/tinydrm/mipi-dbi.h>
@@ -140,7 +141,7 @@ static struct drm_driver mi0283qt_driver = {
				  DRIVER_ATOMIC,
	.fops			= &mi0283qt_fops,
	TINYDRM_GEM_DRIVER_OPS,
	.lastclose		= tinydrm_lastclose,
	.lastclose		= drm_fb_helper_lastclose,
	.debugfs_init		= mipi_dbi_debugfs_init,
	.name			= "mi0283qt",
	.desc			= "Multi-Inno MI0283QT",
+2 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <linux/spi/spi.h>
#include <video/mipi_display.h>

#include <drm/drm_fb_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/tinydrm/mipi-dbi.h>
#include <drm/tinydrm/tinydrm-helpers.h>
@@ -320,7 +321,7 @@ static struct drm_driver st7586_driver = {
				  DRIVER_ATOMIC,
	.fops			= &st7586_fops,
	TINYDRM_GEM_DRIVER_OPS,
	.lastclose		= tinydrm_lastclose,
	.lastclose		= drm_fb_helper_lastclose,
	.debugfs_init		= mipi_dbi_debugfs_init,
	.name			= "st7586",
	.desc			= "Sitronix ST7586",
Loading