Skip to content

Commit

Permalink
drm/i915: constify color function vtable.
Browse files Browse the repository at this point in the history
This clarifies quite well what functions get used on what platforms
instead of having to decipher the old tree.

v2: fixed IVB mistake (Jani)

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/49e46e61206d4fdcf08fb5dc1978da3fce702134.1632869550.git.jani.nikula@intel.com
  • Loading branch information
Dave Airlie authored and Jani Nikula committed Sep 29, 2021
1 parent cd030c7 commit c6d2704
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 47 deletions.
138 changes: 92 additions & 46 deletions drivers/gpu/drm/i915/display/intel_color.c
Original file line number Diff line number Diff line change
Expand Up @@ -1137,14 +1137,14 @@ void intel_color_load_luts(const struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);

dev_priv->color_funcs.load_luts(crtc_state);
dev_priv->color_funcs->load_luts(crtc_state);
}

void intel_color_commit(const struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);

dev_priv->color_funcs.color_commit(crtc_state);
dev_priv->color_funcs->color_commit(crtc_state);
}

static bool intel_can_preload_luts(const struct intel_crtc_state *new_crtc_state)
Expand Down Expand Up @@ -1200,15 +1200,15 @@ int intel_color_check(struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);

return dev_priv->color_funcs.color_check(crtc_state);
return dev_priv->color_funcs->color_check(crtc_state);
}

void intel_color_get_config(struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);

if (dev_priv->color_funcs.read_luts)
dev_priv->color_funcs.read_luts(crtc_state);
if (dev_priv->color_funcs->read_luts)
dev_priv->color_funcs->read_luts(crtc_state);
}

static bool need_plane_update(struct intel_plane *plane,
Expand Down Expand Up @@ -2092,6 +2092,76 @@ static void icl_read_luts(struct intel_crtc_state *crtc_state)
}
}

static const struct intel_color_funcs chv_color_funcs = {
.color_check = chv_color_check,
.color_commit = i9xx_color_commit,
.load_luts = chv_load_luts,
.read_luts = chv_read_luts,
};

static const struct intel_color_funcs i965_color_funcs = {
.color_check = i9xx_color_check,
.color_commit = i9xx_color_commit,
.load_luts = i965_load_luts,
.read_luts = i965_read_luts,
};

static const struct intel_color_funcs i9xx_color_funcs = {
.color_check = i9xx_color_check,
.color_commit = i9xx_color_commit,
.load_luts = i9xx_load_luts,
.read_luts = i9xx_read_luts,
};

static const struct intel_color_funcs icl_color_funcs = {
.color_check = icl_color_check,
.color_commit = skl_color_commit,
.load_luts = icl_load_luts,
.read_luts = icl_read_luts,
};

static const struct intel_color_funcs glk_color_funcs = {
.color_check = glk_color_check,
.color_commit = skl_color_commit,
.load_luts = glk_load_luts,
.read_luts = glk_read_luts,
};

static const struct intel_color_funcs skl_color_funcs = {
.color_check = ivb_color_check,
.color_commit = skl_color_commit,
.load_luts = bdw_load_luts,
.read_luts = NULL,
};

static const struct intel_color_funcs bdw_color_funcs = {
.color_check = ivb_color_check,
.color_commit = hsw_color_commit,
.load_luts = bdw_load_luts,
.read_luts = NULL,
};

static const struct intel_color_funcs hsw_color_funcs = {
.color_check = ivb_color_check,
.color_commit = hsw_color_commit,
.load_luts = ivb_load_luts,
.read_luts = NULL,
};

static const struct intel_color_funcs ivb_color_funcs = {
.color_check = ivb_color_check,
.color_commit = ilk_color_commit,
.load_luts = ivb_load_luts,
.read_luts = NULL,
};

static const struct intel_color_funcs ilk_color_funcs = {
.color_check = ilk_color_check,
.color_commit = ilk_color_commit,
.load_luts = ilk_load_luts,
.read_luts = ilk_read_luts,
};

