xilinx_drm_plane_init_manager(struct xilinx_drm_plane_manager *manager)
{
unsigned int format;
+ uint32_t drm_format;
int ret = 0;
if (manager->osd) {
manager->max_width = xilinx_osd_get_max_width(manager->osd);
format = xilinx_osd_get_format(manager->osd);
- ret = xilinx_drm_format_by_code(format, &manager->format);
+ ret = xilinx_drm_format_by_code(format, &drm_format);
+ if (drm_format != manager->format)
+ ret = -EINVAL;
} else {
/* without osd, only one plane is supported */
manager->num_planes = 1;
- /* YUV422 based on the current pipeline design without osd */
- manager->format = DRM_FORMAT_YUYV;
manager->max_width = 4096;
}
struct xilinx_drm_plane_manager *manager;
struct device *dev = drm->dev;
struct device_node *sub_node;
+ const char *format;
int ret;
manager = devm_kzalloc(dev, sizeof(*manager), GFP_KERNEL);
return ERR_PTR(-EINVAL);
}
+ /* check the base pixel format of plane manager */
+ ret = of_property_read_string(manager->node, "xlnx,pixel-format",
+ &format);
+ if (ret < 0) {
+ DRM_ERROR("failed to get a plane manager format\n");
+ return ERR_PTR(ret);
+ }
+
+ ret = xilinx_drm_format_by_name(format, &manager->format);
+ if (ret < 0) {
+ DRM_ERROR("invalid plane manager format\n");
+ return ERR_PTR(ret);
+ }
+
manager->drm = drm;
/* probe an OSD. proceed even if there's no OSD */