2023-01-19 19:21:40

by Sean Anderson

[permalink] [raw]
Subject: [PATCH v3 0/3] drm: Add component_match_add_of and convert users of drm_of_component_match_add

This series adds a new function component_match_add_of to simplify the
common case of calling component_match_add_release with
component_release_of and component_compare_of. There is already
drm_of_component_match_add, which allows for a custom compare function.
However, all existing users just use component_compare_of (or an
equivalent).

Changes in v3:
- Rebase onto drm/drm-next

Changes in v2:
- Split off conversion from helper addition
- Rebase onto drm/drm-next

Sean Anderson (3):
component: Add helper for device nodes
iommu/sound: Use component_match_add_of helper
drm: Convert users of drm_of_component_match_add to
component_match_add_of

.../gpu/drm/arm/display/komeda/komeda_drv.c | 6 ++--
drivers/gpu/drm/arm/hdlcd_drv.c | 9 +-----
drivers/gpu/drm/arm/malidp_drv.c | 11 +------
drivers/gpu/drm/armada/armada_drv.c | 10 ++++---
drivers/gpu/drm/drm_of.c | 29 +++----------------
drivers/gpu/drm/etnaviv/etnaviv_drv.c | 4 +--
.../gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 3 +-
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 3 +-
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 4 +--
drivers/gpu/drm/msm/msm_drv.c | 14 ++++-----
drivers/gpu/drm/sti/sti_drv.c | 3 +-
drivers/gpu/drm/sun4i/sun4i_drv.c | 3 +-
drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 ++-----
drivers/iommu/mtk_iommu_v1.c | 3 +-
include/drm/drm_of.h | 12 --------
include/linux/component.h | 9 ++++++
sound/soc/codecs/wcd938x.c | 6 ++--
17 files changed, 45 insertions(+), 94 deletions(-)

--
2.35.1.1320.gc452695387.dirty


2023-01-19 19:50:49

by Sean Anderson

[permalink] [raw]
Subject: [PATCH v3 2/3] iommu/sound: Use component_match_add_of helper

Convert users of component_match_add_release with component_release_of
and component_compare_of to component_match_add_of.

Signed-off-by: Sean Anderson <[email protected]>
Acked-by: Mark Brown <[email protected]>
---

Changes in v3:
- Rebase onto drm/drm-next

Changes in v2:
- Split off from helper addition

drivers/iommu/mtk_iommu_v1.c | 3 +--
sound/soc/codecs/wcd938x.c | 6 ++----
2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index 69682ee068d2..14019ba1e41c 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -670,8 +670,7 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
}
data->larb_imu[i].dev = &plarbdev->dev;

- component_match_add_release(dev, &match, component_release_of,
- component_compare_of, larbnode);
+ component_match_add_of(dev, &match, larbnode);
}

platform_set_drvdata(pdev, data);
diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c
index fcac763b04d1..0663b15fa757 100644
--- a/sound/soc/codecs/wcd938x.c
+++ b/sound/soc/codecs/wcd938x.c
@@ -4474,8 +4474,7 @@ static int wcd938x_add_slave_components(struct wcd938x_priv *wcd938x,
}

of_node_get(wcd938x->rxnode);
- component_match_add_release(dev, matchptr, component_release_of,
- component_compare_of, wcd938x->rxnode);
+ component_match_add_of(dev, matchptr, wcd938x->rxnode);

wcd938x->txnode = of_parse_phandle(np, "qcom,tx-device", 0);
if (!wcd938x->txnode) {
@@ -4483,8 +4482,7 @@ static int wcd938x_add_slave_components(struct wcd938x_priv *wcd938x,
return -ENODEV;
}
of_node_get(wcd938x->txnode);
- component_match_add_release(dev, matchptr, component_release_of,
- component_compare_of, wcd938x->txnode);
+ component_match_add_of(dev, matchptr, wcd938x->txnode);
return 0;
}

--
2.35.1.1320.gc452695387.dirty

2023-01-19 19:58:16

by Sean Anderson

[permalink] [raw]
Subject: [PATCH v3 3/3] drm: Convert users of drm_of_component_match_add to component_match_add_of

