diff mbox series

[v2,3/3] drm/mgag200: Set .detect_ctx() and enable connector polling

Message ID 20240610141141.29527-4-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm/mgag200: Detect connector status | expand

Commit Message

Thomas Zimmermann June 10, 2024, 2:06 p.m. UTC
Set .detect_ctx() in struct drm_connector_helper_funcs to the
common helper drm_connector_helper_detect_from_ddc() and enable
polling for the connector. Mgag200 will now test for the monitor's
presence by probing the DDC in regular intervals.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/mgag200/mgag200_g200.c    | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200eh.c  | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200eh3.c | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200er.c  | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200ev.c  | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200ew3.c | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200se.c  | 1 +
 drivers/gpu/drm/mgag200/mgag200_g200wb.c  | 1 +
 drivers/gpu/drm/mgag200/mgag200_vga.c     | 6 +++++-
 9 files changed, 13 insertions(+), 1 deletion(-)

Comments

Jocelyn Falempe June 11, 2024, 2:41 p.m. UTC | #1
On 10/06/2024 16:06, Thomas Zimmermann wrote:
> Set .detect_ctx() in struct drm_connector_helper_funcs to the
> common helper drm_connector_helper_detect_from_ddc() and enable
> polling for the connector. Mgag200 will now test for the monitor's
> presence by probing the DDC in regular intervals.
> 
I've tested this series on two servers, one with physical VGA plugged, 
and one remote system, and it works as intended.

Thanks a lot for this work.

Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>

> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   drivers/gpu/drm/mgag200/mgag200_g200.c    | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200eh.c  | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200eh3.c | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200er.c  | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200ev.c  | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200ew3.c | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200se.c  | 1 +
>   drivers/gpu/drm/mgag200/mgag200_g200wb.c  | 1 +
>   drivers/gpu/drm/mgag200/mgag200_vga.c     | 6 +++++-
>   9 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200.c b/drivers/gpu/drm/mgag200/mgag200_g200.c
> index ff467b0f9cbf3..f874e29498409 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200.c
> @@ -401,6 +401,7 @@ struct mga_device *mgag200_g200_device_create(struct pci_dev *pdev, const struct
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200eh.c b/drivers/gpu/drm/mgag200/mgag200_g200eh.c
> index 6f31c5249f0b1..52bf49ead5c50 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200eh.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200eh.c
> @@ -277,6 +277,7 @@ struct mga_device *mgag200_g200eh_device_create(struct pci_dev *pdev, const stru
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200eh3.c b/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
> index 5befe8da4beb2..e7f89b2a59fd0 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
> @@ -182,6 +182,7 @@ struct mga_device *mgag200_g200eh3_device_create(struct pci_dev *pdev,
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200er.c b/drivers/gpu/drm/mgag200/mgag200_g200er.c
> index 55c275180cde2..4e8a1756138d7 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200er.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200er.c
> @@ -316,6 +316,7 @@ struct mga_device *mgag200_g200er_device_create(struct pci_dev *pdev, const stru
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ev.c b/drivers/gpu/drm/mgag200/mgag200_g200ev.c
> index 2466126140db6..d884f3cb0ec79 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200ev.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200ev.c
> @@ -321,6 +321,7 @@ struct mga_device *mgag200_g200ev_device_create(struct pci_dev *pdev, const stru
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
> index a52e60609c3de..839401e8b4654 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
> @@ -202,6 +202,7 @@ struct mga_device *mgag200_g200ew3_device_create(struct pci_dev *pdev,
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200se.c b/drivers/gpu/drm/mgag200/mgag200_g200se.c
> index 212770acdd477..a824bb8ad5791 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200se.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200se.c
> @@ -521,6 +521,7 @@ struct mga_device *mgag200_g200se_device_create(struct pci_dev *pdev, const stru
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200wb.c b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
> index cb6daa0426fbc..835df0f4fc13d 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_g200wb.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
> @@ -326,6 +326,7 @@ struct mga_device *mgag200_g200wb_device_create(struct pci_dev *pdev, const stru
>   		return ERR_PTR(ret);
>   
>   	drm_mode_config_reset(dev);
> +	drm_kms_helper_poll_init(dev);
>   
>   	return mdev;
>   }
> diff --git a/drivers/gpu/drm/mgag200/mgag200_vga.c b/drivers/gpu/drm/mgag200/mgag200_vga.c
> index 6d8982990c2c3..60568f32736dd 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_vga.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_vga.c
> @@ -12,7 +12,8 @@ static const struct drm_encoder_funcs mgag200_dac_encoder_funcs = {
>   };
>   
>   static const struct drm_connector_helper_funcs mgag200_vga_connector_helper_funcs = {
> -	.get_modes = drm_connector_helper_get_modes
> +	.get_modes = drm_connector_helper_get_modes,
> +	.detect_ctx = drm_connector_helper_detect_from_ddc
>   };
>   
>   static const struct drm_connector_funcs mgag200_vga_connector_funcs = {
> @@ -58,6 +59,9 @@ int mgag200_vga_output_init(struct mga_device *mdev)
>   	}
>   	drm_connector_helper_add(connector, &mgag200_vga_connector_helper_funcs);
>   
> +	connector->polled = DRM_CONNECTOR_POLL_CONNECT |
> +			    DRM_CONNECTOR_POLL_DISCONNECT;
> +
>   	ret = drm_connector_attach_encoder(connector, encoder);
>   	if (ret) {
>   		drm_err(dev, "drm_connector_attach_encoder() failed: %d\n", ret);
Thomas Zimmermann June 11, 2024, 3:10 p.m. UTC | #2
Hi Jocelyn

Am 11.06.24 um 16:41 schrieb Jocelyn Falempe:
>
>
> On 10/06/2024 16:06, Thomas Zimmermann wrote:
>> Set .detect_ctx() in struct drm_connector_helper_funcs to the
>> common helper drm_connector_helper_detect_from_ddc() and enable
>> polling for the connector. Mgag200 will now test for the monitor's
>> presence by probing the DDC in regular intervals.
>>
> I've tested this series on two servers, one with physical VGA plugged, 
> and one remote system, and it works as intended.
>
> Thanks a lot for this work.
>
> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>

Great, thanks a lot for reviewing and testing quickly.

Best regards
Thomas

>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>>   drivers/gpu/drm/mgag200/mgag200_g200.c    | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200eh.c  | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200eh3.c | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200er.c  | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200ev.c  | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200ew3.c | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200se.c  | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_g200wb.c  | 1 +
>>   drivers/gpu/drm/mgag200/mgag200_vga.c     | 6 +++++-
>>   9 files changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200.c
>> index ff467b0f9cbf3..f874e29498409 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200.c
>> @@ -401,6 +401,7 @@ struct mga_device 
>> *mgag200_g200_device_create(struct pci_dev *pdev, const struct
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200eh.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200eh.c
>> index 6f31c5249f0b1..52bf49ead5c50 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200eh.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200eh.c
>> @@ -277,6 +277,7 @@ struct mga_device 
>> *mgag200_g200eh_device_create(struct pci_dev *pdev, const stru
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200eh3.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
>> index 5befe8da4beb2..e7f89b2a59fd0 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
>> @@ -182,6 +182,7 @@ struct mga_device 
>> *mgag200_g200eh3_device_create(struct pci_dev *pdev,
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200er.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200er.c
>> index 55c275180cde2..4e8a1756138d7 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200er.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200er.c
>> @@ -316,6 +316,7 @@ struct mga_device 
>> *mgag200_g200er_device_create(struct pci_dev *pdev, const stru
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ev.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200ev.c
>> index 2466126140db6..d884f3cb0ec79 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200ev.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200ev.c
>> @@ -321,6 +321,7 @@ struct mga_device 
>> *mgag200_g200ev_device_create(struct pci_dev *pdev, const stru
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> index a52e60609c3de..839401e8b4654 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
>> @@ -202,6 +202,7 @@ struct mga_device 
>> *mgag200_g200ew3_device_create(struct pci_dev *pdev,
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200se.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200se.c
>> index 212770acdd477..a824bb8ad5791 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200se.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200se.c
>> @@ -521,6 +521,7 @@ struct mga_device 
>> *mgag200_g200se_device_create(struct pci_dev *pdev, const stru
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_g200wb.c 
>> b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> index cb6daa0426fbc..835df0f4fc13d 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
>> @@ -326,6 +326,7 @@ struct mga_device 
>> *mgag200_g200wb_device_create(struct pci_dev *pdev, const stru
>>           return ERR_PTR(ret);
>>         drm_mode_config_reset(dev);
>> +    drm_kms_helper_poll_init(dev);
>>         return mdev;
>>   }
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_vga.c 
>> b/drivers/gpu/drm/mgag200/mgag200_vga.c
>> index 6d8982990c2c3..60568f32736dd 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_vga.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_vga.c
>> @@ -12,7 +12,8 @@ static const struct drm_encoder_funcs 
>> mgag200_dac_encoder_funcs = {
>>   };
>>     static const struct drm_connector_helper_funcs 
>> mgag200_vga_connector_helper_funcs = {
>> -    .get_modes = drm_connector_helper_get_modes
>> +    .get_modes = drm_connector_helper_get_modes,
>> +    .detect_ctx = drm_connector_helper_detect_from_ddc
>>   };
>>     static const struct drm_connector_funcs 
>> mgag200_vga_connector_funcs = {
>> @@ -58,6 +59,9 @@ int mgag200_vga_output_init(struct mga_device *mdev)
>>       }
>>       drm_connector_helper_add(connector, 
>> &mgag200_vga_connector_helper_funcs);
>>   +    connector->polled = DRM_CONNECTOR_POLL_CONNECT |
>> +                DRM_CONNECTOR_POLL_DISCONNECT;
>> +
>>       ret = drm_connector_attach_encoder(connector, encoder);
>>       if (ret) {
>>           drm_err(dev, "drm_connector_attach_encoder() failed: %d\n", 
>> ret);
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/mgag200/mgag200_g200.c b/drivers/gpu/drm/mgag200/mgag200_g200.c
index ff467b0f9cbf3..f874e29498409 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200.c
@@ -401,6 +401,7 @@  struct mga_device *mgag200_g200_device_create(struct pci_dev *pdev, const struct
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200eh.c b/drivers/gpu/drm/mgag200/mgag200_g200eh.c
index 6f31c5249f0b1..52bf49ead5c50 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200eh.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200eh.c
@@ -277,6 +277,7 @@  struct mga_device *mgag200_g200eh_device_create(struct pci_dev *pdev, const stru
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200eh3.c b/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
index 5befe8da4beb2..e7f89b2a59fd0 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200eh3.c
@@ -182,6 +182,7 @@  struct mga_device *mgag200_g200eh3_device_create(struct pci_dev *pdev,
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200er.c b/drivers/gpu/drm/mgag200/mgag200_g200er.c
index 55c275180cde2..4e8a1756138d7 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200er.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200er.c
@@ -316,6 +316,7 @@  struct mga_device *mgag200_g200er_device_create(struct pci_dev *pdev, const stru
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ev.c b/drivers/gpu/drm/mgag200/mgag200_g200ev.c
index 2466126140db6..d884f3cb0ec79 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200ev.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200ev.c
@@ -321,6 +321,7 @@  struct mga_device *mgag200_g200ev_device_create(struct pci_dev *pdev, const stru
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
index a52e60609c3de..839401e8b4654 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200ew3.c
@@ -202,6 +202,7 @@  struct mga_device *mgag200_g200ew3_device_create(struct pci_dev *pdev,
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200se.c b/drivers/gpu/drm/mgag200/mgag200_g200se.c
index 212770acdd477..a824bb8ad5791 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200se.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200se.c
@@ -521,6 +521,7 @@  struct mga_device *mgag200_g200se_device_create(struct pci_dev *pdev, const stru
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200wb.c b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
index cb6daa0426fbc..835df0f4fc13d 100644
--- a/drivers/gpu/drm/mgag200/mgag200_g200wb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_g200wb.c
@@ -326,6 +326,7 @@  struct mga_device *mgag200_g200wb_device_create(struct pci_dev *pdev, const stru
 		return ERR_PTR(ret);
 
 	drm_mode_config_reset(dev);
+	drm_kms_helper_poll_init(dev);
 
 	return mdev;
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_vga.c b/drivers/gpu/drm/mgag200/mgag200_vga.c
index 6d8982990c2c3..60568f32736dd 100644
--- a/drivers/gpu/drm/mgag200/mgag200_vga.c
+++ b/drivers/gpu/drm/mgag200/mgag200_vga.c
@@ -12,7 +12,8 @@  static const struct drm_encoder_funcs mgag200_dac_encoder_funcs = {
 };
 
 static const struct drm_connector_helper_funcs mgag200_vga_connector_helper_funcs = {
-	.get_modes = drm_connector_helper_get_modes
+	.get_modes = drm_connector_helper_get_modes,
+	.detect_ctx = drm_connector_helper_detect_from_ddc
 };
 
 static const struct drm_connector_funcs mgag200_vga_connector_funcs = {
@@ -58,6 +59,9 @@  int mgag200_vga_output_init(struct mga_device *mdev)
 	}
 	drm_connector_helper_add(connector, &mgag200_vga_connector_helper_funcs);
 
+	connector->polled = DRM_CONNECTOR_POLL_CONNECT |
+			    DRM_CONNECTOR_POLL_DISCONNECT;
+
 	ret = drm_connector_attach_encoder(connector, encoder);
 	if (ret) {
 		drm_err(dev, "drm_connector_attach_encoder() failed: %d\n", ret);