/* vc4_hvs.c */
 extern struct platform_driver vc4_hvs_driver;
 void vc4_hvs_stop_channel(struct drm_device *dev, unsigned int output);
+int vc4_hvs_get_fifo_from_output(struct drm_device *dev, unsigned int output);
 int vc4_hvs_atomic_check(struct drm_crtc *crtc, struct drm_crtc_state *state);
 void vc4_hvs_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
 void vc4_hvs_atomic_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
 
  * each CRTC.
  */
 
+#include <linux/bitfield.h>
 #include <linux/clk.h>
 #include <linux/component.h>
 #include <linux/platform_device.h>
        vc4_hvs_lut_load(crtc);
 }
 
+int vc4_hvs_get_fifo_from_output(struct drm_device *dev, unsigned int output)
+{
+       struct vc4_dev *vc4 = to_vc4_dev(dev);
+       u32 reg;
+       int ret;
+
+       if (!vc4->hvs->hvs5)
+               return output;
+
+       switch (output) {
+       case 0:
+               return 0;
+
+       case 1:
+               return 1;
+
+       case 2:
+               reg = HVS_READ(SCALER_DISPECTRL);
+               ret = FIELD_GET(SCALER_DISPECTRL_DSP2_MUX_MASK, reg);
+               if (ret == 0)
+                       return 2;
+
+               return 0;
+
+       case 3:
+               reg = HVS_READ(SCALER_DISPCTRL);
+               ret = FIELD_GET(SCALER_DISPCTRL_DSP3_MUX_MASK, reg);
+               if (ret == 3)
+                       return -EPIPE;
+
+               return ret;
+
+       case 4:
+               reg = HVS_READ(SCALER_DISPEOLN);
+               ret = FIELD_GET(SCALER_DISPEOLN_DSP4_MUX_MASK, reg);
+               if (ret == 3)
+                       return -EPIPE;
+
+               return ret;
+
+       case 5:
+               reg = HVS_READ(SCALER_DISPDITHER);
+               ret = FIELD_GET(SCALER_DISPDITHER_DSP5_MUX_MASK, reg);
+               if (ret == 3)
+                       return -EPIPE;
+
+               return ret;
+
+       default:
+               return -EPIPE;
+       }
+}
+
 static int vc4_hvs_init_channel(struct vc4_dev *vc4, struct drm_crtc *crtc,
                                struct drm_display_mode *mode, bool oneshot)
 {