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

Commit 4b9fef85 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Merge remote-tracking branch 'quic/dev/msm-4.14-display' into msm-4.14"

parents 27e6c7c9 db3ba172
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -605,6 +605,14 @@

&dsi_nt35695b_truly_fhd_cmd {
	qcom,ulps-enabled;
	qcom,esd-check-enabled;
	qcom,mdss-dsi-panel-status-check-mode = "reg_read";
	qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a];
	qcom,mdss-dsi-panel-status-command-state = "dsi_hs_mode";
	qcom,mdss-dsi-panel-status-value = <0x9c>;
	qcom,mdss-dsi-panel-on-check-value = <0x9c>;
	qcom,mdss-dsi-panel-status-read-length = <1>;

	qcom,mdss-dsi-display-timings {
		timing@0 {
			qcom,mdss-dsi-panel-phy-timings = [00 1e 08 07 24 22
@@ -628,6 +636,14 @@
};

&dsi_sharp_1080_cmd {
	qcom,esd-check-enabled;
	qcom,mdss-dsi-panel-status-check-mode = "reg_read";
	qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a];
	qcom,mdss-dsi-panel-status-command-state = "dsi_hs_mode";
	qcom,mdss-dsi-panel-status-value = <0x9c>;
	qcom,mdss-dsi-panel-on-check-value = <0x9c>;
	qcom,mdss-dsi-panel-status-read-length = <1>;

	qcom,mdss-dsi-display-timings {
		timing@0{
			qcom,mdss-dsi-panel-phy-timings = [00 1A 06 06 22 20 07
+3 −2
Original line number Diff line number Diff line
@@ -33,8 +33,9 @@
		clock-names = "gcc_iface", "gcc_bus", "gcc_nrt_bus",
				"iface_clk", "core_clk", "vsync_clk",
				"lut_clk", "rot_clk";
		clock-rate = <0 0 0 0 300000000 19200000 300000000>;
		clock-max-rate = <0 0 0 0 460000000 19200000 460000000>;
		clock-rate = <0 0 0 0 300000000 19200000 300000000 19200000>;
		clock-max-rate = <0 0 0 0 460000000 19200000 460000000
					460000000>;

		sde-vdd-supply = <&mdss_core_gdsc>;
		mmcx-supply = <&VDD_MMCX_LEVEL>;
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@

&mdss_mdp {
	qcom,fullsize-va-map;
	qcom,sde-min-core-ib-kbps = <0>;
	qcom,sde-min-llcc-ib-kbps = <0>;
};

&mdss_rotator {
+1 −1
Original line number Diff line number Diff line
@@ -1593,7 +1593,7 @@ static int disp_cc_sm8150_probe(struct platform_device *pdev)
	clk_trion_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);

	/* Enable clock gating for DSI and MDP clocks */
	regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x670, 0x670);
	regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);

	ret = qcom_cc_really_probe(pdev, &disp_cc_sm8150_desc, regmap);
	if (ret) {
+61 −37
Original line number Diff line number Diff line
@@ -39,8 +39,11 @@ struct dp_audio_private {
	struct completion hpd_comp;
	struct workqueue_struct *notify_workqueue;
	struct delayed_work notify_delayed_work;
	struct mutex ops_lock;

	struct dp_audio dp_audio;

	atomic_t acked;
};

static u32 dp_audio_get_header(struct dp_catalog_audio *catalog,
@@ -416,14 +419,14 @@ static int dp_audio_info_setup(struct platform_device *pdev,
		return rc;
	}

	mutex_lock(&audio->dp_audio.ops_lock);
	mutex_lock(&audio->ops_lock);

	audio->channels = params->num_of_channels;

	if (audio->panel->stream_id >= DP_STREAM_MAX) {
		pr_err("invalid stream id: %d\n", audio->panel->stream_id);
		rc = -EINVAL;
		mutex_unlock(&audio->dp_audio.ops_lock);
		mutex_unlock(&audio->ops_lock);
		return rc;
	}

@@ -432,7 +435,7 @@ static int dp_audio_info_setup(struct platform_device *pdev,
	dp_audio_safe_to_exit_level(audio);
	dp_audio_enable(audio, true);

	mutex_unlock(&audio->dp_audio.ops_lock);
	mutex_unlock(&audio->ops_lock);
	return rc;
}

@@ -506,10 +509,11 @@ static void dp_audio_teardown_done(struct platform_device *pdev)
	if (IS_ERR(audio))
		return;

	mutex_lock(&audio->dp_audio.ops_lock);
	mutex_lock(&audio->ops_lock);
	dp_audio_enable(audio, false);
	mutex_unlock(&audio->dp_audio.ops_lock);
	mutex_unlock(&audio->ops_lock);

	atomic_set(&audio->acked, 1);
	complete_all(&audio->hpd_comp);

	pr_debug("audio engine disabled\n");
@@ -542,8 +546,10 @@ static int dp_audio_ack_done(struct platform_device *pdev, u32 ack)

	pr_debug("acknowledging audio (%d)\n", ack_hpd);

	if (!audio->engine_on)
	if (!audio->engine_on) {
		atomic_set(&audio->acked, 1);
		complete_all(&audio->hpd_comp);
	}
end:
	return rc;
}
@@ -566,16 +572,13 @@ static int dp_audio_codec_ready(struct platform_device *pdev)
	return rc;
}

static int dp_audio_register_ext_disp(struct dp_audio *dp_audio)
static int dp_audio_register_ext_disp(struct dp_audio_private *audio)
{
	int rc = 0;
	struct device_node *pd = NULL;
	const char *phandle = "qcom,ext-disp";
	struct msm_ext_disp_init_data *ext;
	struct msm_ext_disp_audio_codec_ops *ops;
	struct dp_audio_private *audio;

	audio = container_of(dp_audio, struct dp_audio_private, dp_audio);

	ext = &audio->ext_audio_data;
	ops = &ext->codec_ops;
@@ -624,15 +627,12 @@ static int dp_audio_register_ext_disp(struct dp_audio *dp_audio)
	return rc;
}

static int dp_audio_deregister_ext_disp(struct dp_audio *dp_audio)
static int dp_audio_deregister_ext_disp(struct dp_audio_private *audio)
{
	int rc = 0;
	struct device_node *pd = NULL;
	const char *phandle = "qcom,ext-disp";
	struct msm_ext_disp_init_data *ext;
	struct dp_audio_private *audio;

	audio = container_of(dp_audio, struct dp_audio_private, dp_audio);

	ext = &audio->ext_audio_data;

@@ -669,9 +669,14 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state)
	int rc = 0;
	struct msm_ext_disp_init_data *ext = &audio->ext_audio_data;

	if (!ext->intf_ops.audio_notify)
	atomic_set(&audio->acked, 0);

	if (!ext->intf_ops.audio_notify) {
		pr_err("audio notify not defined\n");
		goto end;
	}

	reinit_completion(&audio->hpd_comp);
	rc = ext->intf_ops.audio_notify(audio->ext_pdev,
			&ext->codec, state);
	if (rc) {
@@ -679,8 +684,10 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state)
		goto end;
	}

	reinit_completion(&audio->hpd_comp);
	rc = wait_for_completion_timeout(&audio->hpd_comp, HZ * 5);
	if (atomic_read(&audio->acked))
		goto end;

	rc = wait_for_completion_timeout(&audio->hpd_comp, HZ * 4);
	if (!rc) {
		pr_err("timeout. state=%d err=%d\n", state, rc);
		rc = -ETIMEDOUT;
@@ -692,6 +699,30 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state)
	return rc;
}

static int dp_audio_config(struct dp_audio_private *audio, u32 state)
{
	int rc = 0;
	struct msm_ext_disp_init_data *ext = &audio->ext_audio_data;

	if (!ext || !ext->intf_ops.audio_config) {
		pr_err("audio_config not defined\n");
		goto end;
	}

	/*
	 * DP Audio sets default STREAM_0 only, other streams are
	 * set by audio driver based on the hardware/software support.
	 */
	if (audio->panel->stream_id == DP_STREAM_0) {
		rc = ext->intf_ops.audio_config(audio->ext_pdev,
				&ext->codec, state);
		if (rc)
			pr_err("failed to config audio, err=%d\n", rc);
	}
end:
	return rc;
}

static int dp_audio_on(struct dp_audio *dp_audio)
{
	int rc = 0;
@@ -713,15 +744,9 @@ static int dp_audio_on(struct dp_audio *dp_audio)

	audio->session_on = true;

	if (ext->intf_ops.audio_config) {
		rc = ext->intf_ops.audio_config(audio->ext_pdev,
				&ext->codec,
				EXT_DISPLAY_CABLE_CONNECT);
		if (rc) {
			pr_err("failed to config audio, err=%d\n", rc);
	rc = dp_audio_config(audio, EXT_DISPLAY_CABLE_CONNECT);
	if (rc)
		goto end;
		}
	}

	rc = dp_audio_notify(audio, EXT_DISPLAY_CABLE_CONNECT);
	if (rc)
@@ -757,13 +782,7 @@ static int dp_audio_off(struct dp_audio *dp_audio)

	pr_debug("success\n");
end:
	if (ext->intf_ops.audio_config) {
		rc = ext->intf_ops.audio_config(audio->ext_pdev,
				&ext->codec,
				EXT_DISPLAY_CABLE_DISCONNECT);
		if (rc)
			pr_err("failed to config audio, err=%d\n", rc);
	}
	dp_audio_config(audio, EXT_DISPLAY_CABLE_DISCONNECT);

	audio->session_on = false;
	audio->engine_on  = false;
@@ -830,17 +849,19 @@ struct dp_audio *dp_audio_get(struct platform_device *pdev,
	audio->panel = panel;
	audio->catalog = catalog;

	atomic_set(&audio->acked, 0);

	dp_audio = &audio->dp_audio;

	mutex_init(&dp_audio->ops_lock);
	mutex_init(&audio->ops_lock);

	dp_audio->on  = dp_audio_on;
	dp_audio->off = dp_audio_off;
	dp_audio->register_ext_disp = dp_audio_register_ext_disp;
	dp_audio->deregister_ext_disp = dp_audio_deregister_ext_disp;

	catalog->init(catalog);

	dp_audio_register_ext_disp(audio);

	return dp_audio;

error_notify_workqueue:
@@ -857,7 +878,10 @@ void dp_audio_put(struct dp_audio *dp_audio)
		return;

	audio = container_of(dp_audio, struct dp_audio_private, dp_audio);
	mutex_destroy(&dp_audio->ops_lock);

	dp_audio_deregister_ext_disp(audio);

	mutex_destroy(&audio->ops_lock);

	dp_audio_destroy_notify_workqueue(audio);

Loading