0001
0002
0003
0004
0005
0006
0007
0008 #include <drm/drm_atomic_helper.h>
0009 #include <drm/drm_fb_cma_helper.h>
0010 #include <drm/drm_gem_framebuffer_helper.h>
0011 #include <drm/drm_probe_helper.h>
0012
0013 #include "fsl_dcu_drm_crtc.h"
0014 #include "fsl_dcu_drm_drv.h"
0015
0016 static const struct drm_mode_config_funcs fsl_dcu_drm_mode_config_funcs = {
0017 .atomic_check = drm_atomic_helper_check,
0018 .atomic_commit = drm_atomic_helper_commit,
0019 .fb_create = drm_gem_fb_create,
0020 };
0021
0022 int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev)
0023 {
0024 int ret;
0025
0026 drm_mode_config_init(fsl_dev->drm);
0027
0028 fsl_dev->drm->mode_config.min_width = 0;
0029 fsl_dev->drm->mode_config.min_height = 0;
0030 fsl_dev->drm->mode_config.max_width = 2031;
0031 fsl_dev->drm->mode_config.max_height = 2047;
0032 fsl_dev->drm->mode_config.funcs = &fsl_dcu_drm_mode_config_funcs;
0033
0034 ret = fsl_dcu_drm_crtc_create(fsl_dev);
0035 if (ret)
0036 goto err;
0037
0038 ret = fsl_dcu_drm_encoder_create(fsl_dev, &fsl_dev->crtc);
0039 if (ret)
0040 goto err;
0041
0042 ret = fsl_dcu_create_outputs(fsl_dev);
0043 if (ret)
0044 goto err;
0045
0046 drm_mode_config_reset(fsl_dev->drm);
0047 drm_kms_helper_poll_init(fsl_dev->drm);
0048
0049 return 0;
0050
0051 err:
0052 drm_mode_config_cleanup(fsl_dev->drm);
0053 return ret;
0054 }