drm: simple_kms_helper: Add mode_valid() callback support
The PL111 needs to filter valid modes based on memory bandwidth. I guess it is a pretty simple operation, so we can still claim the DRM KMS helper pipeline is simple after adding this (optional) vtable callback. Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20180220072859.3386-1-linus.walleij@linaro.org
This commit is contained in:
parent
1aecabb5b2
commit
40275dc4ed
|
@ -34,6 +34,20 @@ static const struct drm_encoder_funcs drm_simple_kms_encoder_funcs = {
|
||||||
.destroy = drm_encoder_cleanup,
|
.destroy = drm_encoder_cleanup,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static enum drm_mode_status
|
||||||
|
drm_simple_kms_crtc_mode_valid(struct drm_crtc *crtc,
|
||||||
|
const struct drm_display_mode *mode)
|
||||||
|
{
|
||||||
|
struct drm_simple_display_pipe *pipe;
|
||||||
|
|
||||||
|
pipe = container_of(crtc, struct drm_simple_display_pipe, crtc);
|
||||||
|
if (!pipe->funcs || !pipe->funcs->mode_valid)
|
||||||
|
/* Anything goes */
|
||||||
|
return MODE_OK;
|
||||||
|
|
||||||
|
return pipe->funcs->mode_valid(crtc, mode);
|
||||||
|
}
|
||||||
|
|
||||||
static int drm_simple_kms_crtc_check(struct drm_crtc *crtc,
|
static int drm_simple_kms_crtc_check(struct drm_crtc *crtc,
|
||||||
struct drm_crtc_state *state)
|
struct drm_crtc_state *state)
|
||||||
{
|
{
|
||||||
|
@ -72,6 +86,7 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc,
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
|
static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
|
||||||
|
.mode_valid = drm_simple_kms_crtc_mode_valid,
|
||||||
.atomic_check = drm_simple_kms_crtc_check,
|
.atomic_check = drm_simple_kms_crtc_check,
|
||||||
.atomic_enable = drm_simple_kms_crtc_enable,
|
.atomic_enable = drm_simple_kms_crtc_enable,
|
||||||
.atomic_disable = drm_simple_kms_crtc_disable,
|
.atomic_disable = drm_simple_kms_crtc_disable,
|
||||||
|
|
|
@ -21,6 +21,20 @@ struct drm_simple_display_pipe;
|
||||||
* display pipeline
|
* display pipeline
|
||||||
*/
|
*/
|
||||||
struct drm_simple_display_pipe_funcs {
|
struct drm_simple_display_pipe_funcs {
|
||||||
|
/**
|
||||||
|
* @mode_valid:
|
||||||
|
*
|
||||||
|
* This function is called to filter out valid modes from the
|
||||||
|
* suggestions suggested by the bridge or display. This optional
|
||||||
|
* hook is passed in when initializing the pipeline.
|
||||||
|
*
|
||||||
|
* RETURNS:
|
||||||
|
*
|
||||||
|
* drm_mode_status Enum
|
||||||
|
*/
|
||||||
|
enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc,
|
||||||
|
const struct drm_display_mode *mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @enable:
|
* @enable:
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue