[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>

authored by Richard Purdie and committed by Russell King b016450f 49978db4

+12 -22
+5 -10
drivers/pcmcia/pxa2xx_mainstone.c
··· 171 171 { 172 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 175 if (!mst_pcmcia_device) 176 176 return -ENOMEM; 177 - mst_pcmcia_device->name = "pxa2xx-pcmcia"; 177 + 178 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 182 if (ret) 182 - kfree(mst_pcmcia_device); 183 + platform_device_put(mst_pcmcia_device); 183 184 184 185 return ret; 185 186 } 186 187 187 188 static 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 190 platform_device_unregister(mst_pcmcia_device); 196 191 } 197 192
+7 -12
drivers/pcmcia/pxa2xx_sharpsl.c
··· 263 263 { 264 264 int ret; 265 265 266 - sharpsl_pcmcia_ops.nr=platform_scoop_config->num_devs; 267 - sharpsl_pcmcia_device = kzalloc(sizeof(*sharpsl_pcmcia_device), GFP_KERNEL); 266 + sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs; 267 + sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); 268 + 268 269 if (!sharpsl_pcmcia_device) 269 270 return -ENOMEM; 270 271 271 - sharpsl_pcmcia_device->name = "pxa2xx-pcmcia"; 272 272 sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops; 273 - sharpsl_pcmcia_device->dev.parent=platform_scoop_config->devs[0].dev; 273 + sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev; 274 274 275 - ret = platform_device_register(sharpsl_pcmcia_device); 275 + ret = platform_device_add(sharpsl_pcmcia_device); 276 + 276 277 if (ret) 277 - kfree(sharpsl_pcmcia_device); 278 + platform_device_put(sharpsl_pcmcia_device); 278 279 279 280 return ret; 280 281 } 281 282 282 283 static void __exit sharpsl_pcmcia_exit(void) 283 284 { 284 - /* 285 - * This call is supposed to free our sharpsl_pcmcia_device. 286 - * Unfortunately platform_device don't have a free method, and 287 - * we can't assume it's free of any reference at this point so we 288 - * can't free it either. 289 - */ 290 285 platform_device_unregister(sharpsl_pcmcia_device); 291 286 } 292 287