Implement extcon_register_notifier's support for a NULL edev argument
using the new extcon_get_extcon_dev_by_cable_id function.

Signed-off-by: Hans de Goede <[email protected]>
---
 drivers/extcon/extcon.c | 35 +++++++++++------------------------
 1 file changed, 11 insertions(+), 24 deletions(-)

diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index 505c272..2816187 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -933,32 +933,19 @@ int extcon_register_notifier(struct extcon_dev *edev, 
unsigned int id,
        if (!nb)
                return -EINVAL;
 
-       if (edev) {
-               idx = find_cable_index_by_id(edev, id);
-               if (idx < 0)
-                       return idx;
+       if (!edev) {
+               edev = extcon_get_extcon_dev_by_cable_id(id);
+               if (!edev)
+                       return -ENODEV;
+       }
 
-               spin_lock_irqsave(&edev->lock, flags);
-               ret = raw_notifier_chain_register(&edev->nh[idx], nb);
-               spin_unlock_irqrestore(&edev->lock, flags);
-       } else {
-               struct extcon_dev *extd;
-
-               mutex_lock(&extcon_dev_list_lock);
-               list_for_each_entry(extd, &extcon_dev_list, entry) {
-                       idx = find_cable_index_by_id(extd, id);
-                       if (idx >= 0)
-                               break;
-               }
-               mutex_unlock(&extcon_dev_list_lock);
+       idx = find_cable_index_by_id(edev, id);
+       if (idx < 0)
+               return idx;
 
-               if (idx >= 0) {
-                       edev = extd;
-                       return extcon_register_notifier(extd, id, nb);
-               } else {
-                       ret = -ENODEV;
-               }
-       }
+       spin_lock_irqsave(&edev->lock, flags);
+       ret = raw_notifier_chain_register(&edev->nh[idx], nb);
+       spin_unlock_irqrestore(&edev->lock, flags);
 
        return ret;
 }
-- 
2.9.3

Reply via email to