提交 bc1aabad 编写于 作者: R Robert Baldyga 提交者: Chanwoo Choi

extcon: usb-gpio: register extcon device before IRQ registration

IRQ handler touches info->edev, so if interrupt occurs before extcon
device initialization it can cause NULL pointer dereference. Doing extcon
initialization before IRQ handler registration fixes this problem.
Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
Acked-by: NRoger Quadros <rogerq@ti.com>
Signed-off-by: NChanwoo Choi <cw00.choi@samsung.com>
上级 b787f68c
...@@ -119,6 +119,18 @@ static int usb_extcon_probe(struct platform_device *pdev) ...@@ -119,6 +119,18 @@ static int usb_extcon_probe(struct platform_device *pdev)
return PTR_ERR(info->id_gpiod); return PTR_ERR(info->id_gpiod);
} }
info->edev = devm_extcon_dev_allocate(dev, usb_extcon_cable);
if (IS_ERR(info->edev)) {
dev_err(dev, "failed to allocate extcon device\n");
return -ENOMEM;
}
ret = devm_extcon_dev_register(dev, info->edev);
if (ret < 0) {
dev_err(dev, "failed to register extcon device\n");
return ret;
}
ret = gpiod_set_debounce(info->id_gpiod, ret = gpiod_set_debounce(info->id_gpiod,
USB_GPIO_DEBOUNCE_MS * 1000); USB_GPIO_DEBOUNCE_MS * 1000);
if (ret < 0) if (ret < 0)
...@@ -142,18 +154,6 @@ static int usb_extcon_probe(struct platform_device *pdev) ...@@ -142,18 +154,6 @@ static int usb_extcon_probe(struct platform_device *pdev)
return ret; return ret;
} }
info->edev = devm_extcon_dev_allocate(dev, usb_extcon_cable);
if (IS_ERR(info->edev)) {
dev_err(dev, "failed to allocate extcon device\n");
return -ENOMEM;
}
ret = devm_extcon_dev_register(dev, info->edev);
if (ret < 0) {
dev_err(dev, "failed to register extcon device\n");
return ret;
}
platform_set_drvdata(pdev, info); platform_set_drvdata(pdev, info);
device_init_wakeup(dev, 1); device_init_wakeup(dev, 1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册