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

Commit b9f5e07d authored by Shobhit Kumar's avatar Shobhit Kumar Committed by Daniel Vetter
Browse files

drm/i915: Add more dev ops for MIPI sub encoder



Some panels require one time programming if they do not contain their
own eeprom for basic register initialization. The sequence is

Panel Reset --> Send OTP --> Enable Pixel Stream --> Enable the panel

v2: Based on review comments from Jani and Ville
    - Updated the commit message with more details
    - Move the new parameters out of this patch

Signed-off-by: default avatarYogesh Mohan Marimuthu <yogesh.mohan.marimuthu@intel.com>
Signed-off-by: default avatarShobhit Kumar <shobhit.kumar@intel.com>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 9c333719
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -147,6 +147,9 @@ static void intel_dsi_enable(struct intel_encoder *encoder)

	DRM_DEBUG_KMS("\n");

	if (intel_dsi->dev.dev_ops->panel_reset)
		intel_dsi->dev.dev_ops->panel_reset(&intel_dsi->dev);

	temp = I915_READ(MIPI_DEVICE_READY(pipe));
	if ((temp & DEVICE_READY) == 0) {
		temp &= ~ULPS_STATE_MASK;
@@ -162,6 +165,9 @@ static void intel_dsi_enable(struct intel_encoder *encoder)
		I915_WRITE(MIPI_DEVICE_READY(pipe), temp);
	}

	if (intel_dsi->dev.dev_ops->send_otp_cmds)
		intel_dsi->dev.dev_ops->send_otp_cmds(&intel_dsi->dev);

	if (is_cmd_mode(intel_dsi))
		I915_WRITE(MIPI_MAX_RETURN_PKT_SIZE(pipe), 8 * 4);

@@ -176,6 +182,7 @@ static void intel_dsi_enable(struct intel_encoder *encoder)
		POSTING_READ(MIPI_PORT_CTRL(pipe));
	}

	if (intel_dsi->dev.dev_ops->enable)
		intel_dsi->dev.dev_ops->enable(&intel_dsi->dev);
}

+5 −0
Original line number Diff line number Diff line
@@ -39,6 +39,11 @@ struct intel_dsi_device {
struct intel_dsi_dev_ops {
	bool (*init)(struct intel_dsi_device *dsi);

	void (*panel_reset)(struct intel_dsi_device *dsi);

	/* one time programmable commands if needed */
	void (*send_otp_cmds)(struct intel_dsi_device *dsi);

	/* This callback must be able to assume DSI commands can be sent */
	void (*enable)(struct intel_dsi_device *dsi);