From 2489007e7d740ccbc3e0a202914e243ad5178787 Mon Sep 17 00:00:00 2001 From: codeworkx Date: Sat, 22 Sep 2012 09:48:20 +0200 Subject: merge opensource jb u5 Change-Id: I1aaec157aa196f3448eff8636134fce89a814cf2 --- drivers/video/samsung/extension/s5p_fimd_ext.c | 45 ++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'drivers/video/samsung/extension/s5p_fimd_ext.c') diff --git a/drivers/video/samsung/extension/s5p_fimd_ext.c b/drivers/video/samsung/extension/s5p_fimd_ext.c index 0c197b6..d6d56f1 100644 --- a/drivers/video/samsung/extension/s5p_fimd_ext.c +++ b/drivers/video/samsung/extension/s5p_fimd_ext.c @@ -26,6 +26,7 @@ struct s5p_fimd_ext { struct device *dev; }; +static struct class_compat *s5p_fimd_ext_cls; static LIST_HEAD(fimd_ext_list); static DEFINE_MUTEX(fimd_ext_lock); @@ -135,14 +136,25 @@ int s5p_fimd_ext_device_register(struct s5p_fimd_ext_device *fx_dev) } ret = device_add(&fx_dev->dev); - if (ret == 0) { - mutex_lock(&fimd_ext_lock); - list_add_tail(&fimd_ext->list, &fimd_ext_list); - mutex_unlock(&fimd_ext_lock); + if (ret) + goto err_clear; - return ret; + mutex_lock(&fimd_ext_lock); + list_add_tail(&fimd_ext->list, &fimd_ext_list); + mutex_unlock(&fimd_ext_lock); + + ret = class_compat_create_link(s5p_fimd_ext_cls, &fx_dev->dev, + fx_dev->dev.parent); + if (ret) { + dev_err(&fx_dev->dev, "failed to create compatibility link"); + goto err_del; } + return 0; + +err_del: + list_del(&fimd_ext->list); +err_clear: kfree(fimd_ext); return ret; @@ -194,14 +206,33 @@ struct s5p_fimd_ext_device *s5p_fimd_ext_find_device(const char *name) static int __init s5p_fimd_ext_init(void) { - return bus_register(&s5p_fimd_ext_bus_type); + int ret; + + ret = bus_register(&s5p_fimd_ext_bus_type); + if (ret) + return ret; + + s5p_fimd_ext_cls = class_compat_register("extension"); + if (!s5p_fimd_ext_cls) { + ret = -ENOMEM; + goto err_unreg; + } + + return 0; + +err_unreg: + bus_unregister(&s5p_fimd_ext_bus_type); + + return ret; } static void __exit s5p_fimd_ext_exit(void) { + class_compat_unregister(s5p_fimd_ext_cls); + bus_unregister(&s5p_fimd_ext_bus_type); } -early_initcall(s5p_fimd_ext_init); +postcore_initcall(s5p_fimd_ext_init); module_exit(s5p_fimd_ext_exit); MODULE_AUTHOR("InKi Dae "); -- cgit v1.1