12874c5fdSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later 2109eee2fSJianwei Wang /* 3109eee2fSJianwei Wang * Copyright 2015 Freescale Semiconductor, Inc. 4109eee2fSJianwei Wang * 5109eee2fSJianwei Wang * Freescale DCU drm device driver 6109eee2fSJianwei Wang */ 7109eee2fSJianwei Wang 8109eee2fSJianwei Wang #include <drm/drmP.h> 9109eee2fSJianwei Wang #include <drm/drm_atomic_helper.h> 10109eee2fSJianwei Wang #include <drm/drm_fb_cma_helper.h> 11ba22bf67SNoralf Trønnes #include <drm/drm_gem_framebuffer_helper.h> 12fcd70cd3SDaniel Vetter #include <drm/drm_probe_helper.h> 13109eee2fSJianwei Wang 14109eee2fSJianwei Wang #include "fsl_dcu_drm_crtc.h" 15109eee2fSJianwei Wang #include "fsl_dcu_drm_drv.h" 16109eee2fSJianwei Wang 17109eee2fSJianwei Wang static const struct drm_mode_config_funcs fsl_dcu_drm_mode_config_funcs = { 18109eee2fSJianwei Wang .atomic_check = drm_atomic_helper_check, 19109eee2fSJianwei Wang .atomic_commit = drm_atomic_helper_commit, 20ba22bf67SNoralf Trønnes .fb_create = drm_gem_fb_create, 21109eee2fSJianwei Wang }; 22109eee2fSJianwei Wang 23109eee2fSJianwei Wang int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev) 24109eee2fSJianwei Wang { 257566e247SStefan Agner int ret; 267566e247SStefan Agner 27109eee2fSJianwei Wang drm_mode_config_init(fsl_dev->drm); 28109eee2fSJianwei Wang 29109eee2fSJianwei Wang fsl_dev->drm->mode_config.min_width = 0; 30109eee2fSJianwei Wang fsl_dev->drm->mode_config.min_height = 0; 31109eee2fSJianwei Wang fsl_dev->drm->mode_config.max_width = 2031; 32109eee2fSJianwei Wang fsl_dev->drm->mode_config.max_height = 2047; 33109eee2fSJianwei Wang fsl_dev->drm->mode_config.funcs = &fsl_dcu_drm_mode_config_funcs; 34109eee2fSJianwei Wang 357566e247SStefan Agner ret = fsl_dcu_drm_crtc_create(fsl_dev); 367566e247SStefan Agner if (ret) 37b7868c68SStefan Agner goto err; 387566e247SStefan Agner 397566e247SStefan Agner ret = fsl_dcu_drm_encoder_create(fsl_dev, &fsl_dev->crtc); 407566e247SStefan Agner if (ret) 41b7868c68SStefan Agner goto err; 427566e247SStefan Agner 43924591b1SMeng Yi ret = fsl_dcu_create_outputs(fsl_dev); 447566e247SStefan Agner if (ret) 45b7868c68SStefan Agner goto err; 467566e247SStefan Agner 47109eee2fSJianwei Wang drm_mode_config_reset(fsl_dev->drm); 487566e247SStefan Agner drm_kms_helper_poll_init(fsl_dev->drm); 49109eee2fSJianwei Wang 50109eee2fSJianwei Wang return 0; 51b7868c68SStefan Agner 52b7868c68SStefan Agner err: 53b7868c68SStefan Agner drm_mode_config_cleanup(fsl_dev->drm); 547566e247SStefan Agner return ret; 55109eee2fSJianwei Wang } 56