drm/stm: ltdc: add number of interrupts
authorYannick Fertre <yannick.fertre@st.com>
Tue, 21 Jan 2020 10:13:52 +0000 (11:13 +0100)
committerBenjamin Gaignard <benjamin.gaignard@st.com>
Tue, 4 Feb 2020 10:38:59 +0000 (11:38 +0100)
The number of interrupts depends on the ltdc version.
Don't try to get interrupt which not exist, avoiding
kernel warning messages.

Signed-off-by: Yannick Fertre <yannick.fertre@st.com>
Acked-by: Philippe Cornu <philippe.cornu@st.com>
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@st.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1579601632-7001-1-git-send-email-yannick.fertre@st.com
drivers/gpu/drm/stm/ltdc.c
drivers/gpu/drm/stm/ltdc.h

index c2815e8..58092b0 100644 (file)
@@ -1146,12 +1146,14 @@ static int ltdc_get_caps(struct drm_device *ddev)
                ldev->caps.pad_max_freq_hz = 90000000;
                if (ldev->caps.hw_version == HWVER_10200)
                        ldev->caps.pad_max_freq_hz = 65000000;
+               ldev->caps.nb_irq = 2;
                break;
        case HWVER_20101:
                ldev->caps.reg_ofs = REG_OFS_4;
                ldev->caps.pix_fmt_hw = ltdc_pix_fmt_a1;
                ldev->caps.non_alpha_only_l1 = false;
                ldev->caps.pad_max_freq_hz = 150000000;
+               ldev->caps.nb_irq = 4;
                break;
        default:
                return -ENODEV;
@@ -1251,13 +1253,21 @@ int ltdc_load(struct drm_device *ddev)
        reg_clear(ldev->regs, LTDC_IER,
                  IER_LIE | IER_RRIE | IER_FUIE | IER_TERRIE);
 
-       for (i = 0; i < MAX_IRQ; i++) {
+       ret = ltdc_get_caps(ddev);
+       if (ret) {
+               DRM_ERROR("hardware identifier (0x%08x) not supported!\n",
+                         ldev->caps.hw_version);
+               goto err;
+       }
+
+       DRM_DEBUG_DRIVER("ltdc hw version 0x%08x\n", ldev->caps.hw_version);
+
+       for (i = 0; i < ldev->caps.nb_irq; i++) {
                irq = platform_get_irq(pdev, i);
-               if (irq == -EPROBE_DEFER)
+               if (irq < 0) {
+                       ret = irq;
                        goto err;
-
-               if (irq < 0)
-                       continue;
+               }
 
                ret = devm_request_threaded_irq(dev, irq, ltdc_irq,
                                                ltdc_irq_thread, IRQF_ONESHOT,
@@ -1268,16 +1278,6 @@ int ltdc_load(struct drm_device *ddev)
                }
        }
 
-
-       ret = ltdc_get_caps(ddev);
-       if (ret) {
-               DRM_ERROR("hardware identifier (0x%08x) not supported!\n",
-                         ldev->caps.hw_version);
-               goto err;
-       }
-
-       DRM_DEBUG_DRIVER("ltdc hw version 0x%08x\n", ldev->caps.hw_version);
-
        /* Add endpoints panels or bridges if any */
        for (i = 0; i < MAX_ENDPOINTS; i++) {
                if (panel[i]) {
index a1ad0ae..310e87f 100644 (file)
@@ -19,6 +19,7 @@ struct ltdc_caps {
        const u32 *pix_fmt_hw;  /* supported pixel formats */
        bool non_alpha_only_l1; /* non-native no-alpha formats on layer 1 */
        int pad_max_freq_hz;    /* max frequency supported by pad */
+       int nb_irq;             /* number of hardware interrupts */
 };
 
 #define LTDC_MAX_LAYER 4