From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=205.220.180.131 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793013082; b=wugDDRBa26TtA7EnfslbBWpsLn3wrY68+dYZSguhil1k33SqYCu1CmRHKC4zHT+fF8p4 YQ6NN3JSCYHZ0cFqcjbV588mjmG2Z087go6iZv/Ojmw+ikCqCXMx1c8s4b9zIecdcRtMr NXaEyNRV4D1Zm1FKWcwxlAHcJOMki+u/vfdBeCf9RzyT20PaBii+yKgEWM5DXGQmoHns3 W9uwrnyaquKhJzBEFa+l8CXpGmY5ANzqBQQfHh3St/EA9oB/i1pxcZIWxXN+RMcjOYwCu M1gQ75Oxhea2bg1HuSaE5iOu++zrXV/LdfsZBHbEN078BYDg6zDKPkQBNnEOnR/4aDg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793013082; h=DMARC-Filter:Received:DKIM-Signature:Received:Received: DKIM-Signature:X-Google-DKIM-Signature:X-Forwarded-Encrypted: X-Gm-Message-State:X-Gm-Gg:X-Received:X-Received:Received:From:Date: Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer: X-Developer-Signature:X-Developer-Key:X-Proofpoint-Spam-Details-Enc: X-Proofpoint-ORIG-GUID:X-Proofpoint-Spam-Info:X-Proofpoint-GUID: X-Authority-Analysis:X-Proofpoint-Virus-Version: X-Proofpoint-Spam-Details; bh=E2vd1zU0crihOsV46gq8VNj28qagdedntjkY+3zV8OY=; b=r9rS55VdJQAqCcUa9S86QaG/G29XNJt1s4saYQwg8ncTou6zg/t4fJ2oVWtk5mCbDk6A JSmfdbCOsoISFckw2lrEM2kiWupBf5pOgW/3yQI026ZdbmSaWtkqBGgoNPjNtFrSoDNNT TwTRh28BmcklkaD0buFgq+R7fs87px1pH12vK7yJ4dNZCfP5CjMo7RUZss/x3Tvik/YDG fMEfv/ttHGAYzP86MqSY6t1yjdLNk9Ocaza33LCgZqFdj8oYMkZAMs5WNK/Uiit0061+p 8CLndPM3r1xH6GPcBPUGw5njnQ0hl/aLM0y+zMz2niarCRAFmbvCNVu6z6L7OWlJdyw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=pX9pQuBc; dkim=pass header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=jdoZo6Km; arc=none smtp.remote-ip=205.220.180.131 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CE4A60A2615 for ; Mon, 26 Oct 2026 11:11:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 5CE4A60A2615 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=pX9pQuBc; dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=jdoZo6Km Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69QAtIrM3563651 for ; Mon, 26 Oct 2026 11:11:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= E2vd1zU0crihOsV46gq8VNj28qagdedntjkY+3zV8OY=; b=pX9pQuBcYrrTZYGa IR+22GFFnxSXkCl4+r/Zm+k9MfSjpf1aScGy1/DAC4ZCAjvC528Rpe+c5+Y+xvrf rttqsAwh8D1k9BcXnB8ZtM9pMHkS9M66mTm/R355I1jtVcrbHrqCt4f7gTm9xTO4 IO+wGHOOQrl+NTJ8ntssQC7uBwZGhN34/T+NMGacHbNqWbGg41VgJj67E2ff8T6o W4haZ4Ts3wym37/js8L+6lcr/mALsb/hHS6NcJ+wDB62BsWe2I0mzLNIWocDbQGD rkdz/I7wsuwGVuzIkCPqUfW3NsocbL+89jEfi6MmtMdDnuL3GBNlqWgoDXnWK8Wh AkVzkg== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hj4s9093r-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 26 Oct 2026 11:11:21 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-93ca9b53afaso451652185a.0 for ; Mon, 26 Oct 2026 04:11:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1793013081; x=1793617881; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=E2vd1zU0crihOsV46gq8VNj28qagdedntjkY+3zV8OY=; b=jdoZo6KmTlsbEuefjMpOwcvx6g70lL65lnkwo+NrySnv/jTiHik2CsxiCKVhHXIl/U Sk6U9K6YqUeUhepmeevdFqBy2ovKfI2hLsiX7TowPFv1EpNkeioEalvriVZJQWInZcpi t1yWVh0C4ygYnGiCRHqTP1aCAbYAkqOmeC7TXVPB+qe0I0LXF/y8DK/xlLQlbC3rKXdb c+NMW4KScTB4NCRMtINicP73ylLU/JaaUpqHDGygWGv3wLLYnNKpcat8pK8XIUiRNxXn gGUsHq1lr4NzYbHzQFfk0uhjvxNFPDGcgGnf9BMUUYrEM7P0lkqqy/QnS26v7z8RpNCf VRKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793013081; x=1793617881; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=E2vd1zU0crihOsV46gq8VNj28qagdedntjkY+3zV8OY=; b=gCyP5EJcWD/pQjPGOaevo0GDWRsEj6jjS+VFhh2jBlQsfbtijILG90NxXZhQWFzaRS 7bY8PYjPsTHsT+vqySDsMPuPyskNH8oeNtfwyPbO5bEDYIFkZM71bQNjpPYXuS0sugD4 c9dOXBq+h0AzPBkqJEUE3nU3Nk0fd06RbG8k2ORc6FpyXMqIwn3MnAXg5QDzXux3SeAC qpf6T0d5ynjZtaSoiq/VGPyY7HbkYZTwKYWrqWh/+gKsz6PsrPZiqeUT1AG6Ac0+K8cn hNEeUnu2jQ2KFd6fiYvwU4T69GBeRXuqmJBrZui+XNYxV4SZ7+dlRT675jGIVANFRyrP ZUEg== X-Forwarded-Encrypted: i=1; AKwUvBzW9YO+52UJ6OlqrsUvnD5R0uPhGj+6ULdD4bd3ZeHy9AuN8IE+HWz89HVWwbMjGnKpF/JFaRp1HqQ=@vger.kernel.org X-Gm-Message-State: AFq9FYJXi3qdNB+hUEzxrFKu2oNA2yMvcrfuq8VOt8NI0Gzn/riA+SXu o0UctOgc6uIj5kVihIN0lJVV8ZMIYZmLoVqFzhUSXNQpZY6qBXv9BfAL5+kwd6sz+cu0eQNISCo Jcugo/h1WQABTYW9Crj4GXlpvAh2bygtgL5CcBUt3Uj94nbMYn12Dub/c0IwjCZQ= X-Gm-Gg: AYBFou1pqZTX7H40g036t3ShZggnpsdoWdiVjypDjPjYfdcQgm+YIv2SI4s3vSybL5r OV7wRVgQaWjZu6xQD6Lw8epX3+au8syYcVuuTlD12GVZtKKwD/bf1n5ngdSdAM0U/7UUSSme4dI Co5YAcY7MeC67ZCEKASjqVGrOJn/s4sJ6Z4XXYDpqV7ZiWXtjflAKXIt6m3Ho86tpvcnbkJqMDK 1saykR+cJ2nNRnIF5CmLab08tkdfAgnTXlbWBRMGfpJ0Hm3OpKSZGEYmDcLJTRxC092z5DoAnPK D4+hsPA32eS+oy6DncXrhWHb7/3KziEWwl3bLv5rl1HUNJQJ2tLJXsKB3x1zrNhmHhYsS6DToxK u73H3+lG1Jr77owen7RaaozKNTLV1JhEj/fFSJ6iMaUv0c/OvXuugOEo9hcJ18gbpDiyT/Tn78r 4WMy/x+7ftNrVv X-Received: by 2002:a05:620a:7019:b0:93f:61a6:b89 with SMTP id af79cd13be357-940ef795b32mr912454385a.7.1793013080569; Mon, 26 Oct 2026 04:11:20 -0700 (PDT) X-Received: by 2002:a05:620a:7019:b0:93f:61a6:b89 with SMTP id af79cd13be357-940ef795b32mr912444185a.7.1793013079978; Mon, 26 Oct 2026 04:11:19 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bfb7a950a3sm1455459e87.68.2026.10.26.04.11.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2026 04:11:18 -0700 (PDT) From: Dmitry Baryshkov Date: Mon, 26 Oct 2026 13:10:12 +0200 Subject: [PATCH 23/35] drm/panel: read the panel orientation in the core X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261026-drm-panel-funcs-v1-23-5e3070a3478f@oss.qualcomm.com> References: <20261026-drm-panel-funcs-v1-0-5e3070a3478f@oss.qualcomm.com> In-Reply-To: <20261026-drm-panel-funcs-v1-0-5e3070a3478f@oss.qualcomm.com> To: Douglas Anderson , Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Paul Cercueil , Marek Vasut , Stefan Agner , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Laurent Pinchart , Tomi Valkeinen , Kieran Bingham , Geert Uytterhoeven , Magnus Damm , Biju Das , Linus Walleij , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jonathan Corbet , Shuah Khan , Randy Dunlap , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Alison Wang , Paul Kocialkowski , Yannick Fertre , Raphael Gallais-Pou , Philippe Cornu , Maxime Coquelin , Alexandre Torgue , Chen-Yu Tsai , Samuel Holland , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Jagan Teki , Ondrej Jirman , Javier Martinez Canillas , Igor Reznichenko , Michael Walle , Dario Binacchi , Jagan Teki , Jianhua Lu , =?utf-8?q?Guido_G=C3=BCnther?= , Purism Kernel Team , Jerry Han , Joel Selvaraj , Icenowy Zheng , Michael Trimarchi , Sumit Semwal , Casey Connolly , Michael Tretter , Cristian Cozzolino , Junjie Cao , Ryan Brue , Nickolay Goppen , Stefan Mavrodiev , Florian Fainelli , Broadcom internal kernel review list , Robert Chiras , Alexander Koskovich , Markuss Broks , Artur Weber , David Heidelberg , Dzmitry Sankouski , Yedaya Katsman Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-renesas-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-doc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-sunxi@lists.linux.dev, linux-tegra@vger.kernel.org, linux-rpi-kernel@lists.infradead.org X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3280; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=ZA0xjScANGe4uXdzYZMdIbyDNkhj47OSIZft8eKozp4=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ9Z9U8Hj97lb+q5o/M1s3STd4Ol0RvJGQ6JrDPe866Wc8 5KYzkh0MhqzMDByMciKKbL4FLRMjdmUHPZhx9R6mEGsTCBTGLg4BWAiBoHs/+O3ed60/KIuzfDS 47Di5nv1s2Tiz0n+f7L37X/Ve0vO3Y+VsM7wO9knuIuJp3eGlVHekwX9WksTVzyJ3R7E/mR6TXA SV4PwHb1W4+DP5ufMZnI3bY1eOzPb61B3hjjTf/esiUKzeSoj7NWuiXcfk9wisYI5huXOVOPjj+ c3LT7N+PgHV0KXmMs/uQe3c2RbTbVWtfeK3HJIvFRQ8Lde+abFtO2hJvkt4rXv2699LD7G8pffJ pM55c97/Z0HnzoUJu9g1rm1fqZc+hwXh8lMc9dLeC/8wsUYkz3LVU5XvHjfjcBmvsKnd65Nd/r9 3GUKo3r40nsWzH1nl8iHNKa5Gea7Vyy84pLu9k/SuEABAA== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDI2MDA0NCBTYWx0ZWRfX7gSrNuiZaklI xYmI+RUiT0OpnFKAKrs8Lbdbo9tl9nDtV8kdmPr1BCuKnp9QgPa6b6R7am4ccQR9REpE+5uv+sS xBnCldxfq2M5W94hDwUNQgJKNjbIwVwtpUDxZowRTs8Qb5db1jQJcvZY4iDfXoWz680JaEml/TZ i2dFn4KUAIaL94nZRxva7yR/3NYbzjqExVDvybh1mkGIhvgIM5r1TBwdmDFoDODiFkBG99K/y9g UCdtJrBNA5GUSy9Tigqtzs0J6TST1Ab+eDK5yGXVuuwfT9Qw6CMqBst1rnrPv5Dw4js96BiFGdw VO4OeScxq8u02eqHUTO1S7thZMtxBQvwEMBsOkL+ln8spudcd5keDNi49B5LVqmbIYrF6FDoqgW i9l7HABMEuuLmVyWCYtfnyTZNHlIdroLDSDIxsJSldtYgglBXpZeWCQow0wZ+hLTdCC4GwwYUy/ VNgncEx5DZbgRlUM9XQ== X-Proofpoint-ORIG-GUID: rOjQYmwAzDZeXKSpLpuu1lhGVPv6aS4T X-Proofpoint-Spam-Info: AW1haW4tMjYxMDI2MDA0NCBTYWx0ZWRfXzAt0AzGimADB geGult49WK0SaHj5B0U33RluxMWFTyVOLjdqvLRGLRk0Jfp6GdaEE5+38HRu4xh3UqWNlM6zhSi 67WvV9Sse4PgqksXKv064P206P1pAZs= X-Proofpoint-GUID: rOjQYmwAzDZeXKSpLpuu1lhGVPv6aS4T X-Authority-Analysis: v=2.4 cv=HKhWhYtv c=1 sm=1 tr=0 ts=6adf3559 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=fdq7EawpxR3WxEXJaCsA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-26_02,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 priorityscore=1501 bulkscore=0 malwarescore=0 impostorscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610260044 Panel orientation describes how the panel is mounted and comes from the common "rotation" DT property, yet each driver has to parse it and hand it back through get_orientation(). 24 drivers carry an identical copy of that code and the rest silently ignore the property. Parse it once in devm_drm_panel_alloc(). The callback still takes precedence until the drivers are converted. An invalid value fails the allocation, just as it fails probe in those drivers today. As a side effect all panels honour "rotation" now. Among the in-tree DTs this only changes the Motorola Mapphone panel (panel-dsi-cm, rotation = <90>). Assisted-by: LLM Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/drm_connector.c | 5 ++++- drivers/gpu/drm/drm_panel.c | 9 +++++++++ include/drm/drm_panel.h | 10 ++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 893716a9e489..efcf1ce979a9 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -3397,7 +3397,8 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); * @panel: panel that can provide orientation information. * * Drm drivers should call this function before drm_dev_register(). - * Orientation is obtained from panel's .get_orientation() callback. + * Orientation is obtained from panel's .get_orientation() callback, falling + * back to &drm_panel.orientation if the panel doesn't implement it. * * Returns: * Zero on success, negative errno on failure. @@ -3410,6 +3411,8 @@ int drm_connector_set_orientation_from_panel( if (panel && panel->funcs && panel->funcs->get_orientation) orientation = panel->funcs->get_orientation(panel); + else if (panel) + orientation = panel->orientation; else orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index 5bc97166bcb8..1b7ff0bea68e 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -925,6 +925,15 @@ void *__devm_drm_panel_alloc(struct device *dev, size_t size, size_t offset, drm_panel_init(panel, dev, funcs, connector_type); + panel->orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + if (dev->of_node) { + err = drm_of_get_panel_orientation(dev->of_node, + &panel->orientation); + if (err) + return ERR_PTR(dev_err_probe(dev, err, + "failed to get orientation\n")); + } + return container; } EXPORT_SYMBOL(__devm_drm_panel_alloc); diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 579b6be855c7..dc4fbeac796b 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -236,6 +236,16 @@ struct drm_panel { */ struct drm_connector connector; + /** + * @orientation: + * + * Orientation of the panel, used to set the panel orientation property + * of the connector. It is read from the "rotation" property of the + * panel's device tree node by devm_drm_panel_alloc(). Drivers can + * override it before calling drm_panel_add(). + */ + enum drm_panel_orientation orientation; + /** * @list: * -- 2.47.3