ARM: mxc: convert device creation to use platform_device_register_full
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
01dcc60a7c
commit
0e392412f3
@ -37,59 +37,6 @@ int __init mxc_register_device(struct platform_device *pdev, void *data)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct platform_device *__init imx_add_platform_device_dmamask(
|
|
||||||
const char *name, int id,
|
|
||||||
const struct resource *res, unsigned int num_resources,
|
|
||||||
const void *data, size_t size_data, u64 dmamask)
|
|
||||||
{
|
|
||||||
int ret = -ENOMEM;
|
|
||||||
struct platform_device *pdev;
|
|
||||||
|
|
||||||
pdev = platform_device_alloc(name, id);
|
|
||||||
if (!pdev)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
if (dmamask) {
|
|
||||||
/*
|
|
||||||
* This memory isn't freed when the device is put,
|
|
||||||
* I don't have a nice idea for that though. Conceptually
|
|
||||||
* dma_mask in struct device should not be a pointer.
|
|
||||||
* See http://thread.gmane.org/gmane.linux.kernel.pci/9081
|
|
||||||
*/
|
|
||||||
pdev->dev.dma_mask =
|
|
||||||
kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL);
|
|
||||||
if (!pdev->dev.dma_mask)
|
|
||||||
/* ret is still -ENOMEM; */
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
*pdev->dev.dma_mask = dmamask;
|
|
||||||
pdev->dev.coherent_dma_mask = dmamask;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res) {
|
|
||||||
ret = platform_device_add_resources(pdev, res, num_resources);
|
|
||||||
if (ret)
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data) {
|
|
||||||
ret = platform_device_add_data(pdev, data, size_data);
|
|
||||||
if (ret)
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = platform_device_add(pdev);
|
|
||||||
if (ret) {
|
|
||||||
err:
|
|
||||||
if (dmamask)
|
|
||||||
kfree(pdev->dev.dma_mask);
|
|
||||||
platform_device_put(pdev);
|
|
||||||
return ERR_PTR(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pdev;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct device mxc_aips_bus = {
|
struct device mxc_aips_bus = {
|
||||||
.init_name = "mxc_aips",
|
.init_name = "mxc_aips",
|
||||||
.parent = &platform_bus,
|
.parent = &platform_bus,
|
||||||
|
@ -14,10 +14,22 @@
|
|||||||
extern struct device mxc_aips_bus;
|
extern struct device mxc_aips_bus;
|
||||||
extern struct device mxc_ahb_bus;
|
extern struct device mxc_ahb_bus;
|
||||||
|
|
||||||
struct platform_device *imx_add_platform_device_dmamask(
|
static inline struct platform_device *imx_add_platform_device_dmamask(
|
||||||
const char *name, int id,
|
const char *name, int id,
|
||||||
const struct resource *res, unsigned int num_resources,
|
const struct resource *res, unsigned int num_resources,
|
||||||
const void *data, size_t size_data, u64 dmamask);
|
const void *data, size_t size_data, u64 dmamask)
|
||||||
|
{
|
||||||
|
struct platform_device_info pdevinfo = {
|
||||||
|
.name = name,
|
||||||
|
.id = id,
|
||||||
|
.res = res,
|
||||||
|
.num_res = num_resources,
|
||||||
|
.data = data,
|
||||||
|
.size_data = size_data,
|
||||||
|
.dma_mask = dmamask,
|
||||||
|
};
|
||||||
|
return platform_device_register_full(&pdevinfo);
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct platform_device *imx_add_platform_device(
|
static inline struct platform_device *imx_add_platform_device(
|
||||||
const char *name, int id,
|
const char *name, int id,
|
||||||
|
Loading…
Reference in New Issue
Block a user