@@ -222,6 +222,45 @@ drm_connector_mode_valid(struct drm_connector *connector,
222
222
return ret ;
223
223
}
224
224
225
+ static void drm_kms_helper_disable_hpd (struct drm_device * dev )
226
+ {
227
+ struct drm_connector * connector ;
228
+ struct drm_connector_list_iter conn_iter ;
229
+
230
+ drm_connector_list_iter_begin (dev , & conn_iter );
231
+ drm_for_each_connector_iter (connector , & conn_iter ) {
232
+ const struct drm_connector_helper_funcs * funcs =
233
+ connector -> helper_private ;
234
+
235
+ if (funcs && funcs -> disable_hpd )
236
+ funcs -> disable_hpd (connector );
237
+ }
238
+ drm_connector_list_iter_end (& conn_iter );
239
+ }
240
+
241
+ static bool drm_kms_helper_enable_hpd (struct drm_device * dev )
242
+ {
243
+ bool poll = false;
244
+ struct drm_connector * connector ;
245
+ struct drm_connector_list_iter conn_iter ;
246
+
247
+ drm_connector_list_iter_begin (dev , & conn_iter );
248
+ drm_for_each_connector_iter (connector , & conn_iter ) {
249
+ const struct drm_connector_helper_funcs * funcs =
250
+ connector -> helper_private ;
251
+
252
+ if (funcs && funcs -> enable_hpd )
253
+ funcs -> enable_hpd (connector );
254
+
255
+ if (connector -> polled & (DRM_CONNECTOR_POLL_CONNECT |
256
+ DRM_CONNECTOR_POLL_DISCONNECT ))
257
+ poll = true;
258
+ }
259
+ drm_connector_list_iter_end (& conn_iter );
260
+
261
+ return poll ;
262
+ }
263
+
225
264
#define DRM_OUTPUT_POLL_PERIOD (10*HZ)
226
265
/**
227
266
* drm_kms_helper_poll_enable - re-enable output polling.
@@ -241,26 +280,12 @@ drm_connector_mode_valid(struct drm_connector *connector,
241
280
void drm_kms_helper_poll_enable (struct drm_device * dev )
242
281
{
243
282
bool poll = false;
244
- struct drm_connector * connector ;
245
- struct drm_connector_list_iter conn_iter ;
246
283
unsigned long delay = DRM_OUTPUT_POLL_PERIOD ;
247
284
248
285
if (!dev -> mode_config .poll_enabled || !drm_kms_helper_poll )
249
286
return ;
250
287
251
- drm_connector_list_iter_begin (dev , & conn_iter );
252
- 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
-
259
- if (connector -> polled & (DRM_CONNECTOR_POLL_CONNECT |
260
- DRM_CONNECTOR_POLL_DISCONNECT ))
261
- poll = true;
262
- }
263
- drm_connector_list_iter_end (& conn_iter );
288
+ poll = drm_kms_helper_enable_hpd (dev );
264
289
265
290
if (dev -> mode_config .delayed_event ) {
266
291
/*
@@ -810,24 +835,13 @@ EXPORT_SYMBOL(drm_kms_helper_is_poll_worker);
810
835
811
836
static void drm_kms_helper_poll_disable_fini (struct drm_device * dev , bool fini )
812
837
{
813
- struct drm_connector * connector ;
814
- struct drm_connector_list_iter conn_iter ;
815
-
816
838
if (!dev -> mode_config .poll_enabled )
817
839
return ;
818
840
819
841
if (fini )
820
842
dev -> mode_config .poll_enabled = false;
821
843
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 );
844
+ drm_kms_helper_disable_hpd (dev );
831
845
832
846
cancel_delayed_work_sync (& dev -> mode_config .output_poll_work );
833
847
}
0 commit comments