diff mbox series

[V11,1/4] drm: of: Add drm_of_get_dsi_bus helper function

Message ID 20230118233135.1174859-2-macroalpha82@gmail.com (mailing list archive)
State New, archived
Headers show
Series drm/panel: Add Magnachip D53E6EA8966 Panel Controller | expand

Commit Message

Chris Morgan Jan. 18, 2023, 11:31 p.m. UTC
From: Chris Morgan <macromorgan@hotmail.com>

Add helper function to find DSI host for devices where DSI panel is not
a minor of a DSI bus (such as the Samsung AMS495QA01 panel or the
official Raspberry Pi touchscreen display).

Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
---
 drivers/gpu/drm/drm_of.c | 51 ++++++++++++++++++++++++++++++++++++++++
 include/drm/drm_of.h     | 12 ++++++++++
 2 files changed, 63 insertions(+)

Comments

Maxime Ripard Jan. 19, 2023, 8:15 a.m. UTC | #1
Hi,

On Wed, Jan 18, 2023 at 05:31:32PM -0600, Chris Morgan wrote:
> From: Chris Morgan <macromorgan@hotmail.com>
> 
> Add helper function to find DSI host for devices where DSI panel is not
> a minor of a DSI bus (such as the Samsung AMS495QA01 panel or the
> official Raspberry Pi touchscreen display).
> 
> Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>

Sorry for not noticing this earlier, but this is a bit confusing.
Signed-off-by is there usually to follow either the authors or the
maintainers (or people that passed the patch along).

Given the order, the SoB here indicates that it's Maya Matuszczyk that
committed/submitted that patch, while you are the author. Obviously,
that isn't the case since you are both the author and submitter.

So what's going on?

Maxime
Chris Morgan Jan. 19, 2023, 3:09 p.m. UTC | #2
On Thu, Jan 19, 2023 at 09:15:42AM +0100, Maxime Ripard wrote:
> Hi,
> 
> On Wed, Jan 18, 2023 at 05:31:32PM -0600, Chris Morgan wrote:
> > From: Chris Morgan <macromorgan@hotmail.com>
> > 
> > Add helper function to find DSI host for devices where DSI panel is not
> > a minor of a DSI bus (such as the Samsung AMS495QA01 panel or the
> > official Raspberry Pi touchscreen display).
> > 
> > Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
> > Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> 
> Sorry for not noticing this earlier, but this is a bit confusing.
> Signed-off-by is there usually to follow either the authors or the
> maintainers (or people that passed the patch along).
> 
> Given the order, the SoB here indicates that it's Maya Matuszczyk that
> committed/submitted that patch, while you are the author. Obviously,
> that isn't the case since you are both the author and submitter.

I borrowed a few lines of code from her, which is why she is listed
here. If this is not correct let me know.

Thank you.

> 
> So what's going on?
> 
> Maxime
Maxime Ripard Jan. 23, 2023, 9:49 a.m. UTC | #3
On Thu, Jan 19, 2023 at 09:09:03AM -0600, Chris Morgan wrote:
> On Thu, Jan 19, 2023 at 09:15:42AM +0100, Maxime Ripard wrote:
> > Hi,
> > 
> > On Wed, Jan 18, 2023 at 05:31:32PM -0600, Chris Morgan wrote:
> > > From: Chris Morgan <macromorgan@hotmail.com>
> > > 
> > > Add helper function to find DSI host for devices where DSI panel is not
> > > a minor of a DSI bus (such as the Samsung AMS495QA01 panel or the
> > > official Raspberry Pi touchscreen display).
> > > 
> > > Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
> > > Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> > 
> > Sorry for not noticing this earlier, but this is a bit confusing.
> > Signed-off-by is there usually to follow either the authors or the
> > maintainers (or people that passed the patch along).
> > 
> > Given the order, the SoB here indicates that it's Maya Matuszczyk that
> > committed/submitted that patch, while you are the author. Obviously,
> > that isn't the case since you are both the author and submitter.
> 
> I borrowed a few lines of code from her, which is why she is listed
> here. If this is not correct let me know.
> 
> Thank you.

