From nobody Tue Feb 10 18:36:03 2026 Received: from out-183.mta1.migadu.com (out-183.mta1.migadu.com [95.215.58.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E890155339 for ; Mon, 22 Apr 2024 19:19:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813565; cv=none; b=hCI1AHryhMVt3Zzl+PyUE8HyBryHwxmBV8AEeCbBbaHz53sMrfNdXqvimn7ZDP/FKtQn0k+8S98dHTv7DPUsRBWwriVKOU00bdM6h6qCRsRhXfxNGNsFvFaXdzDBFSksdeDvw61e961ljWOCmGr+zvZ8hixjIp++Uijynu5NLZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813565; c=relaxed/simple; bh=lTMOjiI32YHsA1qANNB3UWZCb7HKBLJSfrYd6mjnAGA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=KkWHUOLJw1koQQgTT3+Yj9V4H+NG2E6gbptOPQ8ZJYQIuFWDlQpt3kofjZPiXk/MzP9KcTmT1zTQeIlq30jwl3cIXkN9oRezrIP+iM0vYdHJeJxc0se55+l/EDzxiEXrXxtEI+tdoxeRWHfrSt61q6DpkKZvRotyKWBEvQkhdPQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=U7kkZy04; arc=none smtp.client-ip=95.215.58.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="U7kkZy04" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813562; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5qkfsiav14z/13YCmF9WtxhNZzgVPszO86+CmRUhDZg=; b=U7kkZy04nAeUMoysfji3yq6jhBRqIPxmzTYDkdnFwVBepV4v3h5vj/nRJMMY6jXKQBmzZx Rlne9IAo5VyH6ntxyTFPpZ/A3udCag5m4PViPTbJQET94Ec2KYtAfu8d2bQX69RhlUq4lH XOCO2+UcAbO894J7ouzNYiQfP1y9EIU= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 1/9] drm/bridge: Allow using fwnode API to get the next bridge Date: Tue, 23 Apr 2024 03:18:55 +0800 Message-Id: <20240422191903.255642-2-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Currently, the various display bridge drivers rely on OF infrastructures to works very well, yet there are platforms and/or devices absence of 'OF' support. Such as virtual display drivers, USB display apapters and ACPI based systems etc. Add fwnode based helpers to fill the niche, this allows part of the display bridge drivers to work across systems. As the fwnode API has wider coverage than DT counterpart and the fwnode graphs are compatible with the OF graph, so the provided helpers can be used on all systems in theory. Assumed that the system has valid fwnode graphs established before drm bridge drivers are probed, and there has fwnode assigned to involved drm bridge instance. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/drm_bridge.c | 74 ++++++++++++++++++++++++++++++++++++ include/drm/drm_bridge.h | 16 ++++++++ 2 files changed, 90 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 28abe9aa99ca..fc1a314140e7 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -1368,6 +1368,80 @@ struct drm_bridge *of_drm_find_bridge(struct device_= node *np) EXPORT_SYMBOL(of_drm_find_bridge); #endif =20 +/** + * drm_bridge_find_by_fwnode - Find the bridge corresponding to the fwnode + * + * @fwnode: fwnode for which to find the matching drm_bridge + * + * This function looks up a drm_bridge in the global bridge list, based on + * its associated fwnode. Drivers who want to use this function should has + * fwnode handle assigned to the fwnode member of the struct drm_bridge + * instance. + * + * Returns: + * * A reference to the requested drm_bridge object on success, or + * * %NULL otherwise (object does not exist or the driver of requested + * bridge not probed yet). + */ +struct drm_bridge *drm_bridge_find_by_fwnode(struct fwnode_handle *fwnode) +{ + struct drm_bridge *ret =3D NULL; + struct drm_bridge *bridge; + + if (!fwnode) + return NULL; + + mutex_lock(&bridge_lock); + + list_for_each_entry(bridge, &bridge_list, list) { + if (bridge->fwnode =3D=3D fwnode) { + ret =3D bridge; + break; + } + } + + mutex_unlock(&bridge_lock); + + return ret; +} +EXPORT_SYMBOL_GPL(drm_bridge_find_by_fwnode); + +/** + * drm_bridge_find_next_bridge_by_fwnode - Find the next bridge by fwnode + * @fwnode: fwnode pointer to the current device. + * @port: identifier of the port node of the next bridge is connected. + * + * This function find the next bridge at the current node, it assumed that + * there has valid fwnode graph established. + * + * Returns: + * * A reference to the requested drm_bridge object on success, or + * * -%EINVAL or -%ENODEV if the fwnode graph or OF graph is not complete= , or + * * %NULL if object does not exist or the next bridge is not probed yet. + */ +struct drm_bridge * +drm_bridge_find_next_bridge_by_fwnode(struct fwnode_handle *fwnode, u32 po= rt) +{ + struct drm_bridge *bridge; + struct fwnode_handle *ep; + struct fwnode_handle *remote; + + ep =3D fwnode_graph_get_endpoint_by_id(fwnode, port, 0, 0); + if (!ep) + return ERR_PTR(-EINVAL); + + remote =3D fwnode_graph_get_remote_port_parent(ep); + fwnode_handle_put(ep); + if (!remote) + return ERR_PTR(-ENODEV); + + bridge =3D drm_bridge_find_by_fwnode(remote); + fwnode_handle_put(remote); + + return bridge; +} +EXPORT_SYMBOL_GPL(drm_bridge_find_next_bridge_by_fwnode); + MODULE_AUTHOR("Ajay Kumar "); MODULE_DESCRIPTION("DRM bridge infrastructure"); MODULE_LICENSE("GPL and additional rights"); diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 4baca0d9107b..a3f5d12a308c 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -26,6 +26,7 @@ #include #include #include +#include =20 #include #include @@ -721,6 +722,8 @@ struct drm_bridge { struct list_head chain_node; /** @of_node: device node pointer to the bridge */ struct device_node *of_node; + /** @fwnode: fwnode pointer to the bridge */ + struct fwnode_handle *fwnode; /** @list: to keep track of all added bridges */ struct list_head list; /** @@ -788,6 +791,13 @@ int drm_bridge_attach(struct drm_encoder *encoder, str= uct drm_bridge *bridge, struct drm_bridge *previous, enum drm_bridge_attach_flags flags); =20 +static inline void +drm_bridge_set_node(struct drm_bridge *bridge, struct fwnode_handle *fwnod= e) +{ + bridge->fwnode =3D fwnode; + bridge->of_node =3D to_of_node(fwnode); +} + #ifdef CONFIG_OF struct drm_bridge *of_drm_find_bridge(struct device_node *np); #else @@ -797,6 +807,12 @@ static inline struct drm_bridge *of_drm_find_bridge(st= ruct device_node *np) } #endif =20 +struct drm_bridge * +drm_bridge_find_by_fwnode(struct fwnode_handle *fwnode); + +struct drm_bridge * +drm_bridge_find_next_bridge_by_fwnode(struct fwnode_handle *fwnode, u32 po= rt); + /** * drm_bridge_get_next_bridge() - Get the next bridge in the chain * @bridge: bridge object --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-171.mta1.migadu.com (out-171.mta1.migadu.com [95.215.58.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61C3E155356 for ; Mon, 22 Apr 2024 19:19:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813569; cv=none; b=neVC6ka8r88ZK/T+/HuXzk8kWPbKYkVHCprp81U0pGU+6B0GrftRSs8ppIXLU5+zeMrus5eSup3/a+x7FncpCegAaYwKBQtIU8iPOj32YTRou1+ho/mUws0j5VUD+idOgPr7kt6RC5TDgdJ6ykz319dheZwbp+MlrPlH+hmi9Jk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813569; c=relaxed/simple; bh=g2uyYKP3fTMNqz1inMg+JCYrTWQJzGEy4xF64bwHe0Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rs6NvisagyUN48LYUskCZC1cSJUOX+QwgW1Njz58UuvBXTHVdmMn5TXUeDewx6KiPgjS/UBtSwAiw89/0C+Uz6bLtwGMN0iXiqsWFOFuZp+gAqJPZk6MhlPz0g04eUYKwSc5L0J6jMlDopG/G2poxVccbr9Yj7eZrk/EXU1P//k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=duhA1RQz; arc=none smtp.client-ip=95.215.58.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="duhA1RQz" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813566; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AdzVq0hSo8fS18z5xoeY8+4STJ0X8hxCUiiSMI/5/9M=; b=duhA1RQznC1J8pwivtIZfwp0dvGCXf1fBt5p4kOOd6DxGSSr0yi0YiaF3GxpDFV8SYKRCW xH86JxsMHtCe3To2cUKpvMFzu8R0CpyI+Qmlqifj+5IwsS/aP95n3tIfXwrN165NR7ahOJ ccklRIJwDIW5ymmuB4kVprvVOQ4f8eI= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 2/9] drm/bridge: simple-bridge: Use fwnode API to acquire device properties Date: Tue, 23 Apr 2024 03:18:56 +0800 Message-Id: <20240422191903.255642-3-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Make this driver less DT-dependent by calling the freshly created helpers, should be no functional changes for DT based systems. But open the door for otherwise use cases. Even though there is no user emerged yet, this still do no harms. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/simple-bridge.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridg= e/simple-bridge.c index 5813a2c4fc5e..3b09bdd5ad4d 100644 --- a/drivers/gpu/drm/bridge/simple-bridge.c +++ b/drivers/gpu/drm/bridge/simple-bridge.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include =20 @@ -169,33 +168,32 @@ static const struct drm_bridge_funcs simple_bridge_br= idge_funcs =3D { =20 static int simple_bridge_probe(struct platform_device *pdev) { + struct fwnode_handle *fwnode =3D dev_fwnode(&pdev->dev); struct simple_bridge *sbridge; - struct device_node *remote; + int ret; =20 sbridge =3D devm_kzalloc(&pdev->dev, sizeof(*sbridge), GFP_KERNEL); if (!sbridge) return -ENOMEM; platform_set_drvdata(pdev, sbridge); =20 - sbridge->info =3D of_device_get_match_data(&pdev->dev); + sbridge->info =3D device_get_match_data(&pdev->dev); =20 /* Get the next bridge in the pipeline. */ - remote =3D of_graph_get_remote_node(pdev->dev.of_node, 1, -1); - if (!remote) - return -EINVAL; - - sbridge->next_bridge =3D of_drm_find_bridge(remote); - of_node_put(remote); - + sbridge->next_bridge =3D drm_bridge_find_next_bridge_by_fwnode(fwnode, 1); if (!sbridge->next_bridge) { dev_dbg(&pdev->dev, "Next bridge not found, deferring probe\n"); return -EPROBE_DEFER; + } else if (IS_ERR(sbridge->next_bridge)) { + ret =3D PTR_ERR(sbridge->next_bridge); + dev_err(&pdev->dev, "Error on finding the next bridge: %d\n", ret); + return ret; } =20 /* Get the regulator and GPIO resources. */ sbridge->vdd =3D devm_regulator_get_optional(&pdev->dev, "vdd"); if (IS_ERR(sbridge->vdd)) { - int ret =3D PTR_ERR(sbridge->vdd); + ret =3D PTR_ERR(sbridge->vdd); if (ret =3D=3D -EPROBE_DEFER) return -EPROBE_DEFER; sbridge->vdd =3D NULL; @@ -210,9 +208,9 @@ static int simple_bridge_probe(struct platform_device *= pdev) =20 /* Register the bridge. */ sbridge->bridge.funcs =3D &simple_bridge_bridge_funcs; - sbridge->bridge.of_node =3D pdev->dev.of_node; sbridge->bridge.timings =3D sbridge->info->timings; =20 + drm_bridge_set_node(&sbridge->bridge, fwnode); drm_bridge_add(&sbridge->bridge); =20 return 0; --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-187.mta1.migadu.com (out-187.mta1.migadu.com [95.215.58.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01C03155395 for ; Mon, 22 Apr 2024 19:19:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813574; cv=none; b=r/QJMN3rzka9NPvSFAtbN9Xw8HYA4RUyoybYbBSStG7UxOfMHKDR0mda581yF38jhtgOMXRUWj0AAt/5mA/4BUzrG4RYi1XWqzN/NhK1Wl2IZ2raMpltVaAnakRV57lFDuOu/OvCabT3puxqzjgTocVJDnfL/687vbBH7oHkzLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813574; c=relaxed/simple; bh=yzB8risQ/c2CdJHlV9ORRQanzsD3FP1orhVnEsX23KQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=osOWBULMmDivHIhZoyPPmGqZbmGrhZ7hGRDZqYC9fPp9iLw2xHMeo0gHi+VWP8HDSAhXbIbK/R76NIFn+1BTm0zNgFOk5b0EhOTZFwywSmJ8EdPDKteXnB8YeXlh6ggYPD6SwlA34D4eYBhIk92ycERLP83glQkRABw9SjGuYsM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=uoxEaumF; arc=none smtp.client-ip=95.215.58.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="uoxEaumF" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813571; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VVIjTXds8eAkXzXoUlZ7BHHYR9mhqmmL/UDbaTDw7XI=; b=uoxEaumF/2nv/SOlGcXl4HGPyt5m0zJ7fAzEyUdXrcnr3k+soWy5zu/95/2dmr8Dm/6anR KDkV9SReY+dBQQI6B8YN96/1Jm1/WKbDg5vvdtEQYmjshBYB3/NMy8iagwACPrg9m0wL0X 1LXBQDKD5DebOp5nGttO/oPiQUV6Guk= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 3/9] drm/bridge: simple-bridge: Add platform module alias Date: Tue, 23 Apr 2024 03:18:57 +0800 Message-Id: <20240422191903.255642-4-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Otherwise when compiled as module, this driver will not be probed on non-DT environment. This is a fundamential step to make this driver truely OF-independent. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/simple-bridge.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridg= e/simple-bridge.c index 3b09bdd5ad4d..6be271d1394b 100644 --- a/drivers/gpu/drm/bridge/simple-bridge.c +++ b/drivers/gpu/drm/bridge/simple-bridge.c @@ -308,3 +308,4 @@ module_platform_driver(simple_bridge_driver); MODULE_AUTHOR("Maxime Ripard "); MODULE_DESCRIPTION("Simple DRM bridge driver"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:simple-bridge"); --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-172.mta1.migadu.com (out-172.mta1.migadu.com [95.215.58.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAA18155395 for ; Mon, 22 Apr 2024 19:19:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813579; cv=none; b=GcI3Sf7+Y7TBJrosD1042P4BPbDvc9z6qDG23nSR3IK01UuGajkCjhhcgN0wtoAj4LQfDpSsDI6byrPfmWsFvtNpfIt3oRV8iBC2iKtyC1wudGMlHs4aGfAYBC9JOneSplo0jXH01HqBtYoV+1OriSlzM4sDK/tRiofvodAzSnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813579; c=relaxed/simple; bh=vI2s5Y19GW65v9houQ7QfCCe1zrcqK8CrjdGxI7ePgY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bGep3r6ICPDG2mqUreUzRqJJDzfUvk478MVio8Cbbkdd8qlbRaGf/GhvC5Q8ELMUFxfPrEOntoFi2vgRKm3eQvJp/Vxjd1mVPNEQqCYJTq9ku1NbjVk+XC6cPfRDJKmhB3QzBbR7nviji+etEEwQ5sQ0/eez2GCvhE/+n6OuOmE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=qSraONwL; arc=none smtp.client-ip=95.215.58.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="qSraONwL" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813576; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NDnO3d01ba8EKeTRxUnybEgU0P9s3FIBjxuth5gpvfI=; b=qSraONwLgI3jpDo2bLo4jIdqpNxFtitYRxfs3hBAgtPZa6He9cCjPBxhupTAfY3i7bh52z fMFdtoGleN4jg7SSkerocc9h7ThE56E7QFmHPmCvDdH0l+hlLQiobk95GAXrv0yjUVHTPg uZkLLilua+PVEZ2M/K1md+ubOVEOaF8= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 4/9] drm-bridge: display-connector: Use fwnode API to acquire device properties Date: Tue, 23 Apr 2024 03:18:58 +0800 Message-Id: <20240422191903.255642-5-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Make this driver less DT-dependent by using the fwnode helper functions, should be no functional changes for DT based systems. Do the necessary works before it can be truely DT-independent, this patch do no harms even though there is no user yet. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/display-connector.c | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/b= ridge/display-connector.c index ab8e00baf3f1..d80cb7bc59e6 100644 --- a/drivers/gpu/drm/bridge/display-connector.c +++ b/drivers/gpu/drm/bridge/display-connector.c @@ -204,6 +204,7 @@ static int display_connector_get_supply(struct platform= _device *pdev, =20 static int display_connector_probe(struct platform_device *pdev) { + struct fwnode_handle *fwnode =3D dev_fwnode(&pdev->dev); struct display_connector *conn; unsigned int type; const char *label =3D NULL; @@ -215,15 +216,15 @@ static int display_connector_probe(struct platform_de= vice *pdev) =20 platform_set_drvdata(pdev, conn); =20 - type =3D (uintptr_t)of_device_get_match_data(&pdev->dev); + type =3D (uintptr_t)device_get_match_data(&pdev->dev); =20 /* Get the exact connector type. */ switch (type) { case DRM_MODE_CONNECTOR_DVII: { bool analog, digital; =20 - analog =3D of_property_read_bool(pdev->dev.of_node, "analog"); - digital =3D of_property_read_bool(pdev->dev.of_node, "digital"); + analog =3D fwnode_property_present(fwnode, "analog"); + digital =3D fwnode_property_present(fwnode, "digital"); if (analog && !digital) { conn->bridge.type =3D DRM_MODE_CONNECTOR_DVIA; } else if (!analog && digital) { @@ -240,8 +241,7 @@ static int display_connector_probe(struct platform_devi= ce *pdev) case DRM_MODE_CONNECTOR_HDMIA: { const char *hdmi_type; =20 - ret =3D of_property_read_string(pdev->dev.of_node, "type", - &hdmi_type); + ret =3D fwnode_property_read_string(fwnode, "type", &hdmi_type); if (ret < 0) { dev_err(&pdev->dev, "HDMI connector with no type\n"); return -EINVAL; @@ -271,7 +271,7 @@ static int display_connector_probe(struct platform_devi= ce *pdev) conn->bridge.interlace_allowed =3D true; =20 /* Get the optional connector label. */ - of_property_read_string(pdev->dev.of_node, "label", &label); + fwnode_property_read_string(fwnode, "label", &label); =20 /* * Get the HPD GPIO for DVI, HDMI and DP connectors. If the GPIO can prov= ide @@ -309,12 +309,12 @@ static int display_connector_probe(struct platform_de= vice *pdev) if (type =3D=3D DRM_MODE_CONNECTOR_DVII || type =3D=3D DRM_MODE_CONNECTOR_HDMIA || type =3D=3D DRM_MODE_CONNECTOR_VGA) { - struct device_node *phandle; + struct fwnode_handle *phandle; =20 - phandle =3D of_parse_phandle(pdev->dev.of_node, "ddc-i2c-bus", 0); - if (phandle) { - conn->bridge.ddc =3D of_get_i2c_adapter_by_node(phandle); - of_node_put(phandle); + phandle =3D fwnode_find_reference(fwnode, "ddc-i2c-bus", 0); + if (!IS_ERR_OR_NULL(phandle)) { + conn->bridge.ddc =3D i2c_get_adapter_by_fwnode(phandle); + fwnode_handle_put(phandle); if (!conn->bridge.ddc) return -EPROBE_DEFER; } else { @@ -358,7 +358,7 @@ static int display_connector_probe(struct platform_devi= ce *pdev) } =20 conn->bridge.funcs =3D &display_connector_bridge_funcs; - conn->bridge.of_node =3D pdev->dev.of_node; + drm_bridge_set_node(&conn->bridge, fwnode); =20 if (conn->bridge.ddc) conn->bridge.ops |=3D DRM_BRIDGE_OP_EDID --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-187.mta1.migadu.com (out-187.mta1.migadu.com [95.215.58.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9606D155725 for ; Mon, 22 Apr 2024 19:19:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813584; cv=none; b=pZskyYq2epKkrGC5VnbzrLwom/E6cgXsY4jP4BMdvbSBUHKpjFxC/OEyKt3wuQWvc/RuMT5uPQPFFCfCwZ1edK4yLSoYhDw0aiUgvclUGF3/+/uybp7ps9IpiiPf1VjFVez/OXFuLEOPNGrR9uznqhp3Md8ZehJLj/RE6DKYDEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813584; c=relaxed/simple; bh=yaLTN1bI0geP0UCxwHgulhuB6FKX9px1dQExhoKkdro=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qsf3H7SoY5mSb1VDiHwam11xKeokGsnc26g2YmQlKeaWwXgiQqToOObosW7ikIbBmPIRQoRujmd4H9jvDcUOqwxwxTX7JO8p+Y6PHlSmQgolXQWKqO2zZFbfnJ/sM5I7jLXRPulgaV4fHDS7K7HupdGNJTfRTJ6HdfilxqVrZgY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=USB05btD; arc=none smtp.client-ip=95.215.58.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="USB05btD" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813580; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QHcHgLztm1MbyZtiaxxPtZqiLu7TluHYcwMGaSWtFjQ=; b=USB05btDDzI8uOyGmlMplJpq7Qmq3rVj99yphIeUU4pwVOum6BMSyvHrPInoXDYhlLXHJz 9OZRRJHKSnaxeBjiPsIV66BvlpCc4STHECvUy+3tMtflXPtrIPHHpOsDHkpTRWKb5ZT6h+ uwyFbmzadGv5inQLcdNPsZrd3yIeJvw= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 5/9] drm/bridge: display-connector: Add platform module alias Date: Tue, 23 Apr 2024 03:18:59 +0800 Message-Id: <20240422191903.255642-6-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Otherwise when compiled as module, this driver will not be probed on non-DT environment. This is a fundamential step to make this driver truely OF-independent. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/display-connector.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/b= ridge/display-connector.c index d80cb7bc59e6..7d9b4edf4025 100644 --- a/drivers/gpu/drm/bridge/display-connector.c +++ b/drivers/gpu/drm/bridge/display-connector.c @@ -434,3 +434,4 @@ module_platform_driver(display_connector_driver); MODULE_AUTHOR("Laurent Pinchart "); MODULE_DESCRIPTION("Display connector driver"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:display-connector"); --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-175.mta1.migadu.com (out-175.mta1.migadu.com [95.215.58.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A360155741 for ; Mon, 22 Apr 2024 19:19:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813588; cv=none; b=kPkcbz9lHRaWgI+AHtLMn4PqLW0y9TmVuWEuCk/rU7EItPCj+Jbpz7Tlhbc6W7WElSisH5YOm2TKwFIZ61ZGwEM3w3ZPs0xq3KhvUAKYlTs9HxYdxeQSWIA5YkS27EdRhmQxKk2llasMBenn2IMdYb2rKINU3HetR1cEHEH7VY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813588; c=relaxed/simple; bh=0z4jA9IGwkMpbvi/J7KFVTEV+EWhthH8+LkBoy3vb4E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tcdB6yDwyQVfU3+FApXbSgJWLxuszsbssL85+V3W+PngdTC6hxM+jJmCwWecHLD52jTjOQFnmn/ciTWmky2xWIxRZNGnlQa5Es7Y9M7a52j06EVoJdGQIT90Fn+0LphVpDRD17mIPD4VWZevAw7EzngA7ID62WY3TplFNOXk2KU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=grekojdB; arc=none smtp.client-ip=95.215.58.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="grekojdB" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813585; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6tEoow3QlZGEbyC23DthOGK7n4k2QNy+D7Afpqn4m4E=; b=grekojdBfk5IRS1AuUtJx9mglk/CpIRleMxyBUxlK5LaySMjdhQaMGbN6vbnhyBdbFTznE RK2njiinQPUzemCRsUx6Pa4vGXlQYvb/9ybEQhBv17JNscdUsW7M9I5td3VipSkIMuzC5a o/ZnnMZ8lZCzvy0oyynUBDOnPvslrII= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 6/9] drm-bridge: sii902x: Use fwnode API to acquire device properties Date: Tue, 23 Apr 2024 03:19:00 +0800 Message-Id: <20240422191903.255642-7-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Make this driver less DT-dependent by calling the freshly created helper functions, which reduce boilerplate. Should be no functional changes for DT based systems. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/sii902x.c | 43 +++++++++++--------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii9= 02x.c index 8f84e98249c7..04436f318c7f 100644 --- a/drivers/gpu/drm/bridge/sii902x.c +++ b/drivers/gpu/drm/bridge/sii902x.c @@ -827,20 +827,19 @@ static int sii902x_audio_codec_init(struct sii902x *s= ii902x, .spdif =3D 0, .max_i2s_channels =3D 0, }; + struct fwnode_handle *fwnode =3D dev_fwnode(dev); u8 lanes[4]; int num_lanes, i; =20 - if (!of_property_read_bool(dev->of_node, "#sound-dai-cells")) { + if (!fwnode_property_present(fwnode, "#sound-dai-cells")) { dev_dbg(dev, "%s: No \"#sound-dai-cells\", no audio\n", __func__); return 0; } =20 - num_lanes =3D of_property_read_variable_u8_array(dev->of_node, - "sil,i2s-data-lanes", - lanes, 1, - ARRAY_SIZE(lanes)); - + num_lanes =3D fwnode_property_read_u8_array(fwnode, + "sil,i2s-data-lanes", + lanes, ARRAY_SIZE(lanes)); if (num_lanes =3D=3D -EINVAL) { dev_dbg(dev, "%s: No \"sil,i2s-data-lanes\", use default <0>\n", @@ -1097,13 +1096,13 @@ static int sii902x_init(struct sii902x *sii902x) goto err_unreg_audio; =20 sii902x->bridge.funcs =3D &sii902x_bridge_funcs; - sii902x->bridge.of_node =3D dev->of_node; sii902x->bridge.timings =3D &default_sii902x_timings; sii902x->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; =20 if (sii902x->i2c->irq > 0) sii902x->bridge.ops |=3D DRM_BRIDGE_OP_HPD; =20 + drm_bridge_set_node(&sii902x->bridge, dev_fwnode(dev)); drm_bridge_add(&sii902x->bridge); =20 return 0; @@ -1118,7 +1117,6 @@ static int sii902x_init(struct sii902x *sii902x) static int sii902x_probe(struct i2c_client *client) { struct device *dev =3D &client->dev; - struct device_node *endpoint; struct sii902x *sii902x; static const char * const supplies[] =3D {"iovcc", "cvcc12"}; int ret; @@ -1147,27 +1145,14 @@ static int sii902x_probe(struct i2c_client *client) return PTR_ERR(sii902x->reset_gpio); } =20 - endpoint =3D of_graph_get_endpoint_by_regs(dev->of_node, 1, -1); - if (endpoint) { - struct device_node *remote =3D of_graph_get_remote_port_parent(endpoint); - - of_node_put(endpoint); - if (!remote) { - dev_err(dev, "Endpoint in port@1 unconnected\n"); - return -ENODEV; - } - - if (!of_device_is_available(remote)) { - dev_err(dev, "port@1 remote device is disabled\n"); - of_node_put(remote); - return -ENODEV; - } - - sii902x->next_bridge =3D of_drm_find_bridge(remote); - of_node_put(remote); - if (!sii902x->next_bridge) - return dev_err_probe(dev, -EPROBE_DEFER, - "Failed to find remote bridge\n"); + sii902x->next_bridge =3D drm_bridge_find_next_bridge_by_fwnode(dev_fwnode= (dev), 1); + if (!sii902x->next_bridge) { + return dev_err_probe(dev, -EPROBE_DEFER, + "Failed to find the next bridge\n"); + } else if (IS_ERR(sii902x->next_bridge)) { + ret =3D PTR_ERR(sii902x->next_bridge); + dev_err(dev, "Error on find the next bridge: %d\n", ret); + return ret; } =20 mutex_init(&sii902x->mutex); --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-171.mta1.migadu.com (out-171.mta1.migadu.com [95.215.58.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60725155A50 for ; Mon, 22 Apr 2024 19:19:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813593; cv=none; b=gsAXTBQaMinxDteRdC7FCYL16z+xLTY7fuNaVSY2jZTazSAnSHgUMHe2UO+9kv4XhCmfyk56D+9HrI6AVDt38s1fl+HXvyS5E/gxPxOx6Wsu69WRk+ULPIO+rojAFDvftKCRXumjTG9KZschki4dwNNPfii0cJWuEN9U0OovAjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813593; c=relaxed/simple; bh=lmbOAIR4fhp7i68dhNsChCkO1KTe82Jsg7qFc9Zk+Zk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cj/yd6x9BS5Crn5l4s4ckzEjsbgTmfRKHABOvwHa4A0a2wqWjQfwP8/Ez6NvtHC2SKcFqTUDEsODVOZLZt4aQpWZJpX1WmMYUd4zVSeINl/qiIOz/hhgaSiSmvxFog1qKW2S/n81kXyfA7jWTdif59+zCJpbRwN6cWViaIjxkdc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=tkeZhKjV; arc=none smtp.client-ip=95.215.58.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="tkeZhKjV" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813590; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gqEhBcfnv9rUbWN96BkVZjg/A8+GnWYlmO3Ge72EuvE=; b=tkeZhKjVLuvfh6Foyzk3MbB2uAvEY5upHeSRQ+blEYlElqGcK63pkFZY0N3cCd3XH2JdF/ huv7OpW7uxnTL+qtFVG+Isu7CoTzn8Exnttl2egWGTj0p3+3+NVSO6UbTvV0MLeRO0z4/u o2sk53FsT3BzwQVRuUBUpra9pTTgNjM= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 7/9] drm-bridge: it66121: Use fwnode API to acquire device properties Date: Tue, 23 Apr 2024 03:19:01 +0800 Message-Id: <20240422191903.255642-8-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Make this driver DT-independent by calling the freshly created helpers, which reduce boilerplate and open the door for otherwise use cases. No functional changes for DT based systems. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/ite-it66121.c | 57 +++++++++++++++++----------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/= ite-it66121.c index 925e42f46cd8..688dc1830654 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -1480,7 +1479,7 @@ static int it66121_audio_codec_init(struct it66121_ct= x *ctx, struct device *dev) =20 dev_dbg(dev, "%s\n", __func__); =20 - if (!of_property_read_bool(dev->of_node, "#sound-dai-cells")) { + if (!fwnode_property_present(dev_fwnode(dev), "#sound-dai-cells")) { dev_info(dev, "No \"#sound-dai-cells\", no audio\n"); return 0; } @@ -1503,13 +1502,36 @@ static const char * const it66121_supplies[] =3D { "vcn33", "vcn18", "vrf12" }; =20 +static int it66121_read_bus_width(struct fwnode_handle *fwnode, u32 *bus_w= idth) +{ + struct fwnode_handle *endpoint; + u32 val; + int ret; + + endpoint =3D fwnode_graph_get_endpoint_by_id(fwnode, 0, 0, 0); + if (!endpoint) + return -EINVAL; + + ret =3D fwnode_property_read_u32(endpoint, "bus-width", &val); + fwnode_handle_put(endpoint); + if (ret) + return ret; + + if (val !=3D 12 && val !=3D 24) + return -EINVAL; + + *bus_width =3D val; + + return 0; +} + static int it66121_probe(struct i2c_client *client) { u32 revision_id, vendor_ids[2] =3D { 0 }, device_ids[2] =3D { 0 }; - struct device_node *ep; int ret; struct it66121_ctx *ctx; struct device *dev =3D &client->dev; + struct fwnode_handle *fwnode =3D dev_fwnode(dev); =20 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(dev, "I2C check functionality failed.\n"); @@ -1520,29 +1542,20 @@ static int it66121_probe(struct i2c_client *client) if (!ctx) return -ENOMEM; =20 - ep =3D of_graph_get_endpoint_by_regs(dev->of_node, 0, 0); - if (!ep) - return -EINVAL; - ctx->dev =3D dev; ctx->client =3D client; ctx->info =3D i2c_get_match_data(client); =20 - of_property_read_u32(ep, "bus-width", &ctx->bus_width); - of_node_put(ep); - - if (ctx->bus_width !=3D 12 && ctx->bus_width !=3D 24) - return -EINVAL; - - ep =3D of_graph_get_remote_node(dev->of_node, 1, -1); - if (!ep) { - dev_err(ctx->dev, "The endpoint is unconnected\n"); - return -EINVAL; - } + ret =3D it66121_read_bus_width(fwnode, &ctx->bus_width); + if (ret) + return ret; =20 - ctx->next_bridge =3D of_drm_find_bridge(ep); - of_node_put(ep); - if (!ctx->next_bridge) { + ctx->next_bridge =3D drm_bridge_find_next_bridge_by_fwnode(fwnode, 1); + if (IS_ERR(ctx->next_bridge)) { + ret =3D PTR_ERR(ctx->next_bridge); + dev_err(dev, "Error in founding the next bridge: %d\n", ret); + return ret; + } else if (!ctx->next_bridge) { dev_dbg(ctx->dev, "Next bridge not found, deferring probe\n"); return -EPROBE_DEFER; } @@ -1577,8 +1590,8 @@ static int it66121_probe(struct i2c_client *client) return -ENODEV; } =20 + drm_bridge_set_node(&ctx->bridge, fwnode); ctx->bridge.funcs =3D &it66121_bridge_funcs; - ctx->bridge.of_node =3D dev->of_node; ctx->bridge.type =3D DRM_MODE_CONNECTOR_HDMIA; ctx->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; if (client->irq > 0) { --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5A08156232 for ; Mon, 22 Apr 2024 19:19:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813598; cv=none; b=g4/4N/566SFcmjRyWe/zvkv9zWOoBO1njOIHdG3jqzSv9WQq0NLdMk+fKOJ7bvrujjvuCpjH4to6Kh/oN8ry0gUjwhGcMZOnhzXc8jE7bi58MbaKi/HL2mczjP+ZLDDk/shVjPYy288xPnmafbCI6SViDqSbLJu8uacXZugVpHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813598; c=relaxed/simple; bh=ITseei08H8ZFFvxsoTmsaLOG228vUI8k9CUYqIYQLvA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Xn8mEw+9UiJ1dSXHFiK/zTeaPrpirENnlS9ijOXIdsxn/RYNvoldWD9jM/IbaEwq+k1sTkUt2R0B9RhdYjP0viKHHLnpM14TFERSbQ0RfYRePtmtn9eVtQoOYCicalSlqp9X4ES1CQ081qBfZGyHJhN64e0FIygeuNmwIYEocx4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=WNQpfCw0; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="WNQpfCw0" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813595; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+DZUEgRYcSmSCNpMFRJJvZshOZpL7UP9Hp7JpDo8EBk=; b=WNQpfCw0v1uvB9h2ZJSD+dj+lnnhqUm+1gVbOkZzc2oW2Fkw/rdZBScxAR1DOusgGtnPFm dVZu5KNFE4x6mlu8to6KL6BOeVgK9f0mtO7I431jdViOfu9sYTL8CLfddgRsHXPTPJQM33 Iy2ayO65CrR2X7OmdHhfo8CV+qkNnkQ= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 8/9] drm/bridge: tfp410: Use fwnode API to acquire device properties Date: Tue, 23 Apr 2024 03:19:02 +0800 Message-Id: <20240422191903.255642-9-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Make this driver DT-independent by calling the freshly created helpers, which reduce boilerplate and open the door for otherwise use cases. No functional changes for DT based systems. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/ti-tfp410.c | 41 +++++++++++++++--------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti= -tfp410.c index c7bef5c23927..58dc7492844f 100644 --- a/drivers/gpu/drm/bridge/ti-tfp410.c +++ b/drivers/gpu/drm/bridge/ti-tfp410.c @@ -266,8 +266,9 @@ static const struct drm_bridge_timings tfp410_default_t= imings =3D { =20 static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c) { + struct fwnode_handle *fwnode =3D dev_fwnode(dvi->dev); struct drm_bridge_timings *timings =3D &dvi->timings; - struct device_node *ep; + struct fwnode_handle *ep; u32 pclk_sample =3D 0; u32 bus_width =3D 24; u32 deskew =3D 0; @@ -288,14 +289,14 @@ static int tfp410_parse_timings(struct tfp410 *dvi, b= ool i2c) * and EDGE pins. They are specified in DT through endpoint properties * and vendor-specific properties. */ - ep =3D of_graph_get_endpoint_by_regs(dvi->dev->of_node, 0, 0); + ep =3D fwnode_graph_get_endpoint_by_id(fwnode, 0, 0, 0); if (!ep) return -EINVAL; =20 /* Get the sampling edge from the endpoint. */ - of_property_read_u32(ep, "pclk-sample", &pclk_sample); - of_property_read_u32(ep, "bus-width", &bus_width); - of_node_put(ep); + fwnode_property_read_u32(ep, "pclk-sample", &pclk_sample); + fwnode_property_read_u32(ep, "bus-width", &bus_width); + fwnode_handle_put(ep); =20 timings->input_bus_flags =3D DRM_BUS_FLAG_DE_HIGH; =20 @@ -324,7 +325,7 @@ static int tfp410_parse_timings(struct tfp410 *dvi, boo= l i2c) } =20 /* Get the setup and hold time from vendor-specific properties. */ - of_property_read_u32(dvi->dev->of_node, "ti,deskew", &deskew); + fwnode_property_read_u32(fwnode, "ti,deskew", &deskew); if (deskew > 7) return -EINVAL; =20 @@ -336,12 +337,12 @@ static int tfp410_parse_timings(struct tfp410 *dvi, b= ool i2c) =20 static int tfp410_init(struct device *dev, bool i2c) { - struct device_node *node; + struct fwnode_handle *fwnode =3D dev_fwnode(dev); struct tfp410 *dvi; int ret; =20 - if (!dev->of_node) { - dev_err(dev, "device-tree data is missing\n"); + if (!fwnode) { + dev_err(dev, "firmware data is missing\n"); return -ENXIO; } =20 @@ -352,8 +353,8 @@ static int tfp410_init(struct device *dev, bool i2c) dvi->dev =3D dev; dev_set_drvdata(dev, dvi); =20 + drm_bridge_set_node(&dvi->bridge, fwnode); dvi->bridge.funcs =3D &tfp410_bridge_funcs; - dvi->bridge.of_node =3D dev->of_node; dvi->bridge.timings =3D &dvi->timings; dvi->bridge.type =3D DRM_MODE_CONNECTOR_DVID; =20 @@ -362,15 +363,15 @@ static int tfp410_init(struct device *dev, bool i2c) return ret; =20 /* Get the next bridge, connected to port@1. */ - node =3D of_graph_get_remote_node(dev->of_node, 1, -1); - if (!node) - return -ENODEV; - - dvi->next_bridge =3D of_drm_find_bridge(node); - of_node_put(node); - - if (!dvi->next_bridge) + dvi->next_bridge =3D drm_bridge_find_next_bridge_by_fwnode(fwnode, 1); + if (IS_ERR(dvi->next_bridge)) { + ret =3D PTR_ERR(dvi->next_bridge); + dev_err(dev, "Error in founding the next bridge: %d\n", ret); + return ret; + } else if (!dvi->next_bridge) { + dev_dbg(dev, "Next bridge not found, deferring probe\n"); return -EPROBE_DEFER; + } =20 /* Get the powerdown GPIO. */ dvi->powerdown =3D devm_gpiod_get_optional(dev, "powerdown", @@ -422,10 +423,10 @@ static struct platform_driver tfp410_platform_driver = =3D { /* There is currently no i2c functionality. */ static int tfp410_i2c_probe(struct i2c_client *client) { + struct fwnode_handle *fwnode =3D dev_fwnode(&client->dev); int reg; =20 - if (!client->dev.of_node || - of_property_read_u32(client->dev.of_node, "reg", ®)) { + if (!fwnode || fwnode_property_read_u32(fwnode, "reg", ®)) { dev_err(&client->dev, "Can't get i2c reg property from device-tree\n"); return -ENXIO; --=20 2.34.1 From nobody Tue Feb 10 18:36:03 2026 Received: from out-171.mta1.migadu.com (out-171.mta1.migadu.com [95.215.58.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73BD415532C for ; Mon, 22 Apr 2024 19:20:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813603; cv=none; b=hnkHjfQgqhQERNJqsq75dR3dqXJwd0SC4oTdRK36NVnNASrV6zneDDOyD+9giEauSn2KRcJh3W1ZtQzmK0/fADBsUg4pPms+IM/+RxO+haLw4Fh/IpxbLYCogDaL0EhhvNicFwbSA5hEaexvFBiwgEP3pPm8g2LogKXddMMxFF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713813603; c=relaxed/simple; bh=FKu2CUeypOd/48X9drHNO1XXLTwz2jJXcmw4HHbE7bQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Xm/iJF9TjRvtq9z5YaXCBBgj4+dqMS29Nid8fXV9kftCM4L2z8lPMyASul6F4f0z80stTpzVk5T0SEEXBlToKEmuuEX0DCeOcKUKjWkmHhAhY7yyLxV5Eu17yYIKGu6MnLQmt0skCdeMsZcvbnfthDmNeg/lo8Ds/qyH56RUWNw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=QsyvjeVu; arc=none smtp.client-ip=95.215.58.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="QsyvjeVu" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1713813599; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OLQX3xwwNRyCA4F+ralsXdsqs/AGr4cJodEaBXIoFjw=; b=QsyvjeVuiitreg+RWW5zNEO0mARwEUAThwgl8NWlzMIlg+avMtrHDWF02ExkLBvp7UVL+h 08O6IqF3ZbI+8kcabTp/RGkYf71ZiQD2vIiQP73Fge5qR1nmhGqNOhJEDYUu6XSUJeGxIC MpjIkQ/maeZoUe876Jn3UkJNFENHTW0= From: Sui Jingfeng To: Neil Armstrong Cc: Robert Foss , Laurent Pinchart , Andrzej Hajda , Jonas Karlman , Jernej Skrabec , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Phong LE , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [PATCH v4 9/9] drm/bridge: tfp410: Add platform module alias Date: Tue, 23 Apr 2024 03:19:03 +0800 Message-Id: <20240422191903.255642-10-sui.jingfeng@linux.dev> In-Reply-To: <20240422191903.255642-1-sui.jingfeng@linux.dev> References: <20240422191903.255642-1-sui.jingfeng@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Otherwise when compiled as module, this driver will not be probed on non-DT environment. This is a fundamential step to make this driver truely OF-independent. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/bridge/ti-tfp410.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti= -tfp410.c index 58dc7492844f..6a0a0bbe3c6b 100644 --- a/drivers/gpu/drm/bridge/ti-tfp410.c +++ b/drivers/gpu/drm/bridge/ti-tfp410.c @@ -504,3 +504,4 @@ module_exit(tfp410_module_exit); MODULE_AUTHOR("Jyri Sarha "); MODULE_DESCRIPTION("TI TFP410 DVI bridge driver"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:tfp410"); --=20 2.34.1