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