return dev->of_node == np;
}
+static const char *const imx_drm_dcss_comp_parents[] = {
+ "nxp,imx8mq-dcss",
+};
+
+static bool imx_drm_parent_is_compatible(struct device *dev,
+ const char *const comp_parents[],
+ int comp_parents_size)
+{
+ struct device_node *port, *parent;
+ bool ret = false;
+ int i;
+
+ port = of_parse_phandle(dev->of_node, "ports", 0);
+ if (!port)
+ return ret;
+
+ parent = of_get_parent(port);
+
+ for (i = 0; i < comp_parents_size; i++) {
+ if (of_device_is_compatible(parent, comp_parents[i])) {
+ ret = true;
+ break;
+ }
+ }
+
+ of_node_put(parent);
+
+ of_node_put(port);
+
+ return ret;
+}
+
+static inline bool has_dcss(struct device *dev)
+{
+ return imx_drm_parent_is_compatible(dev, imx_drm_dcss_comp_parents,
+ ARRAY_SIZE(imx_drm_dcss_comp_parents));
+}
+
static int imx_drm_bind(struct device *dev)
{
struct drm_device *drm;
dev_warn(dev, "Invalid legacyfb_depth. Defaulting to 16bpp\n");
legacyfb_depth = 16;
}
+
+ if (legacyfb_depth == 16 && has_dcss(dev))
+ legacyfb_depth = 32;
+
ret = drm_fb_cma_fbdev_init(drm, legacyfb_depth, MAX_CRTC);
if (ret)
+
goto err_unbind;
#endif