2010-10-04 20:09:14 +04:00
/*
* TI ' s OMAP DSP platform device registration
*
* Copyright ( C ) 2005 - 2006 Texas Instruments , Inc .
* Copyright ( C ) 2009 Nokia Corporation
*
* Written by Hiroshi DOYU < Hiroshi . DOYU @ nokia . com >
*
* 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 .
*/
2010-12-22 01:30:55 +03:00
/*
* XXX The function pointers to the PRM / CM functions are incorrect and
* should be removed . No device driver should be changing PRM / CM bits
* directly ; that ' s a layering violation - - those bits are the responsibility
* of the OMAP PM core code .
*/
2011-11-08 00:27:10 +04:00
# include <linux/module.h>
2010-10-04 20:09:14 +04:00
# include <linux/platform_device.h>
2010-12-22 01:30:55 +03:00
# include "cm2xxx_3xxx.h"
# include "prm2xxx_3xxx.h"
2010-10-04 20:09:14 +04:00
# ifdef CONFIG_BRIDGE_DVFS
# include <plat/omap-pm.h>
# endif
# include <plat/dsp.h>
extern phys_addr_t omap_dsp_get_mempool_base ( void ) ;
static struct platform_device * omap_dsp_pdev ;
static struct omap_dsp_platform_data omap_dsp_pdata __initdata = {
# ifdef CONFIG_BRIDGE_DVFS
. dsp_set_min_opp = omap_pm_dsp_set_min_opp ,
. dsp_get_opp = omap_pm_dsp_get_opp ,
. cpu_set_freq = omap_pm_cpu_set_freq ,
. cpu_get_freq = omap_pm_cpu_get_freq ,
# endif
2010-12-22 07:05:14 +03:00
. dsp_prm_read = omap2_prm_read_mod_reg ,
. dsp_prm_write = omap2_prm_write_mod_reg ,
. dsp_prm_rmw_bits = omap2_prm_rmw_mod_reg_bits ,
. dsp_cm_read = omap2_cm_read_mod_reg ,
. dsp_cm_write = omap2_cm_write_mod_reg ,
. dsp_cm_rmw_bits = omap2_cm_rmw_mod_reg_bits ,
2010-10-04 20:09:14 +04:00
} ;
static int __init omap_dsp_init ( void )
{
struct platform_device * pdev ;
int err = - ENOMEM ;
struct omap_dsp_platform_data * pdata = & omap_dsp_pdata ;
pdata - > phys_mempool_base = omap_dsp_get_mempool_base ( ) ;
if ( pdata - > phys_mempool_base ) {
pdata - > phys_mempool_size = CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE ;
pr_info ( " %s: %x bytes @ %x \n " , __func__ ,
pdata - > phys_mempool_size , pdata - > phys_mempool_base ) ;
}
pdev = platform_device_alloc ( " omap-dsp " , - 1 ) ;
if ( ! pdev )
goto err_out ;
err = platform_device_add_data ( pdev , pdata , sizeof ( * pdata ) ) ;
if ( err )
goto err_out ;
err = platform_device_add ( pdev ) ;
if ( err )
goto err_out ;
omap_dsp_pdev = pdev ;
return 0 ;
err_out :
platform_device_put ( pdev ) ;
return err ;
}
module_init ( omap_dsp_init ) ;
static void __exit omap_dsp_exit ( void )
{
platform_device_unregister ( omap_dsp_pdev ) ;
}
module_exit ( omap_dsp_exit ) ;
MODULE_AUTHOR ( " Hiroshi DOYU " ) ;
MODULE_DESCRIPTION ( " TI's OMAP DSP platform device registration " ) ;
MODULE_LICENSE ( " GPL " ) ;