mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 00:39:48 +00:00
ARM: OMAP: Fix dmaengine init for multiplatform
Otherwise omap dmaengine will initialized when booted on other SoCs. Fix this by initializing the platform device in arch/arm/*omap*/dma.c instead. Cc: Russell King <linux@arm.linux.org.uk> Cc: Dan Williams <djbw@fb.com> Cc: Vinod Koul <vinod.koul@intel.com> Tested-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
a6cf912c60
commit
be1f94812c
3 changed files with 36 additions and 23 deletions
|
@ -24,7 +24,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/omap-dma.h>
|
#include <linux/omap-dma.h>
|
||||||
#include <mach/tc.h>
|
#include <mach/tc.h>
|
||||||
|
|
||||||
|
@ -270,11 +270,17 @@ static u32 configure_dma_errata(void)
|
||||||
return errata;
|
return errata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct platform_device_info omap_dma_dev_info = {
|
||||||
|
.name = "omap-dma-engine",
|
||||||
|
.id = -1,
|
||||||
|
.dma_mask = DMA_BIT_MASK(32),
|
||||||
|
};
|
||||||
|
|
||||||
static int __init omap1_system_dma_init(void)
|
static int __init omap1_system_dma_init(void)
|
||||||
{
|
{
|
||||||
struct omap_system_dma_plat_info *p;
|
struct omap_system_dma_plat_info *p;
|
||||||
struct omap_dma_dev_attr *d;
|
struct omap_dma_dev_attr *d;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev, *dma_pdev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pdev = platform_device_alloc("omap_dma_system", 0);
|
pdev = platform_device_alloc("omap_dma_system", 0);
|
||||||
|
@ -380,8 +386,16 @@ static int __init omap1_system_dma_init(void)
|
||||||
dma_common_ch_start = CPC;
|
dma_common_ch_start = CPC;
|
||||||
dma_common_ch_end = COLOR;
|
dma_common_ch_end = COLOR;
|
||||||
|
|
||||||
|
dma_pdev = platform_device_register_full(&omap_dma_dev_info);
|
||||||
|
if (IS_ERR(dma_pdev)) {
|
||||||
|
ret = PTR_ERR(dma_pdev);
|
||||||
|
goto exit_release_pdev;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
exit_release_pdev:
|
||||||
|
platform_device_del(pdev);
|
||||||
exit_release_chan:
|
exit_release_chan:
|
||||||
kfree(d->chan);
|
kfree(d->chan);
|
||||||
exit_release_d:
|
exit_release_d:
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/omap-dma.h>
|
#include <linux/omap-dma.h>
|
||||||
|
|
||||||
#include "soc.h"
|
#include "soc.h"
|
||||||
|
@ -288,9 +288,26 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct platform_device_info omap_dma_dev_info = {
|
||||||
|
.name = "omap-dma-engine",
|
||||||
|
.id = -1,
|
||||||
|
.dma_mask = DMA_BIT_MASK(32),
|
||||||
|
};
|
||||||
|
|
||||||
static int __init omap2_system_dma_init(void)
|
static int __init omap2_system_dma_init(void)
|
||||||
{
|
{
|
||||||
return omap_hwmod_for_each_by_class("dma",
|
struct platform_device *pdev;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
res = omap_hwmod_for_each_by_class("dma",
|
||||||
omap2_system_dma_init_dev, NULL);
|
omap2_system_dma_init_dev, NULL);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
|
||||||
|
pdev = platform_device_register_full(&omap_dma_dev_info);
|
||||||
|
if (IS_ERR(pdev))
|
||||||
|
return PTR_ERR(pdev);
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
omap_arch_initcall(omap2_system_dma_init);
|
omap_arch_initcall(omap2_system_dma_init);
|
||||||
|
|
|
@ -661,32 +661,14 @@ bool omap_dma_filter_fn(struct dma_chan *chan, void *param)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(omap_dma_filter_fn);
|
EXPORT_SYMBOL_GPL(omap_dma_filter_fn);
|
||||||
|
|
||||||
static struct platform_device *pdev;
|
|
||||||
|
|
||||||
static const struct platform_device_info omap_dma_dev_info = {
|
|
||||||
.name = "omap-dma-engine",
|
|
||||||
.id = -1,
|
|
||||||
.dma_mask = DMA_BIT_MASK(32),
|
|
||||||
};
|
|
||||||
|
|
||||||
static int omap_dma_init(void)
|
static int omap_dma_init(void)
|
||||||
{
|
{
|
||||||
int rc = platform_driver_register(&omap_dma_driver);
|
return platform_driver_register(&omap_dma_driver);
|
||||||
|
|
||||||
if (rc == 0) {
|
|
||||||
pdev = platform_device_register_full(&omap_dma_dev_info);
|
|
||||||
if (IS_ERR(pdev)) {
|
|
||||||
platform_driver_unregister(&omap_dma_driver);
|
|
||||||
rc = PTR_ERR(pdev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
subsys_initcall(omap_dma_init);
|
subsys_initcall(omap_dma_init);
|
||||||
|
|
||||||
static void __exit omap_dma_exit(void)
|
static void __exit omap_dma_exit(void)
|
||||||
{
|
{
|
||||||
platform_device_unregister(pdev);
|
|
||||||
platform_driver_unregister(&omap_dma_driver);
|
platform_driver_unregister(&omap_dma_driver);
|
||||||
}
|
}
|
||||||
module_exit(omap_dma_exit);
|
module_exit(omap_dma_exit);
|
||||||
|
|
Loading…
Reference in a new issue