Skip to content

Commit c826879

Browse files
lumagsuperna9999
authored andcommitted
drm/probe-helper: enable and disable HPD on connectors
Introduce two drm_connector_helper_funcs: enable_hpd() and disable_hpd(). They are called by drm_kms_helper_poll_enable() and drm_kms_helper_poll_disable() (and thus drm_kms_helper_poll_init() and drm_kms_helper_poll_fini()) respectively. This allows DRM drivers to rely on drm_kms_helper_poll for enabling and disabling HPD detection rather than doing that manually. Signed-off-by: Dmitry Baryshkov <[email protected]> Reviewed-by: Tomi Valkeinen <[email protected]> Signed-off-by: Neil Armstrong <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 78b991c commit c826879

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

drivers/gpu/drm/drm_probe_helper.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,12 @@ void drm_kms_helper_poll_enable(struct drm_device *dev)
250250

251251
drm_connector_list_iter_begin(dev, &conn_iter);
252252
drm_for_each_connector_iter(connector, &conn_iter) {
253+
const struct drm_connector_helper_funcs *funcs =
254+
connector->helper_private;
255+
256+
if (funcs && funcs->enable_hpd)
257+
funcs->enable_hpd(connector);
258+
253259
if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT |
254260
DRM_CONNECTOR_POLL_DISCONNECT))
255261
poll = true;
@@ -804,12 +810,25 @@ EXPORT_SYMBOL(drm_kms_helper_is_poll_worker);
804810

805811
static void drm_kms_helper_poll_disable_fini(struct drm_device *dev, bool fini)
806812
{
813+
struct drm_connector *connector;
814+
struct drm_connector_list_iter conn_iter;
815+
807816
if (!dev->mode_config.poll_enabled)
808817
return;
809818

810819
if (fini)
811820
dev->mode_config.poll_enabled = false;
812821

822+
drm_connector_list_iter_begin(dev, &conn_iter);
823+
drm_for_each_connector_iter(connector, &conn_iter) {
824+
const struct drm_connector_helper_funcs *funcs =
825+
connector->helper_private;
826+
827+
if (funcs && funcs->disable_hpd)
828+
funcs->disable_hpd(connector);
829+
}
830+
drm_connector_list_iter_end(&conn_iter);
831+
813832
cancel_delayed_work_sync(&dev->mode_config.output_poll_work);
814833
}
815834

include/drm/drm_modeset_helper_vtables.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,28 @@ struct drm_connector_helper_funcs {
11431143
*/
11441144
void (*cleanup_writeback_job)(struct drm_writeback_connector *connector,
11451145
struct drm_writeback_job *job);
1146+
1147+
/**
1148+
* @enable_hpd:
1149+
*
1150+
* Enable hot-plug detection for the connector.
1151+
*
1152+
* This operation is optional.
1153+
*
1154+
* This callback is used by the drm_kms_helper_poll_enable() helpers.
1155+
*/
1156+
void (*enable_hpd)(struct drm_connector *connector);
1157+
1158+
/**
1159+
* @disable_hpd:
1160+
*
1161+
* Disable hot-plug detection for the connector.
1162+
*
1163+
* This operation is optional.
1164+
*
1165+
* This callback is used by the drm_kms_helper_poll_disable() helpers.
1166+
*/
1167+
void (*disable_hpd)(struct drm_connector *connector);
11461168
};
11471169

11481170
/**

0 commit comments

Comments
 (0)