Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01b4c9a1 authored by Chanwoo Choi's avatar Chanwoo Choi
Browse files

extcon: Remove potential problem when calling extcon_register_notifier()



This patch removes the potential problem of extcon_register_notifier()
when edev parameter is NULL. When edev is NULL, this function returns
the first extcon device which includes the sepecific external connector
of second paramter. But, it don't guarantee the same operation in all cases.
To remove this confusion and potential problem, this patch fixes it.

Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
parent dd3a55fc
Loading
Loading
Loading
Loading
+7 −26
Original line number Diff line number Diff line
@@ -906,10 +906,9 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
	unsigned long flags;
	int ret, idx = -EINVAL;

	if (!nb)
	if (!edev || !nb)
		return -EINVAL;

	if (edev) {
	idx = find_cable_index_by_id(edev, id);
	if (idx < 0)
		return idx;
@@ -917,24 +916,6 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
	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);

		if (idx >= 0) {
			edev = extd;
			return extcon_register_notifier(extd, id, nb);
		} else {
			ret = -ENODEV;
		}
	}

	return ret;
}