In order to properly clean up all resources allocated by the isp-mod driver, the ISP platform device needs to be unregistered when the omap34xxcam driver is unloaded. Move the ISP platform device registration from omap_init_camera to omap34xxcam_probe. This fixes many memory leaks when unloading and reloading the omap34xxcam driver. Platform device registration should be moved back to omap_init_camera when (if) the omap34xxcam and isp-mod drivers will be merged. Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> --- arch/arm/mach-omap2/devices.c | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index ae465ce..61e5136 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -144,17 +144,28 @@ static struct resource omap3isp_resources[] = { } }; +static void omap3isp_release(struct device *dev) +{ + /* Zero the device structure to avoid re-initialization complaints from + * kobject when the device will be re-registered. + */ + memset(dev, 0, sizeof(*dev)); + dev->release = omap3isp_release; +} + struct platform_device omap3isp_device = { .name = "omap3isp", .id = -1, .num_resources = ARRAY_SIZE(omap3isp_resources), .resource = omap3isp_resources, + .dev = { + .release = omap3isp_release, + }, }; EXPORT_SYMBOL_GPL(omap3isp_device); static inline void omap_init_camera(void) { - platform_device_register(&omap3isp_device); } #else static inline void omap_init_camera(void) -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html