media: aspeed: change irq to threaded irq
authorJae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
Fri, 31 May 2019 22:15:41 +0000 (18:15 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 5 Jun 2019 19:40:04 +0000 (15:40 -0400)
Differently from other Aspeed drivers, this driver calls clock
control APIs in interrupt context. Since ECLK is coupled with a
reset bit in clk-aspeed module, aspeed_clk_enable will make 10ms of
busy waiting delay for triggering the reset and it will eventually
disturb other drivers' interrupt handling. To fix this issue, this
commit changes this driver's irq to threaded irq so that the delay
can be happened in a thread context.

Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
Reviewed-by: Eddie James <eajames@linux.ibm.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/aspeed-video.c

index 7982ce63493671ec9feed4714c12157462d8df94..f7db8969c8f27b99445c03d5f49e4662194cdc9d 100644 (file)
@@ -1600,8 +1600,9 @@ static int aspeed_video_init(struct aspeed_video *video)
                return -ENODEV;
        }
 
-       rc = devm_request_irq(dev, irq, aspeed_video_irq, IRQF_SHARED,
-                             DEVICE_NAME, video);
+       rc = devm_request_threaded_irq(dev, irq, NULL, aspeed_video_irq,
+                                      IRQF_ONESHOT | IRQF_SHARED, DEVICE_NAME,
+                                      video);
        if (rc < 0) {
                dev_err(dev, "Unable to request IRQ %d\n", irq);
                return rc;