2015-10-29 09:36:23 +01:00
/*
* Copyright ( C ) 2015 Free Electrons
* Copyright ( C ) 2015 NextThing Co
*
* Maxime Ripard < maxime . ripard @ free - electrons . com >
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation ; either version 2 of
* the License , or ( at your option ) any later version .
*/
2018-01-22 10:25:25 +01:00
# include <drm/drm_atomic.h>
2015-10-29 09:36:23 +01:00
# include <drm/drm_atomic_helper.h>
2017-11-15 15:19:53 +01:00
# include <drm/drm_fb_helper.h>
2015-10-29 09:36:23 +01:00
# include <drm/drm_fb_cma_helper.h>
2017-09-24 14:26:23 +02:00
# include <drm/drm_gem_framebuffer_helper.h>
2015-10-29 09:36:23 +01:00
# include <drm/drmP.h>
# include "sun4i_drv.h"
2016-09-08 18:59:22 +08:00
# include "sun4i_framebuffer.h"
2015-10-29 09:36:23 +01:00
2017-12-17 18:06:05 +01:00
static int sun4i_de_atomic_check ( struct drm_device * dev ,
struct drm_atomic_state * state )
{
int ret ;
ret = drm_atomic_helper_check_modeset ( dev , state ) ;
if ( ret )
return ret ;
2017-05-01 10:52:32 +02:00
ret = drm_atomic_normalize_zpos ( dev , state ) ;
if ( ret )
return ret ;
2017-12-17 18:06:05 +01:00
return drm_atomic_helper_check_planes ( dev , state ) ;
}
2015-10-29 09:36:23 +01:00
static const struct drm_mode_config_funcs sun4i_de_mode_config_funcs = {
2017-11-15 15:19:53 +01:00
. output_poll_changed = drm_fb_helper_output_poll_changed ,
2017-12-17 18:06:05 +01:00
. atomic_check = sun4i_de_atomic_check ,
2015-10-29 09:36:23 +01:00
. atomic_commit = drm_atomic_helper_commit ,
2017-09-24 14:26:23 +02:00
. fb_create = drm_gem_fb_create ,
2015-10-29 09:36:23 +01:00
} ;
2018-01-22 10:25:25 +01:00
static struct drm_mode_config_helper_funcs sun4i_de_mode_config_helpers = {
. atomic_commit_tail = drm_atomic_helper_commit_tail_rpm ,
} ;
2017-11-15 15:19:53 +01:00
int sun4i_framebuffer_init ( struct drm_device * drm )
2015-10-29 09:36:23 +01:00
{
drm_mode_config_reset ( drm ) ;
drm - > mode_config . max_width = 8192 ;
drm - > mode_config . max_height = 8192 ;
drm - > mode_config . funcs = & sun4i_de_mode_config_funcs ;
2018-01-22 10:25:25 +01:00
drm - > mode_config . helper_private = & sun4i_de_mode_config_helpers ;
2015-10-29 09:36:23 +01:00
2017-11-15 15:19:53 +01:00
return drm_fb_cma_fbdev_init ( drm , 32 , 0 ) ;
2015-10-29 09:36:23 +01:00
}
void sun4i_framebuffer_free ( struct drm_device * drm )
{
2017-11-15 15:19:53 +01:00
drm_fb_cma_fbdev_fini ( drm ) ;
2015-10-29 09:36:23 +01:00
}