I see, then the usage is that:
 * You add a Co-developed-by tag with their name
 * You add your Signed-off-by last

Maxime
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 7bbcb999bb75..177b600895d3 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -10,6 +10,7 @@ 
 #include <drm/drm_crtc.h>
 #include <drm/drm_device.h>
 #include <drm/drm_encoder.h>
+#include <drm/drm_mipi_dsi.h>
 #include <drm/drm_of.h>
 #include <drm/drm_panel.h>
 
@@ -493,3 +494,53 @@  int drm_of_get_data_lanes_count_ep(const struct device_node *port,
 	return ret;
 }
 EXPORT_SYMBOL_GPL(drm_of_get_data_lanes_count_ep);
+
+#if IS_ENABLED(CONFIG_DRM_MIPI_DSI)
+
+/**
+ * drm_of_get_dsi_bus - find the DSI bus for a given device
+ * @dev: parent device of display (SPI, I2C)
+ *
+ * Gets parent DSI bus for a DSI device controlled through a bus other
+ * than MIPI-DCS (SPI, I2C, etc.) using the Device Tree.
+ *
+ * Returns pointer to mipi_dsi_host if successful, -EINVAL if the
+ * request is unsupported, -EPROBE_DEFER if the DSI host is found but
+ * not available, or -ENODEV otherwise.
+ */
+struct mipi_dsi_host *drm_of_get_dsi_bus(struct device *dev)
+{
+	struct mipi_dsi_host *dsi_host;
+	struct device_node *endpoint, *dsi_host_node;
+
+	/*
+	 * Get first endpoint child from device.
+	 */
+	endpoint = of_graph_get_next_endpoint(dev->of_node, NULL);
+	if (!endpoint)
+		return ERR_PTR(-ENODEV);
+
+	/*
+	 * Follow the first endpoint to get the DSI host node and then
+	 * release the endpoint since we no longer need it.
+	 */
+	dsi_host_node = of_graph_get_remote_port_parent(endpoint);
+	of_node_put(endpoint);
+	if (!dsi_host_node)
+		return ERR_PTR(-ENODEV);
+
+	/*
+	 * Get the DSI host from the DSI host node. If we get an error
+	 * or the return is null assume we're not ready to probe just
+	 * yet. Release the DSI host node since we're done with it.
+	 */
+	dsi_host = of_find_mipi_dsi_host_by_node(dsi_host_node);
+	of_node_put(dsi_host_node);
+	if (IS_ERR_OR_NULL(dsi_host))
+		return ERR_PTR(-EPROBE_DEFER);
+
+	return dsi_host;
+}
+EXPORT_SYMBOL_GPL(drm_of_get_dsi_bus);
+
+#endif /* CONFIG_DRM_MIPI_DSI */
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index 10ab58c40746..082a6e980d01 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -15,6 +15,8 @@  struct drm_encoder;
 struct drm_panel;
 struct drm_bridge;
 struct device_node;
+struct mipi_dsi_device_info;
+struct mipi_dsi_host;
 
 /**
  * enum drm_lvds_dual_link_pixels - Pixel order of an LVDS dual-link connection
@@ -129,6 +131,16 @@  drm_of_get_data_lanes_count_ep(const struct device_node *port,
 }
 #endif
 
+#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_MIPI_DSI)
+struct mipi_dsi_host *drm_of_get_dsi_bus(struct device *dev);
+#else
+static inline struct
+mipi_dsi_host *drm_of_get_dsi_bus(struct device *dev)
+{
+	return ERR_PTR(-EINVAL);
+}
+#endif /* CONFIG_OF && CONFIG_DRM_MIPI_DSI */
+
 /*
  * drm_of_panel_bridge_remove - remove panel bridge
  * @np: device tree node containing panel bridge output ports