From nobody Tue Apr 7 06:32:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CEEBDC4332F for ; Wed, 12 Oct 2022 16:29:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230111AbiJLQ3e (ORCPT ); Wed, 12 Oct 2022 12:29:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230077AbiJLQ3S (ORCPT ); Wed, 12 Oct 2022 12:29:18 -0400 Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2D49FBCDF for ; Wed, 12 Oct 2022 09:29:11 -0700 (PDT) Received: by mail-pg1-x534.google.com with SMTP id s206so15974995pgs.3 for ; Wed, 12 Oct 2022 09:29:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cn1tYSp6Fs26zz8mdx6XxYmQlY8g3zLtpMK7g8RZT1U=; b=Fs4gWIc/2+USWqzntDJRD8yynnsb+1iJJm80wz2TexKT+yj1/30tVTpzfqpdS8pCvH HS4tBX00esP9gFzO0IfU6EgXKKLTonR/DMOrz79rWkAnGGazztmHzy3D0Pp9NhYjlbjx 8bPjoHnzoGMcOrDGW71iHil+DqNvPV6tnom7I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cn1tYSp6Fs26zz8mdx6XxYmQlY8g3zLtpMK7g8RZT1U=; b=pl67gVhL4yhBI2LXUJvC20SYIYjNJQwsXzn0Gul7srA/XIEopaqGHZLAFbQW64JfuI QNVclPPTcihtvSNz7pYLmZqHLCuojorTGGDqiHkKRkPIPAHGTQRE+oco5coh74E7ks3l e/nuPnfeIyg0W0ySl1Pl7OT5PGCX2iMv8CTMQR/Hiw6TLcXRFMeC2JmGHLfjgFs48UJR Q/CLnLA7vghXCr/yo2rZAbrbI0r6Uba51C5A+FFMKzl5g57Apo0XOu4LuEBda+SSF1Fh xiNkGPUb4xj9EObGHnmHQQ6R+eiQ5wB7qaClQZOa/YJ9ewEj0U09BomaMnzH4oSKnkt7 34GQ== X-Gm-Message-State: ACrzQf3cstGm5B+MPc6V6kLhbb0+FMOQ0MiFcY9chwQvKUlZUf3EINms Gy+M+4D+7fXNf7lEH/Is36izrg== X-Google-Smtp-Source: AMsMyM6HxJ+lgT8f8WrnaKCblNjlb/TUbZ2wY3dcWmlOhT8Hmm5Z6eImkf02dCMv+Hli0GCNG87qgA== X-Received: by 2002:a05:6a00:8cc:b0:52c:7ab5:2ce7 with SMTP id s12-20020a056a0008cc00b0052c7ab52ce7mr31258809pfu.28.1665592150442; Wed, 12 Oct 2022 09:29:10 -0700 (PDT) Received: from treapking.tpe.corp.google.com ([2401:fa00:1:10:2921:f6a9:5848:18e1]) by smtp.gmail.com with ESMTPSA id l4-20020a635704000000b0045dc85c4a5fsm9722163pgb.44.2022.10.12.09.29.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Oct 2022 09:29:09 -0700 (PDT) From: Pin-yen Lin To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Daniel Vetter Cc: Pin-yen Lin , Allen Chen , AngeloGioacchino Del Regno , Hermes Wu , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] drm/bridge: it6505: Initialize AUX channel in it6505_i2c_probe Date: Thu, 13 Oct 2022 00:28:57 +0800 Message-Id: <20221012162900.2876686-2-treapking@chromium.org> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog In-Reply-To: <20221012162900.2876686-1-treapking@chromium.org> References: <20221012162900.2876686-1-treapking@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" During device boot, the HPD interrupt could be triggered before the DRM subsystem registers it6505 as a DRM bridge. In such cases, the driver tries to access AUX channel and causes NULL pointer dereference. Initializing the AUX channel earlier to prevent such error. Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver") Signed-off-by: Pin-yen Lin --- drivers/gpu/drm/bridge/ite-it6505.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index a4302492cf8d..f7f6c3e20fae 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -2871,10 +2871,7 @@ static int it6505_bridge_attach(struct drm_bridge *b= ridge, } =20 /* Register aux channel */ - it6505->aux.name =3D "DP-AUX"; - it6505->aux.dev =3D dev; it6505->aux.drm_dev =3D bridge->dev; - it6505->aux.transfer =3D it6505_aux_transfer; =20 ret =3D drm_dp_aux_register(&it6505->aux); =20 @@ -3354,6 +3351,11 @@ static int it6505_i2c_probe(struct i2c_client *clien= t, debugfs_init(it6505); pm_runtime_enable(dev); =20 + it6505->aux.name =3D "DP-AUX"; + it6505->aux.dev =3D dev; + it6505->aux.transfer =3D it6505_aux_transfer; + drm_dp_aux_init(&it6505->aux); + it6505->bridge.funcs =3D &it6505_bridge_funcs; it6505->bridge.type =3D DRM_MODE_CONNECTOR_DisplayPort; it6505->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | --=20 2.38.0.rc1.362.ged0d419d3c-goog From nobody Tue Apr 7 06:32:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 65F31C4332F for ; Wed, 12 Oct 2022 16:29:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230117AbiJLQ3j (ORCPT ); Wed, 12 Oct 2022 12:29:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230080AbiJLQ3U (ORCPT ); Wed, 12 Oct 2022 12:29:20 -0400 Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7422BF88E7 for ; Wed, 12 Oct 2022 09:29:15 -0700 (PDT) Received: by mail-pl1-x62c.google.com with SMTP id f23so16725162plr.6 for ; Wed, 12 Oct 2022 09:29:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OTxG4nqa8QVexuH2rmRHDWaG3PP9EntkxN4qD7ACWjE=; b=H0VYL2aG9H6KXx1Kol9zfdHrSHL7oK1X9La3hR1QkCPrETfDFOQMGt0GTWQaIgVLLB tuoVOmCKNm1r3oO+vepoTkT0bBeOWyPSsKx24e7eRZgzeaAXCi67XEk6xgZ+9jQgqA+j +5BTXjwEcl4aHCA874jYBQwgec1M4+YNCVh1k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OTxG4nqa8QVexuH2rmRHDWaG3PP9EntkxN4qD7ACWjE=; b=sc1ueIfAhMRu0GWNJyMClnMY7/Zv+tvvwpe2xHfu6OXTJP2oUbqDNofOuaNusyT2rT Glr4oBS95PrNiVMWTF3T+khf9va7WqNC0uEe7XkOISfq1dbEFoCqEdsu4gwslItDLtVv SikN+GCL/1VucYY0EebSY8oKq8CeZqborITFX/nVbRtTdbMXxGB70BdeEQMSxCVNUuWk XJfy9fOUbQJrYqiYll7s8F5fIVjXADcPUgBisTP5mN1WF40K/kN1jYoyWvlzN2mJOYV4 xTow5y2zRjsx6hgG+2blQXg5Op8qVU65mp01MlN11GlhID22eEA4joOJ2uiJhJBfMm9/ Bf0A== X-Gm-Message-State: ACrzQf3I+JhW13Wv4VxeYHmymQHCHH2NVK3SXZE6TrLIGj5eFrysdy9f 0PunfmoyXQfJe5k+zs0xKBF44Q== X-Google-Smtp-Source: AMsMyM6awjdgfDnPDEDYiaTo7+JawoCntQNX5yEWwozmmelTyRcbyAPB4ztMEmtbhq8Lg1T+Ujd19w== X-Received: by 2002:a17:90b:48c9:b0:20a:e225:1afd with SMTP id li9-20020a17090b48c900b0020ae2251afdmr6008045pjb.21.1665592154110; Wed, 12 Oct 2022 09:29:14 -0700 (PDT) Received: from treapking.tpe.corp.google.com ([2401:fa00:1:10:2921:f6a9:5848:18e1]) by smtp.gmail.com with ESMTPSA id l4-20020a635704000000b0045dc85c4a5fsm9722163pgb.44.2022.10.12.09.29.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Oct 2022 09:29:13 -0700 (PDT) From: Pin-yen Lin To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Daniel Vetter Cc: Pin-yen Lin , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] drm/bridge: it6505: Setup links in it6505_irq_hpd Date: Thu, 13 Oct 2022 00:28:58 +0800 Message-Id: <20221012162900.2876686-3-treapking@chromium.org> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog In-Reply-To: <20221012162900.2876686-1-treapking@chromium.org> References: <20221012162900.2876686-1-treapking@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Move the DPCD read and link setup steps to HPD IRQ handler to remove an unnecessary dependency between .detect callback and the HPD IRQ handler before registering it6505 as a DRM bridge. This is safe because there is always a .detect call after each HPD IRQ handler triggered by the drm_helper_hpd_irq_event call. Signed-off-by: Pin-yen Lin --- drivers/gpu/drm/bridge/ite-it6505.c | 74 +++++++++++------------------ 1 file changed, 29 insertions(+), 45 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index f7f6c3e20fae..cf94e44ec73a 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -725,28 +725,6 @@ static void it6505_calc_video_info(struct it6505 *it65= 05) DRM_MODE_ARG(&it6505->video_info)); } =20 -static int it6505_drm_dp_link_probe(struct drm_dp_aux *aux, - struct it6505_drm_dp_link *link) -{ - u8 values[3]; - int err; - - memset(link, 0, sizeof(*link)); - - err =3D drm_dp_dpcd_read(aux, DP_DPCD_REV, values, sizeof(values)); - if (err < 0) - return err; - - link->revision =3D values[0]; - link->rate =3D drm_dp_bw_code_to_link_rate(values[1]); - link->num_lanes =3D values[2] & DP_MAX_LANE_COUNT_MASK; - - if (values[2] & DP_ENHANCED_FRAME_CAP) - link->capabilities =3D DP_ENHANCED_FRAME_CAP; - - return 0; -} - static int it6505_drm_dp_link_set_power(struct drm_dp_aux *aux, struct it6505_drm_dp_link *link, u8 mode) @@ -1456,11 +1434,19 @@ static void it6505_parse_link_capabilities(struct i= t6505 *it6505) int bcaps; =20 if (it6505->dpcd[0] =3D=3D 0) { - it6505_aux_on(it6505); - it6505_get_dpcd(it6505, DP_DPCD_REV, it6505->dpcd, - ARRAY_SIZE(it6505->dpcd)); + dev_err(dev, "DPCD is not initialized"); + return; } =20 + memset(link, 0, sizeof(*link)); + + link->revision =3D it6505->dpcd[0]; + link->rate =3D drm_dp_bw_code_to_link_rate(it6505->dpcd[1]); + link->num_lanes =3D it6505->dpcd[2] & DP_MAX_LANE_COUNT_MASK; + + if (it6505->dpcd[2] & DP_ENHANCED_FRAME_CAP) + link->capabilities =3D DP_ENHANCED_FRAME_CAP; + DRM_DEV_DEBUG_DRIVER(dev, "DPCD Rev.: %d.%d", link->revision >> 4, link->revision & 0x0F); =20 @@ -2328,14 +2314,21 @@ static void it6505_irq_hpd(struct it6505 *it6505) DRM_DEV_DEBUG_DRIVER(dev, "hpd change interrupt, change to %s", it6505->hpd_state ? "high" : "low"); =20 - if (it6505->bridge.dev) - drm_helper_hpd_irq_event(it6505->bridge.dev); - DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count: %d", - it6505->sink_count); - if (it6505->hpd_state) { wait_for_completion_timeout(&it6505->wait_edid_complete, msecs_to_jiffies(6000)); + it6505_aux_on(it6505); + if (it6505->dpcd[0] =3D=3D 0) { + it6505_get_dpcd(it6505, DP_DPCD_REV, it6505->dpcd, + ARRAY_SIZE(it6505->dpcd)); + it6505_variable_config(it6505); + it6505_parse_link_capabilities(it6505); + } + it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; + + DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count: %d", + it6505->sink_count); + it6505_lane_termination_on(it6505); it6505_lane_power_on(it6505); =20 @@ -2363,6 +2356,9 @@ static void it6505_irq_hpd(struct it6505 *it6505) it6505_lane_off(it6505); it6505_link_reset_step_train(it6505); } + + if (it6505->bridge.dev) + drm_helper_hpd_irq_event(it6505->bridge.dev); } =20 static void it6505_irq_hpd_irq(struct it6505 *it6505) @@ -2625,26 +2621,14 @@ static enum drm_connector_status it6505_detect(stru= ct it6505 *it6505) goto unlock; =20 if (it6505->enable_drv_hold) { - status =3D it6505_get_sink_hpd_status(it6505) ? - connector_status_connected : - connector_status_disconnected; + status =3D it6505->hpd_state ? connector_status_connected : + connector_status_disconnected; goto unlock; } =20 - if (it6505_get_sink_hpd_status(it6505)) { - it6505_aux_on(it6505); - it6505_drm_dp_link_probe(&it6505->aux, &it6505->link); + if (it6505->hpd_state) { it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, DP_SET_POWER_D0); - it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; - - if (it6505->dpcd[0] =3D=3D 0) { - it6505_get_dpcd(it6505, DP_DPCD_REV, it6505->dpcd, - ARRAY_SIZE(it6505->dpcd)); - it6505_variable_config(it6505); - it6505_parse_link_capabilities(it6505); - } - dp_sink_count =3D it6505_dpcd_read(it6505, DP_SINK_COUNT); it6505->sink_count =3D DP_GET_SINK_COUNT(dp_sink_count); DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count:%d branch:%d", --=20 2.38.0.rc1.362.ged0d419d3c-goog From nobody Tue Apr 7 06:32:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 133FDC4332F for ; Wed, 12 Oct 2022 16:29:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230072AbiJLQ3q (ORCPT ); Wed, 12 Oct 2022 12:29:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230094AbiJLQ3b (ORCPT ); Wed, 12 Oct 2022 12:29:31 -0400 Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F1EFFC1E2 for ; Wed, 12 Oct 2022 09:29:18 -0700 (PDT) Received: by mail-pg1-x52f.google.com with SMTP id f193so16016846pgc.0 for ; Wed, 12 Oct 2022 09:29:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2YtuM603E+k6aqfoZ0FWElqsR6+Ku8jsdYOTJIWy3xg=; b=JJVRnC0QblF7NOzu5SIQUJXUdGu4jFeHBztSiP6B0Hk5imlX8l5zmBJWT76HdJEPEV TRkk4ztAQ7AiB3Uv5CWTnWVhliNgd/e3mdY0OuykXX5b6Y0gwK5gBC2zNHtt1cQ/NigM aHA7wABZ2CzyXwzkx/l2K6TCJjq1djZWp7XGU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2YtuM603E+k6aqfoZ0FWElqsR6+Ku8jsdYOTJIWy3xg=; b=HKAXFTFCHc0l8Sp53T8/aYVLjsPvUXUiH3Cuqn1HHVA73rraDw+po8ErbHEeQLZYrA 0iTb8EypI0BYZdTO1VdGdbUkB21pbk1Z40ZQgvfh/ak9klXhs2rvvjaUO4ZzIkjZWhrX RSKhFmvrXj2CT3dEB1iUc44hgQOc3DLN8+LL/Frm+e3AaEW2fyulJkQhjLreh98Q8HDk uLj44eRDLS4vKx/2UBXXw3FKiGil5dcNUOmbAmeZ07o3xW7BmLyFy/YSqy6MmbIvt3FI OHMvbllywoZ7F3ECQb74v1XYYR/oFD7AQARQkKHiQ9NzO0wWfixTpEAVZq0JMqwXnMyC HOhw== X-Gm-Message-State: ACrzQf1G0WL/EMxJdiVscE6tcJYtlDna+dCiO4/l5emwgLpkh+mtPi4Z ESfweYbdCgbEK/TC8D6n0kXo5w== X-Google-Smtp-Source: AMsMyM72DawyO7B4FUZI7F8l22On/SCorvViNiLwZ6BHyI4yq5QUrHG1RLmH8urxD793dTuMqmVQ1Q== X-Received: by 2002:a63:b12:0:b0:44a:d193:6b16 with SMTP id 18-20020a630b12000000b0044ad1936b16mr26631125pgl.604.1665592157605; Wed, 12 Oct 2022 09:29:17 -0700 (PDT) Received: from treapking.tpe.corp.google.com ([2401:fa00:1:10:2921:f6a9:5848:18e1]) by smtp.gmail.com with ESMTPSA id l4-20020a635704000000b0045dc85c4a5fsm9722163pgb.44.2022.10.12.09.29.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Oct 2022 09:29:17 -0700 (PDT) From: Pin-yen Lin To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Daniel Vetter Cc: Pin-yen Lin , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] drm/bridge: it6505: Improve synchronization between extcon subsystem Date: Thu, 13 Oct 2022 00:28:59 +0800 Message-Id: <20221012162900.2876686-4-treapking@chromium.org> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog In-Reply-To: <20221012162900.2876686-1-treapking@chromium.org> References: <20221012162900.2876686-1-treapking@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Originally, the it6505 relies on a short sleep in the IRQ handler and a long sleep to make sure it6505->lane_swap and it6505->lane_count is configured in it6505_extcon_work and it6505_detect, respectively. Use completion and additional DPCD read to remove the unnecessary waits, and use a different lock for it6505_extcon_work and the threaded IRQ handler because they no longer need to run exclusively. The wait time of the completion is usually less than 10ms in local experiments, but leave it larger here just in case. Signed-off-by: Pin-yen Lin --- drivers/gpu/drm/bridge/ite-it6505.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index cf94e44ec73a..52515b43171c 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -412,6 +412,7 @@ struct it6505 { * Mutex protects extcon and interrupt functions from interfering * each other. */ + struct mutex irq_lock; struct mutex extcon_lock; struct mutex mode_lock; /* used to bridge_detect */ struct mutex aux_lock; /* used to aux data transfers */ @@ -440,7 +441,7 @@ struct it6505 { enum hdcp_state hdcp_status; struct delayed_work hdcp_work; struct work_struct hdcp_wait_ksv_list; - struct completion wait_edid_complete; + struct completion extcon_completion; u8 auto_train_retry; bool hdcp_desired; bool is_repeater; @@ -2315,8 +2316,8 @@ static void it6505_irq_hpd(struct it6505 *it6505) it6505->hpd_state ? "high" : "low"); =20 if (it6505->hpd_state) { - wait_for_completion_timeout(&it6505->wait_edid_complete, - msecs_to_jiffies(6000)); + wait_for_completion_timeout(&it6505->extcon_completion, + msecs_to_jiffies(1000)); it6505_aux_on(it6505); if (it6505->dpcd[0] =3D=3D 0) { it6505_get_dpcd(it6505, DP_DPCD_REV, it6505->dpcd, @@ -2328,7 +2329,6 @@ static void it6505_irq_hpd(struct it6505 *it6505) =20 DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count: %d", it6505->sink_count); - it6505_lane_termination_on(it6505); it6505_lane_power_on(it6505); =20 @@ -2487,8 +2487,7 @@ static irqreturn_t it6505_int_threaded_handler(int un= used, void *data) }; int int_status[3], i; =20 - msleep(100); - mutex_lock(&it6505->extcon_lock); + mutex_lock(&it6505->irq_lock); =20 if (it6505->enable_drv_hold || !it6505->powered) goto unlock; @@ -2518,7 +2517,7 @@ static irqreturn_t it6505_int_threaded_handler(int un= used, void *data) } =20 unlock: - mutex_unlock(&it6505->extcon_lock); + mutex_unlock(&it6505->irq_lock); =20 return IRQ_HANDLED; } @@ -2695,9 +2694,12 @@ static void it6505_extcon_work(struct work_struct *w= ork) */ if (ret) it6505_poweron(it6505); + + complete_all(&it6505->extcon_completion); } else { DRM_DEV_DEBUG_DRIVER(dev, "start to power off"); pm_runtime_put_sync(dev); + reinit_completion(&it6505->extcon_completion); =20 drm_helper_hpd_irq_event(it6505->bridge.dev); memset(it6505->dpcd, 0, sizeof(it6505->dpcd)); @@ -3268,6 +3270,7 @@ static int it6505_i2c_probe(struct i2c_client *client, if (!it6505) return -ENOMEM; =20 + mutex_init(&it6505->irq_lock); mutex_init(&it6505->extcon_lock); mutex_init(&it6505->mode_lock); mutex_init(&it6505->aux_lock); @@ -3323,7 +3326,7 @@ static int it6505_i2c_probe(struct i2c_client *client, INIT_WORK(&it6505->link_works, it6505_link_training_work); INIT_WORK(&it6505->hdcp_wait_ksv_list, it6505_hdcp_wait_ksv_list); INIT_DELAYED_WORK(&it6505->hdcp_work, it6505_hdcp_work); - init_completion(&it6505->wait_edid_complete); + init_completion(&it6505->extcon_completion); memset(it6505->dpcd, 0, sizeof(it6505->dpcd)); it6505->powered =3D false; it6505->enable_drv_hold =3D DEFAULT_DRV_HOLD; --=20 2.38.0.rc1.362.ged0d419d3c-goog