diff mbox

[3/3] drm/i915/bxt: add support for HPD long/short pulse detection on HPD_PORT_A pin

Message ID 1437428619-30160-4-git-send-email-imre.deak@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Imre Deak July 20, 2015, 9:43 p.m. UTC
This is a requirement for enabling display port HPD support on the port
A HPD pin. This support is to be added by follow-up patches.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/i915_irq.c | 18 +++++++++++++++++-
 drivers/gpu/drm/i915/i915_reg.h |  5 +++++
 2 files changed, 22 insertions(+), 1 deletion(-)

Comments

Sivakumar Thulasimani July 22, 2015, 8:31 a.m. UTC | #1
On 7/21/2015 3:13 AM, Imre Deak wrote:
> This is a requirement for enabling display port HPD support on the port
> A HPD pin. This support is to be added by follow-up patches.
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_irq.c | 18 +++++++++++++++++-
>   drivers/gpu/drm/i915/i915_reg.h |  5 +++++
>   2 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 4ad7a31..02b9e73 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1227,6 +1227,22 @@ static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv,
>   	return ret;
>   }
>   
> +static bool bxt_port_hotplug_long_detect(enum port port, u32 val)
> +{
> +	switch (port) {
> +	case PORT_A:
> +		return val & BXT_PORTA_HOTPLUG_LONG_DETECT;
> +	case PORT_B:
> +		return val & PORTB_HOTPLUG_LONG_DETECT;
> +	case PORT_C:
> +		return val & PORTC_HOTPLUG_LONG_DETECT;
> +	case PORT_D:
> +		return val & PORTD_HOTPLUG_LONG_DETECT;
> +	default:
> +		return false;
> +	}
> +}
> +
>   static bool pch_port_hotplug_long_detect(enum port port, u32 val)
>   {
>   	switch (port) {
> @@ -1961,7 +1977,7 @@ static void bxt_hpd_handler(struct drm_device *dev, uint32_t iir_status)
>   	I915_WRITE(BXT_HOTPLUG_CTL, hp_control);
>   
>   	intel_get_hpd_pins(&pin_mask, &long_mask, hp_trigger, hp_control,
> -			   hpd_bxt, pch_port_hotplug_long_detect);
> +			   hpd_bxt, bxt_port_hotplug_long_detect);
>   	intel_hpd_irq_handler(dev, pin_mask, long_mask);
>   }
>   
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index fc70035..be166b3 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -5942,6 +5942,11 @@ enum skl_disp_power_wells {
>   
>   /* digital port hotplug */
>   #define PCH_PORT_HOTPLUG        0xc4030		/* SHOTPLUG_CTL */
> +#define BXT_PORTA_HOTPLUG_ENABLE	(1 << 28)
> +#define BXT_PORTA_HOTPLUG_STATUS_MASK	(0x3 << 24)
> +#define  BXT_PORTA_HOTPLUG_NO_DETECT	(0 << 24)
> +#define  BXT_PORTA_HOTPLUG_SHORT_DETECT	(1 << 24)
> +#define  BXT_PORTA_HOTPLUG_LONG_DETECT	(2 << 24)
>   #define PORTD_HOTPLUG_ENABLE            (1 << 20)
>   #define PORTD_PULSE_DURATION_2ms        (0)
>   #define PORTD_PULSE_DURATION_4_5ms      (1 << 18)

Reviewed-by: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 4ad7a31..02b9e73 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1227,6 +1227,22 @@  static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv,
 	return ret;
 }
 
+static bool bxt_port_hotplug_long_detect(enum port port, u32 val)
+{
+	switch (port) {
+	case PORT_A:
+		return val & BXT_PORTA_HOTPLUG_LONG_DETECT;
+	case PORT_B:
+		return val & PORTB_HOTPLUG_LONG_DETECT;
+	case PORT_C:
+		return val & PORTC_HOTPLUG_LONG_DETECT;
+	case PORT_D:
+		return val & PORTD_HOTPLUG_LONG_DETECT;
+	default:
+		return false;
+	}
+}
+
 static bool pch_port_hotplug_long_detect(enum port port, u32 val)
 {
 	switch (port) {
@@ -1961,7 +1977,7 @@  static void bxt_hpd_handler(struct drm_device *dev, uint32_t iir_status)
 	I915_WRITE(BXT_HOTPLUG_CTL, hp_control);
 
 	intel_get_hpd_pins(&pin_mask, &long_mask, hp_trigger, hp_control,
-			   hpd_bxt, pch_port_hotplug_long_detect);
+			   hpd_bxt, bxt_port_hotplug_long_detect);
 	intel_hpd_irq_handler(dev, pin_mask, long_mask);
 }
 
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index fc70035..be166b3 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5942,6 +5942,11 @@  enum skl_disp_power_wells {
 
 /* digital port hotplug */
 #define PCH_PORT_HOTPLUG        0xc4030		/* SHOTPLUG_CTL */
+#define BXT_PORTA_HOTPLUG_ENABLE	(1 << 28)
+#define BXT_PORTA_HOTPLUG_STATUS_MASK	(0x3 << 24)
+#define  BXT_PORTA_HOTPLUG_NO_DETECT	(0 << 24)
+#define  BXT_PORTA_HOTPLUG_SHORT_DETECT	(1 << 24)
+#define  BXT_PORTA_HOTPLUG_LONG_DETECT	(2 << 24)
 #define PORTD_HOTPLUG_ENABLE            (1 << 20)
 #define PORTD_PULSE_DURATION_2ms        (0)
 #define PORTD_PULSE_DURATION_4_5ms      (1 << 18)