From nobody Fri Jul 24 22:57:23 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3AB492C2363 for ; Wed, 22 Jul 2026 12:42:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784724165; cv=none; b=t4KoSOyroUBwfk+dOAbq0/bW7lLlWISanJCK1Lkvf8tKOJYco99d6HttbW8vsw7ymp++Nlx99mcoswbu7m7U6DOQTuvE6BlD5LaVF7BLTVCPedim4a8LvOMdKPZILKtXAeLiNLDitkt8X4VxxxZeZfYruySUVFVARo8TPDT3DBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784724165; c=relaxed/simple; bh=pyfeo0m7jXvHf26AOhGZjEoGDDmZRvsgmACLpna9LSM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=Mt9fwVTUfPv7Pyf5Rr6ma3Svk3dPMlghvfLhGuBLY7+ImFjg9KO0QBijGH4I0YiuqZ5yL+lpJPr+Ewq2sdo5SJt1L9OFlyfCTjHnG4BHDygjFhps+8KzR1LpP1gqOotFPn5XZ5xOynHj2UJ0NTyoJoHCmQrHHcQwNVedbPxM4VM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=KjS+i/uA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fwNdpRlt; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="KjS+i/uA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fwNdpRlt" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M8xLm6412301 for ; Wed, 22 Jul 2026 12:42:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=TNCbQBLNUlZS9iHiAbrge6 eIanHbXlLkcTm3G7asg0o=; b=KjS+i/uAW7xlrH/PYdZ7NIOkYUSVMcvySoLXd6 QbhZ//KIoVVluOzUoQu8BTp72O99iSBMtonk+6GPj6YLSt24/D9woGoDt2ZxzoSI 9Cxx6qr5uV2tf/Afq+Kj/b5PsXa64LmYcjlDD39nEpb2uz9P3xSgDJCiFfvoBVLd hOnckF4djOiOuJ2SB/vnDMEgoOC3z083MMXGk3Hax9m+oFwCV0GNkTcqlZMizvxO +sZAItVOkz1nbgaqgyNwUnW/HbzzKVzErx7tY6z0sAzedBmonl/VyA6Q5nQJiPO7 qVAbS6OYxC+y9qEHIRiAfeE1cZq2Y9haGp4c8ciioRMOXJlw== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjpxdhvn2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 12:42:41 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51caa0b48ccso22510401cf.0 for ; Wed, 22 Jul 2026 05:42:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784724161; x=1785328961; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=TNCbQBLNUlZS9iHiAbrge6eIanHbXlLkcTm3G7asg0o=; b=fwNdpRltNm6WD1SME2JWOj+2e10hg5TJWK17Z53oZdQm62Yq71Y5QGH+GusWDqZd/r 24qpT3xWIgdOF7/5udakK1FlgqA1UlH1+YLLiQK/m/PcbghvjwuppTvOvoa5PDSsm3xx ahrIfD6LOv0rkbqlp3eoVLsleMUhkUM9s2fImiAatPa8zn7TnbiO/2J3z86od+GV791O LwXggdKMiIhGFWGhevgQgr3RVz8q+yNoIFmvN2P3UTzjiJnOPMvQGIO1kSisL15OWsgh lkCxoE0KNHcM4HF6feThwJMK1sJxWWq9PbQBqd01iwbXCuktmcZL4lDrneCBNtEGkvPC yobA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784724161; x=1785328961; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=TNCbQBLNUlZS9iHiAbrge6eIanHbXlLkcTm3G7asg0o=; b=ZSpqx6sH/t/ICjGg5jxaK/QkdnZQRtgyC54Wn+DFtMpKhZ8vSW2K5BWnWFcsdgSEKe MWMvELzJ7wl2XmQjlztaZsa0tFYqZn+ALXvO6W2LmT6Tty/AuXYcorpfdHk4D9cfpDqa BiAeWcAc1y/Bzs1meqAKNkJJZ38nRTGyssX6WfRG0qty3dR2rSseX1wX+RsLIAcnOdeB jtlrwMt0eCZSENo4usLClO/AalHAZg8BiRSt4W9+HAUuh79gUpuXg4GRo+0J2Z7d0eee MldkWAgsxL5eZtLLsFKzw4k3D+QVDqiqVW5ARsw75R7sPcAqPFeKJFrBsTErwDryPmR1 qzzQ== X-Forwarded-Encrypted: i=1; AHgh+RrhZHoOYOx3dntYeYKOCN8pXHx2qoBBkfCaMgC3Yqv6biI8MLWEEsSp/IsElZXMK37ORYsP47XEbnIYkB4=@vger.kernel.org X-Gm-Message-State: AOJu0YzsPenwfD3be8n6ru9sMLTp1cy+WMsUojHoyoCZZmxeFuq4hw+L a1h/XyCwSBBLIXtVbXpyrAxZHzktf7AXmRUVMdCZpa94CtqHd4UqooM2T6ReIZpHXJkBDY4vmq0 3NAnXOvjaoKne5v+yd47zU5YppF4yB4eo2ZA3O1PMTylH3G20UaCFMAyc3hQuogQAwzc= X-Gm-Gg: AR+sD13pTIs+FkkIAm7lzg93eA4sCNFVD0TEKotq8UWBfWJqmm1If7p+W7LtXi93VxU OwsbYipd32k48+FXd5XL4/C/WL9Xl4wtT32Za1eMhMneYXq2ieAP7H0YVPoDE2SheMN3zn9B0F5 ULs+r3TwdHB9CXmd2kuVaq1OS0GRMHOxY/IklgvDa7LGVIPBm2UjEi9jbPHtEfTXSaHxvpSCYeM WTG2L9vZqU17ruCb2UmJf2mEQtgVKEFzy7C2QLW9RyXyxre9NuNHHY2On87phdtX0zqq4G+37KT P48O/khjCo4Qf3SYeAwVpO+1ox15RdiFjaUhZQrXTH7V6MyfCRmadjmC6KXRD71xXq9WaPr1NyI w/bzj/bZbdFJnhjmhS42DFiht79BryjKZJmXFJ/ctENzuIwbnctlihILmd2JV22Kx+yW9qTsi1f +C+mfrItGI5DElmi54JCug X-Received: by 2002:a05:622a:841b:10b0:51a:8c9c:7de1 with SMTP id d75a77b69052e-526756d33d1mr44304611cf.11.1784724161191; Wed, 22 Jul 2026 05:42:41 -0700 (PDT) X-Received: by 2002:a05:622a:841b:10b0:51a:8c9c:7de1 with SMTP id d75a77b69052e-526756d33d1mr44304331cf.11.1784724160666; Wed, 22 Jul 2026 05:42:40 -0700 (PDT) Received: from hu-vishsain-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-527d2e7662bsm14161961cf.18.2026.07.22.05.42.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 05:42:40 -0700 (PDT) From: vishnu.saini@oss.qualcomm.com Date: Wed, 22 Jul 2026 18:12:31 +0530 Subject: [PATCH v3] drm/bridge: lt9611uxc: support displays with up to 4 EDID blocks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260722-lt9611usc_edid34_misc_next-v3-1-7ec2bba6ff8e@oss.qualcomm.com> X-B4-Tracking: v=1; b=H4sIALa6YGoC/43NwQ6CMAyA4VchOzuyFTbAk+9hDIGtyBJgymDBE N7dwcWLMV6a/j18XYnD0aAj52glI3rjjB1CJKeIqLYa7kiNDk2AgWSCZ7SbCsn57FSJ2ugkLXs T9gGXidYMRAEaWQ2CBOAxYmOWA7/eQrfGTXZ8Hb88369/sZ5TTgVCo3Mlk6KoL9a5+DlXnbJ9H 4dBdt3DR5SQ/hQhiJAqTBqRZazOv4jbtr0BPjToeR0BAAA= X-Change-ID: 20260517-lt9611usc_edid34_misc_next-b02592de0b25 To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, venkata.valluru@oss.qualcomm.com, Jessica Zhang , Ravi Agola , Vishnu Saini X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1784724153; l=5762; i=vishnu.saini@oss.qualcomm.com; s=20251113; h=from:subject:message-id; bh=eh9qEtAzPAIBVXCRjxt6ILoJN1DJyrhboPX0nP3Zhao=; b=3UgSXe34Qb6lqaq7H8nSL5kB/GY7ftQ/BG0uxxrYCDqaVDthnct7l8jJ5d7qe6Ox0AXvWA8b7 R2Xc4jwj/ujBJ6Npi8GjV/0aE2EVMOSX30sjt6GFIBt8lOZQS7bHGpc X-Developer-Key: i=vishnu.saini@oss.qualcomm.com; a=ed25519; pk=8hlXlF8j/3GeOaDK3w2LYhkv9FanCQru0c7kRH/It7k= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDEyNCBTYWx0ZWRfX6IeG8zKksaBr l8k1Jj1/J6+JFgS7Nu1owaQk9rVcWi5gpmSnX6Ms+HhPrTe1YbPg6JDkyMs4+tizZ4+9gFdcxc1 8y6uh+E/sWCPMCj1xHE6KmcHXTU1VCltda4z2UzpJVqFCFp4a00zGz8ybQlIabqccAyI7z2o7L9 hgODGh2oBcc9qUZkLU3zhcLZSnLMh4R94q6CRQdiiRb4sjcknoJaF3MRlzdW4sOSqCYaHbYhX9j AG/GUgjDnkitWDJEFTuWxMVePqEgHhkhW3OD5vkFzjHgJ0zYBBBeqGwEPx8wzB9MA7wPaXxEYsA W10Z9dqbSBFk9fQCZHlL6gf44oJ/CugMMemX/3y56t8dhRRvXh4DIfjuYHpJP1wCkO0ojri0bOh DxAj4RmKBClrEx5GlgM1Jli03hB6+R9dheb3BfspCbu3V2CPCN7lKEJ8m3iLNV/RFzDZZCk3tWY QarVTJquZn4AdmWjnqw== X-Proofpoint-GUID: Mv0XxeersKDm9zQKz7z0mdCe4Y-UFIJA X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDEyNCBTYWx0ZWRfX+FBfD+63uiwM 5o+go5yzGefnxUrhlZgvnCYzGZdO5CGGfdsdOrQfQfCX7u/v7FJmPm54cz/IKYfeY70XoxlzcPV 6tm77L6ayHeGmOUhY9KXZ5lpK/Tz46I= X-Authority-Analysis: v=2.4 cv=b7iCJNGx c=1 sm=1 tr=0 ts=6a60bac1 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=YtTfkkFDc2t7ANI9DR8A:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-ORIG-GUID: Mv0XxeersKDm9zQKz7z0mdCe4Y-UFIJA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_03,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 suspectscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 impostorscore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220124 From: Ravi Agola The LT9611UXC bridge can fetch only 2 EDID blocks at a time, which previously limited EDID reading to 2 blocks and prevented support for displays exposing more than 2 EDID blocks. Add driver support to fetch up to 4 EDID blocks by re-triggering EDID access after the first 2 blocks are read. For block 0 and 2, set the EDID ready flag in 0xb028 so the bridge can expose the corresponding EDID blocks, then retry the read until the expected EDID is fetched. Reset the edid_read flag on HPD disconnect so that the next connect event triggers a fresh EDID fetch. Increase EDID wait time from 500ms to 1000ms, On Qualcomm rb3gen2 platform sometimes edid read interrupt is coming 600-650 ms after HPD interrupt resulting in edid read failure. Signed-off-by: Ravi Agola Signed-off-by: Vishnu Saini --- Changes in v3: - moved edid_read state change inside mutex lock [sashiko-bot] - returned -ETIMEOUT when retry_cnt is exhausted without a match. [Sashi= ko-bot] - Increased edid wait timeout from 500ms to 1000ms as edid interrupt is som= etimes taking around 650ms time - Link to v2: https://lore.kernel.org/r/20260624-lt9611usc_edid34_misc_next= -v2-1-24ce3f5770b8@oss.qualcomm.com Changes in v2: - Removed memcpy and doing edid fetch everytime. Required an update in firm= ware as well for edid block0 reset. - Verified patch with existing firmware V5.0.21, patch is not causing any r= egression if V5.0.21 firmware is used. - Firmware V5.0.22 is required with this patch to support edid fetch on mor= e than 2 edid block monitors. - Link to v1: https://lore.kernel.org/r/20260517-lt9611usc_edid34_misc_next= -v1-1-5e2fd8c6399b@oss.qualcomm.com --- drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 80 +++++++++++++++++++++++++-= ---- 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/b= ridge/lontium-lt9611uxc.c index 11aab07d88df..20e3383a510a 100644 --- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c +++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c @@ -28,7 +28,7 @@ #include =20 #define EDID_BLOCK_SIZE 128 -#define EDID_NUM_BLOCKS 2 +#define EDID_NUM_BLOCKS 4 =20 #define FW_FILE "lt9611uxc_fw.bin" =20 @@ -168,6 +168,8 @@ static void lt9611uxc_hpd_work(struct work_struct *work) =20 mutex_lock(<9611uxc->ocm_lock); connected =3D lt9611uxc->hdmi_connected; + if (!connected) + lt9611uxc->edid_read =3D false; mutex_unlock(<9611uxc->ocm_lock); =20 drm_bridge_hpd_notify(<9611uxc->bridge, @@ -381,13 +383,39 @@ lt9611uxc_bridge_detect(struct drm_bridge *bridge, st= ruct drm_connector *connect static int lt9611uxc_wait_for_edid(struct lt9611uxc *lt9611uxc) { return wait_event_interruptible_timeout(lt9611uxc->wq, lt9611uxc->edid_re= ad, - msecs_to_jiffies(500)); + msecs_to_jiffies(1000)); +} + +static int lt9611uxc_read_edid_block(struct lt9611uxc *lt9611uxc, unsigned= int block, + u8 *buf, size_t len) +{ + int ret; + + lt9611uxc_lock(lt9611uxc); + + regmap_write(lt9611uxc->regmap, 0xb00a, (block % 2) * EDID_BLOCK_SIZE); + + ret =3D regmap_noinc_read(lt9611uxc->regmap, 0xb0b0, buf, len); + if (ret) { + dev_err(lt9611uxc->dev, "edid block %d read failed: %d\n", block, ret); + lt9611uxc_unlock(lt9611uxc); + return -EINVAL; + } + lt9611uxc_unlock(lt9611uxc); + + return ret; } =20 static int lt9611uxc_get_edid_block(void *data, u8 *buf, unsigned int bloc= k, size_t len) { struct lt9611uxc *lt9611uxc =3D data; - int ret; + int ret =3D 0; + int retry_cnt =3D 10; + unsigned int edid_ready_flag =3D 0; + bool header_matched; + bool edid_valid =3D false; + const u8 edid_header[8] =3D { 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00 }; =20 if (len > EDID_BLOCK_SIZE) return -EINVAL; @@ -395,20 +423,48 @@ static int lt9611uxc_get_edid_block(void *data, u8 *b= uf, unsigned int block, siz if (block >=3D EDID_NUM_BLOCKS) return -EINVAL; =20 - lt9611uxc_lock(lt9611uxc); + if (block =3D=3D 0 || block =3D=3D 2) { =20 - regmap_write(lt9611uxc->regmap, 0xb00b, 0x10); + lt9611uxc_lock(lt9611uxc); =20 - regmap_write(lt9611uxc->regmap, 0xb00a, block * EDID_BLOCK_SIZE); + edid_ready_flag =3D (block =3D=3D 0) ? BIT(0) : BIT(1); =20 - ret =3D regmap_noinc_read(lt9611uxc->regmap, 0xb0b0, buf, len); - if (ret) - dev_err(lt9611uxc->dev, "edid read failed: %d\n", ret); + /* + * Set the EDID ready flag so that lt9611uxc can fetch correct EDID block + */ + regmap_write(lt9611uxc->regmap, 0xb028, edid_ready_flag); =20 - lt9611uxc_unlock(lt9611uxc); + lt9611uxc_unlock(lt9611uxc); =20 - return 0; -}; + do { + msleep(100); + ret =3D lt9611uxc_read_edid_block(lt9611uxc, block, buf, len); + if (ret) + break; + /* + * Compare first 8 bytes of EDID header for block 0 and block 2 + * to confirm EDID read successfully + */ + header_matched =3D (memcmp(edid_header, buf, 8) =3D=3D 0); + edid_valid =3D (block =3D=3D 0 && header_matched) || + (block =3D=3D 2 && !header_matched); + if (edid_valid) + break; + + } while (retry_cnt-- > 0); + + if (!ret && !edid_valid) + ret =3D -ETIMEDOUT; + } else { + ret =3D lt9611uxc_read_edid_block(lt9611uxc, block, buf, len); + + lt9611uxc_lock(lt9611uxc); + regmap_write(lt9611uxc->regmap, 0xb028, 0x00); + lt9611uxc_unlock(lt9611uxc); + } + + return ret; +} =20 static const struct drm_edid *lt9611uxc_bridge_edid_read(struct drm_bridge= *bridge, struct drm_connector *connector) --- base-commit: 4c26e162947f91aa78ba57dd4fddd38fc80e7d60 change-id: 20260517-lt9611usc_edid34_misc_next-b02592de0b25 Best regards, --=20 Vishnu Saini