| /* | 
 |  * 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. | 
 |  */ | 
 |  | 
 | /* | 
 |  * 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. | 
 |  */ | 
 |  | 
 | #include <linux/module.h> | 
 | #include <linux/platform_device.h> | 
 | #include "cm2xxx_3xxx.h" | 
 | #include "prm2xxx_3xxx.h" | 
 | #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 | 
 | 	.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, | 
 | }; | 
 |  | 
 | 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"); |