From nobody Wed Dec 31 06:39:57 2025 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 0F222C001B2 for ; Mon, 6 Nov 2023 21:03:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233083AbjKFVDq (ORCPT ); Mon, 6 Nov 2023 16:03:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231975AbjKFVDp (ORCPT ); Mon, 6 Nov 2023 16:03:45 -0500 Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 382AFA3 for ; Mon, 6 Nov 2023 13:03:42 -0800 (PST) Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1ccbb7f79cdso12726835ad.3 for ; Mon, 06 Nov 2023 13:03:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1699304622; x=1699909422; darn=vger.kernel.org; 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=eKtI99VxeOyhPoDjugXpaj86NuLenomQwROgP1e0y7o=; b=JAn29ap+X6Zp6Cktdqoi1EGOQxSnr2znMljTUfjfYSNAsOXyjuy0wZG7J+r9H+FVNP +wv/U6RdJ84frybvvBUlmFGN04gAuUSId+oAUnkzEPBuCbNw5LyVm2b3Pxa3EQwYtHvq zT8W6lKeqe+63KRhKFYrUCi0M3l/LpoDaDr7s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699304622; x=1699909422; 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=eKtI99VxeOyhPoDjugXpaj86NuLenomQwROgP1e0y7o=; b=Ylv0hUjcN40m7vM5g39QNAoPmwiODYVgxTj/PcIH7UzT4b/Ijl7ooK5/qwF/qLhUYW W2cQK3P42Up3NyJ/yMvkEVhDMecO3QC87gV7YtWjmMrIvgqPi8pUxNb3+J+TxTIqvsA4 8vLjiFJWZ0i93Og7FrItS3sj7zyvz1wotG1wFcqZOOi+TkonIfkkv8w8PfJwQvB2Ofxa z/0+q0eW7RA/rvWuJ40AgvInAOwteuTqlj2mqEB03b09/v88CT9qwXNKgCCHcRQmFnla QL73ub08sTK38nLI9yppACowitVBfixGD4crvSR405AgntMXWwXmC+r03KD6UYCHjfml gnEQ== X-Gm-Message-State: AOJu0YwSmAB17o3Y4L/AAD75Qlu6+RBcVCX4irh7ssh3a04vX+1dFm0A XqzuZ9HOb69Ma+fMiJnn8HYsTg== X-Google-Smtp-Source: AGHT+IEgkCcnmhGuXSV20mCLJT+G3uromP0u9qOsKHYycPIkYB0avjj7Pmoxd4Iy0zAs0/ISsCyl3g== X-Received: by 2002:a17:902:bcca:b0:1cc:41e1:ba38 with SMTP id o10-20020a170902bcca00b001cc41e1ba38mr18038316pls.66.1699304621684; Mon, 06 Nov 2023 13:03:41 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:3374:ff6c:474e:a78]) by smtp.gmail.com with ESMTPSA id 11-20020a170902c14b00b001c75a07f62esm6291220plj.34.2023.11.06.13.03.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 13:03:41 -0800 (PST) From: Hsin-Yi Wang To: Douglas Anderson Cc: Neil Armstrong , Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 1/3] drm/panel-edp: drm/panel-edp: Add several generic edp panels Date: Mon, 6 Nov 2023 13:00:50 -0800 Message-ID: <20231106210337.2900034-2-hsinyi@chromium.org> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog In-Reply-To: <20231106210337.2900034-1-hsinyi@chromium.org> References: <20231106210337.2900034-1-hsinyi@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" Add a few generic edp panels used by mt8186 chromebooks. Besides, modify the following panel: - AUO 0x235c B116XTN02 renamed to B116XTN02.3. - AUO 0x405c B116XAK01 adjust the timing of auo_b116xak01. According to the datasheet: T3=3D200, T12=3D500, T7_max =3D 50. Signed-off-by: Hsin-Yi Wang Reviewed-by: Douglas Anderson --- v3->v4: no change --- drivers/gpu/drm/panel/panel-edp.c | 57 +++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/pane= l-edp.c index 9dce4c702414..599a949d74d1 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -973,6 +973,8 @@ static const struct panel_desc auo_b116xak01 =3D { }, .delay =3D { .hpd_absent =3D 200, + .unprepare =3D 500, + .enable =3D 50, }, }; =20 @@ -1830,6 +1832,12 @@ static const struct panel_delay delay_200_500_e50 = =3D { .enable =3D 50, }; =20 +static const struct panel_delay delay_200_500_e80 =3D { + .hpd_absent =3D 200, + .unprepare =3D 500, + .enable =3D 80, +}; + static const struct panel_delay delay_200_500_e80_d50 =3D { .hpd_absent =3D 200, .unprepare =3D 500, @@ -1849,6 +1857,19 @@ static const struct panel_delay delay_200_500_e200 = =3D { .enable =3D 200, }; =20 +static const struct panel_delay delay_200_500_e200_d10 =3D { + .hpd_absent =3D 200, + .unprepare =3D 500, + .enable =3D 200, + .disable =3D 10, +}; + +static const struct panel_delay delay_200_150_e200 =3D { + .hpd_absent =3D 200, + .unprepare =3D 150, + .enable =3D 200, +}; + #define EDP_PANEL_ENTRY(vend_chr_0, vend_chr_1, vend_chr_2, product_id, _d= elay, _name) \ { \ .name =3D _name, \ @@ -1869,37 +1890,69 @@ static const struct edp_panel_entry edp_panels[] = =3D { EDP_PANEL_ENTRY('A', 'U', 'O', 0x145c, &delay_200_500_e50, "B116XAB01.4"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x1e9b, &delay_200_500_e50, "B133UAN02.1"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x1ea5, &delay_200_500_e50, "B116XAK01.6"), - EDP_PANEL_ENTRY('A', 'U', 'O', 0x235c, &delay_200_500_e50, "B116XTN02"), - EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x208d, &delay_200_500_e50, "B140HTN02.1"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x235c, &delay_200_500_e50, "B116XTN02.3"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x239b, &delay_200_500_e50, "B116XAN06.1"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x255c, &delay_200_500_e50, "B116XTN02.5"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x403d, &delay_200_500_e50, "B140HAN04.0"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01.0= "), EDP_PANEL_ENTRY('A', 'U', 'O', 0x582d, &delay_200_500_e50, "B133UAN01.0"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x635c, &delay_200_500_e50, "B116XAN06.3"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0x639c, &delay_200_500_e50, "B140HAK02.7"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x8594, &delay_200_500_e50, "B133UAN01.0"), + EDP_PANEL_ENTRY('A', 'U', 'O', 0xf390, &delay_200_500_e50, "B140XTN07.7"), =20 + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0715, &delay_200_150_e200, "NT116WHM-N21= "), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0731, &delay_200_500_e80, "NT116WHM-N42"= ), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0741, &delay_200_500_e200, "NT116WHM-N44= "), EDP_PANEL_ENTRY('B', 'O', 'E', 0x0786, &delay_200_500_p2e80, "NV116WHM-T0= 1"), EDP_PANEL_ENTRY('B', 'O', 'E', 0x07d1, &boe_nv133fhm_n61.delay, "NV133FHM= -N61"), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x07f6, &delay_200_500_e200, "NT140FHM-N44= "), EDP_PANEL_ENTRY('B', 'O', 'E', 0x082d, &boe_nv133fhm_n61.delay, "NV133FHM= -N62"), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x08b2, &delay_200_500_e200, "NT140WHM-N49= "), EDP_PANEL_ENTRY('B', 'O', 'E', 0x09c3, &delay_200_500_e50, "NT116WHM-N21,= 836X2"), EDP_PANEL_ENTRY('B', 'O', 'E', 0x094b, &delay_200_500_e50, "NT116WHM-N21"= ), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0951, &delay_200_500_e80, "NV116WHM-N47"= ), EDP_PANEL_ENTRY('B', 'O', 'E', 0x095f, &delay_200_500_e50, "NE135FBM-N41 = v8.1"), EDP_PANEL_ENTRY('B', 'O', 'E', 0x0979, &delay_200_500_e50, "NV116WHM-N49 = V8.0"), EDP_PANEL_ENTRY('B', 'O', 'E', 0x098d, &boe_nv110wtm_n61.delay, "NV110WTM= -N61"), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x09ae, &delay_200_500_e200, "NT140FHM-N45= "), EDP_PANEL_ENTRY('B', 'O', 'E', 0x09dd, &delay_200_500_e50, "NT116WHM-N21"= ), EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a5d, &delay_200_500_e50, "NV116WHM-N45"= ), EDP_PANEL_ENTRY('B', 'O', 'E', 0x0ac5, &delay_200_500_e50, "NV116WHM-N4C"= ), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0b43, &delay_200_500_e200, "NV140FHM-T09= "), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0b56, &delay_200_500_e80, "NT140FHM-N47"= ), + EDP_PANEL_ENTRY('B', 'O', 'E', 0x0c20, &delay_200_500_e80, "NT140FHM-N47"= ), =20 + EDP_PANEL_ENTRY('C', 'M', 'N', 0x1132, &delay_200_500_e80_d50, "N116BGE-E= A2"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x1138, &innolux_n116bca_ea1.delay, "N116B= CA-EA1-RC4"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x1139, &delay_200_500_e80_d50, "N116BGE-E= A2"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x1145, &delay_200_500_e80_d50, "N116BCN-E= B1"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x114c, &innolux_n116bca_ea1.delay, "N116B= CA-EA1"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x1152, &delay_200_500_e80_d50, "N116BCN-E= A1"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x1153, &delay_200_500_e80_d50, "N116BGE-E= A2"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x1154, &delay_200_500_e80_d50, "N116BCA-E= A2"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x1157, &delay_200_500_e80_d50, "N116BGE-E= A2"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x115b, &delay_200_500_e80_d50, "N116BCN-E= B1"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x1247, &delay_200_500_e80_d50, "N120ACA-E= A1"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x142b, &delay_200_500_e80_d50, "N140HCA-E= AC"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x144f, &delay_200_500_e80_d50, "N140HGA-E= A1"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x1468, &delay_200_500_e80, "N140HGA-EA1"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x14e5, &delay_200_500_e80_d50, "N140HGA-E= A1"), EDP_PANEL_ENTRY('C', 'M', 'N', 0x14d4, &delay_200_500_e80_d50, "N140HCA-E= AC"), + EDP_PANEL_ENTRY('C', 'M', 'N', 0x14d6, &delay_200_500_e80_d50, "N140BGA-E= A4"), + + EDP_PANEL_ENTRY('H', 'K', 'C', 0x2d5c, &delay_200_500_e200, "MB116AN01-2"= ), =20 + EDP_PANEL_ENTRY('I', 'V', 'O', 0x048e, &delay_200_500_e200_d10, "M116NWR6= R5"), EDP_PANEL_ENTRY('I', 'V', 'O', 0x057d, &delay_200_500_e200, "R140NWF5 RH"= ), EDP_PANEL_ENTRY('I', 'V', 'O', 0x854a, &delay_200_500_p2e100, "M133NW4J"), EDP_PANEL_ENTRY('I', 'V', 'O', 0x854b, &delay_200_500_p2e100, "R133NW4K-R= 0"), + EDP_PANEL_ENTRY('I', 'V', 'O', 0x8c4d, &delay_200_150_e200, "R140NWFM R1"= ), =20 EDP_PANEL_ENTRY('K', 'D', 'B', 0x0624, &kingdisplay_kd116n21_30nv_a010.de= lay, "116N21-30NV-A010"), + EDP_PANEL_ENTRY('K', 'D', 'C', 0x0809, &delay_200_500_e50, "KD116N2930A15= "), EDP_PANEL_ENTRY('K', 'D', 'B', 0x1120, &delay_200_500_e80_d50, "116N29-30= NK-C007"), =20 EDP_PANEL_ENTRY('S', 'H', 'P', 0x1511, &delay_200_500_e50, "LQ140M1JW48"), --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 06:39:57 2025 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 1519FC4332F for ; Mon, 6 Nov 2023 21:03:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233090AbjKFVDt (ORCPT ); Mon, 6 Nov 2023 16:03:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233065AbjKFVDq (ORCPT ); Mon, 6 Nov 2023 16:03:46 -0500 Received: from mail-pf1-x431.google.com (mail-pf1-x431.google.com [IPv6:2607:f8b0:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F436103 for ; Mon, 6 Nov 2023 13:03:43 -0800 (PST) Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-6b20a48522fso4197108b3a.1 for ; Mon, 06 Nov 2023 13:03:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1699304623; x=1699909423; darn=vger.kernel.org; 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=0wWL7J6soKXZc65uu5mj0Qq7sACwpTaan+kzwOlzpWc=; b=VI0sYYNSk0tKdSQHnfobUL3t72QrxPESqP8dl1JovWqzz3L//Sww4dVaOKEpAMcNba pX3pKpG1+05q4VJ1g7+xxldYZ7Y/GY9XWR2gzcDnHnrpT5sKB/herBcBCwjQyxv9r5a1 xoSytHDQCaduuNmluF6aO639qLCCkVsl7mk5U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699304623; x=1699909423; 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=0wWL7J6soKXZc65uu5mj0Qq7sACwpTaan+kzwOlzpWc=; b=hi7G8UWqeAju1rXuh0kfYWuMTXgIbGGqL7yGLVcq5KzoLHZOc8zUlylchXUNOofDai uPCcIVFah2r9DgnDVCgvv6CuM+gyFS8rQVAh7L1CdJ3o8f0xuCIMQSf1Jfhpei5MQTj+ gZ7QoKiH7iQxGBAVVcHMLYt9eCbqB+uDJmASMQDVr+6UTJ96FUVTRV0UNjMndWjXPTBf wM6Lbwwa9/IsJObQxLiHtEHFWksW6nqfBR/b4rmnBOtvaV+ahfSAER0Y3AJy1qR5pjXy agpYwDU3FKLK/wcEbN61Sqq6ei7Xej9InQNMRutUysDqNa297o8Wre4M3FxEZkdL6prj Bupw== X-Gm-Message-State: AOJu0YwR0OHyLZ7cI9euudf9upxadR6vWBU0ZLCMADd5JYj/TYEl6Pm1 suBqCpLDg11qvEDNoMCThuaCPg== X-Google-Smtp-Source: AGHT+IFM2GTBPjI8bq/FQLf5bRTneQk2tdqTVKAj45iV5SVG723BAM44dRQrGIaFM2x2UujTW8wntA== X-Received: by 2002:a05:6a20:7d9e:b0:180:e2b8:3b05 with SMTP id v30-20020a056a207d9e00b00180e2b83b05mr19953860pzj.52.1699304622719; Mon, 06 Nov 2023 13:03:42 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:3374:ff6c:474e:a78]) by smtp.gmail.com with ESMTPSA id 11-20020a170902c14b00b001c75a07f62esm6291220plj.34.2023.11.06.13.03.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 13:03:42 -0800 (PST) From: Hsin-Yi Wang To: Douglas Anderson Cc: Neil Armstrong , Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/3] drm/panel-edp: Add override_edid_mode quirk for generic edp Date: Mon, 6 Nov 2023 13:00:51 -0800 Message-ID: <20231106210337.2900034-3-hsinyi@chromium.org> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog In-Reply-To: <20231106210337.2900034-1-hsinyi@chromium.org> References: <20231106210337.2900034-1-hsinyi@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" Generic edp gets mode from edid. However, some panels report incorrect mode in this way, resulting in glitches on panel. Introduce a new quirk additional_mode to the generic edid to pick a correct hardcoded mode. Signed-off-by: Hsin-Yi Wang Reviewed-by: Douglas Anderson --- v3->v4: no change --- drivers/gpu/drm/panel/panel-edp.c | 68 ++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/pane= l-edp.c index 599a949d74d1..0fb439b5efb1 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -203,6 +203,9 @@ struct edp_panel_entry { =20 /** @name: Name of this panel (for printing to logs). */ const char *name; + + /** @override_edid_mode: Override the mode obtained by edid. */ + const struct drm_display_mode *override_edid_mode; }; =20 struct panel_edp { @@ -301,6 +304,25 @@ static unsigned int panel_edp_get_display_modes(struct= panel_edp *panel, return num; } =20 +static int panel_edp_override_edid_mode(struct panel_edp *panel, + struct drm_connector *connector, + const struct drm_display_mode *override_mode) +{ + struct drm_display_mode *mode; + + mode =3D drm_mode_duplicate(connector->dev, override_mode); + if (mode) { + mode->type |=3D DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; + drm_mode_set_name(mode); + drm_mode_probed_add(connector, mode); + return 1; + } + + dev_err(panel->base.dev, "failed to add additional mode\n"); + + return 0; +} + static int panel_edp_get_non_edid_modes(struct panel_edp *panel, struct drm_connector *connector) { @@ -568,6 +590,9 @@ static int panel_edp_get_modes(struct drm_panel *panel, { struct panel_edp *p =3D to_panel_edp(panel); int num =3D 0; + bool has_override_edid_mode =3D p->detected_panel && + p->detected_panel !=3D ERR_PTR(-EINVAL) && + p->detected_panel->override_edid_mode; =20 /* probe EDID if a DDC bus is available */ if (p->ddc) { @@ -575,9 +600,18 @@ static int panel_edp_get_modes(struct drm_panel *panel, =20 if (!p->edid) p->edid =3D drm_get_edid(connector, p->ddc); - - if (p->edid) - num +=3D drm_add_edid_modes(connector, p->edid); + if (p->edid) { + if (has_override_edid_mode) { + /* + * override_edid_mode is specified. Use + * override_edid_mode instead of from edid. + */ + num +=3D panel_edp_override_edid_mode(p, connector, + p->detected_panel->override_edid_mode); + } else { + num +=3D drm_add_edid_modes(connector, p->edid); + } + } =20 pm_runtime_mark_last_busy(panel->dev); pm_runtime_put_autosuspend(panel->dev); @@ -950,6 +984,19 @@ static const struct panel_desc auo_b101ean01 =3D { }, }; =20 +static const struct drm_display_mode auo_b116xa3_mode =3D { + .clock =3D 70589, + .hdisplay =3D 1366, + .hsync_start =3D 1366 + 40, + .hsync_end =3D 1366 + 40 + 40, + .htotal =3D 1366 + 40 + 40 + 32, + .vdisplay =3D 768, + .vsync_start =3D 768 + 10, + .vsync_end =3D 768 + 10 + 12, + .vtotal =3D 768 + 10 + 12 + 6, + .flags =3D DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, +}; + static const struct drm_display_mode auo_b116xak01_mode =3D { .clock =3D 69300, .hdisplay =3D 1366, @@ -1878,6 +1925,15 @@ static const struct panel_delay delay_200_150_e200 = =3D { .delay =3D _delay \ } =20 +#define EDP_PANEL_ENTRY2(vend_chr_0, vend_chr_1, vend_chr_2, product_id, _= delay, _name, _mode) \ +{ \ + .name =3D _name, \ + .panel_id =3D drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, vend_chr_2= , \ + product_id), \ + .delay =3D _delay, \ + .override_edid_mode =3D _mode \ +} + /* * This table is used to figure out power sequencing delays for panels that * are detected by EDID. Entries here may point to entries in the @@ -1895,9 +1951,11 @@ static const struct edp_panel_entry edp_panels[] =3D= { EDP_PANEL_ENTRY('A', 'U', 'O', 0x239b, &delay_200_500_e50, "B116XAN06.1"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x255c, &delay_200_500_e50, "B116XTN02.5"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x403d, &delay_200_500_e50, "B140HAN04.0"), - EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01.0= "), + EDP_PANEL_ENTRY2('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01.= 0", + &auo_b116xa3_mode), EDP_PANEL_ENTRY('A', 'U', 'O', 0x582d, &delay_200_500_e50, "B133UAN01.0"), - EDP_PANEL_ENTRY('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1"), + EDP_PANEL_ENTRY2('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1", + &auo_b116xa3_mode), EDP_PANEL_ENTRY('A', 'U', 'O', 0x635c, &delay_200_500_e50, "B116XAN06.3"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x639c, &delay_200_500_e50, "B140HAK02.7"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x8594, &delay_200_500_e50, "B133UAN01.0"), --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 06:39:57 2025 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 EC8AAC4332F for ; Mon, 6 Nov 2023 21:03:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233103AbjKFVDx (ORCPT ); Mon, 6 Nov 2023 16:03:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233080AbjKFVDq (ORCPT ); Mon, 6 Nov 2023 16:03:46 -0500 Received: from mail-pg1-x532.google.com (mail-pg1-x532.google.com [IPv6:2607:f8b0:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53D33A3 for ; Mon, 6 Nov 2023 13:03:44 -0800 (PST) Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-5bd6ac9833fso1074634a12.0 for ; Mon, 06 Nov 2023 13:03:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1699304624; x=1699909424; darn=vger.kernel.org; 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=7kMz5bDbNmGy2pUD82uFFbL5daLBA/vsaP69IFKgup4=; b=AaHMfj+BWvqcdReQPy/WjbaWZvLbFCJkY45D4gnNR5PuDePP6Szlw3lZ/EAdz46L1I brRUdp5ZJFo99OndPLmhZdIyEyRIiaBXYNZiRbPl6NUPuC13OKZ8/emwrAC1MdaDSIa2 6pe8yChjPHr0FF0DCQ3fqypuUHoL9JyHSeP1c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699304624; x=1699909424; 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=7kMz5bDbNmGy2pUD82uFFbL5daLBA/vsaP69IFKgup4=; b=wUb1DrD/SncaSCpHpBPwur2FR2UiukND5SKvmvQf1GTlsu12Y9LF3AKpST1zSEudIz /U9pANYxIRmkbq8nrs+H0QWwikWnxznujZmtNyTXDZ7maOghTziEBa/1FwnDuwMEEMFS YY/T9rODy7sehDlFnTnpQcrdrRehuiN8TCajpR23mZvHT/P6OAosMfDPVwqlwYKy2iVl GoePRVScpN8WE1ZPLEigJLwdG2CjF0PxlgToALgotr6t4ty6XGRsoA+77h/GmNZ1UcnD jUUSNcOjD21qLh6FhYnOCKTKRvM5wez4T+kzM1BcvjPO5pBIoYCOLAMRe6MsthclLKOm bMcQ== X-Gm-Message-State: AOJu0YwNokRsfZHGEY8/5EdWgERhjed6vWaqSII7Ia5ui+/ghEZsCQfG AbeccwslBmXwao38vtvPZSPvVg== X-Google-Smtp-Source: AGHT+IEkWl9k5SAj8xLAUFrAxgucK+63CpEdIfXgMDfEcYRDMLt8uvfDT+d+MntyPAZQDi9dGqzUsQ== X-Received: by 2002:a17:90a:1a03:b0:280:f4a:86b4 with SMTP id 3-20020a17090a1a0300b002800f4a86b4mr23561724pjk.17.1699304623756; Mon, 06 Nov 2023 13:03:43 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:3374:ff6c:474e:a78]) by smtp.gmail.com with ESMTPSA id 11-20020a170902c14b00b001c75a07f62esm6291220plj.34.2023.11.06.13.03.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 13:03:43 -0800 (PST) From: Hsin-Yi Wang To: Douglas Anderson Cc: Neil Armstrong , Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/3] drm/panel-edp: Avoid adding multiple preferred modes Date: Mon, 6 Nov 2023 13:00:52 -0800 Message-ID: <20231106210337.2900034-4-hsinyi@chromium.org> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog In-Reply-To: <20231106210337.2900034-1-hsinyi@chromium.org> References: <20231106210337.2900034-1-hsinyi@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" If a non generic edp-panel is under aux-bus, the mode read from edid would still be selected as preferred and results in multiple preferred modes, which is ambiguous. If both hard-coded mode and edid exists, only add mode from hard-coded. Signed-off-by: Hsin-Yi Wang --- v3->v4: don't skip read edid. only skip add modes. --- drivers/gpu/drm/panel/panel-edp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/pane= l-edp.c index 0fb439b5efb1..c8bb4baf1d45 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -590,6 +590,7 @@ static int panel_edp_get_modes(struct drm_panel *panel, { struct panel_edp *p =3D to_panel_edp(panel); int num =3D 0; + bool has_hard_coded_modes =3D p->desc->num_timings || p->desc->num_modes; bool has_override_edid_mode =3D p->detected_panel && p->detected_panel !=3D ERR_PTR(-EINVAL) && p->detected_panel->override_edid_mode; @@ -600,7 +601,11 @@ static int panel_edp_get_modes(struct drm_panel *panel, =20 if (!p->edid) p->edid =3D drm_get_edid(connector, p->ddc); - if (p->edid) { + /* + * If both edid and hard-coded modes exists, skip edid modes to + * avoid multiple preferred modes. + */ + if (p->edid && !has_hard_coded_modes) { if (has_override_edid_mode) { /* * override_edid_mode is specified. Use @@ -622,7 +627,7 @@ static int panel_edp_get_modes(struct drm_panel *panel, * and no modes (the generic edp-panel case) because it will clobber * the display_info that was already set by drm_add_edid_modes(). */ - if (p->desc->num_timings || p->desc->num_modes) + if (has_hard_coded_modes) num +=3D panel_edp_get_non_edid_modes(p, connector); else if (!num) dev_warn(p->base.dev, "No display modes\n"); --=20 2.42.0.869.gea05f2083d-goog