mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 18:21:24 +02:00
drm/msm/dp: Drop EV_USER_NOTIFICATION
Currently, we queue an event for signalling HPD connect/disconnect. This can mean a delay in plug/unplug handling and notifying DRM core when a hotplug happens. Drop EV_USER_NOTIFICATION and signal the IRQ event as part of hotplug handling. Signed-off-by: Jessica Zhang <jessica.zhang@oss.qualcomm.com> Reviewed-by: Bjorn Andersson <andersson@kernel.org> Acked-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Tested-by: Val Packett <val@packett.cool> # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com> # Hamoa IOT EVK, QCS8300 Ride Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/727607/ Link: https://lore.kernel.org/r/20260524-hpd-refactor-v6-5-cf3ab488dd7b@oss.qualcomm.com
This commit is contained in:
parent
6fe5a253d7
commit
168dacddc3
|
|
@ -58,7 +58,6 @@ enum {
|
|||
EV_HPD_PLUG_INT,
|
||||
EV_IRQ_HPD_INT,
|
||||
EV_HPD_UNPLUG_INT,
|
||||
EV_USER_NOTIFICATION,
|
||||
};
|
||||
|
||||
#define EVENT_TIMEOUT (HZ/10) /* 100ms */
|
||||
|
|
@ -344,17 +343,6 @@ static const struct component_ops msm_dp_display_comp_ops = {
|
|||
.unbind = msm_dp_display_unbind,
|
||||
};
|
||||
|
||||
static void msm_dp_display_send_hpd_event(struct msm_dp *msm_dp_display)
|
||||
{
|
||||
struct msm_dp_display_private *dp;
|
||||
struct drm_connector *connector;
|
||||
|
||||
dp = container_of(msm_dp_display, struct msm_dp_display_private, msm_dp_display);
|
||||
|
||||
connector = dp->msm_dp_display.connector;
|
||||
drm_helper_hpd_irq_event(connector->dev);
|
||||
}
|
||||
|
||||
static int msm_dp_display_send_hpd_notification(struct msm_dp_display_private *dp,
|
||||
bool hpd)
|
||||
{
|
||||
|
|
@ -378,7 +366,11 @@ static int msm_dp_display_send_hpd_notification(struct msm_dp_display_private *d
|
|||
|
||||
drm_dbg_dp(dp->drm_dev, "type=%d hpd=%d\n",
|
||||
dp->msm_dp_display.connector_type, hpd);
|
||||
msm_dp_display_send_hpd_event(&dp->msm_dp_display);
|
||||
|
||||
drm_bridge_hpd_notify(dp->msm_dp_display.bridge,
|
||||
hpd ?
|
||||
connector_status_connected :
|
||||
connector_status_disconnected);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -438,7 +430,7 @@ static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *dp)
|
|||
|
||||
msm_dp_link_reset_phy_params_vx_px(dp->link);
|
||||
|
||||
msm_dp_add_event(dp, EV_USER_NOTIFICATION, true, 0);
|
||||
msm_dp_display_send_hpd_notification(dp, true);
|
||||
|
||||
end:
|
||||
return rc;
|
||||
|
|
@ -507,7 +499,7 @@ static int msm_dp_display_notify_disconnect(struct device *dev)
|
|||
{
|
||||
struct msm_dp_display_private *dp = dev_get_dp_display_private(dev);
|
||||
|
||||
msm_dp_add_event(dp, EV_USER_NOTIFICATION, false, 0);
|
||||
msm_dp_display_send_hpd_notification(dp, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -528,7 +520,7 @@ static int msm_dp_display_handle_port_status_changed(struct msm_dp_display_priva
|
|||
drm_dbg_dp(dp->drm_dev, "sink count is zero, nothing to do\n");
|
||||
if (dp->hpd_state != ST_DISCONNECTED) {
|
||||
dp->hpd_state = ST_DISCONNECT_PENDING;
|
||||
msm_dp_add_event(dp, EV_USER_NOTIFICATION, false, 0);
|
||||
msm_dp_display_send_hpd_notification(dp, false);
|
||||
}
|
||||
} else {
|
||||
if (dp->hpd_state == ST_DISCONNECTED) {
|
||||
|
|
@ -1122,10 +1114,6 @@ static int hpd_event_thread(void *data)
|
|||
case EV_IRQ_HPD_INT:
|
||||
msm_dp_irq_hpd_handle(msm_dp_priv, todo->data);
|
||||
break;
|
||||
case EV_USER_NOTIFICATION:
|
||||
msm_dp_display_send_hpd_notification(msm_dp_priv,
|
||||
todo->data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ struct msm_dp {
|
|||
struct platform_device *pdev;
|
||||
struct drm_connector *connector;
|
||||
struct drm_bridge *next_bridge;
|
||||
struct drm_bridge *bridge;
|
||||
bool link_ready;
|
||||
bool audio_enabled;
|
||||
bool power_on;
|
||||
|
|
|
|||
|
|
@ -340,6 +340,8 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *dev,
|
|||
}
|
||||
}
|
||||
|
||||
msm_dp_display->bridge = bridge;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user