Every user of this function either uses component_compare_of or
something equivalent. Most of them immediately put the device node as
well. Convert these users to component_match_add_of and remove
drm_of_component_match_add.

Signed-off-by: Sean Anderson <[email protected]>
Acked-by: Jyri Sarha <jyri.sarhaı@iki.fi>
Tested-by: Jyri Sarha <[email protected]>
---

(no changes since v1)

.../gpu/drm/arm/display/komeda/komeda_drv.c | 6 ++--
drivers/gpu/drm/arm/hdlcd_drv.c | 9 +-----
drivers/gpu/drm/arm/malidp_drv.c | 11 +------
drivers/gpu/drm/armada/armada_drv.c | 10 ++++---
drivers/gpu/drm/drm_of.c | 29 +++----------------
drivers/gpu/drm/etnaviv/etnaviv_drv.c | 4 +--
.../gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 3 +-
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 3 +-
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 4 +--
drivers/gpu/drm/msm/msm_drv.c | 14 ++++-----
drivers/gpu/drm/sti/sti_drv.c | 3 +-
drivers/gpu/drm/sun4i/sun4i_drv.c | 3 +-
drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 ++-----
include/drm/drm_of.h | 12 --------
14 files changed, 33 insertions(+), 88 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
index 3f4e719eebd8..e3bfc72c378f 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
@@ -103,10 +103,8 @@ static void komeda_add_slave(struct device *master,
struct device_node *remote;

remote = of_graph_get_remote_node(np, port, endpoint);
- if (remote) {
- drm_of_component_match_add(master, match, component_compare_of, remote);
- of_node_put(remote);
- }
+ if (remote)
+ component_match_add_of(master, match, remote);
}

static int komeda_platform_probe(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index e3507dd6f82a..5f760bb66af4 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -347,11 +347,6 @@ static const struct component_master_ops hdlcd_master_ops = {
.unbind = hdlcd_drm_unbind,
};

-static int compare_dev(struct device *dev, void *data)
-{
- return dev->of_node == data;
-}
-
static int hdlcd_probe(struct platform_device *pdev)
{
struct device_node *port;
@@ -362,9 +357,7 @@ static int hdlcd_probe(struct platform_device *pdev)
if (!port)
return -ENODEV;

- drm_of_component_match_add(&pdev->dev, &match, compare_dev, port);
- of_node_put(port);
-
+ component_match_add_of(&pdev->dev, &match, port);
return component_master_add_with_match(&pdev->dev, &hdlcd_master_ops,
match);
}
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 589c1c66a6dc..3a49c29ba5b8 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -909,13 +909,6 @@ static const struct component_master_ops malidp_master_ops = {
.unbind = malidp_unbind,
};

-static int malidp_compare_dev(struct device *dev, void *data)
-{
- struct device_node *np = data;
-
- return dev->of_node == np;
-}
-
static int malidp_platform_probe(struct platform_device *pdev)
{
struct device_node *port;
@@ -929,9 +922,7 @@ static int malidp_platform_probe(struct platform_device *pdev)
if (!port)
return -ENODEV;

- drm_of_component_match_add(&pdev->dev, &match, malidp_compare_dev,
- port);
- of_node_put(port);
+ component_match_add_of(&pdev->dev, &match, port);
return component_master_add_with_match(&pdev->dev, &malidp_master_ops,
match);
}
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
index 0643887800b4..c0211ad7a45d 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -184,10 +184,12 @@ static void armada_add_endpoints(struct device *dev,

for_each_endpoint_of_node(dev_node, ep) {
remote = of_graph_get_remote_port_parent(ep);
- if (remote && of_device_is_available(remote))
- drm_of_component_match_add(dev, match, component_compare_of,
- remote);
- of_node_put(remote);
+ if (remote) {
+ if (of_device_is_available(remote))
+ component_match_add_of(dev, match, remote);
+ else
+ of_node_put(remote);
+ }
}
}

diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 7bbcb999bb75..0a474729ddf6 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -78,24 +78,6 @@ uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
}
EXPORT_SYMBOL(drm_of_find_possible_crtcs);

