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

Commit b69c9c61 authored by Ray Zhang's avatar Ray Zhang
Browse files

drm/bridge: add support to specify preferred mode



Add the support of setting preferred display mode in lt9611
driver, so users can select which display mode to use.

CRs-Fixed: 2186423
Change-Id: I2ad4a0e99f13783f954c4177536d6ce48f5f65fd
Signed-off-by: default avatarRay Zhang <rayz@codeaurora.org>
parent 2b029ca3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ Required properties:
	-- lt,supply-post-off-sleep: time to sleep (ms) after turning off

	- lt,non-pluggable: Boolean to indicate if display is non pluggable.
	- lt,preferred-mode: Preferred display mode.
	- lt,customize-modes: Customized modes when it's non-pluggable display.
	e.g. lt,customize-mode-id@0
	-- lt,mode-h-active: Horizontal active pixels for this mode.
@@ -66,6 +67,8 @@ Example:
		lt,reset-gpio = <&tlmm 134 0x0>;
		lt,hdmi-ps-gpio = <&tlmm 136 0x0>;
		lt,hdmi-en-gpio = <&tlmm 137 0x0>;
		lt,non-pluggable;
		lt,preferred-mode = "1920x1080";

		vcc-supply = <&pm660l_l6>;
		vdd-supply = <&pm660_l11>;
+18 −3
Original line number Diff line number Diff line
@@ -1688,6 +1688,22 @@ static int lt9611_get_edid_block(void *data, u8 *buf, unsigned int block,
	return 0;
}

static void lt9611_set_preferred_mode(struct drm_connector *connector)
{
	struct lt9611 *pdata = connector_to_lt9611(connector);
	struct drm_display_mode *mode;
	const char *string;

	/* use specified mode as preferred */
	if (!of_property_read_string(pdata->dev->of_node,
			"lt,preferred-mode", &string)) {
		list_for_each_entry(mode, &connector->probed_modes, head) {
			if (!strcmp(mode->name, string))
				mode->type |= DRM_MODE_TYPE_PREFERRED;
		}
	}
}

static int lt9611_connector_get_modes(struct drm_connector *connector)
{
	struct lt9611 *pdata = connector_to_lt9611(connector);
@@ -1720,12 +1736,11 @@ static int lt9611_connector_get_modes(struct drm_connector *connector)
		pdata->hdmi_mode = drm_detect_hdmi_monitor(edid);
		pr_debug("hdmi_mode = %d\n", pdata->hdmi_mode);

		/* TODO: this should not be hard coded */
		drm_set_preferred_mode(connector, 1920, 1080);

		kfree(edid);
	}

	lt9611_set_preferred_mode(connector);

	return count;
}