aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/pxa2xx_mainstone.c
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2006-01-10 12:16:12 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-01-10 12:16:12 -0500
commitb016450f9f603210239e1a91e3c28f17c310dcc7 (patch)
treef98c21ce43fc8826dbd006216db0c70cb3901e0d /drivers/pcmcia/pxa2xx_mainstone.c
parent49978db4f39950cdaaf967e1aad4a324bdc2e180 (diff)
[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: Richard Purdie <rpurdie@rpsys.net> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/pcmcia/pxa2xx_mainstone.c')
-rw-r--r--drivers/pcmcia/pxa2xx_mainstone.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/pcmcia/pxa2xx_mainstone.c b/drivers/pcmcia/pxa2xx_mainstone.c
index 5d957dfe23d9..fda06941e730 100644
--- a/drivers/pcmcia/pxa2xx_mainstone.c
+++ b/drivers/pcmcia/pxa2xx_mainstone.c
@@ -171,27 +171,22 @@ static int __init mst_pcmcia_init(void)
171{ 171{
172 int ret; 172 int ret;
173 173
174 mst_pcmcia_device = kzalloc(sizeof(*mst_pcmcia_device), GFP_KERNEL); 174 mst_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
175 if (!mst_pcmcia_device) 175 if (!mst_pcmcia_device)
176 return -ENOMEM; 176 return -ENOMEM;
177 mst_pcmcia_device->name = "pxa2xx-pcmcia"; 177
178 mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops; 178 mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops;
179 179
180 ret = platform_device_register(mst_pcmcia_device); 180 ret = platform_device_add(mst_pcmcia_device);
181
181 if (ret) 182 if (ret)
182 kfree(mst_pcmcia_device); 183 platform_device_put(mst_pcmcia_device);
183 184
184 return ret; 185 return ret;
185} 186}
186 187
187static void __exit mst_pcmcia_exit(void) 188static void __exit mst_pcmcia_exit(void)
188{ 189{
189 /*
190 * This call is supposed to free our mst_pcmcia_device.
191 * Unfortunately platform_device don't have a free method, and
192 * we can't assume it's free of any reference at this point so we
193 * can't free it either.
194 */
195 platform_device_unregister(mst_pcmcia_device); 190 platform_device_unregister(mst_pcmcia_device);
196} 191}
197 192