forked from Minki/linux
7ddcc7364a
Currently, mode_fixup code doesn't consider the limitations of mixer as it is implemented inside the hdmi driver. Following fix, moves the mode_fixup to common drm hdmi driver. To check the mode support, it calls both, mixer and hdmi check_timing callbacks for a given resolution mode. This patch is dependent on https://patchwork.kernel.org/patch/2176021/. Signed-off-by: Rahul Sharma <rahul.sharma@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
68 lines
1.9 KiB
C
68 lines
1.9 KiB
C
/* exynos_drm_hdmi.h
|
|
*
|
|
* Copyright (c) 2011 Samsung Electronics Co., Ltd.
|
|
* Authoer: Inki Dae <inki.dae@samsung.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*/
|
|
|
|
#ifndef _EXYNOS_DRM_HDMI_H_
|
|
#define _EXYNOS_DRM_HDMI_H_
|
|
|
|
#define MIXER_WIN_NR 3
|
|
#define MIXER_DEFAULT_WIN 0
|
|
|
|
/*
|
|
* exynos hdmi common context structure.
|
|
*
|
|
* @drm_dev: pointer to drm_device.
|
|
* @ctx: pointer to the context of specific device driver.
|
|
* this context should be hdmi_context or mixer_context.
|
|
*/
|
|
struct exynos_drm_hdmi_context {
|
|
struct drm_device *drm_dev;
|
|
void *ctx;
|
|
};
|
|
|
|
struct exynos_hdmi_ops {
|
|
/* display */
|
|
bool (*is_connected)(void *ctx);
|
|
struct edid *(*get_edid)(void *ctx,
|
|
struct drm_connector *connector);
|
|
int (*check_timing)(void *ctx, struct fb_videomode *timing);
|
|
int (*power_on)(void *ctx, int mode);
|
|
|
|
/* manager */
|
|
void (*mode_set)(void *ctx, void *mode);
|
|
void (*get_max_resol)(void *ctx, unsigned int *width,
|
|
unsigned int *height);
|
|
void (*commit)(void *ctx);
|
|
void (*dpms)(void *ctx, int mode);
|
|
};
|
|
|
|
struct exynos_mixer_ops {
|
|
/* manager */
|
|
int (*iommu_on)(void *ctx, bool enable);
|
|
int (*enable_vblank)(void *ctx, int pipe);
|
|
void (*disable_vblank)(void *ctx);
|
|
void (*wait_for_vblank)(void *ctx);
|
|
void (*dpms)(void *ctx, int mode);
|
|
|
|
/* overlay */
|
|
void (*win_mode_set)(void *ctx, struct exynos_drm_overlay *overlay);
|
|
void (*win_commit)(void *ctx, int zpos);
|
|
void (*win_disable)(void *ctx, int zpos);
|
|
|
|
/* display */
|
|
int (*check_timing)(void *ctx, struct fb_videomode *timing);
|
|
};
|
|
|
|
void exynos_hdmi_drv_attach(struct exynos_drm_hdmi_context *ctx);
|
|
void exynos_mixer_drv_attach(struct exynos_drm_hdmi_context *ctx);
|
|
void exynos_hdmi_ops_register(struct exynos_hdmi_ops *ops);
|
|
void exynos_mixer_ops_register(struct exynos_mixer_ops *ops);
|
|
#endif
|