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/drm_atomic_helper.h> 9ba22bf67SNoralf Trønnes #include <drm/drm_gem_framebuffer_helper.h> 10fcd70cd3SDaniel Vetter #include <drm/drm_probe_helper.h> 11109eee2fSJianwei Wang 12109eee2fSJianwei Wang #include "fsl_dcu_drm_crtc.h" 13109eee2fSJianwei Wang #include "fsl_dcu_drm_drv.h" 14109eee2fSJianwei Wang 15109eee2fSJianwei Wang static const struct drm_mode_config_funcs fsl_dcu_drm_mode_config_funcs = { 16109eee2fSJianwei Wang .atomic_check = drm_atomic_helper_check, 17109eee2fSJianwei Wang .atomic_commit = drm_atomic_helper_commit, 18ba22bf67SNoralf Trønnes .fb_create = drm_gem_fb_create, 19109eee2fSJianwei Wang }; 20109eee2fSJianwei Wang fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device * fsl_dev)21109eee2fSJianwei Wangint fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev) 22109eee2fSJianwei Wang { 237566e247SStefan Agner int ret; 247566e247SStefan Agner 25109eee2fSJianwei Wang drm_mode_config_init(fsl_dev->drm); 26109eee2fSJianwei Wang 27109eee2fSJianwei Wang fsl_dev->drm->mode_config.min_width = 0; 28109eee2fSJianwei Wang fsl_dev->drm->mode_config.min_height = 0; 29109eee2fSJianwei Wang fsl_dev->drm->mode_config.max_width = 2031; 30109eee2fSJianwei Wang fsl_dev->drm->mode_config.max_height = 2047; 31109eee2fSJianwei Wang fsl_dev->drm->mode_config.funcs = &fsl_dcu_drm_mode_config_funcs; 32109eee2fSJianwei Wang 337566e247SStefan Agner ret = fsl_dcu_drm_crtc_create(fsl_dev); 347566e247SStefan Agner if (ret) 35b7868c68SStefan Agner goto err; 367566e247SStefan Agner 377566e247SStefan Agner ret = fsl_dcu_drm_encoder_create(fsl_dev, &fsl_dev->crtc); 387566e247SStefan Agner if (ret) 39b7868c68SStefan Agner goto err; 407566e247SStefan Agner 41924591b1SMeng Yi ret = fsl_dcu_create_outputs(fsl_dev); 427566e247SStefan Agner if (ret) 43b7868c68SStefan Agner goto err; 447566e247SStefan Agner 45109eee2fSJianwei Wang drm_mode_config_reset(fsl_dev->drm); 467566e247SStefan Agner drm_kms_helper_poll_init(fsl_dev->drm); 47109eee2fSJianwei Wang 48109eee2fSJianwei Wang return 0; 49b7868c68SStefan Agner 50b7868c68SStefan Agner err: 51b7868c68SStefan Agner drm_mode_config_cleanup(fsl_dev->drm); 527566e247SStefan Agner return ret; 53109eee2fSJianwei Wang } 54