Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm: Make drm_encoder_helper_funcs optional

Make drm_encoder_helper_funcs and it's functions optional to avoid
having dummy functions.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1462454674-2246-3-git-send-email-noralf@tronnes.org

authored by

Noralf Trønnes and committed by
Daniel Vetter
75229eca 8863dc7f

+42 -10
+9 -2
drivers/gpu/drm/drm_atomic_helper.c
··· 696 696 continue; 697 697 698 698 funcs = encoder->helper_private; 699 + if (!funcs) 700 + continue; 699 701 700 702 DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n", 701 703 encoder->base.id, encoder->name); ··· 713 711 funcs->prepare(encoder); 714 712 else if (funcs->disable) 715 713 funcs->disable(encoder); 716 - else 714 + else if (funcs->dpms) 717 715 funcs->dpms(encoder, DRM_MODE_DPMS_OFF); 718 716 719 717 drm_bridge_post_disable(encoder->bridge); ··· 861 859 862 860 encoder = connector->state->best_encoder; 863 861 funcs = encoder->helper_private; 862 + if (!funcs) 863 + continue; 864 + 864 865 new_crtc_state = connector->state->crtc->state; 865 866 mode = &new_crtc_state->mode; 866 867 adjusted_mode = &new_crtc_state->adjusted_mode; ··· 969 964 970 965 encoder = connector->state->best_encoder; 971 966 funcs = encoder->helper_private; 967 + if (!funcs) 968 + continue; 972 969 973 970 DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n", 974 971 encoder->base.id, encoder->name); ··· 983 976 984 977 if (funcs->enable) 985 978 funcs->enable(encoder); 986 - else 979 + else if (funcs->commit) 987 980 funcs->commit(encoder); 988 981 989 982 drm_bridge_enable(encoder->bridge);
+33 -8
drivers/gpu/drm/drm_crtc_helper.c
··· 170 170 { 171 171 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; 172 172 173 + if (!encoder_funcs) 174 + return; 175 + 173 176 drm_bridge_disable(encoder->bridge); 174 177 175 178 if (encoder_funcs->disable) 176 179 (*encoder_funcs->disable)(encoder); 177 - else 180 + else if (encoder_funcs->dpms) 178 181 (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); 179 182 180 183 drm_bridge_post_disable(encoder->bridge); ··· 251 248 252 249 drm_for_each_encoder(encoder, dev) { 253 250 encoder_funcs = encoder->helper_private; 251 + if (!encoder_funcs) 252 + continue; 253 + 254 254 /* Disable unused encoders */ 255 255 if (encoder->crtc == NULL) 256 256 drm_encoder_disable(encoder); ··· 332 326 if (encoder->crtc != crtc) 333 327 continue; 334 328 329 + encoder_funcs = encoder->helper_private; 330 + if (!encoder_funcs) 331 + continue; 332 + 335 333 ret = drm_bridge_mode_fixup(encoder->bridge, 336 334 mode, adjusted_mode); 337 335 if (!ret) { ··· 370 360 if (encoder->crtc != crtc) 371 361 continue; 372 362 363 + encoder_funcs = encoder->helper_private; 364 + if (!encoder_funcs) 365 + continue; 366 + 373 367 drm_bridge_disable(encoder->bridge); 374 368 375 - encoder_funcs = encoder->helper_private; 376 369 /* Disable the encoders as the first thing we do. */ 377 - encoder_funcs->prepare(encoder); 370 + if (encoder_funcs->prepare) 371 + encoder_funcs->prepare(encoder); 378 372 379 373 drm_bridge_post_disable(encoder->bridge); 380 374 } ··· 399 385 if (encoder->crtc != crtc) 400 386 continue; 401 387 388 + encoder_funcs = encoder->helper_private; 389 + if (!encoder_funcs) 390 + continue; 391 + 402 392 DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%d:%s]\n", 403 393 encoder->base.id, encoder->name, 404 394 mode->base.id, mode->name); 405 - encoder_funcs = encoder->helper_private; 406 - encoder_funcs->mode_set(encoder, mode, adjusted_mode); 395 + if (encoder_funcs->mode_set) 396 + encoder_funcs->mode_set(encoder, mode, adjusted_mode); 407 397 408 398 drm_bridge_mode_set(encoder->bridge, mode, adjusted_mode); 409 399 } ··· 420 402 if (encoder->crtc != crtc) 421 403 continue; 422 404 405 + encoder_funcs = encoder->helper_private; 406 + if (!encoder_funcs) 407 + continue; 408 + 423 409 drm_bridge_pre_enable(encoder->bridge); 424 410 425 - encoder_funcs = encoder->helper_private; 426 - encoder_funcs->commit(encoder); 411 + if (encoder_funcs->commit) 412 + encoder_funcs->commit(encoder); 427 413 428 414 drm_bridge_enable(encoder->bridge); 429 415 } ··· 812 790 struct drm_bridge *bridge = encoder->bridge; 813 791 const struct drm_encoder_helper_funcs *encoder_funcs; 814 792 793 + encoder_funcs = encoder->helper_private; 794 + if (!encoder_funcs) 795 + return; 796 + 815 797 if (mode == DRM_MODE_DPMS_ON) 816 798 drm_bridge_pre_enable(bridge); 817 799 else 818 800 drm_bridge_disable(bridge); 819 801 820 - encoder_funcs = encoder->helper_private; 821 802 if (encoder_funcs->dpms) 822 803 encoder_funcs->dpms(encoder, mode); 823 804