void intel_color_init(struct intel_crtc *crtc)
{
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
Expand All @@ -2101,52 +2171,28 @@ void intel_color_init(struct intel_crtc *crtc)

if (HAS_GMCH(dev_priv)) {
if (IS_CHERRYVIEW(dev_priv)) {
dev_priv->color_funcs.color_check = chv_color_check;
dev_priv->color_funcs.color_commit = i9xx_color_commit;
dev_priv->color_funcs.load_luts = chv_load_luts;
dev_priv->color_funcs.read_luts = chv_read_luts;
dev_priv->color_funcs = &chv_color_funcs;
} else if (DISPLAY_VER(dev_priv) >= 4) {
dev_priv->color_funcs.color_check = i9xx_color_check;
dev_priv->color_funcs.color_commit = i9xx_color_commit;
dev_priv->color_funcs.load_luts = i965_load_luts;
dev_priv->color_funcs.read_luts = i965_read_luts;
dev_priv->color_funcs = &i965_color_funcs;
} else {
dev_priv->color_funcs.color_check = i9xx_color_check;
dev_priv->color_funcs.color_commit = i9xx_color_commit;
dev_priv->color_funcs.load_luts = i9xx_load_luts;
dev_priv->color_funcs.read_luts = i9xx_read_luts;
dev_priv->color_funcs = &i9xx_color_funcs;
}
} else {
if (DISPLAY_VER(dev_priv) >= 11)
dev_priv->color_funcs.color_check = icl_color_check;
else if (DISPLAY_VER(dev_priv) >= 10)
dev_priv->color_funcs.color_check = glk_color_check;
else if (DISPLAY_VER(dev_priv) >= 7)
dev_priv->color_funcs.color_check = ivb_color_check;
else
dev_priv->color_funcs.color_check = ilk_color_check;

if (DISPLAY_VER(dev_priv) >= 9)
dev_priv->color_funcs.color_commit = skl_color_commit;
else if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
dev_priv->color_funcs.color_commit = hsw_color_commit;
else
dev_priv->color_funcs.color_commit = ilk_color_commit;

if (DISPLAY_VER(dev_priv) >= 11) {
dev_priv->color_funcs.load_luts = icl_load_luts;
dev_priv->color_funcs.read_luts = icl_read_luts;
} else if (DISPLAY_VER(dev_priv) == 10) {
dev_priv->color_funcs.load_luts = glk_load_luts;
dev_priv->color_funcs.read_luts = glk_read_luts;
} else if (DISPLAY_VER(dev_priv) >= 8) {
dev_priv->color_funcs.load_luts = bdw_load_luts;
} else if (DISPLAY_VER(dev_priv) >= 7) {
dev_priv->color_funcs.load_luts = ivb_load_luts;
} else {
dev_priv->color_funcs.load_luts = ilk_load_luts;
dev_priv->color_funcs.read_luts = ilk_read_luts;
}
dev_priv->color_funcs = &icl_color_funcs;
else if (DISPLAY_VER(dev_priv) == 10)
dev_priv->color_funcs = &glk_color_funcs;
else if (DISPLAY_VER(dev_priv) == 9)
dev_priv->color_funcs = &skl_color_funcs;
else if (DISPLAY_VER(dev_priv) == 8)
dev_priv->color_funcs = &bdw_color_funcs;
else if (DISPLAY_VER(dev_priv) == 7) {
if (IS_HASWELL(dev_priv))
dev_priv->color_funcs = &hsw_color_funcs;
else
dev_priv->color_funcs = &ivb_color_funcs;
} else
dev_priv->color_funcs = &ilk_color_funcs;
}

drm_crtc_enable_color_mgmt(&crtc->base,
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -1000,7 +1000,7 @@ struct drm_i915_private {
struct drm_i915_display_funcs display;

/* Display internal color functions */
struct intel_color_funcs color_funcs;
const struct intel_color_funcs *color_funcs;

/* Display internal audio functions */
struct intel_audio_funcs audio_funcs;
Expand Down

0 comments on commit c6d2704

Please sign in to comment.