2009-01-28 21:32:04 +02:00
/*
2010-04-22 23:26:08 +00:00
* omap iommu : omap device registration
2009-01-28 21:32:04 +02:00
*
* Copyright ( C ) 2008 - 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 .
*/
2011-11-07 12:27:10 -08:00
# include <linux/module.h>
2009-01-28 21:32:04 +02:00
# include <linux/platform_device.h>
2012-11-19 19:05:50 -06:00
# include <linux/err.h>
# include <linux/slab.h>
2009-01-28 21:32:04 +02:00
2012-11-02 12:24:14 -07:00
# include <linux/platform_data/iommu-omap.h>
2013-02-09 19:20:57 -08:00
# include "soc.h"
2012-12-20 11:50:34 -08:00
# include "omap_hwmod.h"
# include "omap_device.h"
2012-08-27 17:43:01 -07:00
2012-11-19 19:05:50 -06:00
static int __init omap_iommu_dev_init ( struct omap_hwmod * oh , void * unused )
2009-01-28 21:32:04 +02:00
{
2012-11-19 19:05:50 -06:00
struct platform_device * pdev ;
struct iommu_platform_data * pdata ;
struct omap_mmu_dev_attr * a = ( struct omap_mmu_dev_attr * ) oh - > dev_attr ;
static int i ;
pdata = kzalloc ( sizeof ( * pdata ) , GFP_KERNEL ) ;
if ( ! pdata )
return - ENOMEM ;
pdata - > name = oh - > name ;
pdata - > nr_tlb_entries = a - > nr_tlb_entries ;
pdata - > da_start = a - > da_start ;
pdata - > da_end = a - > da_end ;
if ( oh - > rst_lines_cnt = = 1 ) {
pdata - > reset_name = oh - > rst_lines - > name ;
pdata - > assert_reset = omap_device_assert_hardreset ;
pdata - > deassert_reset = omap_device_deassert_hardreset ;
}
2009-01-28 21:32:04 +02:00
2013-01-26 00:48:53 -07:00
pdev = omap_device_build ( " omap-iommu " , i , oh , pdata , sizeof ( * pdata ) ) ;
2010-04-22 23:26:09 +00:00
2012-11-19 19:05:50 -06:00
kfree ( pdata ) ;
2009-01-28 21:32:04 +02:00
2012-11-19 19:05:50 -06:00
if ( IS_ERR ( pdev ) ) {
pr_err ( " %s: device build err: %ld \n " , __func__ , PTR_ERR ( pdev ) ) ;
return PTR_ERR ( pdev ) ;
}
2009-01-28 21:32:04 +02:00
2012-11-19 19:05:50 -06:00
i + + ;
2009-01-28 21:32:04 +02:00
return 0 ;
2012-11-19 19:05:50 -06:00
}
2009-01-28 21:32:04 +02:00
2012-11-19 19:05:50 -06:00
static int __init omap_iommu_init ( void )
{
return omap_hwmod_for_each_by_class ( " mmu " , omap_iommu_dev_init , NULL ) ;
2009-01-28 21:32:04 +02:00
}
2012-03-04 12:01:11 +02:00
/* must be ready before omap3isp is probed */
2013-01-11 11:24:18 -08:00
omap_subsys_initcall ( omap_iommu_init ) ;
2009-01-28 21:32:04 +02:00
2010-04-22 23:26:08 +00:00
static void __exit omap_iommu_exit ( void )
2009-01-28 21:32:04 +02:00
{
2012-11-19 19:05:50 -06:00
/* Do nothing */
2009-01-28 21:32:04 +02:00
}
2010-04-22 23:26:08 +00:00
module_exit ( omap_iommu_exit ) ;
2009-01-28 21:32:04 +02:00
MODULE_AUTHOR ( " Hiroshi DOYU " ) ;
2010-04-22 23:26:08 +00:00
MODULE_DESCRIPTION ( " omap iommu: omap device registration " ) ;
2009-01-28 21:32:04 +02:00
MODULE_LICENSE ( " GPL v2 " ) ;