-/**
- * drm_of_component_match_add - Add a component helper OF node match rule
- * @master: master device
- * @matchptr: component match pointer
- * @compare: compare function used for matching component
- * @node: of_node
- */
-void drm_of_component_match_add(struct device *master,
- struct component_match **matchptr,
- int (*compare)(struct device *, void *),
- struct device_node *node)
-{
- of_node_get(node);
- component_match_add_release(master, matchptr, component_release_of,
- compare, node);
-}
-EXPORT_SYMBOL_GPL(drm_of_component_match_add);
-
/**
* drm_of_component_probe - Generic probe function for a component based master
* @dev: master device containing the OF node
@@ -130,10 +112,9 @@ int drm_of_component_probe(struct device *dev,
break;

if (of_device_is_available(port->parent))
- drm_of_component_match_add(dev, &match, compare_of,
- port);
-
- of_node_put(port);
+ component_match_add_of(dev, &match, port);
+ else
+ of_node_put(port);
}

if (i == 0) {
@@ -171,9 +152,7 @@ int drm_of_component_probe(struct device *dev,
continue;
}

- drm_of_component_match_add(dev, &match, compare_of,
- remote);
- of_node_put(remote);
+ component_match_add_of(dev, &match, remote);
}
of_node_put(port);
}
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index 1d2b4fb4bcf8..4a0dba34a6e7 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -590,8 +590,8 @@ static int etnaviv_pdev_probe(struct platform_device *pdev)
if (!first_node)
first_node = core_node;

- drm_of_component_match_add(&pdev->dev, &match,
- component_compare_of, core_node);
+ of_node_get(core_node);
+ component_match_add_of(&pdev->dev, &match, core_node);
}
} else {
char **names = dev->platform_data;
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index 9c5d49bf40c9..3ee277615c39 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -273,8 +273,7 @@ static int kirin_drm_platform_probe(struct platform_device *pdev)
if (!remote)
return -ENODEV;

- drm_of_component_match_add(dev, &match, component_compare_of, remote);
- of_node_put(remote);
+ component_match_add_of(dev, &match, remote);

return component_master_add_with_match(dev, &kirin_drm_ops, match);
}
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index 3d5af44bf92d..d0c87175dec4 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -1444,8 +1444,7 @@ static int ingenic_drm_probe(struct platform_device *pdev)
if (!np)
return ingenic_drm_bind(dev, false);

- drm_of_component_match_add(dev, &match, component_compare_of, np);
- of_node_put(np);
+ component_match_add_of(dev, &match, np);

return component_master_add_with_match(dev, &ingenic_master_ops, match);
}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index cd5b18ef7951..abead814bfdc 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -787,8 +787,8 @@ static int mtk_drm_probe(struct platform_device *pdev)
comp_type == MTK_DSI) {
dev_info(dev, "Adding component match for %pOF\n",
node);
- drm_of_component_match_add(dev, &match, component_compare_of,
- node);
+ of_node_get(node);
+ component_match_add_of(dev, &match, node);
}

ret = mtk_ddp_comp_init(node, &private->ddp_comp[comp_id], comp_id);
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 8b0b0ac74a6f..8ccf57def955 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -5,6 +5,7 @@
* Author: Rob Clark <[email protected]>
*/

+#include <linux/component.h>
#include <linux/dma-mapping.h>
#include <linux/fault-inject.h>
#include <linux/kthread.h>
@@ -1156,10 +1157,9 @@ static int add_components_mdp(struct device *master_dev,
continue;

if (of_device_is_available(intf))
- drm_of_component_match_add(master_dev, matchptr,
- component_compare_of, intf);
-
- of_node_put(intf);
+ component_match_add_of(master_dev, matchptr, intf);
+ else
+ of_node_put(intf);
}

return 0;
@@ -1188,9 +1188,9 @@ static int add_gpu_components(struct device *dev,
return 0;

if (of_device_is_available(np))
- drm_of_component_match_add(dev, matchptr, component_compare_of, np);
-
- of_node_put(np);
+ component_match_add_of(dev, matchptr, np);
+ else
+ of_node_put(np);

return 0;
}
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index ef6a4e63198f..e3aae4574c75 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -238,8 +238,7 @@ static int sti_platform_probe(struct platform_device *pdev)
child_np = of_get_next_available_child(node, NULL);

