From: "Antonino A. Daplas" Update platform code to dynamically allocate the platform device Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- drivers/video/vfb.c | 29 +++++++++++++---------------- 1 files changed, 13 insertions(+), 16 deletions(-) diff -puN drivers/video/vfb.c~vfb-update-platform-code drivers/video/vfb.c --- devel/drivers/video/vfb.c~vfb-update-platform-code 2006-04-29 00:04:37.000000000 -0700 +++ devel-akpm/drivers/video/vfb.c 2006-04-29 00:04:37.000000000 -0700 @@ -398,12 +398,6 @@ static int __init vfb_setup(char *option * Initialisation */ -static void vfb_platform_release(struct device *device) -{ - // This is called when the reference count goes to zero. - dev_err(device, "This driver is broken, please bug the authors so they will fix it.\n"); -} - static int __init vfb_probe(struct platform_device *dev) { struct fb_info *info; @@ -482,13 +476,7 @@ static struct platform_driver vfb_driver }, }; -static struct platform_device vfb_device = { - .name = "vfb", - .id = 0, - .dev = { - .release = vfb_platform_release, - } -}; +static struct platform_device *vfb_device; static int __init vfb_init(void) { @@ -508,10 +496,19 @@ static int __init vfb_init(void) ret = platform_driver_register(&vfb_driver); if (!ret) { - ret = platform_device_register(&vfb_device); - if (ret) + vfb_device = platform_device_alloc("vfb", 0); + + if (vfb_device) + ret = platform_device_add(vfb_device); + else + ret = -ENOMEM; + + if (ret) { + platform_device_put(vfb_device); platform_driver_unregister(&vfb_driver); + } } + return ret; } @@ -520,7 +517,7 @@ module_init(vfb_init); #ifdef MODULE static void __exit vfb_exit(void) { - platform_device_unregister(&vfb_device); + platform_device_unregister(vfb_device); platform_driver_unregister(&vfb_driver); } _