From patchwork Wed Feb 28 01:05:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hsin-Yi Wang X-Patchwork-Id: 207557 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:a81b:b0:108:e6aa:91d0 with SMTP id bq27csp3066700dyb; Tue, 27 Feb 2024 17:12:32 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCU2HVVDcEAUAXtHDg6ulZJMuxkBnjzjkACZq9nFxxEKh9BErLgkI4IukcsCLkse8LZSId/2gZKCnOsrvyxXfY9T1M15ZQ== X-Google-Smtp-Source: AGHT+IGqoXbLPjj30P4gkvKZIKR9hQkfv3zF+UgvQN5rXJ0Jy3ZuCrToS8jbH3orQkDnjygYjLIK X-Received: by 2002:a05:620a:13d2:b0:787:ccb9:78c9 with SMTP id g18-20020a05620a13d200b00787ccb978c9mr3677416qkl.62.1709082751950; Tue, 27 Feb 2024 17:12:31 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709082751; cv=pass; d=google.com; s=arc-20160816; b=nqSDR1Omww0+MLxJ23nWiMzRBeouTyyKxcsl/lnP8WuRtLlJWBfCsPxPaG+1gLhdVm 6V7GjwLTYYIckjqif743tKW2sq3jmaLxTjMOMysF8X1ORLs/S0r1iG5xkdISo3wZa2cb d7rkQf8lz9tJFOU3LYt2HywWfCTmERWST6Vk7sAR/K0sFL6NV/H6lxIruTf3n7gyp01m +5WbS6urFPGfgLhaBm+ynogDHrPf6hUJwVla89U8cbv2tgDbSdYopRCnUgd9Lzw7IEYg 7rOHfx7NAz08dSfaFsUVwEUeZF3hfC1b43H0AQmVJOFx0oFYA6rP3Wp+z825Rxq+kSW1 rxMw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=iXmDMoR5fxDfWHfx9hk2z/Xni/CCYvEBdkiUT3ERlc4=; fh=1jvFn2qnvlFkacYWlSvgGw5Jetrsyt5TTOvhUUciStI=; b=nbSWPOLkK9svqPTU9i3ySIr7kzunAwpTqk6FHz/wdRgpq/U+uJ9GRj7C1hQNUhghkz 3CYJhlbdCv9GpwGFFPZboC7Lekjc8JBHvVP4bnTFKmobLWo62XFQG3fFGZDxvIA32f9S rpri/HL61ClLXJ12/m90S9UyFaysnxM+zMDWfUFizyyIDMvwvEXDh6W7Nz4z51z1kZE/ fUO7Cku4dTBx6Z/jwEcXVVC3Nk1duqsVkn12J6A3Y/j6kfo8JlGjrNkFe+gBt38XQ07N q1XkSakC5ssuN1G4PWEz2kgonaywJyoBa74prmSpbjVIiZ5zJp6fS/IZH3f5QkZj+poB MEuw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="YXCjJu/p"; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-84306-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84306-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id m10-20020a05620a220a00b00785d6b130dbsi8282350qkh.318.2024.02.27.17.12.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 17:12:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-84306-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="YXCjJu/p"; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-84306-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84306-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id AB0E01C24D06 for ; Wed, 28 Feb 2024 01:12:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3DB8B1BC49; Wed, 28 Feb 2024 01:11:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="YXCjJu/p" Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.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 9182F2103 for ; Wed, 28 Feb 2024 01:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709082701; cv=none; b=aMyJNXUasNdFJPhLTvZCzXTvlHLzhIY24zWArBFHSBTQqKmGo/lvO9aupMHPBrZTZ35qDq6R5+5tt5TDAMNwsUpQfurKJOpI+tHHSkeEpMfzfUh88fKgLtGHfc6UErpEvkobFYmDEfAiFWZR6sH9itj3yHMHFYdSL25eJFewg6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709082701; c=relaxed/simple; bh=+Za4WiG0WeyFO8aiqq35F/0dX8b+SoiVTKiGqv26ccQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F0F/M8pwJJIeRHs3rFseWM2qA34I4WjO/nsVdoO0J+tWb9h8EtDHWJ+0m9mfkB6AgKyY8s4l+uM6WbP0XWl1pJbfpddZXFyneh4J3M1HR+oHZWwFAwvC0KobLTyvYXlz3arohwHBSF9JZ+kv3wjTWcjXF5E2R2LGLj3XgU7uY2s= 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=YXCjJu/p; arc=none smtp.client-ip=209.85.214.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 Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1dc49b00bdbso43938445ad.3 for ; Tue, 27 Feb 2024 17:11:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709082699; x=1709687499; 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=iXmDMoR5fxDfWHfx9hk2z/Xni/CCYvEBdkiUT3ERlc4=; b=YXCjJu/pDXM02doM7Ol9O5QLVQIXeH+9fvOKY08FxUrKvW9WmKJ9x9Ohafd1o6lRmE YqM7HXaJzBzfBVqMOTqSQHNVCZRLx8WvpksriTLhVY26lm07BtF7ThiKqHUAFmgywSZW V2UzkH6yaUemZ4/1bQNdc8ttWCF/L/ZiLR8bg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709082699; x=1709687499; 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=iXmDMoR5fxDfWHfx9hk2z/Xni/CCYvEBdkiUT3ERlc4=; b=kh1raWzf3h8gCsQ3xpHpyEwEqmeR415hFwncU3of2fSp0uraq30/31K2WpklMJZES4 llm409iPMazl2dm3Pi06kYymzuLCjch0wN3vVQYpoiOJHccSHcLRM95gGia7k1HqKT2l FDa3PfA+Nj4goYD70V5YI9FiYEdWTqhxMUOHq9eUgnwFof8Nib/gJiju1cZE2AeYnlan DF9KXQZ9PKyCao7KVASyja5EwR5wcZwd52HE36ei6BhPDB82Y+gJbYXVTOvasNylSpX3 gY/64o2t2f3A90eCtLarfxiT2Nntm702bOAyqQDXe0OBBnJ7HtYq53GtRUHtzxFvNlih 733w== X-Forwarded-Encrypted: i=1; AJvYcCWuLvrw57VLZKjnz7jIp+SVq0x9iKZAN1P6ziR2OlYpeNqe+fH7TbgY8qSdj8sQpzeAkJWKyTqLLugEN9+HOnALV1RUahar8O7zsQox X-Gm-Message-State: AOJu0Yxss8KsQsBiqUxVhuXHhNd02ZpNggRS9QRosJObpRaoGthhkz5l 7Fq+y5McgLkHSWN9CTS5FP5HDBvGcNe479kC2rc+IUY2HYk0Ut8outQogqs+6Q== X-Received: by 2002:a17:902:8303:b0:1dc:5e8a:93b with SMTP id bd3-20020a170902830300b001dc5e8a093bmr9108581plb.8.1709082698923; Tue, 27 Feb 2024 17:11:38 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:87d1:e95d:b670:4783]) by smtp.gmail.com with ESMTPSA id kl14-20020a170903074e00b001db4b3769f6sm2131529plb.280.2024.02.27.17.11.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 17:11:38 -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 v2 1/3] drm_edid: Support getting EDID through ddc without connector Date: Tue, 27 Feb 2024 17:05:58 -0800 Message-ID: <20240228011133.1238439-2-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.rc1.240.g4c46232300-goog In-Reply-To: <20240228011133.1238439-1-hsinyi@chromium.org> References: <20240228011133.1238439-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792103155660063531 X-GMAIL-MSGID: 1792103155660063531 Some panels are interested in the EDID during early probe when connector is still unknown. Add a function drm_get_edid_no_connector() to get edid without connector. No functional change for existing usage. Signed-off-by: Hsin-Yi Wang --- v1->v2: add a function to return the entire edid without updating connector. --- drivers/gpu/drm/drm_edid.c | 45 ++++++++++++++++++++++++++++---------- include/drm/drm_edid.h | 1 + 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1ad94473e400..15b97c8ed993 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2364,7 +2364,7 @@ static struct edid *_drm_do_get_edid(struct drm_connector *connector, struct edid *edid, *new; size_t alloc_size = EDID_LENGTH; - override = drm_edid_override_get(connector); + override = connector ? drm_edid_override_get(connector) : false; if (override) { alloc_size = override->size; edid = kmemdup(override->edid, alloc_size, GFP_KERNEL); @@ -2385,18 +2385,20 @@ static struct edid *_drm_do_get_edid(struct drm_connector *connector, if (status == EDID_BLOCK_READ_FAIL) goto fail; - /* FIXME: Clarify what a corrupt EDID actually means. */ - if (status == EDID_BLOCK_OK || status == EDID_BLOCK_VERSION) - connector->edid_corrupt = false; - else - connector->edid_corrupt = true; + if (connector) { + /* FIXME: Clarify what a corrupt EDID actually means. */ + if (status == EDID_BLOCK_OK || status == EDID_BLOCK_VERSION) + connector->edid_corrupt = false; + else + connector->edid_corrupt = true; - if (!edid_block_status_valid(status, edid_block_tag(edid))) { - if (status == EDID_BLOCK_ZERO) - connector->null_edid_counter++; + if (!edid_block_status_valid(status, edid_block_tag(edid))) { + if (status == EDID_BLOCK_ZERO) + connector->null_edid_counter++; - connector_bad_edid(connector, edid, 1); - goto fail; + connector_bad_edid(connector, edid, 1); + goto fail; + } } if (!edid_extension_block_count(edid)) @@ -2444,7 +2446,8 @@ static struct edid *_drm_do_get_edid(struct drm_connector *connector, } if (invalid_blocks) { - connector_bad_edid(connector, edid, num_blocks); + if (connector) + connector_bad_edid(connector, edid, num_blocks); edid = edid_filter_invalid_blocks(edid, &alloc_size); } @@ -2637,6 +2640,24 @@ struct edid *drm_get_edid(struct drm_connector *connector, } EXPORT_SYMBOL(drm_get_edid); +/** + * drm_get_edid_no_connector - get EDID data without updating connector status + * @adapter: I2C adapter to use for DDC + * + * Similar to drm_edid_read_ddc(), but not checking any connector status. Use + * this function to get EDID when connector is still unknown. + * + * Return: Pointer to valid EDID or NULL if we couldn't find any. + */ +struct edid *drm_get_edid_no_connector(struct i2c_adapter *adapter) +{ + if (!drm_probe_ddc(adapter)) + return NULL; + + return _drm_do_get_edid(NULL, drm_do_probe_ddc_edid, adapter, NULL); +} +EXPORT_SYMBOL(drm_get_edid_no_connector); + /** * drm_edid_read_custom - Read EDID data using given EDID block read function * @connector: Connector to use diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 70ae6c290bdc..80c9e32ff80e 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -565,6 +565,7 @@ struct edid *drm_do_get_edid(struct drm_connector *connector, void *data); struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter); +struct edid *drm_get_edid_no_connector(struct i2c_adapter *adapter); u32 drm_edid_get_panel_id(struct i2c_adapter *adapter); struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter); From patchwork Wed Feb 28 01:05:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hsin-Yi Wang X-Patchwork-Id: 207559 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:a81b:b0:108:e6aa:91d0 with SMTP id bq27csp3066789dyb; Tue, 27 Feb 2024 17:12:46 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCU0AYGhwcZjeOjlDIL6Vvy7l0N0UqGa3jHIG6JvWrcuK9P4CwhZiT3h193+lvQAaQViJHNAqbD2aYktghNx+zOi64U+ow== X-Google-Smtp-Source: AGHT+IHF5kBsadntm1BC0Uo47uInwfgaDa5FozW3uh40fZbtosC87Y/wH56Wlq2byo2KcmYCUPw+ X-Received: by 2002:a05:6a21:6315:b0:1a1:139d:bddc with SMTP id wu21-20020a056a21631500b001a1139dbddcmr2659938pzb.57.1709082766446; Tue, 27 Feb 2024 17:12:46 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709082766; cv=pass; d=google.com; s=arc-20160816; b=rkE2kTb3xgvYDcQ4W2tcsRXie7YXRNvymS7c4axj9jIj9DEoa7i8qMmauVC6X+6eoF FIdrQkH6OUMRKXS7DOpoq4y6yGHdcuOAYq3W3DGtqAjGGWdnAoWFEOjVimyJo56phdEn fKS+XFbgcaSW2itA51SyoxThRcKLpoItAqeGg/PvgbCM/Q850JCoaII26UsfXsbiqOXU vHBNDtyUfOYo7qwApChhin8SajHaRfFfl3aBJ4+mxIjVqFAU78IlWD18uWkeBEBvCu5k ebZj9ZuBUmi9a4XvMl0XWh3wN2diJoFpURIADrpMPO0NZGRtNcp8+5BvM2/+QMDK7ywO rsYQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=sqVPOgao3nUBQcfuJjPRQ/Z77KczM3H/soIyvGzsAUo=; fh=W6tKPQePw5XIQe2W18FCDixizmh7XfAF9YgjfrFYwu0=; b=Vps5hyAW6Ax+ILFB7/cQqy/TvzB6uYU2wwDxV34904H9KBGjI6P+zY3FIm383y96F+ l6EntWAj2zeq2uDM0px4Yo22VXq7RPsWci22N1Nad2R09L6cD5fJCKHHnJKS63vA0FIU 2oBVwMSDwWJ4NW9j2Ek2bxiWnonb0rBGtW0y8IoG0PTdZGwrMvp86kW+2tiLzeSzlmJQ DfDJ96U3CqdjCiCNdTLB8GvhutpbGgO9FHmXb66MMXeL3HXrRyQpagDTmKgx7h1eosuF pNk2v2fPQO2NiQ1JtiEOBfOs05fEDzVs89OI3kvvmrocWNxonXz5Eg1CEF/XmI71pYSv IsNg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Wp5cOO8S; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-84307-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84307-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id h21-20020a170902f7d500b001d9859103e0si2250395plw.153.2024.02.27.17.12.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 17:12:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-84307-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Wp5cOO8S; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-84307-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84307-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 4010928AD68 for ; Wed, 28 Feb 2024 01:12:46 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F02031D6AA; Wed, 28 Feb 2024 01:11:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Wp5cOO8S" Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 9A5424400 for ; Wed, 28 Feb 2024 01:11:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709082702; cv=none; b=ijyMDAOXgPJJ+xHTrGGfi+wKPwblQtLx5/gJdxU7jm73/1SOeNmKMWiR2h2f58H/JNCDp058s0yswN29ShsNuvWK5OnRZi1TliROALaTNvH8RAzsN6HYttO6n2ZXiLnM8ODMgczr0Ni4Xw5cjb00KARvqg243LtKpCzRcleRLU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709082702; c=relaxed/simple; bh=yzb11FO0nW1yy8hePLHX/ocuoarx6rze5KYkOu5/1xw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c/GLxiCM1UUPtfUZTdAOxRQ3fliR4Jke+nvJT50yV7UURXLsUqyjYkFd6xp/vekTMmv6zYXCgfJtZtqC+P92GUfholIAaysYCJU6vtBeCZJDhUPCX5vEI2mdz8R8YYK9XQndyqwFGVoPJvCbIjU2XA4uNJ20ntUIWV7Zs64Yy6g= 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=Wp5cOO8S; arc=none smtp.client-ip=209.85.214.182 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 Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1dc0e5b223eso41303755ad.1 for ; Tue, 27 Feb 2024 17:11:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709082700; x=1709687500; 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=sqVPOgao3nUBQcfuJjPRQ/Z77KczM3H/soIyvGzsAUo=; b=Wp5cOO8SpN1+T1t826nQPc3iHmyI+ofOiO7Jr1U/ZzQBba+ZzKxk9mfMIMX3EqWWo6 3VJxHh4MgGtcdejyu9khPx2PbEa8KgIcOny9fF5yRMOQPaAQuZmcSwmid51l/w/N3Ng3 UQ3iNL4Lbjb0G1D2I9Lqz+lxIbaHP1jb6L084= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709082700; x=1709687500; 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=sqVPOgao3nUBQcfuJjPRQ/Z77KczM3H/soIyvGzsAUo=; b=uHj/++G5i2icnHgeWSC070eIn7cQqNgcJa0a2613OT5cVLWF9XbBURi3XPwbjVOnhF PCc2JITfW0Eew6XKE24FlbpnMMe3ZmrOtp7aNes1/jDEkB7JwsuJSpAuw9veI4N9wdgN Jljycy91OaEChzg258gXXEKZBkYT7LIHIqL2B02/U/ZKpF5qPiG58DZ23er27RzJDRS2 V3aEuwG2KBRB8wLL8opNcPqP1lmiu3cTk+41sk7o2C3nmZ4HjOWzbGTtYDS1UkRfJ46F G9w7zVDGCP8pJ2UqUcUWm/jD/jwS6r4iFtvObXzMSUsFKByz5xYYw6AYckuXN76MXeqh DAfg== X-Forwarded-Encrypted: i=1; AJvYcCUtx+eVjAz1lgEtsn9K3IslMWB8EGNrcf9F8Q6kHLR7GOw0btq39vIZ6zKDR3AQeZty/dJ2wdzBi3YyXSvsmnar0bCwXUhoPdZyz++3 X-Gm-Message-State: AOJu0YxhSNyf4nYEsZ7/zI7hVtwWzgSzQmaxciC/HPZH9S3OEh11VnMd V3eudXBDmMRMJEa9m0ARf1YFTA+1G983KYmHA+FdZw+oFJa75KWRUuUc1k+zTQ== X-Received: by 2002:a17:902:d4c6:b0:1dc:af71:4d46 with SMTP id o6-20020a170902d4c600b001dcaf714d46mr6771119plg.13.1709082699902; Tue, 27 Feb 2024 17:11:39 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:87d1:e95d:b670:4783]) by smtp.gmail.com with ESMTPSA id kl14-20020a170903074e00b001db4b3769f6sm2131529plb.280.2024.02.27.17.11.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 17:11:39 -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 v2 2/3] drm/panel: panel-edp: Match edp_panels with panel name Date: Tue, 27 Feb 2024 17:05:59 -0800 Message-ID: <20240228011133.1238439-3-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.rc1.240.g4c46232300-goog In-Reply-To: <20240228011133.1238439-1-hsinyi@chromium.org> References: <20240228011133.1238439-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792103170967303529 X-GMAIL-MSGID: 1792103170967303529 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 id and panel name by checking if edid contains the name string. If not found, match with panel id only. Signed-off-by: Hsin-Yi Wang --- v1->v2: match with panel name instead of crc hash. Note that we can't directly use drm_edid_get_monitor_name(), because some panel store the name after EDID_DETAIL_MONITOR_STRING instead of EDID_DETAIL_MONITOR_NAME. --- drivers/gpu/drm/drm_edid.c | 69 +++++++------------------------ drivers/gpu/drm/panel/panel-edp.c | 44 +++++++++++++++++--- include/drm/drm_edid.h | 2 +- 3 files changed, 54 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 15b97c8ed993..c4126475ff0a 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2764,7 +2764,19 @@ const struct drm_edid *drm_edid_read(struct drm_connector *connector) } EXPORT_SYMBOL(drm_edid_read); -static u32 edid_extract_panel_id(const struct edid *edid) +/** + * edid_extract_panel_id - Extract a panel's ID from EDID + * @edid: EDID used to extract the panel's ID. + * + * Extract panel ID from EDID. + * + * Return: A 32-bit ID that should be different for each make/model of panel. + * See the functions drm_edid_encode_panel_id() and + * drm_edid_decode_panel_id() for some details on the structure of this + * ID. + */ + +u32 edid_extract_panel_id(const struct edid *edid) { /* * We represent the ID as a 32-bit number so it can easily be compared @@ -2783,60 +2795,7 @@ 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 through DDC - * @adapter: I2C adapter to use for DDC - * - * This function reads 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 value - * (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that's - * supposed to be different for each different modem of panel. - * - * This function is intended to be used during early probing on devices where - * more than one panel might be present. Because of its intended use it must - * 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). - * - * 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 panel. - * 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(struct i2c_adapter *adapter) -{ - enum edid_block_status status; - void *base_block; - u32 panel_id = 0; - - /* - * There are no manufacturer IDs of 0, so if there is a problem reading - * the EDID then we'll just return 0. - */ - - base_block = kzalloc(EDID_LENGTH, GFP_KERNEL); - if (!base_block) - return 0; - - status = edid_block_read(base_block, 0, drm_do_probe_ddc_edid, adapter); - - edid_block_status_print(status, base_block, 0); - - if (edid_block_status_valid(status, edid_block_tag(base_block))) - panel_id = edid_extract_panel_id(base_block); - else - edid_block_dump(KERN_NOTICE, base_block, 0); - - kfree(base_block); - - return panel_id; -} -EXPORT_SYMBOL(drm_edid_get_panel_id); +EXPORT_SYMBOL(edid_extract_panel_id); /** * 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/panel-edp.c index 3fb5fcd326a4..72ad552bff24 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -761,11 +761,13 @@ static void panel_edp_parse_panel_timing_node(struct device *dev, dev_err(dev, "Reject override mode: No display_timing found\n"); } -static const struct edp_panel_entry *find_edp_panel(u32 panel_id); +static bool edid_has_name(struct edid *edid, const char *panel_name); +static const struct edp_panel_entry *find_edp_panel(u32 panel_id, struct edid *edid); static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel) { struct panel_desc *desc; + struct edid *edid; u32 panel_id; char vend[4]; u16 product_id; @@ -795,15 +797,19 @@ static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel) goto exit; } - panel_id = drm_edid_get_panel_id(panel->ddc); - if (!panel_id) { + edid = drm_get_edid_no_connector(panel->ddc); + if (!edid) { dev_err(dev, "Couldn't identify panel via EDID\n"); ret = -EIO; goto exit; } + panel_id = edid_extract_panel_id(edid); drm_edid_decode_panel_id(panel_id, vend, &product_id); - panel->detected_panel = find_edp_panel(panel_id); + panel->detected_panel = find_edp_panel(panel_id, edid); + + /* Read EDID again in panel_edp_get_modes() when connector is known. */ + kfree(edid); /* * We're using non-optimized timings and want it really obvious that @@ -2107,13 +2113,41 @@ static const struct edp_panel_entry edp_panels[] = { { /* sentinal */ } }; -static const struct edp_panel_entry *find_edp_panel(u32 panel_id) +static bool edid_has_name(struct edid *edid, const char *panel_name) +{ + int i, j; + char buf[13]; + + for (i = 0; i < 4; i++) { + strncpy(buf, edid->detailed_timings[i].data.other_data.data.str.str, + sizeof(buf)); + for (j = 0; j < 13; j++) { + if (buf[j] == 0x0a) { + buf[j] = '\0'; + break; + } + } + buf[12] = '\0'; + if (strncmp(panel_name, buf, strlen(panel_name)) == 0) + return true; + } + + return false; +} + +static const struct edp_panel_entry *find_edp_panel(u32 panel_id, struct edid *edid) { const struct edp_panel_entry *panel; if (!panel_id) return NULL; + /* Match with both panel_id and name. Find if EDID contains name. */ + for (panel = edp_panels; panel->panel_id; panel++) + if (panel->panel_id == panel_id && edid_has_name(edid, panel->name)) + return panel; + + /* Match with only panel_id */ for (panel = edp_panels; panel->panel_id; panel++) if (panel->panel_id == panel_id) return panel; diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 80c9e32ff80e..4cefff357789 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -566,7 +566,7 @@ struct edid *drm_do_get_edid(struct drm_connector *connector, struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter); struct edid *drm_get_edid_no_connector(struct i2c_adapter *adapter); -u32 drm_edid_get_panel_id(struct i2c_adapter *adapter); +u32 edid_extract_panel_id(const struct edid *edid); struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter); struct edid *drm_edid_duplicate(const struct edid *edid); From patchwork Wed Feb 28 01:06:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hsin-Yi Wang X-Patchwork-Id: 207558 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:a81b:b0:108:e6aa:91d0 with SMTP id bq27csp3066767dyb; Tue, 27 Feb 2024 17:12:43 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCV8/Nq4PRcH/lsiwlqEDwL1Ix9zZIJO6vI+LY6O8xa3JrsTlBnsxc386ecA7jmz9UGg2X2RcI33jVFvXst3KxtgP3LIIA== X-Google-Smtp-Source: AGHT+IFYQeErWF4x7vIVnRdSKR4l1iW1AWHTgZTqn0El1y7I633rm/WG0hVK+DoMgHelABOydebA X-Received: by 2002:a05:6358:5794:b0:17b:570c:7eb7 with SMTP id m20-20020a056358579400b0017b570c7eb7mr14214313rwf.11.1709082763420; Tue, 27 Feb 2024 17:12:43 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709082763; cv=pass; d=google.com; s=arc-20160816; b=oplKDTO8kICYKjn5+eDjALQVoyyilH9FJLgBzHeViK+FI9FfOPkwVWnpr5H28SJ1Nl AEG3rI8IF3HUrNqTrTLUHa+ijq3dGP3zOR3up2CrCK6Chr7KU1vAOhSF/yY1vtDOB7/O PHN1y4tuGpAGjUFVrlXX/g112vbyfj83IBAbY5RSAGW/RarJuUNtvIyi/d0lMCd9wDWw th8lKlM21HnpEa/RvUb6KzcUXRvrQ8bSVD5yA84RKeGcF01oPu8LwVRWh6/Ti4BzLBR4 OTVjQNFksLVLNJyf8f1WYy0Wfsw6HYgCWkWPVElfEV3J3gxmiQV2EGNzSwKLrEMASYYx cjFQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=JUDXeYcrvidwDBcA1WOXXMMQ4eSI9QRabZdiDLCy8AY=; fh=CIA3YVuUwCOAcNiyKkfn828uTiSzTZXi+euZb+EWUNA=; b=g2jRwFpjB2NzPkstYSwTJt/VPixgjD/hSzjNThVLl2VZY0PyOvT2RF3zWHTuUnF3Q4 sPHb6ZCZP93pQnQPfJv33wm7eEmRaFlh0by0aF22gZuHw0FP0BnpVpR1YEVDDtGCnIJH 23lGNL8P1ljdAa0+0srVTcBQlg2WMjQqF/mFogy3bDGwNGa5V2q3/4TTF1hkW4LomIYZ yuqwxM0HWPv1zwgZi7tAQcbrBJkFeJPm95Sm6vvV/2fHHul8yY2wqvqCfdwTKk9krpYo Cv7L4fGPyv1G1yyS3x+ouOrOSNsQpcB6oDC/eHs4c+SrfhKpeP1jXDEPBJFz4k4wD6uR +EXw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=JdYfd3We; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-84308-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84308-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id d26-20020a630e1a000000b005dbd0ff2e5dsi6291204pgl.811.2024.02.27.17.12.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 17:12:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-84308-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=JdYfd3We; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-84308-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84308-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 3A3C128AD36 for ; Wed, 28 Feb 2024 01:12:43 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9AEC91CFBF; Wed, 28 Feb 2024 01:11:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="JdYfd3We" Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 63DFE524A for ; Wed, 28 Feb 2024 01:11:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709082702; cv=none; b=b7ZnDVgMn9B1djPLwXEEsQ/TB2hd9X3oGfGLzKH5Wz7ttrgXcBMkbv0zvlRyUDX+ol46n+7ADwenuGPbDe0jwK9eHWuCL68ksQDVjmzaYUOoK05YoPR4ehpfgW26KB+dv8wWe5yXdRJsU045UaECDync67qkKowKREPEkZN1rJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709082702; c=relaxed/simple; bh=vZThvoMpdMVB0bR3QX6Z7AfXdGCXxCbTtC+Qsih/PaM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W5xRfhp3rcCHtWU5p+cx6q3652hutRzi7P43BXUoQXdVyLK8LGDsdu7BDGB9JXKXMku6CpL916YiNZa5Qx8dBzMxuF1SJ7y3HGouDECugofUgQW1keF25qwLiZM+1zChFk+us4oAWW1Xl+rBEqisddf+40O0l7wnJ5l2jtXT7eU= 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=JdYfd3We; arc=none smtp.client-ip=209.85.214.179 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 Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-1dbae7b8ff2so26218855ad.3 for ; Tue, 27 Feb 2024 17:11:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709082701; x=1709687501; 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=JUDXeYcrvidwDBcA1WOXXMMQ4eSI9QRabZdiDLCy8AY=; b=JdYfd3WeVZxkIyt+ITeBN+60LEyPfRqjNA6y+gtQ/NmTNn1Vb4uyKs1tfAnhQ0PA6T 0nxXdvhGA5JJTs/zJDsSHz/b1DGpEx/kaQdiPxbOkHJzKyn5z8c3rVQVDS0GTs05BFSE jsgibS45mE5otCPzWR8uVDipvHuIk6QByW+5A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709082701; x=1709687501; 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=JUDXeYcrvidwDBcA1WOXXMMQ4eSI9QRabZdiDLCy8AY=; b=pq25gqSEMS9ShSxKeZzf6FmRHitwn7MMyMsWNjAIC1bWLxIfCMIPj55Cf0R2n917tk xYYlvUnBGowDy3MsKKkgtb41pCmI5iaVvJGr9WU0/cSsKJHOaGUA/tPya3feAIfw8QpI sgLZ9fQSGqg/EEa5FuMDxYcQbFX+cjlTqQCu286h9p6XuQKQWyCe0HXcWp3xdeDVNS7K 2ldEqdS5CbNXMYZT7fWdZrwOQIjfUlEnX11amXEEMUsWeuFWe8MUUT4dK37a6e85/rgy K3wuco0R2R7HSZe4jFrLKMEzwfQZ0Zb9UOC4inis40wV0VEOKe7Hs2kr8BuSr35ZA3PL M9mw== X-Forwarded-Encrypted: i=1; AJvYcCVy3gSHsBOTVyilDw5eCToDQA06nPCDr9nTCUpZH9uVzktN1MXJN3ZIlj/rXWetRWeH0StkkVFvcuigJAVAwqa4bxJ8z3QoDrxU1FHc X-Gm-Message-State: AOJu0YxOMY8WQ8LV2C7A0th6r+qAYTKYSPuSWSb4Zs8pkQuTiMeJ9v9R ykHfdot9znLvmu+bIUZ4p9ZxpTdOX4cM+yAgz/1fBelSEiIOxJJVyLCTLcsy0A== X-Received: by 2002:a17:903:985:b0:1db:c6ff:6648 with SMTP id mb5-20020a170903098500b001dbc6ff6648mr13245620plb.10.1709082700718; Tue, 27 Feb 2024 17:11:40 -0800 (PST) Received: from hsinyi.sjc.corp.google.com ([2620:15c:9d:2:87d1:e95d:b670:4783]) by smtp.gmail.com with ESMTPSA id kl14-20020a170903074e00b001db4b3769f6sm2131529plb.280.2024.02.27.17.11.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 17:11:40 -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 v2 3/3] drm/panel: panel-edp: Fix AUO 0x405c panel naming and add a variant Date: Tue, 27 Feb 2024 17:06:00 -0800 Message-ID: <20240228011133.1238439-4-hsinyi@chromium.org> X-Mailer: git-send-email 2.44.0.rc1.240.g4c46232300-goog In-Reply-To: <20240228011133.1238439-1-hsinyi@chromium.org> References: <20240228011133.1238439-1-hsinyi@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792103167910157903 X-GMAIL-MSGID: 1792103167910157903 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 --- v2: new --- 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/panel-edp.c index 72ad552bff24..e39af92342e8 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -1013,6 +1013,19 @@ static const struct panel_desc auo_b101ean01 = { }, }; +static const struct drm_display_mode auo_b116xa3_mode = { + .clock = 70589, + .hdisplay = 1366, + .hsync_start = 1366 + 40, + .hsync_end = 1366 + 40 + 40, + .htotal = 1366 + 40 + 40 + 32, + .vdisplay = 768, + .vsync_start = 768 + 10, + .vsync_end = 768 + 10 + 12, + .vtotal = 768 + 10 + 12 + 6, + .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, +}; + static const struct drm_display_mode auo_b116xak01_mode = { .clock = 69300, .hdisplay = 1366, @@ -1990,7 +2003,9 @@ static const struct edp_panel_entry edp_panels[] = { 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"),