diff options
author | Matthias Brugger <matthias.bgg@gmail.com> | 2016-11-18 05:06:10 -0500 |
---|---|---|
committer | CK Hu <ck.hu@mediatek.com> | 2016-11-24 01:53:15 -0500 |
commit | 5ad45307d990020b25a8f7486178b6e033790f70 (patch) | |
tree | 16f34af8e621e75a30967825705e0252f4946e8f | |
parent | f6c872397028837c80685ee96c4011c62abe9a73 (diff) |
drm/mediatek: fix null pointer dereference
The probe function requests the interrupt before initializing
the ddp component. Which leads to a null pointer dereference at boot.
Fix this by requesting the interrput after all components got
initialized properly.
Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC
MT8173.")
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
Change-Id: I57193a7ab554dfb37c35a455900689333adf511c
-rw-r--r-- | drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c index f75c5b5a536c..c70310206ac5 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c | |||
@@ -251,13 +251,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) | |||
251 | if (irq < 0) | 251 | if (irq < 0) |
252 | return irq; | 252 | return irq; |
253 | 253 | ||
254 | ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler, | ||
255 | IRQF_TRIGGER_NONE, dev_name(dev), priv); | ||
256 | if (ret < 0) { | ||
257 | dev_err(dev, "Failed to request irq %d: %d\n", irq, ret); | ||
258 | return ret; | ||
259 | } | ||
260 | |||
261 | comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DISP_OVL); | 254 | comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DISP_OVL); |
262 | if (comp_id < 0) { | 255 | if (comp_id < 0) { |
263 | dev_err(dev, "Failed to identify by alias: %d\n", comp_id); | 256 | dev_err(dev, "Failed to identify by alias: %d\n", comp_id); |
@@ -273,6 +266,13 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) | |||
273 | 266 | ||
274 | platform_set_drvdata(pdev, priv); | 267 | platform_set_drvdata(pdev, priv); |
275 | 268 | ||
269 | ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler, | ||
270 | IRQF_TRIGGER_NONE, dev_name(dev), priv); | ||
271 | if (ret < 0) { | ||
272 | dev_err(dev, "Failed to request irq %d: %d\n", irq, ret); | ||
273 | return ret; | ||
274 | } | ||
275 | |||
276 | ret = component_add(dev, &mtk_disp_ovl_component_ops); | 276 | ret = component_add(dev, &mtk_disp_ovl_component_ops); |
277 | if (ret) | 277 | if (ret) |
278 | dev_err(dev, "Failed to add component: %d\n", ret); | 278 | dev_err(dev, "Failed to add component: %d\n", ret); |