struct drm_framebuffer *fb = plane->state->fb;
        struct drm_connector *connector = priv->connector;
        struct drm_bridge *bridge = priv->bridge;
+       bool grayscale = false;
        u32 cntl;
        u32 ppl, hsw, hfp, hbp;
        u32 lpp, vsw, vfp, vbp;
                if (connector->display_info.bus_flags &
                    DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
                        tim2 |= TIM2_IPC;
+
+               if (connector->display_info.num_bus_formats == 1 &&
+                   connector->display_info.bus_formats[0] ==
+                   MEDIA_BUS_FMT_Y8_1X8)
+                       grayscale = true;
+
+               /*
+                * The AC pin bias frequency is set to max count when using
+                * grayscale so at least once in a while we will reverse
+                * polarity and get rid of any DC built up that could
+                * damage the display.
+                */
+               if (grayscale)
+                       tim2 |= TIM2_ACB_MASK;
        }
 
        if (bridge) {
 
        writel(0, priv->regs + CLCD_TIM3);
 
-       /* Hard-code TFT panel */
-       cntl = CNTL_LCDEN | CNTL_LCDTFT | CNTL_LCDVCOMP(1);
+       /*
+        * Detect grayscale bus format. We do not support a grayscale mode
+        * toward userspace, instead we expose an RGB24 buffer and then the
+        * hardware will activate its grayscaler to convert to the grayscale
+        * format.
+        */
+       if (grayscale)
+               cntl = CNTL_LCDEN | CNTL_LCDMONO8;
+       else
+               /* Else we assume TFT display */
+               cntl = CNTL_LCDEN | CNTL_LCDTFT | CNTL_LCDVCOMP(1);
+
        /* On the ST Micro variant, assume all 24 bits are connected */
        if (priv->variant->st_bitmux_control)
                cntl |= CNTL_ST_CDWID_24;
 
 #define TIM2_PCD_LO_MASK       GENMASK(4, 0)
 #define TIM2_PCD_LO_BITS       5
 #define TIM2_CLKSEL            (1 << 5)
+#define TIM2_ACB_MASK          GENMASK(10, 6)
 #define TIM2_IVS               (1 << 11)
 #define TIM2_IHS               (1 << 12)
 #define TIM2_IPC               (1 << 13)