• Kuogee Hsieh's avatar
    drm/msm/dp: incorporate pm_runtime framework into DP driver · 5814b8bf
    Kuogee Hsieh authored
    Currently DP driver is executed independent of PM runtime framework.
    This leads msm eDP panel can not being detected by edp_panel driver
    during generic_edp_panel_probe() due to AUX DPCD read failed at
    edp panel driver. Incorporate PM runtime framework into DP driver so
    that host controller's power and clocks are enable/disable through
    PM runtime mechanism.  Once PM runtime framework is incorporated into
    DP driver, waking up device from power up path is not necessary. Hence
    remove it.
    
    After incorporating pm_runtime framework into eDP/DP driver,
    dp_pm_suspend() to handle power off both DP phy and controller during
    suspend and dp_pm_resume() to handle power on both DP phy and controller
    during resume are not necessary. Therefore both dp_pm_suspend() and
    dp_pm_resume() are dropped and replace with dp_pm_runtime_suspend() and
    dp_pm_runtime_resume() respectively.
    
    Changes in v9:
    -- silent compiler warning message at dp_power_init() and dp_power_deinit()
       with W1 flag
    
    Changes in v7:
    -- add comments to dp_pm_runtime_resume()
    -- add comments to dp_bridge_hpd_enable()
    -- delete dp->hpd_state = ST_DISCONNECTED from dp_bridge_hpd_notify()
    
    Changes in v6:
    -- delete dp_power_client_deinit(dp->power);
    -- remove if (!dp->dp_display.is_edp) condition checkout at plug_handle()
    -- remove if (!dp->dp_display.is_edp) condition checkout at unplug_handle()
    -- add IRQF_NO_AUTOEN to devm_request_irq()
    -- add enable_irq() and disable_irq() to pm_runtime_resume()/suspend()
    -- del dp->hpd_state = ST_DISCONNECTED from dp_bridge_hpd_disable()
    
    Changes in v5:
    -- remove pm_runtime_put_autosuspend feature, use pm_runtime_put_sync()
    -- squash add pm_runtime_force_suspend()/resume() patch into this patch
    
    Changes in v4:
    -- reworded commit text to explain why pm_framework is required for
       edp panel
    -- reworded commit text to explain autosuspend is choiced
    -- delete EV_POWER_PM_GET and PM_EV_POWER_PUT from changes #3
    -- delete dp_display_pm_get() and dp_display_pm_Put() from changes #3
    -- return value from pm_runtime_resume_and_get() directly
    -- check return value of devm_pm_runtime_enable()
    -- delete pm_runtime_xxx from dp_display_remove()
    -- drop dp_display_host_init() from EV_HPD_INIT_SETUP
    -- drop both dp_pm_prepare() and dp_pm_compete() from this change
    -- delete ST_SUSPENDED state
    -- rewording commit text to add more details regrading the purpose
       of this change
    
    Changes in v3:
    -- incorporate removing pm_runtime_xx() from dp_pwer.c to this patch
    -- use pm_runtime_resume_and_get() instead of pm_runtime_get()
    -- error checking pm_runtime_resume_and_get() return value
    -- add EV_POWER_PM_GET and PM_EV_POWER_PUT to handle HPD_GPIO case
    -- replace dp_pm_suspend() with pm_runtime_force_suspend()
    -- replace dp_pm_resume() with pm_runtime_force_resume()
    Signed-off-by: default avatarKuogee Hsieh <quic_khsieh@quicinc.com>
    Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/570073/
    Link: https://lore.kernel.org/r/1701472789-25951-6-git-send-email-quic_khsieh@quicinc.comSigned-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
    5814b8bf
dp_power.c 4.19 KB