From nobody Fri Dec 19 21:48:28 2025 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0127142630 for ; Wed, 6 Mar 2024 20:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755439; cv=none; b=AgLFv8qjmXW1jRNuuK01JgxAjOIgtIM15weucG9MQaWQeqtVJ8G7CkSLksgTYjHKRLq6gP4Im7UBbYN2cOPqMdolWlF87D/4leEcxoQqwjVULG7tUh2PUVbY/Yj5yDVrxwAydDrFVFfx8Nfi0kq0zeI07s1QgHpvt5edK98+gzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755439; c=relaxed/simple; bh=v5m0xZ0V86aaMgnmonnHS6h2Id+Nb5Lp0MUuhAkv1nw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G1kxmyE+Z/vr1AXvN3KjXHP4EWyST+B5GDLygsKQC4PtqEid/wDDDNtjUleazitTghtBn/oN7ze2VpVx4gi26EX7O4aH1fomf9yvqdQaenlioQjQL4TIV7GCAdFXQTtvoGDlpkI39OQWZF5/SxVojFfwm48iCiTfqCWAWEKQ97M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=FaHIL/fV; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="FaHIL/fV" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-6e57a3bf411so95604b3a.0 for ; Wed, 06 Mar 2024 12:03:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709755437; x=1710360237; 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=TO8narEInEW2sevq0mocA7Cmq1HqvsvqWDqWB03ZgLw=; b=FaHIL/fVPhIVZWBeg2PtvdjC48KJW3+3Xo4rfgqNb6JdVR28kydfZQkLlX7S/fvvGg JmJsUR98h7VHs8SbWWLL+p1vz02jVMnf5j2TsnURgNkT0SwoWmhRTP1enDfJ6G87mHei LfPBFALsyKU+5PBt3ch1NqjVlDu3Zrm5p+fKk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709755437; x=1710360237; 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=TO8narEInEW2sevq0mocA7Cmq1HqvsvqWDqWB03ZgLw=; b=Dq7etWQs/YOgpnLdFDDoe8OmmSIw5KDVlhpka5hfW/1YhgDYB8bp16C2iIEjuhS7m9 qCnqOmtvuomGghrux7Iai3S2gscEPKMPDCACJQ2YI8YaG1Oh7MuL/D8r4dRffF6e+lU+ OWGN5rzGedzzBWuyfr6YIYhyK0uuwU0yeATisevIPBoA6/uM5NcIsupInnJdt83jPbO1 3CRySWgAXferRcEzMlAXbEb+ARXhoRxv91JX//8QfK7sfKAQyQiGV8ND03b1PoqZBNTR kH675B67mCyHAXGD96ZMSKYBEqwnlnIdKEGgw/COlr8+IoG1Kn/DZDO680MZEZ1LRijp QhBQ== X-Forwarded-Encrypted: i=1; AJvYcCWeI4zU0AXVaSKCb377qYl4fhp9Sln2JwdWsH3SNAeCyJvGGriWeaP9uk0gPQ0p+cKD7lj1pOB+8HrIBce1UvoI1tWKlruscGq3tTg+ X-Gm-Message-State: AOJu0Yy/3AKMdZEYaTsb+DWFWNjTjT9NmuasJS4uiI/IecncFdmEGmg5 FhNTyIf0sbUUSDnKxTXvZyrgP6oigCmxnnYZmrZJZeV7LdL+iVWbayNI4YfDMg== X-Google-Smtp-Source: AGHT+IFaWxLfmbk2letB3HSWHPl2i/aon3QJrVq0CuAm8X0TzZjoFsVZYJU8YOQj3s4ApQg/9FzYNQ== X-Received: by 2002:a05:6a20:7f99:b0:1a1:49be:c81d with SMTP id d25-20020a056a207f9900b001a149bec81dmr6833171pzj.33.1709755437070; Wed, 06 Mar 2024 12:03:57 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:a215:f6c0:3224:5460]) by smtp.gmail.com with ESMTPSA id e3-20020aa79803000000b006e5667793d4sm11124241pfl.66.2024.03.06.12.03.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 12:03:56 -0800 (PST) From: Hsin-Yi Wang To: Jani Nikula , Dmitry Baryshkov , 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 v5 1/6] drm_edid: Add a function to get EDID base block Date: Wed, 6 Mar 2024 11:55:51 -0800 Message-ID: <20240306200353.1436198-2-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog In-Reply-To: <20240306200353.1436198-1-hsinyi@chromium.org> References: <20240306200353.1436198-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It's found that some panels have variants that they share the same panel id although their EDID and names are different. Besides panel id, now we need more information from the EDID base block to distinguish these panel variants. Add drm_edid_read_base_block() to return the EDID base block, which is wrapped in struct drm_edid. Caller can further use it to get panel id or check if the block contains certain strings, such as panel name. Signed-off-by: Hsin-Yi Wang Reviewed-by: Douglas Anderson Reviewed-by: Jani Nikula --- v4->v5: use _drm_edid_alloc --- drivers/gpu/drm/drm_edid.c | 63 +++++++++++++++++++------------ drivers/gpu/drm/panel/panel-edp.c | 8 +++- include/drm/drm_edid.h | 3 +- 3 files changed, 46 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1ad94473e400..8c7e871eff58 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2764,58 +2764,71 @@ static u32 edid_extract_panel_id(const struct edid = *edid) } =20 /** - * drm_edid_get_panel_id - Get a panel's ID through DDC - * @adapter: I2C adapter to use for DDC + * drm_edid_get_panel_id - Get a panel's ID from EDID + * @drm_edid: EDID that contains panel ID. * - * This function reads the first block of the EDID of a panel and (assuming + * This function uses the first block of the EDID of a panel and (assuming * that the EDID is valid) extracts the ID out of it. The ID is a 32-bit v= alue * (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that's * supposed to be different for each different modem of panel. * + * Return: A 32-bit ID that should be different for each make/model of pan= el. + * See the functions drm_edid_encode_panel_id() and + * drm_edid_decode_panel_id() for some details on the structure of= this + * ID. + */ +u32 drm_edid_get_panel_id(const struct drm_edid *drm_edid) +{ + return edid_extract_panel_id(drm_edid->edid); +} +EXPORT_SYMBOL(drm_edid_get_panel_id); + +/** + * drm_edid_read_base_block - Get a panel's EDID base block + * @adapter: I2C adapter to use for DDC + * + * This function returns the drm_edid containing the first block of the ED= ID of + * a panel. + * * This function is intended to be used during early probing on devices wh= ere * more than one panel might be present. Because of its intended use it mu= st - * assume that the EDID of the panel is correct, at least as far as the ID - * is concerned (in other words, we don't process any overrides here). + * assume that the EDID of the panel is correct, at least as far as the ba= se + * block is concerned (in other words, we don't process any overrides here= ). + * + * Caller should call drm_edid_free() after use. * * NOTE: it's expected that this function and drm_do_get_edid() will both * be read the EDID, but there is no caching between them. Since we're only * reading the first block, hopefully this extra overhead won't be too big. * - * Return: A 32-bit ID that should be different for each make/model of pan= el. - * See the functions drm_edid_encode_panel_id() and - * drm_edid_decode_panel_id() for some details on the structure of= this - * ID. + * WARNING: Only use this function when the connector is unknown. For exam= ple, + * during the early probe of panel. The EDID read from the function is tem= porary + * and should be replaced by the full EDID returned from other drm_edid_re= ad. + * + * Return: Pointer to allocated EDID base block, or NULL on any failure. */ - -u32 drm_edid_get_panel_id(struct i2c_adapter *adapter) +const struct drm_edid *drm_edid_read_base_block(struct i2c_adapter *adapte= r) { enum edid_block_status status; void *base_block; - u32 panel_id =3D 0; - - /* - * There are no manufacturer IDs of 0, so if there is a problem reading - * the EDID then we'll just return 0. - */ =20 base_block =3D kzalloc(EDID_LENGTH, GFP_KERNEL); if (!base_block) - return 0; + return NULL; =20 status =3D edid_block_read(base_block, 0, drm_do_probe_ddc_edid, adapter); =20 edid_block_status_print(status, base_block, 0); =20 - if (edid_block_status_valid(status, edid_block_tag(base_block))) - panel_id =3D edid_extract_panel_id(base_block); - else + if (!edid_block_status_valid(status, edid_block_tag(base_block))) { edid_block_dump(KERN_NOTICE, base_block, 0); + kfree(base_block); + return NULL; + } =20 - kfree(base_block); - - return panel_id; + return _drm_edid_alloc(base_block, EDID_LENGTH); } -EXPORT_SYMBOL(drm_edid_get_panel_id); +EXPORT_SYMBOL(drm_edid_read_base_block); =20 /** * drm_get_edid_switcheroo - get EDID data for a vga_switcheroo output diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/pane= l-edp.c index 3fb5fcd326a4..fe51680feb61 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -766,6 +766,7 @@ static const struct edp_panel_entry *find_edp_panel(u32= panel_id); static int generic_edp_panel_probe(struct device *dev, struct panel_edp *p= anel) { struct panel_desc *desc; + const struct drm_edid *base_block; u32 panel_id; char vend[4]; u16 product_id; @@ -795,8 +796,11 @@ static int generic_edp_panel_probe(struct device *dev,= struct panel_edp *panel) goto exit; } =20 - panel_id =3D drm_edid_get_panel_id(panel->ddc); - if (!panel_id) { + base_block =3D drm_edid_read_base_block(panel->ddc); + if (base_block) { + panel_id =3D drm_edid_get_panel_id(base_block); + drm_edid_free(base_block); + } else { dev_err(dev, "Couldn't identify panel via EDID\n"); ret =3D -EIO; goto exit; diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 70ae6c290bdc..8b233865b085 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -565,7 +565,8 @@ struct edid *drm_do_get_edid(struct drm_connector *conn= ector, void *data); struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter); -u32 drm_edid_get_panel_id(struct i2c_adapter *adapter); +const struct drm_edid *drm_edid_read_base_block(struct i2c_adapter *adapte= r); +u32 drm_edid_get_panel_id(const struct drm_edid *drm_edid); struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter); struct edid *drm_edid_duplicate(const struct edid *edid); --=20 2.44.0.278.ge034bb2e1d-goog From nobody Fri Dec 19 21:48:28 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9A8A142906 for ; Wed, 6 Mar 2024 20:03:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755440; cv=none; b=NtZ06Z9teJK6DEu+XUZwi/ChZXsJpGKgF88o8j3K4qinnjTJ+8QBuo1N+Hc9BbVedpYAblB5zIcAqoQoH7h78GixRk5wn7KJzVMES8YRh7NWs8Kk5fUBiq7Bnw3BHkEmxBVSA8tVvhsvLJ4U7DdAZel0YKBwjWlAaEeimiDZ9bg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755440; c=relaxed/simple; bh=Q+pRA35gd4K0k7v6qKItUMaetKmHyCKrGSHriuKb4Lo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SwLeKyjdKUhtXi04cMZZLN0Qc1g1tygrNjTq/pBLP5/RQmpRl/0q+TLC+8AoFVLZ887LgL0AGFe8IQXQryM795LXeImk7SV+dPZrZxgUeShjgtJjTqUZ3boT1z4+wzHtZAHHrYmOk8D6XrKFSVeOjaae4yrEz5yVX8l2JEtSi7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=cDqSro8N; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="cDqSro8N" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-6e6277f72d8so97292b3a.1 for ; Wed, 06 Mar 2024 12:03:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709755438; x=1710360238; 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=4JCkj6GVRUNO967KT3bkL0DjQ/CoTjKrWRf8htMUslg=; b=cDqSro8NR+5yvJjCoAEa+JB9s4T/aGRkP9eKi9Ar7R00wheR5BzeFQZ73bPpTSTJnJ mNFwsq2fwC5yx/ljsvpuAVC7eMr5gv7jcCNWMGXywZPvrJAEmO4bflJy/6qcA7Ut+pd3 IzdB1aDeOAXtECN0laSqBNENQbi42hOEPWZhA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709755438; x=1710360238; 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=4JCkj6GVRUNO967KT3bkL0DjQ/CoTjKrWRf8htMUslg=; b=EuBljqHuv1tYAl+MLQE/F+NggM6Rs0MpUV2AQfxvZDUAXPYlnJmskmELTD66mnmyGC x6nC09flhwFi6Y5qDgFo5pIAMSrtswzBn75jSGsU0tLOBX//7+jge2wzZLqk0Bw+1ZUh zVRqxkpTko4AuptnaCefnV54a24dvlvJklN0bg3BQkmV+ISMM8wzVRbZlxpU1zNu0LuC ZzmIVq7jiZZ3VLWWy3Zp3K6ermfrLxU/NcUL5l7De6wpJcXJx2B/XHnLA6vXDaU0xkSy kcpMvcwrc1TPjetQGKAMbxigu9adPcYzyb6uAErdarzyPYTOcNbmqTHS4e14Z1dVhd5x YX2g== X-Forwarded-Encrypted: i=1; AJvYcCUT+Ewayz5aU21FRf7UdivR3G7XZH3W3PllSC1e5xDgcjUoqAMeKxKJnVf4GxsEtCVy6MO8TEihZlNdapf97lySPLGyG83SO/p2mhhO X-Gm-Message-State: AOJu0YxaHEn8jwfpmygEv8woCxKrjVyzGT0Ilr1irCARWFJCmuCw6Glq +iG5r5zxflz5rH0g/NLHfh8U0+flDb5joRIjU3JmMQer/mt2h3agdUbFfXeVhQ== X-Google-Smtp-Source: AGHT+IHUlhDXpMflxQ7aiaCnsIh19pRSvBvh8iAGRXwrLu9WFPh0MIGQKicT8WXJgg+viWcZikJTdQ== X-Received: by 2002:a05:6a00:4f8d:b0:6e6:16b5:2eac with SMTP id ld13-20020a056a004f8d00b006e616b52eacmr13189150pfb.29.1709755437897; Wed, 06 Mar 2024 12:03:57 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:a215:f6c0:3224:5460]) by smtp.gmail.com with ESMTPSA id e3-20020aa79803000000b006e5667793d4sm11124241pfl.66.2024.03.06.12.03.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 12:03:57 -0800 (PST) From: Hsin-Yi Wang To: Jani Nikula , Dmitry Baryshkov , 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 v5 2/6] drm/edid: Clean up drm_edid_get_panel_id() Date: Wed, 6 Mar 2024 11:55:52 -0800 Message-ID: <20240306200353.1436198-3-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog In-Reply-To: <20240306200353.1436198-1-hsinyi@chromium.org> References: <20240306200353.1436198-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" drm_edid_get_panel_id() now just directly call edid_extract_panel_id(). Merge them into one function. Signed-off-by: Hsin-Yi Wang Reviewed-by: Douglas Anderson Reviewed-by: Jani Nikula --- v4->v5: new --- drivers/gpu/drm/drm_edid.c | 39 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 8c7e871eff58..febe374fa969 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2743,8 +2743,24 @@ const struct drm_edid *drm_edid_read(struct drm_conn= ector *connector) } EXPORT_SYMBOL(drm_edid_read); =20 -static u32 edid_extract_panel_id(const struct edid *edid) +/** + * drm_edid_get_panel_id - Get a panel's ID from EDID + * @drm_edid: EDID that contains panel ID. + * + * This function uses the first block of the EDID of a panel and (assuming + * that the EDID is valid) extracts the ID out of it. The ID is a 32-bit v= alue + * (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that's + * supposed to be different for each different modem of panel. + * + * Return: A 32-bit ID that should be different for each make/model of pan= el. + * See the functions drm_edid_encode_panel_id() and + * drm_edid_decode_panel_id() for some details on the structure of= this + * ID. + */ +u32 drm_edid_get_panel_id(const struct drm_edid *drm_edid) { + const struct edid *edid =3D drm_edid->edid; + /* * We represent the ID as a 32-bit number so it can easily be compared * with "=3D=3D". @@ -2762,25 +2778,6 @@ static u32 edid_extract_panel_id(const struct edid *= edid) (u32)edid->mfg_id[1] << 16 | (u32)EDID_PRODUCT_ID(edid); } - -/** - * drm_edid_get_panel_id - Get a panel's ID from EDID - * @drm_edid: EDID that contains panel ID. - * - * This function uses the first block of the EDID of a panel and (assuming - * that the EDID is valid) extracts the ID out of it. The ID is a 32-bit v= alue - * (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that's - * supposed to be different for each different modem of panel. - * - * Return: A 32-bit ID that should be different for each make/model of pan= el. - * See the functions drm_edid_encode_panel_id() and - * drm_edid_decode_panel_id() for some details on the structure of= this - * ID. - */ -u32 drm_edid_get_panel_id(const struct drm_edid *drm_edid) -{ - return edid_extract_panel_id(drm_edid->edid); -} EXPORT_SYMBOL(drm_edid_get_panel_id); =20 /** @@ -2881,7 +2878,7 @@ EXPORT_SYMBOL(drm_edid_duplicate); */ static u32 edid_get_quirks(const struct drm_edid *drm_edid) { - u32 panel_id =3D edid_extract_panel_id(drm_edid->edid); + u32 panel_id =3D drm_edid_get_panel_id(drm_edid); const struct edid_quirk *quirk; int i; =20 --=20 2.44.0.278.ge034bb2e1d-goog From nobody Fri Dec 19 21:48:28 2025 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90ABF14374D for ; Wed, 6 Mar 2024 20:03:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755441; cv=none; b=s2UTG3bxLzszPT5a0U0x/fgXwrjKEPTxhDa20fUT7ZqbOzwXgx0jN0HAZNptCu5dNTRKOKtayJU+/J/rzsLK21YO7TUVEAxL22qnn6F0AF9Ns/HP5qX/b4ikBqmdI2G1tBh0iS2K+3KqrqQMcMULPa4jUSgaDSMmljZ2izQk4Kg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755441; c=relaxed/simple; bh=4iHWWRMdzWrUYQZlSrJyyHmHQ8zWNejad1qscDWR5GU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=moJpMVO2E1gpzSCPs94T6MeWcNf0SYia8sMab4iFuDHnVIwE5hjZ6/ppkrRg1wLHj7R10V090Yg/JJ5qWT+x1c1uQUu7MRqpW3ZL+8yUS+1tWHOfZcCz50xTZ1suH0gH+F4HKu8XoVGaN0w5Lg9H93MAE0epeIhucgjBtU++sEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=BYRzg4OQ; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="BYRzg4OQ" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-6e63e9abf6aso86265b3a.2 for ; Wed, 06 Mar 2024 12:03:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709755439; x=1710360239; 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=JRJUYRt2oq67C0/LdzkUEFZ3CsguCNeMnqbNn5e2Vjw=; b=BYRzg4OQVb4CuD4uk2AIAKWHpScWRfu0qeYCR9HU/YRmZ7lZfrb+YzKrOtTUlkPVqu /LJgUYEn7LOy+9tkXdrCqFAWN4aUZ/hrTMB/tSISfs8cUl2TfSL1fyQpmv9FRfqeg26I GFDFLbQl5RF6eg4t4sf4Wj83yQvhdXqSr9hk4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709755439; x=1710360239; 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=JRJUYRt2oq67C0/LdzkUEFZ3CsguCNeMnqbNn5e2Vjw=; b=A2DrKDHs7M4d4EYxbFG/Pv/U414VftIsHIP2t3LoVm/IiPxitMksqTErANCOtIZ2FG 4C2d2T7JJaBGWaXaHFrmpmeXMziba0dj62izF/SwgFIeADdpbqte7k3QYw2ew7SIr5Kl AW/FB//BWC9VvZka+iahQQBWs7bXrB9Fz1gTzm7h+WUW5vwItJrmDmjwLiR7wXa+nYm5 swZBK3PnGAl8CPBsG4krlccjhfgTqMs1m8ED/0k/hV2meeQ16npLmWQiZBbDngO7bpjf xI4lbm1si9Ii6tABjsGAQccQj9RG6DKXhGm8HfBVbf1SVHmBsYNL0KKyRVG4WA/VhiKa 3jqw== X-Forwarded-Encrypted: i=1; AJvYcCXcS2mqCfU7NmcE7y6H6bk2H7WmfhelGyFMnPV9ALkf6InnpNshwTwma3W5ojxB0hLNEyahINe5upGlAsviYLaMX4MFIEiLa6VkjQig X-Gm-Message-State: AOJu0YwoKzhdaSF5q9vKLz9RHk3rx5AlaFMLmVgq5YM8kcgj5uXzukmq lTdHgaaLJ3XawvcL/vLxTphbwJ16rTCXmmtttvOMO8dGfBHqxaeE9PnLLAbRJg== X-Google-Smtp-Source: AGHT+IEXmTS6PLw1/iaxz3ACFLOd7WH1/YNx8U/VqwNBQW526mexbfJ/D5D3qnZ8ATCE2qu9PJRPeg== X-Received: by 2002:a05:6a00:2da3:b0:6e6:451c:a519 with SMTP id fb35-20020a056a002da300b006e6451ca519mr6034543pfb.5.1709755438763; Wed, 06 Mar 2024 12:03:58 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:a215:f6c0:3224:5460]) by smtp.gmail.com with ESMTPSA id e3-20020aa79803000000b006e5667793d4sm11124241pfl.66.2024.03.06.12.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 12:03:58 -0800 (PST) From: Hsin-Yi Wang To: Jani Nikula , Dmitry Baryshkov , 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 v5 3/6] drm/edid: Add a function to match EDID with identity Date: Wed, 6 Mar 2024 11:55:53 -0800 Message-ID: <20240306200353.1436198-4-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog In-Reply-To: <20240306200353.1436198-1-hsinyi@chromium.org> References: <20240306200353.1436198-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Create a type drm_edid_ident as the identity of an EDID. Currently it contains panel id and monitor name. Create a function that can match a given EDID and an identity: 1. Reject if the panel id doesn't match. 2. If name is not null in identity, try to match it in the detailed timing blocks. Note that some panel vendors put the monitor name after EDID_DETAIL_MONITOR_STRING. Signed-off-by: Hsin-Yi Wang --- v4->v5: use strncmp, change function/variable names. --- drivers/gpu/drm/drm_edid.c | 65 ++++++++++++++++++++++++++++++++++++++ include/drm/drm_edid.h | 8 +++++ 2 files changed, 73 insertions(+) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index febe374fa969..29ef35ebee32 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -100,6 +100,11 @@ struct detailed_mode_closure { int modes; }; =20 +struct drm_edid_match_closure { + const struct drm_edid_ident *ident; + bool matched; +}; + #define LEVEL_DMT 0 #define LEVEL_GTF 1 #define LEVEL_GTF2 2 @@ -5405,6 +5410,66 @@ drm_parse_hdmi_vsdb_audio(struct drm_connector *conn= ector, const u8 *db) connector->audio_latency[0], connector->audio_latency[1]); } =20 +static void +match_identity(const struct detailed_timing *timing, void *data) +{ + struct drm_edid_match_closure *closure =3D data; + unsigned int i; + const char *name =3D closure->ident->name; + unsigned int name_len =3D strlen(name); + const char *desc =3D timing->data.other_data.data.str.str; + unsigned int desc_len =3D ARRAY_SIZE(timing->data.other_data.data.str.str= ); + + if (name_len > desc_len || + !(is_display_descriptor(timing, EDID_DETAIL_MONITOR_NAME) || + is_display_descriptor(timing, EDID_DETAIL_MONITOR_STRING))) + return; + + if (strncmp(name, desc, name_len)) + return; + + /* Allow trailing white spaces and \0. */ + for (i =3D name_len; i < desc_len; i++) { + if (desc[i] =3D=3D '\n') + break; + if (!isspace(desc[i]) && !desc[i]) + return; + } + + closure->matched =3D true; +} + +/** + * drm_edid_match - match drm_edid with given identity + * @drm_edid: EDID + * @ident: the EDID identity to match with + * + * Check if the EDID matches with the given identity. + * + * Return: True if the given identity matched with EDID, false otherwise. + */ +bool drm_edid_match(const struct drm_edid *drm_edid, + const struct drm_edid_ident *ident) +{ + if (!drm_edid || drm_edid_get_panel_id(drm_edid) !=3D ident->panel_id) + return false; + + /* Match with name only if it's not NULL. */ + if (ident->name) { + struct drm_edid_match_closure closure =3D { + .ident =3D ident, + .matched =3D false, + }; + + drm_for_each_detailed_block(drm_edid, match_identity, &closure); + + return closure.matched; + } + + return true; +} +EXPORT_SYMBOL(drm_edid_match); + static void monitor_name(const struct detailed_timing *timing, void *data) { diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 8b233865b085..28f05a7b2f7b 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -367,6 +367,12 @@ struct edid { u8 checksum; } __attribute__((packed)); =20 +/* EDID matching */ +struct drm_edid_ident { + u32 panel_id; + const char *name; +}; + #define EDID_PRODUCT_ID(e) ((e)->prod_code[0] | ((e)->prod_code[1] << 8)) =20 /* Short Audio Descriptor */ @@ -567,6 +573,8 @@ struct edid *drm_get_edid(struct drm_connector *connect= or, struct i2c_adapter *adapter); const struct drm_edid *drm_edid_read_base_block(struct i2c_adapter *adapte= r); u32 drm_edid_get_panel_id(const struct drm_edid *drm_edid); +bool drm_edid_match(const struct drm_edid *drm_edid, + const struct drm_edid_ident *ident); struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter); struct edid *drm_edid_duplicate(const struct edid *edid); --=20 2.44.0.278.ge034bb2e1d-goog From nobody Fri Dec 19 21:48:28 2025 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88178143C4C for ; Wed, 6 Mar 2024 20:04:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755442; cv=none; b=g4w7CDbjPEDd5PqGx0RhpN81c/dH+N+P5vL54+2lMwU9xRK9p5PI+CPh3TU+Q3hTDHefCJV/bq1YXVnV1z4jwi2Mno6dnBl6an9k58P7ntqJU/3mWKxGSDDExWbO+rNWnNkVWva2RntKkn6guLkywztyrGD7A7i6qtrmOsG7XW0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755442; c=relaxed/simple; bh=hEpsavpaqhOCfUkMXmoZI8tqy+kyvROq31HXhJ/C6io=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Iyk1dbnXK/YJZILSx8sbpfnG3h8oMZH8DbGJNwd80EOEkpf/ZvDmLQkYtmeB+Vk1gkdWW4CGHmxZS9eld0My4w2/19L91AEynPFjfF+M+lkkbqiE1Qzpj0/tiaugm9uPhTn4E+MyPgtxLCmbqEDzVSoZ4dR4JPBHbaibb3kpJCA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=fCh8Bkuz; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="fCh8Bkuz" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-6e61851dbaeso73127b3a.2 for ; Wed, 06 Mar 2024 12:04:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709755440; x=1710360240; 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=jcV5LiM2kdZ7H9iL9vZSs1WtOpfzFcM+Wcf+rllNpWo=; b=fCh8Bkuzu7bAXrp78sa6SrbHaKwHOLGLjJ8/S0y/ZPQBaXCiFsrEam2IML7+CKLHEM NS0oTG0ZBOsCLObei8KN2abSu4PJJXzyDVJ7tlt+P1IwAOo3Tn4Iyxoma8IyhYJ9TTs4 v8jiR6ctl/6q60s1fRd19f0Vyr9Zfop/7/Zgs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709755440; x=1710360240; 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=jcV5LiM2kdZ7H9iL9vZSs1WtOpfzFcM+Wcf+rllNpWo=; b=MbaXMjOMDooEIyhFjBKPPwGShrj22hgIWLeGXNBjuMstNWY/5wZJLC1+qIkEb5OE+y Y2BJKujaUP6L+LiRBJ1/w1A7R4iB20twCdkgWbV0Z3MthDlXs6ReY3cfaIcz5pgO+6sJ mDwT1Sea7yJGiT+8UehTfF47ixHYKoPo00rcv06S4k8NWZdIhS1Eq8W3YZwDookDCTbO qwshv/SpS1Hd3S77r+lhF+G2iUB2bmiM1pQeDwXyDjaSx8YbJrX3XbP3387T0wBHBtbN RYjCOFWeSwWdaHwqIhpZj08YD6NbFjl0WaSouvEjmpeaop0msu2keGw0y42p7sKyCkOm ywSA== X-Forwarded-Encrypted: i=1; AJvYcCVpx+TYPwkR+EmdPlL+t1tAgD7qkr4K3VWV9/zmDNWKk2qEs5URq4qRZ0QhwKIqWfEYsT079f06G90k8u7vckjYdeR6KIZ19w/O9XUN X-Gm-Message-State: AOJu0YwflqECvyuKEGl8f3O0g96+COvn+Mc5L4tWdu51A87OrecXm5bt 0yt7dr/uL39i6ahiH6uDiib43b5Ke5WEiZ00TUaa9XluYua1zxwklsHCtrvINA== X-Google-Smtp-Source: AGHT+IFCgN8qo4pn/qojFIdZBRNxtgY9xf1gMLK7jbuggLu5VWKkK+6qu1VlMtZ+ebGWkZKHlSr2Cw== X-Received: by 2002:a05:6a20:5489:b0:1a1:6d2c:45da with SMTP id i9-20020a056a20548900b001a16d2c45damr971620pzk.14.1709755439863; Wed, 06 Mar 2024 12:03:59 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:a215:f6c0:3224:5460]) by smtp.gmail.com with ESMTPSA id e3-20020aa79803000000b006e5667793d4sm11124241pfl.66.2024.03.06.12.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 12:03:59 -0800 (PST) From: Hsin-Yi Wang To: Jani Nikula , Dmitry Baryshkov , 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 v5 4/6] drm/edid: Match edid quirks with identity Date: Wed, 6 Mar 2024 11:55:54 -0800 Message-ID: <20240306200353.1436198-5-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog In-Reply-To: <20240306200353.1436198-1-hsinyi@chromium.org> References: <20240306200353.1436198-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently edid quirks are matched by panel id only. Modify it to match with identity so it's easier to be extended for more complex matching if required. Suggested-by: Jani Nikula Signed-off-by: Hsin-Yi Wang Reviewed-by: Jani Nikula Reviewed-by: Douglas Anderson --- v5: no change --- drivers/gpu/drm/drm_edid.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 29ef35ebee32..f9e4dacd7255 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -112,13 +112,15 @@ struct drm_edid_match_closure { =20 #define EDID_QUIRK(vend_chr_0, vend_chr_1, vend_chr_2, product_id, _quirks= ) \ { \ - .panel_id =3D drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, vend_chr_2= , \ - product_id), \ + .ident =3D { \ + .panel_id =3D drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, \ + vend_chr_2, product_id), \ + }, \ .quirks =3D _quirks \ } =20 static const struct edid_quirk { - u32 panel_id; + const struct drm_edid_ident ident; u32 quirks; } edid_quirk_list[] =3D { /* Acer AL1706 */ @@ -2880,16 +2882,17 @@ EXPORT_SYMBOL(drm_edid_duplicate); * @drm_edid: EDID to process * * This tells subsequent routines what fixes they need to apply. + * + * Return: A u32 represents the quirks to apply. */ static u32 edid_get_quirks(const struct drm_edid *drm_edid) { - u32 panel_id =3D drm_edid_get_panel_id(drm_edid); const struct edid_quirk *quirk; int i; =20 for (i =3D 0; i < ARRAY_SIZE(edid_quirk_list); i++) { quirk =3D &edid_quirk_list[i]; - if (quirk->panel_id =3D=3D panel_id) + if (drm_edid_match(drm_edid, &quirk->ident)) return quirk->quirks; } =20 --=20 2.44.0.278.ge034bb2e1d-goog From nobody Fri Dec 19 21:48:28 2025 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D7FE143C6C for ; Wed, 6 Mar 2024 20:04:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755443; cv=none; b=AyM7YzK3FoZcoSC/Jvy5lQJcPfSZiDJS1TjrO7XAlKC1/IFw1B8fRqVlptQ/VEK4K+IqWGZHVUmSbafko6VnFM4Ji+eFjzDKUAnjMcAcXdSM/2hNV+XwLH3LgFPMWTwWztFpPnn1SelCjidnOc3rLmcBNTkWob5AKcQeETMteqY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755443; c=relaxed/simple; bh=YnbFyUg19IyC4NGlQHUfGlIjWONpLIgFxHpFqJtP19A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uelPhWyT3nJ8MA0Hf72PqwAJITO7PKq0bhdzXsv0r84MD/WD53Sx5ai6flnJc+g815l5Wxmy3gQe5fXfM3skkfEGjK4liWDVSNtR0b+wrg/RhH6kkwM5K4uTwQYlwwOBc4s/3TFYUhqnAagMciRha4MbY0qxMFzmBw02cvAp2iU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=dld9EuqG; arc=none smtp.client-ip=209.85.210.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="dld9EuqG" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-6e622b46f45so97471b3a.1 for ; Wed, 06 Mar 2024 12:04:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709755441; x=1710360241; 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=4CE2sNS/vxOPb5cf5bC+myjwShUIoD0EfwdnD7Qy1Os=; b=dld9EuqG0dwtisitmT/BUAykAtkuPJJLVAvmptVB5hwrB4Bjo3nTBvTj7kuyR/Lknd 2apEF27+aVMq3b9LIGUUCr0EXvRhu8Odr3lTXcPGfexQ7It0qk3pTht8lwvLUyKs0bS0 oi1tiJvL7zNOC4YLL/0rLHnXl4kUVm1nGA/j4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709755441; x=1710360241; 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=4CE2sNS/vxOPb5cf5bC+myjwShUIoD0EfwdnD7Qy1Os=; b=Bv62RlAvwRq6YD798FkMcOepi2rvSdKv+38NVXtB2tzf/EsMVkqcqYq8W/kbGtlPsd sDNVY+jvsAGWWSb/Uv0+PqmxFLbKRBOXTo+DxFqNEKjZl2dwr+fw9xbbbx1fATJAtyDF o4+G9o5zngILFNYHGRydiOGLxNGnrn6D7oyt5fFrKdrCGGZmMmYYsDboZRX5dFpDOrm+ g8IQfV+Ael9HaQ/3pCBFC271tq5XuqCP33TKpmJKVUc0UuxA5hx2m8R3LjeLuiQBZWD9 y51ADGWghGaMwTCcNlyS229EQMMzQE0eTIU++t+vxKtqdN5wAs5hcxp4ur9UkU4YZ1cZ slZg== X-Forwarded-Encrypted: i=1; AJvYcCW5rokb1try04DQGLWfRfv683s3L7DMXLq4Spl+4z+bT0pVtcIwid65P8uNWj4iwPgDTfrIZ9dxS/MKMCb2ueVLDBn2w3GwR0ZQ8pfR X-Gm-Message-State: AOJu0YxSQ3IKPVmYlZfguCd6sE/md02WMcy4VKlrwuE7Lzz7KUWK18gj /QSJ5qmIwdWut8h7Q5GqH8p5Oa+nDXfeWkaJ/chlOGM2AISyyLuJWpSqYrstYg== X-Google-Smtp-Source: AGHT+IETZdUaUGspqsCyXd6rJT/N5p6jaVTBU5cNKikpauZE+EH7NLX+lSXVUp6nj8dsq6Y/lQsAUw== X-Received: by 2002:a05:6a20:a104:b0:1a1:6f1b:a86a with SMTP id q4-20020a056a20a10400b001a16f1ba86amr126518pzk.28.1709755440790; Wed, 06 Mar 2024 12:04:00 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:a215:f6c0:3224:5460]) by smtp.gmail.com with ESMTPSA id e3-20020aa79803000000b006e5667793d4sm11124241pfl.66.2024.03.06.12.04.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 12:04:00 -0800 (PST) From: Hsin-Yi Wang To: Jani Nikula , Dmitry Baryshkov , 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 v5 5/6] drm/panel-edp: Match edp_panels with panel identity Date: Wed, 6 Mar 2024 11:55:55 -0800 Message-ID: <20240306200353.1436198-6-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog In-Reply-To: <20240306200353.1436198-1-hsinyi@chromium.org> References: <20240306200353.1436198-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It's found that some panels have variants that they share the same panel id although their EDID and names are different. When matching generic edp panels, we should first match with both panel identity, which contains both panel id and panel name. If not found, match with panel id only. Signed-off-by: Hsin-Yi Wang Reviewed-by: Douglas Anderson --- v5: no change --- drivers/gpu/drm/panel/panel-edp.c | 45 ++++++++++++++++--------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/pane= l-edp.c index fe51680feb61..772bf6011d79 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -210,15 +210,12 @@ struct panel_desc { * struct edp_panel_entry - Maps panel ID to delay / panel name. */ struct edp_panel_entry { - /** @panel_id: 32-bit ID for panel, encoded with drm_edid_encode_panel_id= (). */ - u32 panel_id; + /** @ident: edid identity used for panel matching. */ + const struct drm_edid_ident ident; =20 /** @delay: The power sequencing delays needed for this panel. */ const struct panel_delay *delay; =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; }; @@ -691,7 +688,7 @@ static int detected_panel_show(struct seq_file *s, void= *data) else if (!p->detected_panel) seq_puts(s, "HARDCODED\n"); else - seq_printf(s, "%s\n", p->detected_panel->name); + seq_printf(s, "%s\n", p->detected_panel->ident.name); =20 return 0; } @@ -761,7 +758,7 @@ static void panel_edp_parse_panel_timing_node(struct de= vice *dev, dev_err(dev, "Reject override mode: No display_timing found\n"); } =20 -static const struct edp_panel_entry *find_edp_panel(u32 panel_id); +static const struct edp_panel_entry *find_edp_panel(u32 panel_id, const st= ruct drm_edid *edid); =20 static int generic_edp_panel_probe(struct device *dev, struct panel_edp *p= anel) { @@ -799,7 +796,6 @@ static int generic_edp_panel_probe(struct device *dev, = struct panel_edp *panel) base_block =3D drm_edid_read_base_block(panel->ddc); if (base_block) { panel_id =3D drm_edid_get_panel_id(base_block); - drm_edid_free(base_block); } else { dev_err(dev, "Couldn't identify panel via EDID\n"); ret =3D -EIO; @@ -807,7 +803,9 @@ static int generic_edp_panel_probe(struct device *dev, = struct panel_edp *panel) } drm_edid_decode_panel_id(panel_id, vend, &product_id); =20 - panel->detected_panel =3D find_edp_panel(panel_id); + panel->detected_panel =3D find_edp_panel(panel_id, base_block); + + drm_edid_free(base_block); =20 /* * We're using non-optimized timings and want it really obvious that @@ -840,7 +838,7 @@ static int generic_edp_panel_probe(struct device *dev, = struct panel_edp *panel) panel->detected_panel =3D ERR_PTR(-EINVAL); } else { dev_info(dev, "Detected %s %s (%#06x)\n", - vend, panel->detected_panel->name, product_id); + vend, panel->detected_panel->ident.name, product_id); =20 /* Update the delay; everything else comes from EDID */ desc->delay =3D *panel->detected_panel->delay; @@ -1954,17 +1952,21 @@ static const struct panel_delay delay_200_500_e50_p= o2e200 =3D { =20 #define EDP_PANEL_ENTRY(vend_chr_0, vend_chr_1, vend_chr_2, product_id, _d= elay, _name) \ { \ - .name =3D _name, \ - .panel_id =3D drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, vend_chr_2= , \ - product_id), \ + .ident =3D { \ + .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 \ } =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), \ + .ident =3D { \ + .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 \ } @@ -2111,15 +2113,16 @@ static const struct edp_panel_entry edp_panels[] = =3D { { /* sentinal */ } }; =20 -static const struct edp_panel_entry *find_edp_panel(u32 panel_id) +static const struct edp_panel_entry *find_edp_panel(u32 panel_id, const st= ruct drm_edid *edid) { const struct edp_panel_entry *panel; =20 - if (!panel_id) - return NULL; + for (panel =3D edp_panels; panel->ident.panel_id; panel++) + if (drm_edid_match(edid, &panel->ident)) + return panel; =20 - for (panel =3D edp_panels; panel->panel_id; panel++) - if (panel->panel_id =3D=3D panel_id) + for (panel =3D edp_panels; panel->ident.panel_id; panel++) + if (panel->ident.panel_id =3D=3D panel_id) return panel; =20 return NULL; --=20 2.44.0.278.ge034bb2e1d-goog From nobody Fri Dec 19 21:48:28 2025 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43C03140E23 for ; Wed, 6 Mar 2024 20:04:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755443; cv=none; b=tN69KCBM1TG9vMktX198V+H6u8HRXeuiiMYIpsDWoh4Dz2TqLvogbhVZeubwy7mTyDUyTH4SsJBi6ANFaQzX4NnrAFnklKwHmXe7e6N1yH4liKDrt1BYukoha/j+0uZOzRqiehT30j5SPeRh8oKKg/ywfAg/s7SkA8cL6+V7vDY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709755443; c=relaxed/simple; bh=lrGPAvL5ujSKUvsLCktpA1LbY+Wsz6CFM+NUlFd6JMo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aZce8WDQ0A9KA/2B9TGhocHbx2OCuck/zYrGS8SjYNhh0toty3MN+jVI0eh49Miekaoalmh3BMAvKwqSrxhRt60VJcvIsHKqX3YZNJiVStHNp0QsFtjkYaQj29oeoZ3YyTrk3RE7nlDPsxqdx3GHbVWqw39msKcdy2fwN3Hm3qA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=KzNvzn26; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="KzNvzn26" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-6e5b1c6daa3so105989b3a.1 for ; Wed, 06 Mar 2024 12:04:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709755441; x=1710360241; 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=5q7RSLprSn1rt1j4rdHGaFDAMNSTGJDra0FF/HsNmOM=; b=KzNvzn2651fnj33UhdKQBDgQau8SDv6cqeXWLC5TZGe75lPnEhV2BO5C2N8guL06aq GCx/IxBhM3+sFJstVFIPWyYNANdoznaZVsNt2XT4qcFM0WHdGzA+PYuKp59cVn7zrBSP fqdxgEuHnhG3nQ8fe6rpJNt8uZ1LDX7hMPxh8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709755441; x=1710360241; 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=5q7RSLprSn1rt1j4rdHGaFDAMNSTGJDra0FF/HsNmOM=; b=KC94ue+B3Zmzabtk4Y5RFB0CpCG5OfUG0wDd5h/VKjGUe2pKoOTkFnI95CJPKf6avz pRU3tFvFqAACJmbCA4EnFSd77P92xKRj6mR1x3dpwTYXnZOLzz+hiXShz2/Icq5OQkt/ 5jaL83Y/xlr0fXdoop2rpXkYHVvp8OPSCQqF4i/2grspUYADKfYwMI9Cx3oMXliiV0j4 4jegrocHgBb9tjBFnS7d76DpBQ4MSzm8oIzCoF3/D/Zpkv5FZXyve8W4lGU0efAVtJxp dEYJQBm9JUpD/aVaLW1nBTnMfvQVPBpwlb0X9x7dDrQSSkZ2/y7dKKba2KIAs92EN1Zc 7LDQ== X-Forwarded-Encrypted: i=1; AJvYcCVvvJ1xDgnGBFlwS8V9Yma6alTn9RQdMySxw9PQG5mosYxqKmXnaC256DB/beWNUcQnWiqH8q+8O4WISrGpndFYfoDrmZz28BXmnm0R X-Gm-Message-State: AOJu0Yz7PsH2vrINbgxZXePUBzcc3sHhoJTBtxEuiFliIjRAzaxYSM4j 8z49smHLBlvUMQQAmzp4wTftlQAspkXm1oL80gWLhxgxYlIpHWIZ8TgAyK+B7A== X-Google-Smtp-Source: AGHT+IEvpr4QV5mPBpt2sxAyZS+vMLVhwGwjJwhB/E1OupG/ADEUdABJiDL7NbFUKKyTsEDER6dy8A== X-Received: by 2002:a05:6a20:8e09:b0:1a1:4e68:30db with SMTP id y9-20020a056a208e0900b001a14e6830dbmr7188437pzj.12.1709755441698; Wed, 06 Mar 2024 12:04:01 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:a215:f6c0:3224:5460]) by smtp.gmail.com with ESMTPSA id e3-20020aa79803000000b006e5667793d4sm11124241pfl.66.2024.03.06.12.04.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 12:04:01 -0800 (PST) From: Hsin-Yi Wang To: Jani Nikula , Dmitry Baryshkov , 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 v5 6/6] drm/panel-edp: Fix AUO 0x405c panel naming and add a variant Date: Wed, 6 Mar 2024 11:55:56 -0800 Message-ID: <20240306200353.1436198-7-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog In-Reply-To: <20240306200353.1436198-1-hsinyi@chromium.org> References: <20240306200353.1436198-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are 2 different AUO panels using the same panel id. One of the variants requires using overridden modes to resolve glitching issue as described in commit 70e0d5550f5c ("drm/panel-edp: Add auo_b116xa3_mode"). Other variants should use the modes parsed from EDID. Signed-off-by: Hsin-Yi Wang Reviewed-by: Douglas Anderson --- v5: no change --- drivers/gpu/drm/panel/panel-edp.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/pane= l-edp.c index 772bf6011d79..e3de55314bda 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -1009,6 +1009,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, @@ -1990,7 +2003,9 @@ 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_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAN04.0= "), + EDP_PANEL_ENTRY2('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01.= 0 ", + &auo_b116xa3_mode), EDP_PANEL_ENTRY('A', 'U', 'O', 0x435c, &delay_200_500_e50, "Unknown"), 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"), --=20 2.44.0.278.ge034bb2e1d-goog