drm/exynos: dsi: set TE GPIO IRQ status as IRQ_NOAUTOEN
authorYoungJun Cho <yj44.cho@samsung.com>
Mon, 17 Nov 2014 13:00:16 +0000 (22:00 +0900)
committerInki Dae <inki.dae@samsung.com>
Mon, 24 Nov 2014 09:02:54 +0000 (18:02 +0900)
The exynos_dsi_te_irq_handler() works only dsi(DPMS) is on.
So it is enough to enable and disable TE GPIO IRQ in
exynos_dsi_enable(disable)_irq() like DSI IRQ.

Signed-off-by: YoungJun Cho <yj44.cho@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>a
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_dsi.c

index 156a6389172a2419fbb8f47442a4fe8d6fad8568..05fe93dc57a8bccdd14b6db9cb40f9ef99944619 100644 (file)
@@ -1155,6 +1155,7 @@ static int exynos_dsi_init(struct exynos_dsi *dsi)
 static int exynos_dsi_register_te_irq(struct exynos_dsi *dsi)
 {
        int ret;
+       int te_gpio_irq;
 
        dsi->te_gpio = of_get_named_gpio(dsi->panel_node, "te-gpios", 0);
        if (!gpio_is_valid(dsi->te_gpio)) {
@@ -1169,14 +1170,10 @@ static int exynos_dsi_register_te_irq(struct exynos_dsi *dsi)
                goto out;
        }
 
-       /*
-        * This TE GPIO IRQ should not be set to IRQ_NOAUTOEN, because panel
-        * calls drm_panel_init() first then calls mipi_dsi_attach() in probe().
-        * It means that te_gpio is invalid when exynos_dsi_enable_irq() is
-        * called by drm_panel_init() before panel is attached.
-        */
-       ret = request_threaded_irq(gpio_to_irq(dsi->te_gpio),
-                                       exynos_dsi_te_irq_handler, NULL,
+       te_gpio_irq = gpio_to_irq(dsi->te_gpio);
+
+       irq_set_status_flags(te_gpio_irq, IRQ_NOAUTOEN);
+       ret = request_threaded_irq(te_gpio_irq, exynos_dsi_te_irq_handler, NULL,
                                        IRQF_TRIGGER_RISING, "TE", dsi);
        if (ret) {
                dev_err(dsi->dev, "request interrupt failed with %d\n", ret);