You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.2 KiB
Diff
115 lines
4.2 KiB
Diff
From 43265ca8cc62395e1750686daa8b7007b617e53b Mon Sep 17 00:00:00 2001
|
|
From: Liu Ying <victor.liu@nxp.com>
|
|
Date: Tue, 29 Aug 2017 16:58:58 +0800
|
|
Subject: [PATCH] MLK-16290 drm: Add drm_of_component_probe_with_match() helper
|
|
|
|
A component master may have both OF based and non-OF based components to be
|
|
bound with. This patch adds a helper drm_of_component_probe_with_match()
|
|
similar to drm_of_component_probe() so that the new helper may get an
|
|
additional provided match pointer(contains match entries for non-OF based
|
|
components) to support this case.
|
|
|
|
Tested-by: Meng Mingming <mingming.meng@nxp.com>
|
|
Signed-off-by: Liu Ying <victor.liu@nxp.com>
|
|
(cherry picked from commit c3cad7223488638ab56c20b2c29345487857bc5f)
|
|
---
|
|
drivers/gpu/drm/drm_of.c | 31 ++++++++++++++++++++++++++++---
|
|
include/drm/drm_of.h | 13 +++++++++++++
|
|
2 files changed, 41 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/drm_of.c
|
|
+++ b/drivers/gpu/drm/drm_of.c
|
|
@@ -100,8 +100,10 @@ void drm_of_component_match_add(struct d
|
|
EXPORT_SYMBOL_GPL(drm_of_component_match_add);
|
|
|
|
/**
|
|
- * drm_of_component_probe - Generic probe function for a component based master
|
|
+ * drm_of_component_probe_with_match - Generic probe function with match
|
|
+ * entries for a component based master
|
|
* @dev: master device containing the OF node
|
|
+ * @match: component match pointer provided to store matches
|
|
* @compare_of: compare function used for matching components
|
|
* @m_ops: component master ops to be used
|
|
*
|
|
@@ -112,12 +114,12 @@ EXPORT_SYMBOL_GPL(drm_of_component_match
|
|
*
|
|
* Returns zero if successful, or one of the standard error codes if it fails.
|
|
*/
|
|
-int drm_of_component_probe(struct device *dev,
|
|
+int drm_of_component_probe_with_match(struct device *dev,
|
|
+ struct component_match *match,
|
|
int (*compare_of)(struct device *, void *),
|
|
const struct component_master_ops *m_ops)
|
|
{
|
|
struct device_node *ep, *port, *remote;
|
|
- struct component_match *match = NULL;
|
|
int i;
|
|
|
|
if (!dev->of_node)
|
|
@@ -183,6 +185,29 @@ int drm_of_component_probe(struct device
|
|
|
|
return component_master_add_with_match(dev, m_ops, match);
|
|
}
|
|
+EXPORT_SYMBOL(drm_of_component_probe_with_match);
|
|
+
|
|
+/**
|
|
+ * drm_of_component_probe - Generic probe function for a component based master
|
|
+ * @dev: master device containing the OF node
|
|
+ * @compare_of: compare function used for matching components
|
|
+ * @master_ops: component master ops to be used
|
|
+ *
|
|
+ * Parse the platform device OF node and bind all the components associated
|
|
+ * with the master. Interface ports are added before the encoders in order to
|
|
+ * satisfy their .bind requirements
|
|
+ * See Documentation/devicetree/bindings/graph.txt for the bindings.
|
|
+ *
|
|
+ * Returns zero if successful, or one of the standard error codes if it fails.
|
|
+ */
|
|
+int drm_of_component_probe(struct device *dev,
|
|
+ int (*compare_of)(struct device *, void *),
|
|
+ const struct component_master_ops *m_ops)
|
|
+{
|
|
+ struct component_match *match = NULL;
|
|
+
|
|
+ return drm_of_component_probe_with_match(dev, match, compare_of, m_ops);
|
|
+}
|
|
EXPORT_SYMBOL(drm_of_component_probe);
|
|
|
|
/*
|
|
--- a/include/drm/drm_of.h
|
|
+++ b/include/drm/drm_of.h
|
|
@@ -7,6 +7,7 @@
|
|
#include <drm/drm_bridge.h>
|
|
#endif
|
|
|
|
+struct component_match;
|
|
struct component_master_ops;
|
|
struct component_match;
|
|
struct device;
|
|
@@ -25,6 +26,10 @@ void drm_of_component_match_add(struct d
|
|
struct component_match **matchptr,
|
|
int (*compare)(struct device *, void *),
|
|
struct device_node *node);
|
|
+extern int drm_of_component_probe_with_match(struct device *dev,
|
|
+ struct component_match *match,
|
|
+ int (*compare_of)(struct device *, void *),
|
|
+ const struct component_master_ops *m_ops);
|
|
int drm_of_component_probe(struct device *dev,
|
|
int (*compare_of)(struct device *, void *),
|
|
const struct component_master_ops *m_ops);
|
|
@@ -56,6 +61,14 @@ drm_of_component_match_add(struct device
|
|
{
|
|
}
|
|
|
|
+static int drm_of_component_probe_with_match(struct device *dev,
|
|
+ struct component_match *match,
|
|
+ int (*compare_of)(struct device *, void *),
|
|
+ const struct component_master_ops *m_ops)
|
|
+{
|
|
+ return -EINVAL;
|
|
+}
|
|
+
|
|
static inline int
|
|
drm_of_component_probe(struct device *dev,
|
|
int (*compare_of)(struct device *, void *),
|