mirror of
https://github.com/torvalds/linux.git
synced 2024-12-30 06:41:43 +00:00
media: mtk-vcodec: make IRQs disabled upon request
The driver requests IRQs to disable them immediately. This is potentially racy, fix this by requesting the IRQs to come disabled instead using the IRQ_NOAUTOEN flag of irq_set_status_flags(). Reported-by: Ezequiel Garcia <ezequiel@collabora.com> Signed-off-by: Alexandre Courbot <acourbot@chromium.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
42f401e751
commit
59b2076df4
@ -268,6 +268,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
dev->dec_irq = platform_get_irq(pdev, 0);
|
||||
irq_set_status_flags(dev->dec_irq, IRQ_NOAUTOEN);
|
||||
ret = devm_request_irq(&pdev->dev, dev->dec_irq,
|
||||
mtk_vcodec_dec_irq_handler, 0, pdev->name, dev);
|
||||
if (ret) {
|
||||
@ -277,7 +278,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
|
||||
goto err_res;
|
||||
}
|
||||
|
||||
disable_irq(dev->dec_irq);
|
||||
mutex_init(&dev->dec_mutex);
|
||||
mutex_init(&dev->dev_mutex);
|
||||
spin_lock_init(&dev->irqlock);
|
||||
|
@ -320,6 +320,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
dev->enc_irq = platform_get_irq(pdev, 0);
|
||||
irq_set_status_flags(dev->enc_irq, IRQ_NOAUTOEN);
|
||||
ret = devm_request_irq(&pdev->dev, dev->enc_irq,
|
||||
mtk_vcodec_enc_irq_handler,
|
||||
0, pdev->name, dev);
|
||||
@ -330,7 +331,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
|
||||
ret = -EINVAL;
|
||||
goto err_res;
|
||||
}
|
||||
disable_irq(dev->enc_irq);
|
||||
|
||||
if (dev->venc_pdata->has_lt_irq) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
@ -342,6 +342,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
|
||||
mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[VENC_LT_SYS]);
|
||||
|
||||
dev->enc_lt_irq = platform_get_irq(pdev, 1);
|
||||
irq_set_status_flags(dev->enc_lt_irq, IRQ_NOAUTOEN);
|
||||
ret = devm_request_irq(&pdev->dev,
|
||||
dev->enc_lt_irq,
|
||||
mtk_vcodec_enc_lt_irq_handler,
|
||||
@ -353,7 +354,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
|
||||
ret = -EINVAL;
|
||||
goto err_res;
|
||||
}
|
||||
disable_irq(dev->enc_lt_irq); /* VENC_LT */
|
||||
}
|
||||
|
||||
mutex_init(&dev->enc_mutex);
|
||||
|
Loading…
Reference in New Issue
Block a user