• Paulo Zanoni's avatar
    drm/i915: fix the "ghost eDP" encoder unwind path · 15b1d171
    Paulo Zanoni authored
    Because calling intel_dp_encoder_destroy inside
    intel_edp_init_connector is just wrong. This is the initialization
    path, so we should properly unwind all the initialization through the
    whole caller stack.
    
    On the intel_dp_encoder_destroy function we do the following:
    1 - Call i2c_del_adapter
    2 - Call drm_encoder_cleanup
    3 - If edp:
    3.1 - Cancel panel_vdd_work
    3.2 - Call ironlake_panel_vdd_of_sync
    4 - Free the encoder
    
    And here is how we unwind each specific step:
    1 - We have intel_dp_init_connector -> intel_dp_i2c_init ->
        i2c_dp_aux_add_bus -> i2c_add_adapter, so we call
        i2c_del_dapter at intel_dp_init_connector
    2 - Call it in the same function that called drm_encoder_init
    3 - Call it in the same function that called INIT_DELAYED_WORK
    4 - Free it in the same function that allocated it
    Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Reviewed-by: default avatarZoltan Nyul <zoltan.nyul@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    15b1d171
intel_ddi.c 37.5 KB