return bpp << 4;
 }
 
+/*
+ * Conversion functions/macros from various pointer types to struct
+ * intel_display pointer.
+ */
+#define __drm_device_to_intel_display(p) \
+       (&to_i915(p)->display)
+#define __intel_connector_to_intel_display(p)          \
+       __drm_device_to_intel_display((p)->base.dev)
+#define __intel_crtc_to_intel_display(p)               \
+       __drm_device_to_intel_display((p)->base.dev)
+#define __intel_crtc_state_to_intel_display(p)                 \
+       __drm_device_to_intel_display((p)->uapi.crtc->dev)
+#define __intel_digital_port_to_intel_display(p)               \
+       __drm_device_to_intel_display((p)->base.base.dev)
+#define __intel_dp_to_intel_display(p) \
+       __drm_device_to_intel_display(dp_to_dig_port(p)->base.base.dev)
+#define __intel_encoder_to_intel_display(p)            \
+       __drm_device_to_intel_display((p)->base.dev)
+#define __intel_hdmi_to_intel_display(p)       \
+       __drm_device_to_intel_display(hdmi_to_dig_port(p)->base.base.dev)
+
+/* Helper for generic association. Map types to conversion functions/macros. */
+#define __assoc(type, p) \
+       struct type: __##type##_to_intel_display((struct type *)(p))
+
+/* Convert various pointer types to struct intel_display pointer. */
+#define to_intel_display(p)                            \
+       _Generic(*p,                                    \
+                __assoc(drm_device, p),                \
+                __assoc(intel_connector, p),           \
+                __assoc(intel_crtc, p),                \
+                __assoc(intel_crtc_state, p),          \
+                __assoc(intel_digital_port, p),        \
+                __assoc(intel_dp, p),                  \
+                __assoc(intel_encoder, p),             \
+                __assoc(intel_hdmi, p))
+
 #endif /*  __INTEL_DISPLAY_TYPES_H__ */