From mboxrd@z Thu Jan 1 00:00:00 1970 From: Siva Chandra Subject: [PATCH] drm/i915: Add a DRM property "psr" Date: Tue, 18 Mar 2014 12:51:07 -0700 Message-ID: <1395172267-9203-1-git-send-email-sivachandra@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-ve0-f202.google.com (mail-ve0-f202.google.com [209.85.128.202]) by gabe.freedesktop.org (Postfix) with ESMTP id 2BB4D6E321 for ; Tue, 18 Mar 2014 12:51:09 -0700 (PDT) Received: by mail-ve0-f202.google.com with SMTP id pa12so947513veb.5 for ; Tue, 18 Mar 2014 12:51:07 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org This property helps one turn PSR "on" and "off" via xrandr. The default value is same as that of the module param i915.enable_psr. Signed-off-by: Siva Chandra --- drivers/gpu/drm/i915/i915_drv.h | 6 ++++++ drivers/gpu/drm/i915/intel_dp.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 70fbe90..83e6303 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1607,6 +1607,7 @@ typedef struct drm_i915_private { struct drm_property *broadcast_rgb_property; struct drm_property *force_audio_property; + struct drm_property *psr_property; uint32_t hw_context_size; struct list_head context_list; @@ -1661,6 +1662,11 @@ enum hdmi_force_audio { HDMI_AUDIO_ON, /* force turn on HDMI audio */ }; +enum psr_state { + EDP_PSR_ON, + EDP_PSR_OFF +}; + #define I915_GTT_OFFSET_NONE ((u32)-1) struct drm_i915_gem_object_ops { diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 59ee4dc..c4546fa 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -3197,6 +3197,33 @@ static int intel_dp_get_modes(struct drm_connector *connector) return 0; } +static const struct drm_prop_enum_list psr_names[] = { + { EDP_PSR_ON, "on" }, + { EDP_PSR_OFF, "off" } +}; + +static void intel_attach_psr_property(struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_i915_private *dev_priv = dev->dev_private; + struct drm_property *prop; + + prop = dev_priv->psr_property; + if (prop == NULL) { + prop = drm_property_create_enum( + dev, + i915.enable_psr ? EDP_PSR_ON : EDP_PSR_OFF, + "psr", + psr_names, + ARRAY_SIZE(psr_names)); + if (prop == NULL) + return; + + dev_priv->psr_property = prop; + } + drm_object_attach_property(&connector->base, prop, 0); +} + static bool intel_dp_detect_audio(struct drm_connector *connector) { @@ -3302,6 +3329,15 @@ intel_dp_set_property(struct drm_connector *connector, goto done; } + if (is_edp(intel_dp) && property == dev_priv->psr_property) { + if (val == EDP_PSR_ON) + intel_edp_psr_enable(intel_dp); + else + intel_edp_psr_disable(intel_dp); + + return 0; + } + return -EINVAL; done: @@ -3424,6 +3460,7 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect { struct intel_connector *intel_connector = to_intel_connector(connector); + intel_attach_psr_property(connector); intel_attach_force_audio_property(connector); intel_attach_broadcast_rgb_property(connector); intel_dp->color_range_auto = true; -- 1.9.0.279.gdc9e3eb