struct platform_device *pdev;
struct device *dev;
struct drm_device *drm_dev;
- struct exynos_drm_crtc *crtc;
+ struct exynos_drm_crtc crtc;
struct exynos_drm_plane planes[MIXER_WIN_NR];
unsigned long flags;
int scan_value;
};
+#define to_mixer(ptr) container_of(ptr, struct mixer_context, ptr)
+
struct mixer_drv_data {
enum mixer_version_id version;
bool is_vp_enabled;
static void mixer_commit(struct mixer_context *ctx)
{
- struct drm_display_mode *mode = &ctx->crtc->base.state->adjusted_mode;
+ struct drm_display_mode *mode = &ctx->crtc.base.state->adjusted_mode;
mixer_cfg_scan(ctx, mode->hdisplay, mode->vdisplay);
mixer_cfg_rgb_fmt(ctx, mode);
goto out;
}
- drm_crtc_handle_vblank(&ctx->crtc->base);
+ drm_crtc_handle_vblank(&ctx->crtc.base);
}
out:
static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)
{
- struct mixer_context *mixer_ctx = crtc->ctx;
+ struct mixer_context *mixer_ctx = to_mixer(crtc);
__set_bit(MXR_BIT_VSYNC, &mixer_ctx->flags);
if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
static void mixer_disable_vblank(struct exynos_drm_crtc *crtc)
{
- struct mixer_context *mixer_ctx = crtc->ctx;
+ struct mixer_context *mixer_ctx = to_mixer(crtc);
__clear_bit(MXR_BIT_VSYNC, &mixer_ctx->flags);
static void mixer_atomic_begin(struct exynos_drm_crtc *crtc)
{
- struct mixer_context *mixer_ctx = crtc->ctx;
+ struct mixer_context *mixer_ctx = to_mixer(crtc);
if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
return;
static void mixer_update_plane(struct exynos_drm_crtc *crtc,
struct exynos_drm_plane *plane)
{
- struct mixer_context *mixer_ctx = crtc->ctx;
+ struct mixer_context *mixer_ctx = to_mixer(crtc);
DRM_DEBUG_KMS("win: %d\n", plane->index);
static void mixer_disable_plane(struct exynos_drm_crtc *crtc,
struct exynos_drm_plane *plane)
{
- struct mixer_context *mixer_ctx = crtc->ctx;
+ struct mixer_context *mixer_ctx = to_mixer(crtc);
unsigned long flags;
DRM_DEBUG_KMS("win: %d\n", plane->index);
static void mixer_atomic_flush(struct exynos_drm_crtc *crtc)
{
- struct mixer_context *mixer_ctx = crtc->ctx;
+ struct mixer_context *mixer_ctx = to_mixer(crtc);
if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
return;
static void mixer_enable(struct exynos_drm_crtc *crtc)
{
- struct mixer_context *ctx = crtc->ctx;
+ struct mixer_context *ctx = to_mixer(crtc);
if (test_bit(MXR_BIT_POWERED, &ctx->flags))
return;
static void mixer_disable(struct exynos_drm_crtc *crtc)
{
- struct mixer_context *ctx = crtc->ctx;
+ struct mixer_context *ctx = to_mixer(crtc);
int i;
if (!test_bit(MXR_BIT_POWERED, &ctx->flags))
static int mixer_mode_valid(struct exynos_drm_crtc *crtc,
const struct drm_display_mode *mode)
{
- struct mixer_context *ctx = crtc->ctx;
+ struct mixer_context *ctx = to_mixer(crtc);
u32 w = mode->hdisplay, h = mode->vdisplay;
DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%d\n", w, h,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{
- struct mixer_context *ctx = crtc->ctx;
+ struct mixer_context *ctx = to_mixer(crtc);
int width = mode->hdisplay, height = mode->vdisplay, i;
struct {
{
struct mixer_context *ctx = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
- struct exynos_drm_plane *exynos_plane;
unsigned int i;
int ret;
static enum drm_plane_type types[] = { DRM_PLANE_TYPE_PRIMARY,
return ret;
}
- exynos_plane = &ctx->planes[DEFAULT_WIN];
- ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base,
- EXYNOS_DISPLAY_TYPE_HDMI, &mixer_crtc_ops, ctx);
- if (IS_ERR(ctx->crtc)) {
+ ctx->crtc.type = EXYNOS_DISPLAY_TYPE_HDMI;
+ ctx->crtc.ops = &mixer_crtc_ops;
+ ret = exynos_drm_crtc_init(&ctx->crtc, drm_dev);
+ if (ret) {
mixer_ctx_remove(ctx);
- ret = PTR_ERR(ctx->crtc);
goto free_ctx;
}
+ ctx->crtc.base.primary = &ctx->planes[DEFAULT_WIN].base;
return 0;