while (child_np) {
- drm_of_component_match_add(dev, &match, component_compare_of,
- child_np);
+ component_match_add_of(dev, &match, child_np);
child_np = of_get_next_available_child(node, child_np);
}

diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index cc94efbbf2d4..9b3ddd82f1be 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -323,7 +323,8 @@ static int sun4i_drv_add_endpoints(struct device *dev,
of_device_is_available(node))) {
/* Add current component */
DRM_DEBUG_DRIVER("Adding component %pOF\n", node);
- drm_of_component_match_add(dev, match, component_compare_of, node);
+ of_node_get(node);
+ component_match_add_of(dev, match, node);
count++;
}

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 3b86d002ef62..0138ce02a64f 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -155,11 +155,6 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
return ret;
}

-static int dev_match_of(struct device *dev, void *data)
-{
- return dev->of_node == data;
-}
-
int tilcdc_get_external_components(struct device *dev,
struct component_match **match)
{
@@ -173,7 +168,8 @@ int tilcdc_get_external_components(struct device *dev,
}

if (match)
- drm_of_component_match_add(dev, match, dev_match_of, node);
- of_node_put(node);
+ component_match_add_of(dev, match, node);
+ else
+ of_node_put(node);
return 1;
}
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index 10ab58c40746..685c44dc1dae 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -33,10 +33,6 @@ uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
struct device_node *port);
uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
struct device_node *port);
-void drm_of_component_match_add(struct device *master,
- struct component_match **matchptr,
- int (*compare)(struct device *, void *),
- struct device_node *node);
int drm_of_component_probe(struct device *dev,
int (*compare_of)(struct device *, void *),
const struct component_master_ops *m_ops);
@@ -69,14 +65,6 @@ static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
return 0;
}

