/* * i.MX drm driver * * Copyright (C) 2012 Sascha Hauer, Pengutronix * * Based on Samsung Exynos code * * Copyright (c) 2011 Samsung Electronics Co., Ltd. * * 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. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include <linux/module.h> #include <drm/drmP.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_fb_cma_helper.h> #include "imx-drm.h" #define MAX_CONNECTOR 4 #define PREFERRED_BPP 16 static struct drm_fbdev_cma *fbdev_cma; static int legacyfb_depth = 16; module_param(legacyfb_depth, int, 0444); static int __init imx_fb_helper_init(void) { struct drm_device *drm = imx_drm_device_get(); if (!drm) return -EINVAL; if (legacyfb_depth != 16 && legacyfb_depth != 32) { pr_warn("i.MX legacyfb: invalid legacyfb_depth setting. defaulting to 16bpp\n"); legacyfb_depth = 16; } fbdev_cma = drm_fbdev_cma_init(drm, legacyfb_depth, drm->mode_config.num_crtc, MAX_CONNECTOR); if (IS_ERR(fbdev_cma)) { imx_drm_device_put(); return PTR_ERR(fbdev_cma); } imx_drm_fb_helper_set(fbdev_cma); return 0; } static void __exit imx_fb_helper_exit(void) { imx_drm_fb_helper_set(NULL); drm_fbdev_cma_fini(fbdev_cma); imx_drm_device_put(); } late_initcall(imx_fb_helper_init); module_exit(imx_fb_helper_exit); MODULE_DESCRIPTION("Freescale i.MX legacy fb driver"); MODULE_AUTHOR("Sascha Hauer, Pengutronix"); MODULE_LICENSE("GPL");