Commit b016450f authored by Richard Purdie's avatar Richard Purdie Committed by Russell King

[ARM] 3250/1: Change pxa2xx PCMCIA drivers to use platform_device_alloc

Patch from Richard Purdie

Change mainstone and sharpsl pxa2xx pcmcia drivers to use
platform_device_alloc which fixes a memory leak.
Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 49978db4
...@@ -171,27 +171,22 @@ static int __init mst_pcmcia_init(void) ...@@ -171,27 +171,22 @@ static int __init mst_pcmcia_init(void)
{ {
int ret; int ret;
mst_pcmcia_device = kzalloc(sizeof(*mst_pcmcia_device), GFP_KERNEL); mst_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
if (!mst_pcmcia_device) if (!mst_pcmcia_device)
return -ENOMEM; return -ENOMEM;
mst_pcmcia_device->name = "pxa2xx-pcmcia";
mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops; mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops;
ret = platform_device_register(mst_pcmcia_device); ret = platform_device_add(mst_pcmcia_device);
if (ret) if (ret)
kfree(mst_pcmcia_device); platform_device_put(mst_pcmcia_device);
return ret; return ret;
} }
static void __exit mst_pcmcia_exit(void) static void __exit mst_pcmcia_exit(void)
{ {
/*
* This call is supposed to free our mst_pcmcia_device.
* Unfortunately platform_device don't have a free method, and
* we can't assume it's free of any reference at this point so we
* can't free it either.
*/
platform_device_unregister(mst_pcmcia_device); platform_device_unregister(mst_pcmcia_device);
} }
......
...@@ -263,30 +263,25 @@ static int __init sharpsl_pcmcia_init(void) ...@@ -263,30 +263,25 @@ static int __init sharpsl_pcmcia_init(void)
{ {
int ret; int ret;
sharpsl_pcmcia_ops.nr=platform_scoop_config->num_devs; sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs;
sharpsl_pcmcia_device = kzalloc(sizeof(*sharpsl_pcmcia_device), GFP_KERNEL); sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
if (!sharpsl_pcmcia_device) if (!sharpsl_pcmcia_device)
return -ENOMEM; return -ENOMEM;
sharpsl_pcmcia_device->name = "pxa2xx-pcmcia";
sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops; sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops;
sharpsl_pcmcia_device->dev.parent=platform_scoop_config->devs[0].dev; sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev;
ret = platform_device_add(sharpsl_pcmcia_device);
ret = platform_device_register(sharpsl_pcmcia_device);
if (ret) if (ret)
kfree(sharpsl_pcmcia_device); platform_device_put(sharpsl_pcmcia_device);
return ret; return ret;
} }
static void __exit sharpsl_pcmcia_exit(void) static void __exit sharpsl_pcmcia_exit(void)
{ {
/*
* This call is supposed to free our sharpsl_pcmcia_device.
* Unfortunately platform_device don't have a free method, and
* we can't assume it's free of any reference at this point so we
* can't free it either.
*/
platform_device_unregister(sharpsl_pcmcia_device); platform_device_unregister(sharpsl_pcmcia_device);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment