From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Paulo Zanoni <przanoni@gmail.com>
Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: Re: [PATCH 2/4] drm/i915: add intel_dp_power_get/put
Date: Wed, 23 Apr 2014 12:45:04 +0300 [thread overview]
Message-ID: <20140423094504.GF18465@intel.com> (raw)
In-Reply-To: <1398207345-1865-2-git-send-email-przanoni@gmail.com>
On Tue, Apr 22, 2014 at 07:55:43PM -0300, Paulo Zanoni wrote:
> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>
> This was suggested by Chris on his review to the first version of
> "drm/i915: get power domain in case the BIOS enabled eDP VDD". Well,
> at least that's what I understood from his comment :)
>
> The downside of this patch is that in a few places we will call
> intel_display_port_power_domain() twice instead of once.
>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 61 ++++++++++++++++++++---------------------
> 1 file changed, 29 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 44df493..b385b03 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1063,13 +1063,30 @@ static u32 ironlake_get_pp_control(struct intel_dp *intel_dp)
> return control;
> }
>
> +static void intel_dp_power_get(struct intel_encoder *encoder)
> +{
> + struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> + enum intel_display_power_domain power_domain;
> +
> + power_domain = intel_display_port_power_domain(encoder);
> + intel_display_power_get(dev_priv, power_domain);
> +}
> +
> +static void intel_dp_power_put(struct intel_encoder *encoder)
> +{
> + struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> + enum intel_display_power_domain power_domain;
> +
> + power_domain = intel_display_port_power_domain(encoder);
> + intel_display_power_put(dev_priv, power_domain);
> +}
There's nothing DP specific about these functions, so they could be
moved somewhere else and used for other output types as well.
> +
> static bool _edp_panel_vdd_on(struct intel_dp *intel_dp)
> {
> struct drm_device *dev = intel_dp_to_dev(intel_dp);
> struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> struct intel_encoder *intel_encoder = &intel_dig_port->base;
> struct drm_i915_private *dev_priv = dev->dev_private;
> - enum intel_display_power_domain power_domain;
> u32 pp;
> u32 pp_stat_reg, pp_ctrl_reg;
> bool need_to_disable = !intel_dp->want_panel_vdd;
> @@ -1082,8 +1099,7 @@ static bool _edp_panel_vdd_on(struct intel_dp *intel_dp)
> if (edp_have_panel_vdd(intel_dp))
> return need_to_disable;
>
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_get(dev_priv, power_domain);
> + intel_dp_power_get(intel_encoder);
>
> DRM_DEBUG_KMS("Turning eDP VDD on\n");
>
> @@ -1133,7 +1149,6 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
> struct intel_digital_port *intel_dig_port =
> dp_to_dig_port(intel_dp);
> struct intel_encoder *intel_encoder = &intel_dig_port->base;
> - enum intel_display_power_domain power_domain;
>
> DRM_DEBUG_KMS("Turning eDP VDD off\n");
>
> @@ -1153,8 +1168,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
> if ((pp & POWER_TARGET_ON) == 0)
> intel_dp->last_power_cycle = jiffies;
>
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_put(dev_priv, power_domain);
> + intel_dp_power_put(intel_encoder);
> }
> }
>
> @@ -1242,7 +1256,6 @@ void intel_edp_panel_off(struct intel_dp *intel_dp)
> struct intel_encoder *intel_encoder = &intel_dig_port->base;
> struct drm_device *dev = intel_dp_to_dev(intel_dp);
> struct drm_i915_private *dev_priv = dev->dev_private;
> - enum intel_display_power_domain power_domain;
> u32 pp;
> u32 pp_ctrl_reg;
>
> @@ -1272,8 +1285,7 @@ void intel_edp_panel_off(struct intel_dp *intel_dp)
> wait_panel_off(intel_dp);
>
> /* We got a reference when we enabled the VDD. */
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_put(dev_priv, power_domain);
> + intel_dp_power_put(intel_encoder);
> }
>
> void intel_edp_backlight_on(struct intel_dp *intel_dp)
> @@ -3161,13 +3173,10 @@ intel_dp_detect(struct drm_connector *connector, bool force)
> struct drm_device *dev = connector->dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> enum drm_connector_status status;
> - enum intel_display_power_domain power_domain;
> struct edid *edid = NULL;
>
> intel_runtime_pm_get(dev_priv);
> -
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_get(dev_priv, power_domain);
> + intel_dp_power_get(intel_encoder);
>
> DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
> connector->base.id, drm_get_connector_name(connector));
> @@ -3199,8 +3208,7 @@ intel_dp_detect(struct drm_connector *connector, bool force)
> status = connector_status_connected;
>
> out:
> - intel_display_power_put(dev_priv, power_domain);
> -
> + intel_dp_power_put(intel_encoder);
> intel_runtime_pm_put(dev_priv);
>
> return status;
> @@ -3213,18 +3221,14 @@ static int intel_dp_get_modes(struct drm_connector *connector)
> struct intel_encoder *intel_encoder = &intel_dig_port->base;
> struct intel_connector *intel_connector = to_intel_connector(connector);
> struct drm_device *dev = connector->dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> - enum intel_display_power_domain power_domain;
> int ret;
>
> /* We should parse the EDID data and find out if it has an audio sink
> */
>
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_get(dev_priv, power_domain);
> -
> + intel_dp_power_get(intel_encoder);
> ret = intel_dp_get_edid_modes(connector, &intel_dp->aux.ddc);
> - intel_display_power_put(dev_priv, power_domain);
> + intel_dp_power_put(intel_encoder);
> if (ret)
> return ret;
>
> @@ -3247,14 +3251,10 @@ intel_dp_detect_audio(struct drm_connector *connector)
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> struct intel_encoder *intel_encoder = &intel_dig_port->base;
> - struct drm_device *dev = connector->dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> - enum intel_display_power_domain power_domain;
> struct edid *edid;
> bool has_audio = false;
>
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_get(dev_priv, power_domain);
> + intel_dp_power_get(intel_encoder);
>
> edid = intel_dp_get_edid(connector, &intel_dp->aux.ddc);
> if (edid) {
> @@ -3262,7 +3262,7 @@ intel_dp_detect_audio(struct drm_connector *connector)
> kfree(edid);
> }
>
> - intel_display_power_put(dev_priv, power_domain);
> + intel_dp_power_put(intel_encoder);
>
> return has_audio;
> }
> @@ -3801,11 +3801,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>
> /* The VDD bit needs a power domain reference, so if the bit is already
> * enabled when we boot, grab this reference. */
> - if (edp_have_panel_vdd(intel_dp)) {
> - enum intel_display_power_domain power_domain;
> - power_domain = intel_display_port_power_domain(intel_encoder);
> - intel_display_power_get(dev_priv, power_domain);
> - }
> + if (edp_have_panel_vdd(intel_dp))
> + intel_dp_power_get(intel_encoder);
>
> /* Cache DPCD and EDID for edp. */
> intel_edp_panel_vdd_on(intel_dp);
> --
> 1.9.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
next prev parent reply other threads:[~2014-04-23 9:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-09 21:47 [PATCH] drm/i915: get power domain in case the BIOS enabled eDP VDD Paulo Zanoni
2014-04-10 7:21 ` Daniel Vetter
2014-04-10 7:36 ` Chris Wilson
2014-04-11 13:21 ` Daniel Vetter
2014-04-22 22:55 ` [PATCH 1/4] " Paulo Zanoni
2014-04-22 22:55 ` [PATCH 2/4] drm/i915: add intel_dp_power_get/put Paulo Zanoni
2014-04-23 9:45 ` Ville Syrjälä [this message]
2014-04-24 13:49 ` [PATCH 2/4] drm/i915: add intel_encoder_power_get/put Paulo Zanoni
2014-04-24 14:11 ` Ville Syrjälä
2014-04-24 15:14 ` Daniel Vetter
2014-04-22 22:55 ` [PATCH 3/4] drm/i915: remove redundant is_edp() check Paulo Zanoni
2014-04-22 22:55 ` [PATCH 4/4] drm/i915: remove useless runtime PM get call Paulo Zanoni
2014-04-23 9:52 ` Ville Syrjälä
2014-04-24 13:50 ` [PATCH 4/4] drm/i915: remove useless runtime PM get calls Paulo Zanoni
2014-04-24 14:05 ` Ville Syrjälä
2014-07-14 15:59 ` Daniel Vetter
2014-04-23 6:59 ` [PATCH 1/4] drm/i915: get power domain in case the BIOS enabled eDP VDD Daniel Vetter
2014-04-23 11:02 ` Jani Nikula
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140423094504.GF18465@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=paulo.r.zanoni@intel.com \
--cc=przanoni@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.