diff mbox

[12/12] DO_NOT_MERGE: drm/i915: Hack to enable lspcon initialization

Message ID 1459771308-4405-12-git-send-email-shashank.sharma@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sharma, Shashank April 4, 2016, 12:01 p.m. UTC
This patch adds a hack to enable lspcon on GEN9 devices.
This should not be merged, and the hack must be replaced
by proper VBT parsing logic.

Expecting this patch to enable lspcon bits in VBT:
https://lists.freedesktop.org/archives/intel-gfx/2016-March/089541.html

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c    | 15 +++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  4 ++++
 drivers/gpu/drm/i915/intel_lspcon.c | 10 ++++++++++
 3 files changed, 29 insertions(+)

Comments

Jani Nikula April 6, 2016, 12:18 p.m. UTC | #1
On Mon, 04 Apr 2016, Shashank Sharma <shashank.sharma@intel.com> wrote:
> This patch adds a hack to enable lspcon on GEN9 devices.
> This should not be merged, and the hack must be replaced
> by proper VBT parsing logic.
>
> Expecting this patch to enable lspcon bits in VBT:
> https://lists.freedesktop.org/archives/intel-gfx/2016-March/089541.html

FYI, an updated version of that patch has been pushed now.

BR,
Jani.

>
> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c    | 15 +++++++++++++++
>  drivers/gpu/drm/i915/intel_drv.h    |  4 ++++
>  drivers/gpu/drm/i915/intel_lspcon.c | 10 ++++++++++
>  3 files changed, 29 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 91654ff..f6c2869 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2169,6 +2169,21 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	intel_encoder->cloneable = 0;
>  
> +
> +	/* Check if LSPCON is configured on this port */
> +	if (is_lspcon_present_on_port(dev_priv, intel_dig_port->port)) {
> +		if (!intel_lspcon_init_connector(intel_dig_port)) {
> +			DRM_DEBUG_KMS("LSPCON configured for port %c\n",
> +				port_name(intel_dig_port->port));
> +			return;
> +		} else {
> +			DRM_ERROR("Can't set LSPCON(port %c), falling to DP/HDMI\n",
> +				port_name(intel_dig_port->port));
> +			init_dp = true;
> +			init_hdmi = true;
> +		}
> +	}
> +
>  	if (init_dp) {
>  		if (!intel_ddi_init_dp_connector(intel_dig_port))
>  			goto err;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index a6ec946..922852c 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1345,6 +1345,10 @@ void intel_dsi_init(struct drm_device *dev);
>  /* intel_dvo.c */
>  void intel_dvo_init(struct drm_device *dev);
>  
> +/* intel_lspcon.c */
> +int intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port);
> +bool is_lspcon_present_on_port(struct drm_i915_private * dev_priv,
> +		enum port port);
>  
>  /* legacy fbdev emulation in intel_fbdev.c */
>  #ifdef CONFIG_DRM_FBDEV_EMULATION
> diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
> index 20f90e0..96e4c71 100644
> --- a/drivers/gpu/drm/i915/intel_lspcon.c
> +++ b/drivers/gpu/drm/i915/intel_lspcon.c
> @@ -397,6 +397,16 @@ static const struct drm_connector_helper_funcs lspcon_connector_helper_funcs = {
>  	.best_encoder = intel_best_encoder,
>  };
>  
> +bool is_lspcon_present_on_port(struct drm_i915_private *dev_priv, enum port port)
> +{
> +	/*
> +	* TODO: HACK
> +	* Replace this with proper VBT child dev config check
> +	* logic once that patch is available in tree
> +	*/
> +	return IS_GEN9(dev_priv->dev) && (port == PORT_B);
> +}
> +
>  int intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
>  {
>  	int ret;
Sharma, Shashank April 6, 2016, 1:02 p.m. UTC | #2
Regards
Shashank
>>
>> Expecting this patch to enable lspcon bits in VBT:
>> https://lists.freedesktop.org/archives/intel-gfx/2016-March/089541.html
>
> FYI, an updated version of that patch has been pushed now.
>
> BR,
> Jani.
Thanks Jani, will have a look.
>
>>
>> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_ddi.c    | 15 +++++++++++++++
>>   drivers/gpu/drm/i915/intel_drv.h    |  4 ++++
>>   drivers/gpu/drm/i915/intel_lspcon.c | 10 ++++++++++
>>   3 files changed, 29 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
>> index 91654ff..f6c2869 100644
>> --- a/drivers/gpu/drm/i915/intel_ddi.c
>> +++ b/drivers/gpu/drm/i915/intel_ddi.c
>> @@ -2169,6 +2169,21 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
>>   	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>>   	intel_encoder->cloneable = 0;
>>
>> +
>> +	/* Check if LSPCON is configured on this port */
>> +	if (is_lspcon_present_on_port(dev_priv, intel_dig_port->port)) {
>> +		if (!intel_lspcon_init_connector(intel_dig_port)) {
>> +			DRM_DEBUG_KMS("LSPCON configured for port %c\n",
>> +				port_name(intel_dig_port->port));
>> +			return;
>> +		} else {
>> +			DRM_ERROR("Can't set LSPCON(port %c), falling to DP/HDMI\n",
>> +				port_name(intel_dig_port->port));
>> +			init_dp = true;
>> +			init_hdmi = true;
>> +		}
>> +	}
>> +
>>   	if (init_dp) {
>>   		if (!intel_ddi_init_dp_connector(intel_dig_port))
>>   			goto err;
>> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
>> index a6ec946..922852c 100644
>> --- a/drivers/gpu/drm/i915/intel_drv.h
>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>> @@ -1345,6 +1345,10 @@ void intel_dsi_init(struct drm_device *dev);
>>   /* intel_dvo.c */
>>   void intel_dvo_init(struct drm_device *dev);
>>
>> +/* intel_lspcon.c */
>> +int intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port);
>> +bool is_lspcon_present_on_port(struct drm_i915_private * dev_priv,
>> +		enum port port);
>>
>>   /* legacy fbdev emulation in intel_fbdev.c */
>>   #ifdef CONFIG_DRM_FBDEV_EMULATION
>> diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
>> index 20f90e0..96e4c71 100644
>> --- a/drivers/gpu/drm/i915/intel_lspcon.c
>> +++ b/drivers/gpu/drm/i915/intel_lspcon.c
>> @@ -397,6 +397,16 @@ static const struct drm_connector_helper_funcs lspcon_connector_helper_funcs = {
>>   	.best_encoder = intel_best_encoder,
>>   };
>>
>> +bool is_lspcon_present_on_port(struct drm_i915_private *dev_priv, enum port port)
>> +{
>> +	/*
>> +	* TODO: HACK
>> +	* Replace this with proper VBT child dev config check
>> +	* logic once that patch is available in tree
>> +	*/
>> +	return IS_GEN9(dev_priv->dev) && (port == PORT_B);
>> +}
>> +
>>   int intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
>>   {
>>   	int ret;
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 91654ff..f6c2869 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2169,6 +2169,21 @@  void intel_ddi_init(struct drm_device *dev, enum port port)
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
 	intel_encoder->cloneable = 0;
 
+
+	/* Check if LSPCON is configured on this port */
+	if (is_lspcon_present_on_port(dev_priv, intel_dig_port->port)) {
+		if (!intel_lspcon_init_connector(intel_dig_port)) {
+			DRM_DEBUG_KMS("LSPCON configured for port %c\n",
+				port_name(intel_dig_port->port));
+			return;
+		} else {
+			DRM_ERROR("Can't set LSPCON(port %c), falling to DP/HDMI\n",
+				port_name(intel_dig_port->port));
+			init_dp = true;
+			init_hdmi = true;
+		}
+	}
+
 	if (init_dp) {
 		if (!intel_ddi_init_dp_connector(intel_dig_port))
 			goto err;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a6ec946..922852c 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1345,6 +1345,10 @@  void intel_dsi_init(struct drm_device *dev);
 /* intel_dvo.c */
 void intel_dvo_init(struct drm_device *dev);
 
+/* intel_lspcon.c */
+int intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port);
+bool is_lspcon_present_on_port(struct drm_i915_private * dev_priv,
+		enum port port);
 
 /* legacy fbdev emulation in intel_fbdev.c */
 #ifdef CONFIG_DRM_FBDEV_EMULATION
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index 20f90e0..96e4c71 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -397,6 +397,16 @@  static const struct drm_connector_helper_funcs lspcon_connector_helper_funcs = {
 	.best_encoder = intel_best_encoder,
 };
 
+bool is_lspcon_present_on_port(struct drm_i915_private *dev_priv, enum port port)
+{
+	/*
+	* TODO: HACK
+	* Replace this with proper VBT child dev config check
+	* logic once that patch is available in tree
+	*/
+	return IS_GEN9(dev_priv->dev) && (port == PORT_B);
+}
+
 int intel_lspcon_init_connector(struct intel_digital_port *intel_dig_port)
 {
 	int ret;