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

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

Merge "drm/msm/sde: support to control layer mixer usage"

parents 07251f16 c6041176
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ Required properties:
Optional properties:
- qcom,display-type: display type of this manager. It could be "primary",
  "secondary", "tertiary", etc.
- qcom,display-topology-control: display topology control. It could be
  "force-mixer", "force-tiling"
- qcom,non-pluggable: Boolean to indicate if display is non pluggable.
- qcom,skip_ddc: Boolean to indicate if display skips ddc function.
- qcom,customize-modes: Customized modes when it's non pluggable display.
@@ -37,6 +39,7 @@ Example:
		compatible = "qcom,hdmi-display";
		label = "hdmi_display";
		qcom,display-type = "secondary";
		qcom,display-topology-control = "force-mixer";
		qcom,non-pluggable;
		qcom,customize-modes {
			qcom,customize-mode-id@0 {
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@ Optional properties:
- reg: reg property.
- qcom,display-type: display type this plane is mapped to. It could be
 "primary", "secondary" and "tertiary".
- qcom,display-topology-control: display topology control. It could be
  "force-mixer", "force-tiling"
- qcom,plane-name: plane name array for this virtual plane. It could be
 "rgb0", "rgb1", "rgb2", "rgb3", "vig0", "vig1", "vig2", "vig3", "dma0", "dma1",
 "dma2", "dma3", "cursor0", "cursor1".
+20 −0
Original line number Diff line number Diff line
@@ -1142,6 +1142,8 @@ static int dsi_display_parse_dt(struct dsi_display *display)
	int i, size;
	u32 phy_count = 0;
	struct device_node *of_node;
	const char *name;
	u32 top = 0;

	/* Parse controllers */
	for (i = 0; i < MAX_DSI_CTRLS_PER_DISPLAY; i++) {
@@ -1189,6 +1191,24 @@ static int dsi_display_parse_dt(struct dsi_display *display)
					"qcom,dsi-split-swap");
	}

	rc = of_property_read_string(display->pdev->dev.of_node,
				"qcom,display-topology-control",
				&name);
	if (rc) {
		SDE_ERROR("unable to get qcom,display-topology-control,rc=%d\n",
				rc);
	} else {
		SDE_DEBUG("%s qcom,display-topology-control = %s\n",
				__func__, name);

		if (!strcmp(name, "force-mixer"))
			top = BIT(SDE_RM_TOPCTL_FORCE_MIXER);
		else if (!strcmp(name, "force-tiling"))
			top = BIT(SDE_RM_TOPCTL_FORCE_TILING);

		display->display_topology = top;
	}

	if (of_get_property(display->pdev->dev.of_node, "qcom,dsi-panel",
			&size)) {
		display->panel_count = size / sizeof(int);
+2 −0
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ struct dsi_display_clk_info {
 * @root:                 Debugfs root directory
 * @cont_splash_enabled:  Early splash status.
 * @dsi_split_swap:       Swap dsi output in split mode.
 * @display_topology: user requested display topology
 */
struct dsi_display {
	struct platform_device *pdev;
@@ -163,6 +164,7 @@ struct dsi_display {

	bool cont_splash_enabled;
	bool dsi_split_swap;
	u32 display_topology;
};

int dsi_display_dev_probe(struct platform_device *pdev);
+23 −0
Original line number Diff line number Diff line
@@ -288,6 +288,29 @@ static const struct drm_bridge_funcs dsi_bridge_ops = {
	.mode_set     = dsi_bridge_mode_set,
};

int dsi_display_set_top_ctl(struct drm_connector *connector,
			struct drm_display_mode *adj_mode, void *display)
{
	int rc = 0;
	struct dsi_display *dsi_display = (struct dsi_display *)display;

	if (!dsi_display) {
		SDE_ERROR("dsi_display is NULL\n");
		return -EINVAL;
	}

	if (dsi_display->display_topology) {
		SDE_DEBUG("%s, set display topology %d\n",
				__func__, dsi_display->display_topology);

		msm_property_set_property(sde_connector_get_propinfo(connector),
			sde_connector_get_property_values(connector->state),
			CONNECTOR_PROP_TOPOLOGY_CONTROL,
			dsi_display->display_topology);
	}
	return rc;
}

int dsi_conn_post_init(struct drm_connector *connector,
		void *info,
		void *display)
Loading