drm/atmel-hlcdc: Use drm_fb_cma_fbdev_init/fini()
Use drm_fb_cma_fbdev_init() 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. Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Signed-off-by: Noralf Trønnes <noralf@tronnes.org> Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171115142001.45358-6-noralf@tronnes.org
This commit is contained in:
parent
41b676e03f
commit
ce4eb35bfa
|
@ -461,13 +461,6 @@ static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
|
||||||
return drm_gem_fb_create(dev, file_priv, mode_cmd);
|
return drm_gem_fb_create(dev, file_priv, mode_cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void atmel_hlcdc_fb_output_poll_changed(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
struct atmel_hlcdc_dc *dc = dev->dev_private;
|
|
||||||
|
|
||||||
drm_fbdev_cma_hotplug_event(dc->fbdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct atmel_hlcdc_dc_commit {
|
struct atmel_hlcdc_dc_commit {
|
||||||
struct work_struct work;
|
struct work_struct work;
|
||||||
struct drm_device *dev;
|
struct drm_device *dev;
|
||||||
|
@ -563,7 +556,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
|
||||||
|
|
||||||
static const struct drm_mode_config_funcs mode_config_funcs = {
|
static const struct drm_mode_config_funcs mode_config_funcs = {
|
||||||
.fb_create = atmel_hlcdc_fb_create,
|
.fb_create = atmel_hlcdc_fb_create,
|
||||||
.output_poll_changed = atmel_hlcdc_fb_output_poll_changed,
|
.output_poll_changed = drm_fb_helper_output_poll_changed,
|
||||||
.atomic_check = drm_atomic_helper_check,
|
.atomic_check = drm_atomic_helper_check,
|
||||||
.atomic_commit = atmel_hlcdc_dc_atomic_commit,
|
.atomic_commit = atmel_hlcdc_dc_atomic_commit,
|
||||||
};
|
};
|
||||||
|
@ -665,10 +658,7 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
|
||||||
|
|
||||||
platform_set_drvdata(pdev, dev);
|
platform_set_drvdata(pdev, dev);
|
||||||
|
|
||||||
dc->fbdev = drm_fbdev_cma_init(dev, 24,
|
drm_fb_cma_fbdev_init(dev, 24, 0);
|
||||||
dev->mode_config.num_connector);
|
|
||||||
if (IS_ERR(dc->fbdev))
|
|
||||||
dc->fbdev = NULL;
|
|
||||||
|
|
||||||
drm_kms_helper_poll_init(dev);
|
drm_kms_helper_poll_init(dev);
|
||||||
|
|
||||||
|
@ -688,8 +678,7 @@ static void atmel_hlcdc_dc_unload(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct atmel_hlcdc_dc *dc = dev->dev_private;
|
struct atmel_hlcdc_dc *dc = dev->dev_private;
|
||||||
|
|
||||||
if (dc->fbdev)
|
drm_fb_cma_fbdev_fini(dev);
|
||||||
drm_fbdev_cma_fini(dc->fbdev);
|
|
||||||
flush_workqueue(dc->wq);
|
flush_workqueue(dc->wq);
|
||||||
drm_kms_helper_poll_fini(dev);
|
drm_kms_helper_poll_fini(dev);
|
||||||
drm_mode_config_cleanup(dev);
|
drm_mode_config_cleanup(dev);
|
||||||
|
@ -705,13 +694,6 @@ static void atmel_hlcdc_dc_unload(struct drm_device *dev)
|
||||||
destroy_workqueue(dc->wq);
|
destroy_workqueue(dc->wq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void atmel_hlcdc_dc_lastclose(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
struct atmel_hlcdc_dc *dc = dev->dev_private;
|
|
||||||
|
|
||||||
drm_fbdev_cma_restore_mode(dc->fbdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int atmel_hlcdc_dc_irq_postinstall(struct drm_device *dev)
|
static int atmel_hlcdc_dc_irq_postinstall(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct atmel_hlcdc_dc *dc = dev->dev_private;
|
struct atmel_hlcdc_dc *dc = dev->dev_private;
|
||||||
|
@ -744,7 +726,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
|
||||||
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
|
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
|
||||||
DRIVER_MODESET | DRIVER_PRIME |
|
DRIVER_MODESET | DRIVER_PRIME |
|
||||||
DRIVER_ATOMIC,
|
DRIVER_ATOMIC,
|
||||||
.lastclose = atmel_hlcdc_dc_lastclose,
|
.lastclose = drm_fb_helper_lastclose,
|
||||||
.irq_handler = atmel_hlcdc_dc_irq_handler,
|
.irq_handler = atmel_hlcdc_dc_irq_handler,
|
||||||
.irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
|
.irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
|
||||||
.irq_postinstall = atmel_hlcdc_dc_irq_postinstall,
|
.irq_postinstall = atmel_hlcdc_dc_irq_postinstall,
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <drm/drm_atomic_helper.h>
|
#include <drm/drm_atomic_helper.h>
|
||||||
#include <drm/drm_crtc.h>
|
#include <drm/drm_crtc.h>
|
||||||
#include <drm/drm_crtc_helper.h>
|
#include <drm/drm_crtc_helper.h>
|
||||||
|
#include <drm/drm_fb_helper.h>
|
||||||
#include <drm/drm_fb_cma_helper.h>
|
#include <drm/drm_fb_cma_helper.h>
|
||||||
#include <drm/drm_gem_cma_helper.h>
|
#include <drm/drm_gem_cma_helper.h>
|
||||||
#include <drm/drm_gem_framebuffer_helper.h>
|
#include <drm/drm_gem_framebuffer_helper.h>
|
||||||
|
@ -374,7 +375,6 @@ struct atmel_hlcdc_dc {
|
||||||
const struct atmel_hlcdc_dc_desc *desc;
|
const struct atmel_hlcdc_dc_desc *desc;
|
||||||
struct dma_pool *dscrpool;
|
struct dma_pool *dscrpool;
|
||||||
struct atmel_hlcdc *hlcdc;
|
struct atmel_hlcdc *hlcdc;
|
||||||
struct drm_fbdev_cma *fbdev;
|
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
struct atmel_hlcdc_layer *layers[ATMEL_HLCDC_MAX_LAYERS];
|
struct atmel_hlcdc_layer *layers[ATMEL_HLCDC_MAX_LAYERS];
|
||||||
struct workqueue_struct *wq;
|
struct workqueue_struct *wq;
|
||||||
|
|
Loading…
Reference in New Issue