static int rotator_src_set_fmt(struct device *dev, u32 fmt) { struct rot_context *rot = dev_get_drvdata(dev); /* Set format configuration */ rotator_reg_set_format(rot, fmt); return 0; }
static int rotator_dst_set_fmt(struct device *dev, u32 fmt) { struct rot_context *rot = dev_get_drvdata(dev); struct drm_exynos_ipp_property *property = &rot->property; struct drm_exynos_ipp_config *src_config = &property->config[EXYNOS_DRM_OPS_SRC]; struct drm_exynos_ipp_config *config = &property->config[EXYNOS_DRM_OPS_DST]; /* Check validity */ switch (fmt) { case DRM_FORMAT_XRGB8888: case DRM_FORMAT_NV12: case DRM_FORMAT_NV12M: /* No problem */ break; default: DRM_ERROR("invalid format\n"); return -EINVAL; } if (src_config->fmt != fmt) { DRM_ERROR("diffrent format\n"); return -EINVAL; } /* Align size */ rotator_align_size(rot, fmt, &config->pos); /* Set format configuration */ config->fmt = fmt; rotator_reg_set_format(rot, config->fmt); return 0; }