-static inline void
-drm_of_component_match_add(struct device *master,
- struct component_match **matchptr,
- int (*compare)(struct device *, void *),
- struct device_node *node)
-{
-}
-
static inline int
drm_of_component_probe(struct device *dev,
int (*compare_of)(struct device *, void *),
--
2.35.1.1320.gc452695387.dirty

2023-01-19 21:00:28

by Sean Anderson

[permalink] [raw]
Subject: [PATCH v3 1/3] component: Add helper for device nodes

There is a common case where component_patch_add_release is called with
component_release_of/component_compare_of and a device node. Add a
helper.

Signed-off-by: Sean Anderson <[email protected]>
---

(no changes since v2)

Changes in v2:
- Split off conversion from helper addition

include/linux/component.h | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/include/linux/component.h b/include/linux/component.h
index df4aa75c9e7c..fb5d2dbc34d8 100644
--- a/include/linux/component.h
+++ b/include/linux/component.h
@@ -6,6 +6,7 @@


struct device;
+struct device_node;

/**
* struct component_ops - callbacks for component drivers
@@ -128,4 +129,12 @@ static inline void component_match_add(struct device *parent,
compare_data);
}

+static inline void component_match_add_of(struct device *parent,
+ struct component_match **matchptr,
+ struct device_node *node)
+{
+ component_match_add_release(parent, matchptr, component_release_of,
+ component_compare_of, node);
+}
+
#endif
--
2.35.1.1320.gc452695387.dirty

Subject: Re: [PATCH v3 3/3] drm: Convert users of drm_of_component_match_add to component_match_add_of

Il 19/01/23 20:10, Sean Anderson ha scritto:
> Every user of this function either uses component_compare_of or
> something equivalent. Most of them immediately put the device node as
> well. Convert these users to component_match_add_of and remove
> drm_of_component_match_add.
>
> Signed-off-by: Sean Anderson <[email protected]>
> Acked-by: Jyri Sarha <jyri.sarhaı@iki.fi>
> Tested-by: Jyri Sarha <[email protected]>

For MediaTek mtk_drm_drv:

Tested-by: AngeloGioacchino Del Regno <[email protected]>


Subject: Re: [PATCH v3 2/3] iommu/sound: Use component_match_add_of helper

Il 19/01/23 20:10, Sean Anderson ha scritto:
> Convert users of component_match_add_release with component_release_of
> and component_compare_of to component_match_add_of.
>
> Signed-off-by: Sean Anderson <[email protected]>
> Acked-by: Mark Brown <[email protected]>


Reviewed-by: AngeloGioacchino Del Regno <[email protected]>


2023-01-20 16:09:40

by Liviu Dudau

[permalink] [raw]
Subject: Re: [PATCH v3 3/3] drm: Convert users of drm_of_component_match_add to component_match_add_of

On Thu, Jan 19, 2023 at 02:10:39PM -0500, Sean Anderson wrote:
> Every user of this function either uses component_compare_of or
> something equivalent. Most of them immediately put the device node as
> well. Convert these users to component_match_add_of and remove
> drm_of_component_match_add.
>
> Signed-off-by: Sean Anderson <[email protected]>
> Acked-by: Jyri Sarha <jyri.sarhaı@iki.fi>
> Tested-by: Jyri Sarha <[email protected]>
> ---
>
> (no changes since v1)
>
> .../gpu/drm/arm/display/komeda/komeda_drv.c | 6 ++--
> drivers/gpu/drm/arm/hdlcd_drv.c | 9 +-----
> drivers/gpu/drm/arm/malidp_drv.c | 11 +------
> drivers/gpu/drm/armada/armada_drv.c | 10 ++++---
> drivers/gpu/drm/drm_of.c | 29 +++----------------
> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 4 +--
> .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 3 +-
> drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 3 +-
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 4 +--
> drivers/gpu/drm/msm/msm_drv.c | 14 ++++-----
> drivers/gpu/drm/sti/sti_drv.c | 3 +-
> drivers/gpu/drm/sun4i/sun4i_drv.c | 3 +-
> drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 ++-----
> include/drm/drm_of.h | 12 --------
> 14 files changed, 33 insertions(+), 88 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
> index 3f4e719eebd8..e3bfc72c378f 100644
> --- a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
> +++ b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
> @@ -103,10 +103,8 @@ static void komeda_add_slave(struct device *master,
> struct device_node *remote;
>
> remote = of_graph_get_remote_node(np, port, endpoint);
> - if (remote) {
> - drm_of_component_match_add(master, match, component_compare_of, remote);
> - of_node_put(remote);
> - }
> + if (remote)
> + component_match_add_of(master, match, remote);
> }
>
> static int komeda_platform_probe(struct platform_device *pdev)
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index e3507dd6f82a..5f760bb66af4 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -347,11 +347,6 @@ static const struct component_master_ops hdlcd_master_ops = {
> .unbind = hdlcd_drm_unbind,
> };
>
> -static int compare_dev(struct device *dev, void *data)
> -{
> - return dev->of_node == data;
> -}
> -
> static int hdlcd_probe(struct platform_device *pdev)
> {
> struct device_node *port;
> @@ -362,9 +357,7 @@ static int hdlcd_probe(struct platform_device *pdev)
> if (!port)
> return -ENODEV;
>
> - drm_of_component_match_add(&pdev->dev, &match, compare_dev, port);
> - of_node_put(port);
> -
> + component_match_add_of(&pdev->dev, &match, port);
> return component_master_add_with_match(&pdev->dev, &hdlcd_master_ops,
> match);
> }
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 589c1c66a6dc..3a49c29ba5b8 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -909,13 +909,6 @@ static const struct component_master_ops malidp_master_ops = {
> .unbind = malidp_unbind,
> };
>
> -static int malidp_compare_dev(struct device *dev, void *data)
> -{
> - struct device_node *np = data;
> -
> - return dev->of_node == np;
> -}
> -
> static int malidp_platform_probe(struct platform_device *pdev)
> {
> struct device_node *port;
> @@ -929,9 +922,7 @@ static int malidp_platform_probe(struct platform_device *pdev)
> if (!port)
> return -ENODEV;
>
> - drm_of_component_match_add(&pdev->dev, &match, malidp_compare_dev,
> - port);
> - of_node_put(port);
> + component_match_add_of(&pdev->dev, &match, port);
> return component_master_add_with_match(&pdev->dev, &malidp_master_ops,
> match);
> }

For komeda, mali_dp and hdlcd: Acked-by: Liviu Dudau <[email protected]>

Best regards,
Liviu


> diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
> index 0643887800b4..c0211ad7a45d 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -184,10 +184,12 @@ static void armada_add_endpoints(struct device *dev,
>
> for_each_endpoint_of_node(dev_node, ep) {
> remote = of_graph_get_remote_port_parent(ep);
> - if (remote && of_device_is_available(remote))
> - drm_of_component_match_add(dev, match, component_compare_of,
> - remote);
> - of_node_put(remote);
> + if (remote) {
> + if (of_device_is_available(remote))
> + component_match_add_of(dev, match, remote);
> + else
> + of_node_put(remote);
> + }
> }
> }
>
> diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
> index 7bbcb999bb75..0a474729ddf6 100644
> --- a/drivers/gpu/drm/drm_of.c
> +++ b/drivers/gpu/drm/drm_of.c
> @@ -78,24 +78,6 @@ uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
> }
> EXPORT_SYMBOL(drm_of_find_possible_crtcs);
>
> -/**
> - * drm_of_component_match_add - Add a component helper OF node match rule
> - * @master: master device
> - * @matchptr: component match pointer
> - * @compare: compare function used for matching component
> - * @node: of_node
> - */
> -void drm_of_component_match_add(struct device *master,
> - struct component_match **matchptr,
> - int (*compare)(struct device *, void *),
> - struct device_node *node)
> -{
> - of_node_get(node);
> - component_match_add_release(master, matchptr, component_release_of,
> - compare, node);
> -}
> -EXPORT_SYMBOL_GPL(drm_of_component_match_add);
> -
> /**
> * drm_of_component_probe - Generic probe function for a component based master
> * @dev: master device containing the OF node
> @@ -130,10 +112,9 @@ int drm_of_component_probe(struct device *dev,
> break;
>
> if (of_device_is_available(port->parent))
> - drm_of_component_match_add(dev, &match, compare_of,
> - port);
> -
> - of_node_put(port);
> + component_match_add_of(dev, &match, port);
> + else
> + of_node_put(port);
> }
>
> if (i == 0) {
> @@ -171,9 +152,7 @@ int drm_of_component_probe(struct device *dev,
> continue;
> }
>
> - drm_of_component_match_add(dev, &match, compare_of,
> - remote);
> - of_node_put(remote);
> + component_match_add_of(dev, &match, remote);
> }
> of_node_put(port);
> }
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index 1d2b4fb4bcf8..4a0dba34a6e7 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -590,8 +590,8 @@ static int etnaviv_pdev_probe(struct platform_device *pdev)
> if (!first_node)
> first_node = core_node;
>
> - drm_of_component_match_add(&pdev->dev, &match,
> - component_compare_of, core_node);
> + of_node_get(core_node);
> + component_match_add_of(&pdev->dev, &match, core_node);
> }
> } else {
> char **names = dev->platform_data;
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> index 9c5d49bf40c9..3ee277615c39 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> @@ -273,8 +273,7 @@ static int kirin_drm_platform_probe(struct platform_device *pdev)
> if (!remote)
> return -ENODEV;
>
> - drm_of_component_match_add(dev, &match, component_compare_of, remote);
> - of_node_put(remote);
> + component_match_add_of(dev, &match, remote);
>
> return component_master_add_with_match(dev, &kirin_drm_ops, match);
> }
> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> index 3d5af44bf92d..d0c87175dec4 100644
> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> @@ -1444,8 +1444,7 @@ static int ingenic_drm_probe(struct platform_device *pdev)
> if (!np)
> return ingenic_drm_bind(dev, false);
>
> - drm_of_component_match_add(dev, &match, component_compare_of, np);
> - of_node_put(np);
> + component_match_add_of(dev, &match, np);
>
> return component_master_add_with_match(dev, &ingenic_master_ops, match);
> }
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cd5b18ef7951..abead814bfdc 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -787,8 +787,8 @@ static int mtk_drm_probe(struct platform_device *pdev)
> comp_type == MTK_DSI) {
> dev_info(dev, "Adding component match for %pOF\n",
> node);
> - drm_of_component_match_add(dev, &match, component_compare_of,
> - node);
> + of_node_get(node);
> + component_match_add_of(dev, &match, node);
> }
>
> ret = mtk_ddp_comp_init(node, &private->ddp_comp[comp_id], comp_id);
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index 8b0b0ac74a6f..8ccf57def955 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -5,6 +5,7 @@
> * Author: Rob Clark <[email protected]>
> */
>
> +#include <linux/component.h>
> #include <linux/dma-mapping.h>
> #include <linux/fault-inject.h>
> #include <linux/kthread.h>
> @@ -1156,10 +1157,9 @@ static int add_components_mdp(struct device *master_dev,
> continue;
>
> if (of_device_is_available(intf))
> - drm_of_component_match_add(master_dev, matchptr,
> - component_compare_of, intf);
> -
> - of_node_put(intf);
> + component_match_add_of(master_dev, matchptr, intf);
> + else
> + of_node_put(intf);
> }
>
> return 0;
> @@ -1188,9 +1188,9 @@ static int add_gpu_components(struct device *dev,
> return 0;
>
> if (of_device_is_available(np))
> - drm_of_component_match_add(dev, matchptr, component_compare_of, np);
> -
> - of_node_put(np);
> + component_match_add_of(dev, matchptr, np);
> + else
> + of_node_put(np);
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index ef6a4e63198f..e3aae4574c75 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -238,8 +238,7 @@ static int sti_platform_probe(struct platform_device *pdev)
> child_np = of_get_next_available_child(node, NULL);
>
> while (child_np) {
> - drm_of_component_match_add(dev, &match, component_compare_of,
> - child_np);
> + component_match_add_of(dev, &match, child_np);
> child_np = of_get_next_available_child(node, child_np);
> }
>
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index cc94efbbf2d4..9b3ddd82f1be 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -323,7 +323,8 @@ static int sun4i_drv_add_endpoints(struct device *dev,
> of_device_is_available(node))) {
> /* Add current component */
> DRM_DEBUG_DRIVER("Adding component %pOF\n", node);
> - drm_of_component_match_add(dev, match, component_compare_of, node);
> + of_node_get(node);
> + component_match_add_of(dev, match, node);
> count++;
> }
>
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
> index 3b86d002ef62..0138ce02a64f 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
> @@ -155,11 +155,6 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
> return ret;
> }
>
> -static int dev_match_of(struct device *dev, void *data)
> -{
> - return dev->of_node == data;
> -}
> -
> int tilcdc_get_external_components(struct device *dev,
> struct component_match **match)
> {
> @@ -173,7 +168,8 @@ int tilcdc_get_external_components(struct device *dev,
> }
>
> if (match)
> - drm_of_component_match_add(dev, match, dev_match_of, node);
> - of_node_put(node);
> + component_match_add_of(dev, match, node);
> + else
> + of_node_put(node);
> return 1;
> }
> diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
> index 10ab58c40746..685c44dc1dae 100644
> --- a/include/drm/drm_of.h
> +++ b/include/drm/drm_of.h
> @@ -33,10 +33,6 @@ uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
> struct device_node *port);
> uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
> struct device_node *port);
> -void drm_of_component_match_add(struct device *master,
> - struct component_match **matchptr,
> - int (*compare)(struct device *, void *),
> - struct device_node *node);
> int drm_of_component_probe(struct device *dev,
> int (*compare_of)(struct device *, void *),
> const struct component_master_ops *m_ops);
> @@ -69,14 +65,6 @@ static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
> return 0;
> }
>
> -static inline void
> -drm_of_component_match_add(struct device *master,
> - struct component_match **matchptr,
> - int (*compare)(struct device *, void *),
> - struct device_node *node)
> -{
> -}
> -
> static inline int
> drm_of_component_probe(struct device *dev,
> int (*compare_of)(struct device *, void *),
> --
> 2.35.1.1320.gc452695387.dirty
>

--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
¯\_(ツ)_/¯