|
@@ -906,35 +906,16 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
int ret, idx = -EINVAL;
|
|
int ret, idx = -EINVAL;
|
|
|
|
|
|
- if (!nb)
|
|
|
|
|
|
+ if (!edev || !nb)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
- if (edev) {
|
|
|
|
- idx = find_cable_index_by_id(edev, id);
|
|
|
|
- if (idx < 0)
|
|
|
|
- return idx;
|
|
|
|
-
|
|
|
|
- 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;
|
|
return ret;
|
|
}
|
|
}
|