power: charger-manager: Fix error handling of sysfs node creation 30/122330/3
authorDongwoo Lee <dwoo08.lee@samsung.com>
Thu, 30 Mar 2017 10:40:01 +0000 (19:40 +0900)
committerDongwoo Lee <dwoo08.lee@samsung.com>
Fri, 31 Mar 2017 07:03:28 +0000 (16:03 +0900)
This fixes to remove the remaining sysfs node if probe fails, and
eliminates the redundant error log.

Change-Id: I22ba67c509d9560416b5a37b545f03b72d00be32
Signed-off-by: Dongwoo Lee <dwoo08.lee@samsung.com>
drivers/power/charger-manager.c

index ee731a20d9a67403b37c89e73662bf8c0ff4c8f5..94efef234a09093d95fd6a4edf2bfec4a6b8c956 100644 (file)
@@ -1194,8 +1194,10 @@ static int charger_manager_register_sysfs(struct charger_manager *cm)
 
        /* Create polling_ms sysfs node */
        ret = device_create_file(&cm->charger_psy->dev, &dev_attr_polling_ms);
-       if (ret)
+       if (ret) {
                pr_err("Failed to create poling_ms sysfs node (%d)\n", ret);
+               return ret;
+       }
 
        /* Create sysfs entry to control charger(regulator) */
        for (i = 0; i < desc->num_charger_regulators; i++) {
@@ -1570,11 +1572,8 @@ static int charger_manager_probe(struct platform_device *pdev)
 
        /* Register sysfs entry for charger(regulator) */
        ret = charger_manager_register_sysfs(cm);
-       if (ret < 0) {
-               dev_err(&pdev->dev,
-                       "Cannot initialize sysfs entry of regulator\n");
+       if (ret < 0)
                goto err_reg_sysfs;
-       }
 
        /* Add to the list */
        mutex_lock(&cm_list_mtx);
@@ -1607,6 +1606,9 @@ err_reg_sysfs:
                sysfs_remove_group(&cm->charger_psy->dev.kobj,
                                &charger->attr_g);
        }
+
+       device_remove_file(&cm->charger_psy->dev, &dev_attr_polling_ms);
+
 err_reg_extcon:
        for (i = 0; i < desc->num_charger_regulators; i++) {
                struct charger_regulator *charger;
@@ -1642,6 +1644,8 @@ static int charger_manager_remove(struct platform_device *pdev)
        cancel_work_sync(&setup_polling);
        cancel_delayed_work_sync(&cm_monitor_work);
 
+       device_remove_file(&cm->charger_psy->dev, &dev_attr_polling_ms);
+
        for (i = 0 ; i < desc->num_charger_regulators ; i++) {
                struct charger_regulator *charger
                                = &desc->charger_regulators[i];