1/* 2 * i.MX drm driver 3 * 4 * Copyright (C) 2012 Sascha Hauer, Pengutronix 5 * 6 * Based on Samsung Exynos code 7 * 8 * Copyright (c) 2011 Samsung Electronics Co., Ltd. 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License 12 * as published by the Free Software Foundation; either version 2 13 * of the License, or (at your option) any later version. 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 */ 20#include <linux/module.h> 21#include <drm/drmP.h> 22#include <drm/drm_crtc.h> 23#include <drm/drm_crtc_helper.h> 24#include <drm/drm_fb_cma_helper.h> 25 26#include "imx-drm.h" 27 28#define MAX_CONNECTOR 4 29#define PREFERRED_BPP 16 30 31static struct drm_fbdev_cma *fbdev_cma; 32 33static int legacyfb_depth = 16; 34 35module_param(legacyfb_depth, int, 0444); 36 37static int __init imx_fb_helper_init(void) 38{ 39 struct drm_device *drm = imx_drm_device_get(); 40 41 if (!drm) 42 return -EINVAL; 43 44 if (legacyfb_depth != 16 && legacyfb_depth != 32) { 45 pr_warn("i.MX legacyfb: invalid legacyfb_depth setting. defaulting to 16bpp\n"); 46 legacyfb_depth = 16; 47 } 48 49 fbdev_cma = drm_fbdev_cma_init(drm, legacyfb_depth, 50 drm->mode_config.num_crtc, MAX_CONNECTOR); 51 52 if (IS_ERR(fbdev_cma)) { 53 imx_drm_device_put(); 54 return PTR_ERR(fbdev_cma); 55 } 56 57 imx_drm_fb_helper_set(fbdev_cma); 58 59 return 0; 60} 61 62static void __exit imx_fb_helper_exit(void) 63{ 64 imx_drm_fb_helper_set(NULL); 65 drm_fbdev_cma_fini(fbdev_cma); 66 imx_drm_device_put(); 67} 68 69late_initcall(imx_fb_helper_init); 70module_exit(imx_fb_helper_exit); 71 72MODULE_DESCRIPTION("Freescale i.MX legacy fb driver"); 73MODULE_AUTHOR("Sascha Hauer, Pengutronix"); 74MODULE_LICENSE("GPL"); 75