Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+5 −10
Original line number Original line Diff line number Diff line
@@ -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);
}
}


+7 −12
Original line number Original line Diff line number Diff line
@@ -264,29 +264,24 @@ 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_register(sharpsl_pcmcia_device);
	ret = platform_device_add(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);
}
}