2009-11-03 11:23:50 +02:00
/*
* linux / drivers / video / omap2 / dss / core . c
*
* Copyright ( C ) 2009 Nokia Corporation
* Author : Tomi Valkeinen < tomi . valkeinen @ nokia . com >
*
* Some code and ideas taken from drivers / video / omap / driver
* by Imre Deak .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*
* 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 .
*
* You should have received a copy of the GNU General Public License along with
* this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# define DSS_SUBSYS_NAME "CORE"
# include <linux/kernel.h>
# include <linux/module.h>
# include <linux/platform_device.h>
2016-05-27 14:40:49 +03:00
# include "omapdss.h"
2009-11-03 11:23:50 +02:00
# include "dss.h"
/* INIT */
2012-03-02 17:37:53 +02:00
static int ( * dss_output_drv_reg_funcs [ ] ) ( void ) __initdata = {
2015-06-04 14:44:49 +03:00
dss_init_platform_driver ,
dispc_init_platform_driver ,
2012-10-22 15:57:25 +03:00
# ifdef CONFIG_OMAP2_DSS_DSI
dsi_init_platform_driver ,
# endif
2012-03-02 17:37:53 +02:00
# ifdef CONFIG_OMAP2_DSS_VENC
venc_init_platform_driver ,
# endif
# ifdef CONFIG_OMAP4_DSS_HDMI
2013-09-12 17:45:57 +05:30
hdmi4_init_platform_driver ,
2012-03-02 17:37:53 +02:00
# endif
2014-03-13 12:44:14 +02:00
# ifdef CONFIG_OMAP5_DSS_HDMI
hdmi5_init_platform_driver ,
# endif
2012-03-02 17:37:53 +02:00
} ;
2015-06-04 14:44:49 +03:00
static void ( * dss_output_drv_unreg_funcs [ ] ) ( void ) = {
2015-06-04 14:31:36 +03:00
# ifdef CONFIG_OMAP5_DSS_HDMI
hdmi5_uninit_platform_driver ,
2012-10-22 15:57:25 +03:00
# endif
2015-06-04 14:31:36 +03:00
# ifdef CONFIG_OMAP4_DSS_HDMI
hdmi4_uninit_platform_driver ,
2012-03-02 17:37:53 +02:00
# endif
2015-06-04 14:31:36 +03:00
# ifdef CONFIG_OMAP2_DSS_VENC
venc_uninit_platform_driver ,
2012-03-02 17:37:53 +02:00
# endif
2015-06-04 14:31:36 +03:00
# ifdef CONFIG_OMAP2_DSS_DSI
dsi_uninit_platform_driver ,
2014-03-13 12:44:14 +02:00
# endif
2015-06-04 14:44:49 +03:00
dispc_uninit_platform_driver ,
dss_uninit_platform_driver ,
2012-03-02 17:37:53 +02:00
} ;
2017-08-11 16:49:08 +03:00
static struct platform_device * omap_drm_device ;
2012-11-20 11:58:47 +02:00
static int __init omap_dss_init ( void )
2012-03-19 15:05:02 +02:00
{
int r ;
2012-03-02 17:37:53 +02:00
int i ;
2012-03-19 15:05:02 +02:00
2012-03-02 17:37:53 +02:00
for ( i = 0 ; i < ARRAY_SIZE ( dss_output_drv_reg_funcs ) ; + + i ) {
r = dss_output_drv_reg_funcs [ i ] ( ) ;
2015-06-04 14:44:49 +03:00
if ( r )
goto err_reg ;
2012-03-19 15:05:02 +02:00
}
2017-08-16 12:43:55 +03:00
omap_drm_device = platform_device_register_simple ( " omapdrm " , 0 , NULL , 0 ) ;
2017-08-11 16:49:08 +03:00
if ( IS_ERR ( omap_drm_device ) ) {
r = PTR_ERR ( omap_drm_device ) ;
goto err_reg ;
}
2012-03-19 15:05:02 +02:00
return 0 ;
2015-06-04 14:44:49 +03:00
err_reg :
for ( i = ARRAY_SIZE ( dss_output_drv_reg_funcs ) - i ;
i < ARRAY_SIZE ( dss_output_drv_reg_funcs ) ;
+ + i )
dss_output_drv_unreg_funcs [ i ] ( ) ;
2012-03-19 15:05:02 +02:00
return r ;
}
2012-11-20 11:58:47 +02:00
static void __exit omap_dss_exit ( void )
2012-03-19 15:05:02 +02:00
{
2012-03-02 17:37:53 +02:00
int i ;
2017-08-11 16:49:08 +03:00
platform_device_unregister ( omap_drm_device ) ;
2015-06-04 14:44:49 +03:00
for ( i = 0 ; i < ARRAY_SIZE ( dss_output_drv_unreg_funcs ) ; + + i )
dss_output_drv_unreg_funcs [ i ] ( ) ;
2012-03-19 15:05:02 +02:00
}
2009-11-03 11:23:50 +02:00
module_init ( omap_dss_init ) ;
module_exit ( omap_dss_exit ) ;
MODULE_AUTHOR ( " Tomi Valkeinen <tomi.valkeinen@nokia.com> " ) ;
MODULE_DESCRIPTION ( " OMAP2/3 Display Subsystem " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;