drm/i915: Disable power asynchronously during DP AUX transfers
In a follow-up patch we will restrict holding the reference on the AUX power domain to the AUX transfer function. To avoid the unnecessary on-off-on power togglings drop the reference asynchronously. There is no reason we couldn't do this in general and also put the reference asynchronously in pps_unlock(); but that's a separate change that can be done as a follow-up. Cc: Ville Syrjala <ville.syrjala@linux.intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190509173446.31095-6-imre.deak@intel.com
This commit is contained in:
parent
e0da2d63ab
commit
f39194a7a8
|
@ -1221,7 +1221,10 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
|
||||||
to_i915(intel_dig_port->base.base.dev);
|
to_i915(intel_dig_port->base.base.dev);
|
||||||
i915_reg_t ch_ctl, ch_data[5];
|
i915_reg_t ch_ctl, ch_data[5];
|
||||||
u32 aux_clock_divider;
|
u32 aux_clock_divider;
|
||||||
intel_wakeref_t wakeref;
|
enum intel_display_power_domain aux_domain =
|
||||||
|
intel_aux_power_domain(intel_dig_port);
|
||||||
|
intel_wakeref_t aux_wakeref;
|
||||||
|
intel_wakeref_t pps_wakeref;
|
||||||
int i, ret, recv_bytes;
|
int i, ret, recv_bytes;
|
||||||
int try, clock = 0;
|
int try, clock = 0;
|
||||||
u32 status;
|
u32 status;
|
||||||
|
@ -1231,7 +1234,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
|
||||||
for (i = 0; i < ARRAY_SIZE(ch_data); i++)
|
for (i = 0; i < ARRAY_SIZE(ch_data); i++)
|
||||||
ch_data[i] = intel_dp->aux_ch_data_reg(intel_dp, i);
|
ch_data[i] = intel_dp->aux_ch_data_reg(intel_dp, i);
|
||||||
|
|
||||||
wakeref = pps_lock(intel_dp);
|
aux_wakeref = intel_display_power_get(dev_priv, aux_domain);
|
||||||
|
pps_wakeref = pps_lock(intel_dp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We will be called with VDD already enabled for dpcd/edid/oui reads.
|
* We will be called with VDD already enabled for dpcd/edid/oui reads.
|
||||||
|
@ -1377,7 +1381,8 @@ out:
|
||||||
if (vdd)
|
if (vdd)
|
||||||
edp_panel_vdd_off(intel_dp, false);
|
edp_panel_vdd_off(intel_dp, false);
|
||||||
|
|
||||||
pps_unlock(intel_dp, wakeref);
|
pps_unlock(intel_dp, pps_wakeref);
|
||||||
|
intel_display_power_put_async(dev_priv, aux_domain, aux_wakeref);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue