From: Gaurav K Singh <gaurav.k.si...@intel.com>

New sequences are added in the mipi sequence block of the
VBT from version 3 onwards. The sequences are added to
make the code more generic as the panel related info
are placed in the VBT.

Signed-off-by: Gaurav K Singh <gaurav.k.si...@intel.com>
Signed-off-by: Shobhit Kumar <shobhit.ku...@intel.com>
Signed-off-by: Deepak M <m.dee...@intel.com>
---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c |   84 +++++++++++++++++++++++++++-
 1 file changed, 83 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c 
b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
index 060305d..c6f66e4 100644
--- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
@@ -581,7 +581,13 @@ static const char * const seq_name[] = {
        "MIPI_SEQ_INIT_OTP",
        "MIPI_SEQ_DISPLAY_ON",
        "MIPI_SEQ_DISPLAY_OFF",
-       "MIPI_SEQ_DEASSERT_RESET"
+       "MIPI_SEQ_DEASSERT_RESET",
+       "MIPI_SEQ_BACKLIGHT_ON",
+       "MIPI_SEQ_BACKLIGHT_OFF",
+       "MIPI_SEQ_TEAR_ON",
+       "MIPI_SEQ_TEAR_OFF",
+       "MIPI_SEQ_POWER_ON",
+       "MIPI_SEQ_POWER_OFF"
 };
 
 static void generic_exec_sequence(struct intel_dsi *intel_dsi, const u8 *data)
@@ -710,12 +716,88 @@ static int vbt_panel_get_modes(struct drm_panel *panel)
        return 1;
 }
 
+static int vbt_panel_power_on(struct drm_panel *panel)
+{
+       struct vbt_panel *vbt_panel = to_vbt_panel(panel);
+       struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
+       struct drm_device *dev = intel_dsi->base.base.dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       const u8 *sequence;
+
+       sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_POWER_ON];
+       generic_exec_sequence(intel_dsi, sequence);
+
+       return 0;
+}
+
+static int vbt_panel_power_off(struct drm_panel *panel)
+{
+       struct vbt_panel *vbt_panel = to_vbt_panel(panel);
+       struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
+       struct drm_device *dev = intel_dsi->base.base.dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       const u8 *sequence;
+
+       sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_POWER_OFF];
+       generic_exec_sequence(intel_dsi, sequence);
+
+       return 0;
+}
+
+static int vbt_panel_backlight_on(struct drm_panel *panel)
+{
+       struct vbt_panel *vbt_panel = to_vbt_panel(panel);
+       struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
+       struct drm_device *dev = intel_dsi->base.base.dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       const u8 *sequence;
+
+       sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_BACKLIGHT_ON];
+       generic_exec_sequence(intel_dsi, sequence);
+
+       return 0;
+}
+
+static int vbt_panel_backlight_off(struct drm_panel *panel)
+{
+       struct vbt_panel *vbt_panel = to_vbt_panel(panel);
+       struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
+       struct drm_device *dev = intel_dsi->base.base.dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       const u8 *sequence;
+
+       sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_BACKLIGHT_OFF];
+       generic_exec_sequence(intel_dsi, sequence);
+
+       return 0;
+}
+
+static int vbt_panel_get_info(struct drm_panel *panel,
+                                       struct drm_connector *connector)
+{
+       struct intel_connector *intel_connector =
+                               to_intel_connector(connector);
+
+       if (intel_connector) {
+               connector->display_info.width_mm =
+                               intel_connector->panel.fixed_mode->width_mm;
+               connector->display_info.height_mm =
+                               intel_connector->panel.fixed_mode->height_mm;
+       }
+       return 0;
+}
+
 static const struct drm_panel_funcs vbt_panel_funcs = {
        .disable = vbt_panel_disable,
        .unprepare = vbt_panel_unprepare,
        .prepare = vbt_panel_prepare,
        .enable = vbt_panel_enable,
        .get_modes = vbt_panel_get_modes,
+       .power_on = vbt_panel_power_on,
+       .power_off = vbt_panel_power_off,
+       .backlight_on = vbt_panel_backlight_on,
+       .backlight_off = vbt_panel_backlight_off,
+       .get_info = vbt_panel_get_info,
 };
 
 struct drm_panel *vbt_panel_init(struct intel_dsi *intel_dsi, u16 panel_id)
-- 
1.7.9.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to