summaryrefslogtreecommitdiff
path: root/drivers/extcon
diff options
context:
space:
mode:
authorStephen Boyd <stephen.boyd@linaro.org>2016-06-23 19:34:30 +0900
committerHuang, Tao <huangtao@rock-chips.com>2016-08-03 09:38:02 +0800
commit076907279ace8c14304f6a428ef5c5ed091c24ee (patch)
treebcd184ce6d40c66d9cf8de4a5c843df3911aaa72 /drivers/extcon
parent6c77332be4c0142363b4fd83c5801ba4c18d0088 (diff)
UPSTREAM: extcon: Check for incorrect connection type in notifier register
If we call extcon_register_notifier() with the wrong cable type, it blows up with an oops instead of returning an error code. Let's be nice and fail gracefully given that the consumer might not know if the cable is supported by the extcon provider. Change-Id: I6e357a6af600dac82e9b1c30499b2d0a3d58d716 Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Chris Zhong <zyw@rock-chips.com> (cherry picked from commit a05f44c89ee1151b0da3ddd43d9e57d8f15b2f20)
Diffstat (limited to 'drivers/extcon')
-rw-r--r--drivers/extcon/extcon.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index 87c9542bf9b8..3c3bdc0c2aa9 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -415,6 +415,8 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
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);
@@ -458,6 +460,8 @@ int extcon_unregister_notifier(struct extcon_dev *edev, unsigned int id,
return -EINVAL;
idx = find_cable_index_by_id(edev, id);
+ if (idx < 0)
+ return idx;
spin_lock_irqsave(&edev->lock, flags);
ret = raw_notifier_chain_unregister(&edev->nh[idx], nb);