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

Commit 97761dba authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge changes I9e250ba7,If30f5d72,I937f894e,I6fe59cf5 into dev/msm-4.14-display

* changes:
  disp: msm: dp: add timeout state for simulated AUX transfers
  disp: msm: dp: update the connected state during clean up
  disp: msm: dp: disable audio during display clean up
  disp: msm: dp: add session check for audio register programming
parents 0105561f aea1f351
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
/*
 * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -31,7 +31,7 @@ struct dp_audio_private {
	struct dp_panel *panel;

	bool ack_enabled;
	bool session_on;
	atomic_t session_on;
	bool engine_on;

	u32 channels;
@@ -302,6 +302,11 @@ static void dp_audio_isrc_sdp(struct dp_audio_private *audio)

static void dp_audio_setup_sdp(struct dp_audio_private *audio)
{
	if (!atomic_read(&audio->session_on)) {
		pr_warn("session inactive\n");
		return;
	}

	/* always program stream 0 first before actual stream cfg */
	audio->catalog->stream_id = DP_STREAM_0;
	audio->catalog->config_sdp(audio->catalog);
@@ -323,6 +328,11 @@ static void dp_audio_setup_acr(struct dp_audio_private *audio)
	u32 select = 0;
	struct dp_catalog_audio *catalog = audio->catalog;

	if (!atomic_read(&audio->session_on)) {
		pr_warn("session inactive\n");
		return;
	}

	switch (audio->dp_audio.bw_code) {
	case DP_LINK_BW_1_62:
		select = 0;
@@ -350,10 +360,14 @@ static void dp_audio_enable(struct dp_audio_private *audio, bool enable)
{
	struct dp_catalog_audio *catalog = audio->catalog;

	audio->engine_on = enable;
	if (!atomic_read(&audio->session_on)) {
		pr_warn("session inactive. enable=%d\n", enable);
		return;
	}

	catalog->data = enable;
	catalog->enable(catalog);

	audio->engine_on = enable;
}

static struct dp_audio_private *dp_audio_get_data(struct platform_device *pdev)
@@ -453,7 +467,7 @@ static int dp_audio_get_cable_status(struct platform_device *pdev, u32 vote)
		goto end;
	}

	return audio->session_on;
	return atomic_read(&audio->session_on);
end:
	return rc;
}
@@ -715,7 +729,7 @@ static int dp_audio_on(struct dp_audio *dp_audio)

	ext = &audio->ext_audio_data;

	audio->session_on = true;
	atomic_set(&audio->session_on, 1);

	rc = dp_audio_config(audio, EXT_DISPLAY_CABLE_CONNECT);
	if (rc)
@@ -757,7 +771,7 @@ static int dp_audio_off(struct dp_audio *dp_audio)
end:
	dp_audio_config(audio, EXT_DISPLAY_CABLE_DISCONNECT);

	audio->session_on = false;
	atomic_set(&audio->session_on, 0);
	audio->engine_on  = false;

	dp_audio_deregister_ext_disp(audio);
+4 −2
Original line number Diff line number Diff line
@@ -514,7 +514,7 @@ static ssize_t dp_aux_transfer_debug(struct drm_dp_aux *drm_aux,
		if (aux->read) {
			timeout = wait_for_completion_timeout(&aux->comp, HZ);
			if (!timeout) {
				pr_err("aux timeout for 0x%x\n", msg->address);
				pr_err("read timeout 0x%x\n", msg->address);
				atomic_set(&aux->aborted, 1);
				ret = -ETIMEDOUT;
				goto end;
@@ -528,7 +528,7 @@ static ssize_t dp_aux_transfer_debug(struct drm_dp_aux *drm_aux,

			timeout = wait_for_completion_timeout(&aux->comp, HZ);
			if (!timeout) {
				pr_err("aux timeout for 0x%x\n", msg->address);
				pr_err("write timeout 0x%x\n", msg->address);
				atomic_set(&aux->aborted, 1);
				ret = -ETIMEDOUT;
				goto end;
@@ -565,6 +565,8 @@ static ssize_t dp_aux_transfer_debug(struct drm_dp_aux *drm_aux,
	memset(msg->buffer, 0, msg->size);
	ret = msg->size;
end:
	if (ret == -ETIMEDOUT)
		aux->dp_aux.state |= DP_STATE_AUX_TIMEOUT;
	aux->dp_aux.reg = 0xFFFF;
	aux->dp_aux.read = true;
	aux->dp_aux.size = 0;
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#define DP_STATE_LINK_MAINTENANCE_STARTED   BIT(9)
#define DP_STATE_LINK_MAINTENANCE_COMPLETED BIT(10)
#define DP_STATE_LINK_MAINTENANCE_FAILED    BIT(11)
#define DP_STATE_AUX_TIMEOUT                BIT(12)

enum dp_aux_error {
	DP_AUX_ERR_NONE	= 0,
+4 −1
Original line number Diff line number Diff line
@@ -974,13 +974,16 @@ static void dp_display_clean(struct dp_display_private *dp)

		dp_panel = dp->active_panels[idx];

		if (dp_panel->audio_supported)
			dp_panel->audio->off(dp_panel->audio);

		dp_display_stream_pre_disable(dp, dp_panel);
		dp_display_stream_disable(dp, dp_panel);
		dp_panel->deinit(dp_panel, 0);
	}

	dp->power_on = false;

	dp->is_connected = false;
	dp->ctrl->off(dp->ctrl);
}