diff mbox

[v2] drm/i915/lspcon: Switch back to PCON mode after output replug

Message ID 1487776252-6288-1-git-send-email-imre.deak@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Imre Deak Feb. 22, 2017, 3:10 p.m. UTC
At least a ParadTech PS175 LSPCON chip/firmware uses long instead of
short pulses to signal output unplug/plug events. This is contrary to
how branch devices normally work which use short HPD signaling. This
chip will also switch to LS mode after an unplug event, which could be
the consequence of the long HPD signaling semantics and an effort to
save power automatically. Because of this we'll fail to do AUX and
detect the output after a replug event.

To fix this make sure we are in PCON mode during connector detection.

v2:
- Switch the mode in the proper spot.

Cc: raptorteak@gmail.com
Cc: Shashank Sharma <shashank.sharma@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98912
Reported-and-tested-by: raptorteak@gmail.com
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Ville Syrjala Feb. 23, 2017, 6:15 p.m. UTC | #1
On Wed, Feb 22, 2017 at 05:10:52PM +0200, Imre Deak wrote:
> At least a ParadTech PS175 LSPCON chip/firmware uses long instead of
> short pulses to signal output unplug/plug events. This is contrary to
> how branch devices normally work which use short HPD signaling. This
> chip will also switch to LS mode after an unplug event, which could be
> the consequence of the long HPD signaling semantics and an effort to
> save power automatically. Because of this we'll fail to do AUX and
> detect the output after a replug event.
> 
> To fix this make sure we are in PCON mode during connector detection.
> 
> v2:
> - Switch the mode in the proper spot.
> 
> Cc: raptorteak@gmail.com
> Cc: Shashank Sharma <shashank.sharma@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98912
> Reported-and-tested-by: raptorteak@gmail.com
> Signed-off-by: Imre Deak <imre.deak@intel.com>

lgtm

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/intel_dp.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 024798a..e1529ff 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -4326,9 +4326,13 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
>  static enum drm_connector_status
>  intel_dp_detect_dpcd(struct intel_dp *intel_dp)
>  {
> +	struct intel_lspcon *lspcon = dp_to_lspcon(intel_dp);
>  	uint8_t *dpcd = intel_dp->dpcd;
>  	uint8_t type;
>  
> +	if (lspcon->active)
> +		lspcon_resume(lspcon);
> +
>  	if (!intel_dp_get_dpcd(intel_dp))
>  		return connector_status_disconnected;
>  
> -- 
> 2.5.0
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 024798a..e1529ff 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4326,9 +4326,13 @@  intel_dp_short_pulse(struct intel_dp *intel_dp)
 static enum drm_connector_status
 intel_dp_detect_dpcd(struct intel_dp *intel_dp)
 {
+	struct intel_lspcon *lspcon = dp_to_lspcon(intel_dp);
 	uint8_t *dpcd = intel_dp->dpcd;
 	uint8_t type;
 
+	if (lspcon->active)
+		lspcon_resume(lspcon);
+
 	if (!intel_dp_get_dpcd(intel_dp))
 		return connector_status_disconnected;