|
@@ -43,6 +43,7 @@
|
|
|
|
|
|
#define MIXER_WIN_NR 3
|
|
|
#define MIXER_DEFAULT_WIN 0
|
|
|
+#define VP_DEFAULT_WIN 2
|
|
|
|
|
|
/* The pixelformats that are natively supported by the mixer. */
|
|
|
#define MXR_FORMAT_RGB565 4
|
|
@@ -74,6 +75,19 @@ enum mixer_flag_bits {
|
|
|
MXR_BIT_VSYNC,
|
|
|
};
|
|
|
|
|
|
+static const uint32_t mixer_formats[] = {
|
|
|
+ DRM_FORMAT_XRGB4444,
|
|
|
+ DRM_FORMAT_XRGB1555,
|
|
|
+ DRM_FORMAT_RGB565,
|
|
|
+ DRM_FORMAT_XRGB8888,
|
|
|
+ DRM_FORMAT_ARGB8888,
|
|
|
+};
|
|
|
+
|
|
|
+static const uint32_t vp_formats[] = {
|
|
|
+ DRM_FORMAT_NV12,
|
|
|
+ DRM_FORMAT_NV21,
|
|
|
+};
|
|
|
+
|
|
|
struct mixer_context {
|
|
|
struct platform_device *pdev;
|
|
|
struct device *dev;
|
|
@@ -1171,7 +1185,6 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data)
|
|
|
struct mixer_context *ctx = dev_get_drvdata(dev);
|
|
|
struct drm_device *drm_dev = data;
|
|
|
struct exynos_drm_plane *exynos_plane;
|
|
|
- enum drm_plane_type type;
|
|
|
unsigned int zpos;
|
|
|
int ret;
|
|
|
|
|
@@ -1180,10 +1193,23 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data)
|
|
|
return ret;
|
|
|
|
|
|
for (zpos = 0; zpos < MIXER_WIN_NR; zpos++) {
|
|
|
+ enum drm_plane_type type;
|
|
|
+ const uint32_t *formats;
|
|
|
+ unsigned int fcount;
|
|
|
+
|
|
|
type = (zpos == MIXER_DEFAULT_WIN) ? DRM_PLANE_TYPE_PRIMARY :
|
|
|
DRM_PLANE_TYPE_OVERLAY;
|
|
|
+ if (zpos < VP_DEFAULT_WIN) {
|
|
|
+ formats = mixer_formats;
|
|
|
+ fcount = ARRAY_SIZE(mixer_formats);
|
|
|
+ } else {
|
|
|
+ formats = vp_formats;
|
|
|
+ fcount = ARRAY_SIZE(vp_formats);
|
|
|
+ }
|
|
|
+
|
|
|
ret = exynos_plane_init(drm_dev, &ctx->planes[zpos],
|
|
|
- 1 << ctx->pipe, type, zpos);
|
|
|
+ 1 << ctx->pipe, type, formats, fcount,
|
|
|
+ zpos);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
}
|