Commit 6f3b6278 authored by Sean Paul's avatar Sean Paul

drm: Convert connector_helper_funcs->atomic_check to accept drm_atomic_state

Everyone who implements connector_helper_funcs->atomic_check reaches
into the connector state to get the atomic state. Instead of continuing
this pattern, change the callback signature to just give atomic state
and let the driver determine what it does and does not need from it.

Eventually all atomic functions should do this, but that's just too much
busy work for me.

Changes in v3:
- Added to the set
Changes in v4:
- None
Changes in v5:
- intel_digital_connector_atomic_check declaration moved to i915_atomic.h

Link to v3: https://patchwork.freedesktop.org/patch/msgid/20190502194956.218441-5-sean@poorly.run
Link to v4: https://patchwork.freedesktop.org/patch/msgid/20190508160920.144739-5-sean@poorly.run

Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Eric Anholt <eric@anholt.net>
Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> [for rcar lvds]
Acked-by: default avatarDaniel Vetter <daniel@ffwll.ch>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190611160844.257498-5-sean@poorly.run
parent 5ade071b
...@@ -686,7 +686,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, ...@@ -686,7 +686,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
} }
if (funcs->atomic_check) if (funcs->atomic_check)
ret = funcs->atomic_check(connector, new_connector_state); ret = funcs->atomic_check(connector, state);
if (ret) if (ret)
return ret; return ret;
...@@ -728,7 +728,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, ...@@ -728,7 +728,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
continue; continue;
if (funcs->atomic_check) if (funcs->atomic_check)
ret = funcs->atomic_check(connector, new_connector_state); ret = funcs->atomic_check(connector, state);
if (ret) if (ret)
return ret; return ret;
} }
......
...@@ -106,12 +106,14 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector, ...@@ -106,12 +106,14 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector,
} }
int intel_digital_connector_atomic_check(struct drm_connector *conn, int intel_digital_connector_atomic_check(struct drm_connector *conn,
struct drm_connector_state *new_state) struct drm_atomic_state *state)
{ {
struct drm_connector_state *new_state =
drm_atomic_get_new_connector_state(state, conn);
struct intel_digital_connector_state *new_conn_state = struct intel_digital_connector_state *new_conn_state =
to_intel_digital_connector_state(new_state); to_intel_digital_connector_state(new_state);
struct drm_connector_state *old_state = struct drm_connector_state *old_state =
drm_atomic_get_old_connector_state(new_state->state, conn); drm_atomic_get_old_connector_state(state, conn);
struct intel_digital_connector_state *old_conn_state = struct intel_digital_connector_state *old_conn_state =
to_intel_digital_connector_state(old_state); to_intel_digital_connector_state(old_state);
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
...@@ -121,7 +123,7 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn, ...@@ -121,7 +123,7 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn,
if (!new_state->crtc) if (!new_state->crtc)
return 0; return 0;
crtc_state = drm_atomic_get_new_crtc_state(new_state->state, new_state->crtc); crtc_state = drm_atomic_get_new_crtc_state(state, new_state->crtc);
/* /*
* These properties are handled by fastset, and might not end * These properties are handled by fastset, and might not end
......
...@@ -28,7 +28,7 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector, ...@@ -28,7 +28,7 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector,
struct drm_property *property, struct drm_property *property,
u64 val); u64 val);
int intel_digital_connector_atomic_check(struct drm_connector *conn, int intel_digital_connector_atomic_check(struct drm_connector *conn,
struct drm_connector_state *new_state); struct drm_atomic_state *state);
struct drm_connector_state * struct drm_connector_state *
intel_digital_connector_duplicate_state(struct drm_connector *connector); intel_digital_connector_duplicate_state(struct drm_connector *connector);
......
...@@ -151,9 +151,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, ...@@ -151,9 +151,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
static int static int
intel_dp_mst_atomic_check(struct drm_connector *connector, intel_dp_mst_atomic_check(struct drm_connector *connector,
struct drm_connector_state *new_conn_state) struct drm_atomic_state *state)
{ {
struct drm_atomic_state *state = new_conn_state->state; struct drm_connector_state *new_conn_state =
drm_atomic_get_new_connector_state(state, connector);
struct drm_connector_state *old_conn_state = struct drm_connector_state *old_conn_state =
drm_atomic_get_old_connector_state(state, connector); drm_atomic_get_old_connector_state(state, connector);
struct intel_connector *intel_connector = struct intel_connector *intel_connector =
...@@ -163,7 +164,7 @@ intel_dp_mst_atomic_check(struct drm_connector *connector, ...@@ -163,7 +164,7 @@ intel_dp_mst_atomic_check(struct drm_connector *connector,
struct drm_dp_mst_topology_mgr *mgr; struct drm_dp_mst_topology_mgr *mgr;
int ret; int ret;
ret = intel_digital_connector_atomic_check(connector, new_conn_state); ret = intel_digital_connector_atomic_check(connector, state);
if (ret) if (ret)
return ret; return ret;
......
...@@ -2353,9 +2353,10 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = { ...@@ -2353,9 +2353,10 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
}; };
static int intel_sdvo_atomic_check(struct drm_connector *conn, static int intel_sdvo_atomic_check(struct drm_connector *conn,
struct drm_connector_state *new_conn_state) struct drm_atomic_state *state)
{ {
struct drm_atomic_state *state = new_conn_state->state; struct drm_connector_state *new_conn_state =
drm_atomic_get_new_connector_state(state, conn);
struct drm_connector_state *old_conn_state = struct drm_connector_state *old_conn_state =
drm_atomic_get_old_connector_state(state, conn); drm_atomic_get_old_connector_state(state, conn);
struct intel_sdvo_connector_state *old_state = struct intel_sdvo_connector_state *old_state =
...@@ -2367,13 +2368,13 @@ static int intel_sdvo_atomic_check(struct drm_connector *conn, ...@@ -2367,13 +2368,13 @@ static int intel_sdvo_atomic_check(struct drm_connector *conn,
(memcmp(&old_state->tv, &new_state->tv, sizeof(old_state->tv)) || (memcmp(&old_state->tv, &new_state->tv, sizeof(old_state->tv)) ||
memcmp(&old_conn_state->tv, &new_conn_state->tv, sizeof(old_conn_state->tv)))) { memcmp(&old_conn_state->tv, &new_conn_state->tv, sizeof(old_conn_state->tv)))) {
struct drm_crtc_state *crtc_state = struct drm_crtc_state *crtc_state =
drm_atomic_get_new_crtc_state(new_conn_state->state, drm_atomic_get_new_crtc_state(state,
new_conn_state->crtc); new_conn_state->crtc);
crtc_state->connectors_changed = true; crtc_state->connectors_changed = true;
} }
return intel_digital_connector_atomic_check(conn, new_conn_state); return intel_digital_connector_atomic_check(conn, state);
} }
static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs = { static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs = {
......
...@@ -1821,16 +1821,18 @@ static const struct drm_connector_funcs intel_tv_connector_funcs = { ...@@ -1821,16 +1821,18 @@ static const struct drm_connector_funcs intel_tv_connector_funcs = {
}; };
static int intel_tv_atomic_check(struct drm_connector *connector, static int intel_tv_atomic_check(struct drm_connector *connector,
struct drm_connector_state *new_state) struct drm_atomic_state *state)
{ {
struct drm_connector_state *new_state;
struct drm_crtc_state *new_crtc_state; struct drm_crtc_state *new_crtc_state;
struct drm_connector_state *old_state; struct drm_connector_state *old_state;
new_state = drm_atomic_get_new_connector_state(state, connector);
if (!new_state->crtc) if (!new_state->crtc)
return 0; return 0;
old_state = drm_atomic_get_old_connector_state(new_state->state, connector); old_state = drm_atomic_get_old_connector_state(state, connector);
new_crtc_state = drm_atomic_get_new_crtc_state(new_state->state, new_state->crtc); new_crtc_state = drm_atomic_get_new_crtc_state(state, new_state->crtc);
if (old_state->tv.mode != new_state->tv.mode || if (old_state->tv.mode != new_state->tv.mode ||
old_state->tv.margins.left != new_state->tv.margins.left || old_state->tv.margins.left != new_state->tv.margins.left ||
......
...@@ -948,11 +948,12 @@ nv50_mstc_get_modes(struct drm_connector *connector) ...@@ -948,11 +948,12 @@ nv50_mstc_get_modes(struct drm_connector *connector)
static int static int
nv50_mstc_atomic_check(struct drm_connector *connector, nv50_mstc_atomic_check(struct drm_connector *connector,
struct drm_connector_state *new_conn_state) struct drm_atomic_state *state)
{ {
struct drm_atomic_state *state = new_conn_state->state;
struct nv50_mstc *mstc = nv50_mstc(connector); struct nv50_mstc *mstc = nv50_mstc(connector);
struct drm_dp_mst_topology_mgr *mgr = &mstc->mstm->mgr; struct drm_dp_mst_topology_mgr *mgr = &mstc->mstm->mgr;
struct drm_connector_state *new_conn_state =
drm_atomic_get_new_connector_state(state, connector);
struct drm_connector_state *old_conn_state = struct drm_connector_state *old_conn_state =
drm_atomic_get_old_connector_state(state, connector); drm_atomic_get_old_connector_state(state, connector);
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
......
...@@ -92,13 +92,15 @@ static int rcar_lvds_connector_get_modes(struct drm_connector *connector) ...@@ -92,13 +92,15 @@ static int rcar_lvds_connector_get_modes(struct drm_connector *connector)
} }
static int rcar_lvds_connector_atomic_check(struct drm_connector *connector, static int rcar_lvds_connector_atomic_check(struct drm_connector *connector,
struct drm_connector_state *state) struct drm_atomic_state *state)
{ {
struct rcar_lvds *lvds = connector_to_rcar_lvds(connector); struct rcar_lvds *lvds = connector_to_rcar_lvds(connector);
const struct drm_display_mode *panel_mode; const struct drm_display_mode *panel_mode;
struct drm_connector_state *conn_state;
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
if (!state->crtc) conn_state = drm_atomic_get_new_connector_state(state, connector);
if (!conn_state->crtc)
return 0; return 0;
if (list_empty(&connector->modes)) { if (list_empty(&connector->modes)) {
...@@ -110,9 +112,9 @@ static int rcar_lvds_connector_atomic_check(struct drm_connector *connector, ...@@ -110,9 +112,9 @@ static int rcar_lvds_connector_atomic_check(struct drm_connector *connector,
struct drm_display_mode, head); struct drm_display_mode, head);
/* We're not allowed to modify the resolution. */ /* We're not allowed to modify the resolution. */
crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc); crtc_state = drm_atomic_get_crtc_state(state, conn_state->crtc);
if (IS_ERR(crtc_state)) if (!crtc_state)
return PTR_ERR(crtc_state); return -EINVAL;
if (crtc_state->mode.hdisplay != panel_mode->hdisplay || if (crtc_state->mode.hdisplay != panel_mode->hdisplay ||
crtc_state->mode.vdisplay != panel_mode->vdisplay) crtc_state->mode.vdisplay != panel_mode->vdisplay)
......
...@@ -221,17 +221,18 @@ static const u32 txp_fmts[] = { ...@@ -221,17 +221,18 @@ static const u32 txp_fmts[] = {
}; };
static int vc4_txp_connector_atomic_check(struct drm_connector *conn, static int vc4_txp_connector_atomic_check(struct drm_connector *conn,
struct drm_connector_state *conn_state) struct drm_atomic_state *state)
{ {
struct drm_connector_state *conn_state;
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
struct drm_framebuffer *fb; struct drm_framebuffer *fb;
int i; int i;
conn_state = drm_atomic_get_new_connector_state(state, conn);
if (!conn_state->writeback_job || !conn_state->writeback_job->fb) if (!conn_state->writeback_job || !conn_state->writeback_job->fb)
return 0; return 0;
crtc_state = drm_atomic_get_new_crtc_state(conn_state->state, crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc);
conn_state->crtc);
fb = conn_state->writeback_job->fb; fb = conn_state->writeback_job->fb;
if (fb->width != crtc_state->mode.hdisplay || if (fb->width != crtc_state->mode.hdisplay ||
......
...@@ -1028,7 +1028,7 @@ struct drm_connector_helper_funcs { ...@@ -1028,7 +1028,7 @@ struct drm_connector_helper_funcs {
* deadlock. * deadlock.
*/ */
int (*atomic_check)(struct drm_connector *connector, int (*atomic_check)(struct drm_connector *connector,
struct drm_connector_state *state); struct drm_atomic_state *state);
/** /**
* @atomic_commit: * @atomic_commit:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment