Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64d7531c authored by Sankeerth Billakanti's avatar Sankeerth Billakanti
Browse files

drm/msm/dp: abort aux before going to dp suspend



During resume, DP uses AUX to perform various functionalities
like DPCD/EDID read or link training etc. This involves other
hardware modules as well like USB and Charger. In a situation
like continuous suspend/resume, while DP is processing resume,
suspend can trigger resulting in dependent hardware modules
to go to sleep. As AUX communication is hardware interrupt
based, this can result in unstable system.

Abort all functionalities before going to suspend to
avoid unnecessary AUX and other functionality failures.

Change-Id: Id52d408270232adf7258a7eb064ee969eba4be71
Signed-off-by: default avatarSankeerth Billakanti <sbillaka@codeaurora.org>
parent 3313dedb
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -310,7 +310,7 @@ static void dp_aux_reconfig(struct dp_aux *dp_aux)
	aux->catalog->reset(aux->catalog);
}

static void dp_aux_abort_transaction(struct dp_aux *dp_aux)
static void dp_aux_abort_transaction(struct dp_aux *dp_aux, bool abort)
{
	struct dp_aux_private *aux;

@@ -321,7 +321,7 @@ static void dp_aux_abort_transaction(struct dp_aux *dp_aux)

	aux = container_of(dp_aux, struct dp_aux_private, dp_aux);

	atomic_set(&aux->aborted, 1);
	atomic_set(&aux->aborted, abort);
}

static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux,
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ struct dp_aux {
	void (*init)(struct dp_aux *aux, struct dp_aux_cfg *aux_cfg);
	void (*deinit)(struct dp_aux *aux);
	void (*reconfig)(struct dp_aux *aux);
	void (*abort)(struct dp_aux *aux);
	void (*abort)(struct dp_aux *aux, bool abort);
	void (*dpcd_updated)(struct dp_aux *aux);
	void (*set_sim_mode)(struct dp_aux *aux, bool en, u8 *edid, u8 *dpcd);
	int (*aux_switch)(struct dp_aux *aux, bool enable, int orientation);
+2 −2
Original line number Diff line number Diff line
@@ -102,7 +102,7 @@ static void dp_ctrl_video_ready(struct dp_ctrl_private *ctrl)
	complete(&ctrl->video_comp);
}

static void dp_ctrl_abort(struct dp_ctrl *dp_ctrl)
static void dp_ctrl_abort(struct dp_ctrl *dp_ctrl, bool abort)
{
	struct dp_ctrl_private *ctrl;

@@ -113,7 +113,7 @@ static void dp_ctrl_abort(struct dp_ctrl *dp_ctrl)

	ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);

	atomic_set(&ctrl->aborted, 1);
	atomic_set(&ctrl->aborted, abort);
}

static void dp_ctrl_state_ctrl(struct dp_ctrl_private *ctrl, u32 state)
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ struct dp_ctrl {
	int (*on)(struct dp_ctrl *dp_ctrl, bool mst_mode, bool fec_en,
			bool dsc_en, bool shallow);
	void (*off)(struct dp_ctrl *dp_ctrl);
	void (*abort)(struct dp_ctrl *dp_ctrl);
	void (*abort)(struct dp_ctrl *dp_ctrl, bool abort);
	void (*isr)(struct dp_ctrl *dp_ctrl);
	bool (*handle_sink_request)(struct dp_ctrl *dp_ctrl);
	void (*process_phy_test_request)(struct dp_ctrl *dp_ctrl);
+2 −2
Original line number Diff line number Diff line
@@ -1622,8 +1622,8 @@ static void dp_debug_set_sim_mode(struct dp_debug_private *debug, bool sim)
			debug->hpd->simulate_connect(debug->hpd, false);
			debug->hotplug = false;
		}
		debug->aux->abort(debug->aux);
		debug->ctrl->abort(debug->ctrl);
		debug->aux->abort(debug->aux, true);
		debug->ctrl->abort(debug->ctrl, true);

		debug->aux->set_sim_mode(debug->aux, false, NULL, NULL);
		debug->dp_debug.sim_mode = false;
Loading