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;
}
예제 #2
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;
}