All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping
@ 2021-10-11 11:21 Marek Vasut
  2021-10-11 16:26 ` Sam Ravnborg
  2021-10-12 20:05 ` Sam Ravnborg
  0 siblings, 2 replies; 5+ messages in thread
From: Marek Vasut @ 2021-10-11 11:21 UTC (permalink / raw)
  To: dri-devel; +Cc: Marek Vasut, Laurent Pinchart, Sam Ravnborg

Add helper function to convert DT "data-mapping" property string value
into media bus format value, and deduplicate the code in panel-lvds.c
and lvds-codec.c .

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
To: dri-devel@lists.freedesktop.org
---
V2: Drop bogus semicolon
---
 drivers/gpu/drm/bridge/lvds-codec.c | 21 ++++++------------
 drivers/gpu/drm/drm_of.c            | 33 +++++++++++++++++++++++++++++
 drivers/gpu/drm/panel/panel-lvds.c  | 18 ++++------------
 include/drm/drm_of.h                |  7 ++++++
 4 files changed, 51 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/bridge/lvds-codec.c b/drivers/gpu/drm/bridge/lvds-codec.c
index ad460b96c0a3..f991842a161f 100644
--- a/drivers/gpu/drm/bridge/lvds-codec.c
+++ b/drivers/gpu/drm/bridge/lvds-codec.c
@@ -14,6 +14,7 @@
 
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_bridge.h>
+#include <drm/drm_of.h>
 #include <drm/drm_panel.h>
 
 struct lvds_codec {
@@ -118,7 +119,6 @@ static int lvds_codec_probe(struct platform_device *pdev)
 	struct device_node *bus_node;
 	struct drm_panel *panel;
 	struct lvds_codec *lvds_codec;
-	const char *mapping;
 	int ret;
 
 	lvds_codec = devm_kzalloc(dev, sizeof(*lvds_codec), GFP_KERNEL);
@@ -174,22 +174,15 @@ static int lvds_codec_probe(struct platform_device *pdev)
 			return -ENXIO;
 		}
 
-		ret = of_property_read_string(bus_node, "data-mapping",
-					      &mapping);
+		ret = drm_of_lvds_get_data_mapping(bus_node);
 		of_node_put(bus_node);
-		if (ret < 0) {
+		if (ret == -ENODEV) {
 			dev_warn(dev, "missing 'data-mapping' DT property\n");
+		} else if (ret) {
+			dev_err(dev, "invalid 'data-mapping' DT property\n");
+			return ret;
 		} else {
-			if (!strcmp(mapping, "jeida-18")) {
-				lvds_codec->bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG;
-			} else if (!strcmp(mapping, "jeida-24")) {
-				lvds_codec->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA;
-			} else if (!strcmp(mapping, "vesa-24")) {
-				lvds_codec->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG;
-			} else {
-				dev_err(dev, "invalid 'data-mapping' DT property\n");
-				return -EINVAL;
-			}
+			lvds_codec->bus_format = ret;
 			lvds_codec->bridge.funcs = &funcs_decoder;
 		}
 	}
diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 37c34146eea8..a9217bc18e8f 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -402,3 +402,36 @@ int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
 		DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS;
 }
 EXPORT_SYMBOL_GPL(drm_of_lvds_get_dual_link_pixel_order);
+
+/**
+ * drm_of_lvds_get_data_mapping - Get LVDS data mapping
+ * @port: DT port node of the LVDS source or sink
+ *
+ * Convert DT "data-mapping" property string value into media bus format value.
+ *
+ * Return:
+ * MEDIA_BUS_FMT_RGB666_1X7X3_SPWG - data-mapping is "jeida-18"
+ * MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA - data-mapping is "jeida-24"
+ * MEDIA_BUS_FMT_RGB888_1X7X4_SPWG - data-mapping is "vesa-24"
+ * -EINVAL - the "data-mapping" property is unsupported
+ * -ENODEV - the "data-mapping" property is missing
+ */
+int drm_of_lvds_get_data_mapping(const struct device_node *port)
+{
+	const char *mapping;
+	int ret;
+
+	ret = of_property_read_string(port, "data-mapping", &mapping);
+	if (ret < 0)
+		return -ENODEV;
+
+	if (!strcmp(mapping, "jeida-18"))
+		return MEDIA_BUS_FMT_RGB666_1X7X3_SPWG;
+	if (!strcmp(mapping, "jeida-24"))
+		return MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA;
+	if (!strcmp(mapping, "vesa-24"))
+		return MEDIA_BUS_FMT_RGB888_1X7X4_SPWG;
+
+	return -EINVAL;
+}
+EXPORT_SYMBOL_GPL(drm_of_lvds_get_data_mapping);
diff --git a/drivers/gpu/drm/panel/panel-lvds.c b/drivers/gpu/drm/panel/panel-lvds.c
index 59a8d99e777d..27a1c9923b09 100644
--- a/drivers/gpu/drm/panel/panel-lvds.c
+++ b/drivers/gpu/drm/panel/panel-lvds.c
@@ -20,6 +20,7 @@
 #include <video/videomode.h>
 
 #include <drm/drm_crtc.h>
+#include <drm/drm_of.h>
 #include <drm/drm_panel.h>
 
 struct panel_lvds {
@@ -116,7 +117,6 @@ static int panel_lvds_parse_dt(struct panel_lvds *lvds)
 {
 	struct device_node *np = lvds->dev->of_node;
 	struct display_timing timing;
-	const char *mapping;
 	int ret;
 
 	ret = of_drm_get_panel_orientation(np, &lvds->orientation);
@@ -149,24 +149,14 @@ static int panel_lvds_parse_dt(struct panel_lvds *lvds)
 
 	of_property_read_string(np, "label", &lvds->label);
 
-	ret = of_property_read_string(np, "data-mapping", &mapping);
+	ret = drm_of_lvds_get_data_mapping(np);
 	if (ret < 0) {
 		dev_err(lvds->dev, "%pOF: invalid or missing %s DT property\n",
 			np, "data-mapping");
-		return -ENODEV;
+		return ret;
 	}
 
-	if (!strcmp(mapping, "jeida-18")) {
-		lvds->bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG;
-	} else if (!strcmp(mapping, "jeida-24")) {
-		lvds->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA;
-	} else if (!strcmp(mapping, "vesa-24")) {
-		lvds->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG;
-	} else {
-		dev_err(lvds->dev, "%pOF: invalid or missing %s DT property\n",
-			np, "data-mapping");
-		return -EINVAL;
-	}
+	lvds->bus_format = ret;
 
 	lvds->data_mirror = of_property_read_bool(np, "data-mirror");
 
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index b9b093add92e..99f79ac8b4cd 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -49,6 +49,7 @@ int drm_of_find_panel_or_bridge(const struct device_node *np,
 				struct drm_bridge **bridge);
 int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
 					  const struct device_node *port2);
+int drm_of_lvds_get_data_mapping(const struct device_node *port);
 #else
 static inline uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
 					  struct device_node *port)
@@ -98,6 +99,12 @@ drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
 {
 	return -EINVAL;
 }
+
+static inline int
+drm_of_lvds_get_data_mapping(const struct device_node *port)
+{
+	return -EINVAL;
+}
 #endif
 
 /*
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping
  2021-10-11 11:21 [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping Marek Vasut
@ 2021-10-11 16:26 ` Sam Ravnborg
  2021-10-11 16:40   ` Marek Vasut
  2021-10-12 20:05 ` Sam Ravnborg
  1 sibling, 1 reply; 5+ messages in thread
From: Sam Ravnborg @ 2021-10-11 16:26 UTC (permalink / raw)
  To: Marek Vasut; +Cc: dri-devel, Laurent Pinchart

Hi Marek,
On Mon, Oct 11, 2021 at 01:21:33PM +0200, Marek Vasut wrote:
> Add helper function to convert DT "data-mapping" property string value
> into media bus format value, and deduplicate the code in panel-lvds.c
> and lvds-codec.c .
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> To: dri-devel@lists.freedesktop.org

Looks good. I will let the bots chew it a little before we apply.

	Sam

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping
  2021-10-11 16:26 ` Sam Ravnborg
@ 2021-10-11 16:40   ` Marek Vasut
  0 siblings, 0 replies; 5+ messages in thread
From: Marek Vasut @ 2021-10-11 16:40 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: dri-devel, Laurent Pinchart

On 10/11/21 6:26 PM, Sam Ravnborg wrote:
> Hi Marek,
> On Mon, Oct 11, 2021 at 01:21:33PM +0200, Marek Vasut wrote:
>> Add helper function to convert DT "data-mapping" property string value
>> into media bus format value, and deduplicate the code in panel-lvds.c
>> and lvds-codec.c .
>>
>> Signed-off-by: Marek Vasut <marex@denx.de>
>> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> Cc: Sam Ravnborg <sam@ravnborg.org>
>> To: dri-devel@lists.freedesktop.org
> 
> Looks good. I will let the bots chew it a little before we apply.

Indeed. Some AB/RB would be good too.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping
  2021-10-11 11:21 [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping Marek Vasut
  2021-10-11 16:26 ` Sam Ravnborg
@ 2021-10-12 20:05 ` Sam Ravnborg
  2021-10-12 22:45   ` Marek Vasut
  1 sibling, 1 reply; 5+ messages in thread
From: Sam Ravnborg @ 2021-10-12 20:05 UTC (permalink / raw)
  To: Marek Vasut; +Cc: dri-devel, Laurent Pinchart

Hi Marek,

On Mon, Oct 11, 2021 at 01:21:33PM +0200, Marek Vasut wrote:
> Add helper function to convert DT "data-mapping" property string value
> into media bus format value, and deduplicate the code in panel-lvds.c
> and lvds-codec.c .
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> To: dri-devel@lists.freedesktop.org
> ---
> V2: Drop bogus semicolon
> ---
>  drivers/gpu/drm/bridge/lvds-codec.c | 21 ++++++------------
>  drivers/gpu/drm/drm_of.c            | 33 +++++++++++++++++++++++++++++
>  drivers/gpu/drm/panel/panel-lvds.c  | 18 ++++------------
>  include/drm/drm_of.h                |  7 ++++++
>  4 files changed, 51 insertions(+), 28 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/lvds-codec.c b/drivers/gpu/drm/bridge/lvds-codec.c
> index ad460b96c0a3..f991842a161f 100644
> --- a/drivers/gpu/drm/bridge/lvds-codec.c
> +++ b/drivers/gpu/drm/bridge/lvds-codec.c
> @@ -14,6 +14,7 @@
>  
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_bridge.h>
> +#include <drm/drm_of.h>
>  #include <drm/drm_panel.h>
>  
>  struct lvds_codec {
> @@ -118,7 +119,6 @@ static int lvds_codec_probe(struct platform_device *pdev)
>  	struct device_node *bus_node;
>  	struct drm_panel *panel;
>  	struct lvds_codec *lvds_codec;
> -	const char *mapping;
>  	int ret;
>  
>  	lvds_codec = devm_kzalloc(dev, sizeof(*lvds_codec), GFP_KERNEL);
> @@ -174,22 +174,15 @@ static int lvds_codec_probe(struct platform_device *pdev)
>  			return -ENXIO;
>  		}
>  
> -		ret = of_property_read_string(bus_node, "data-mapping",
> -					      &mapping);
> +		ret = drm_of_lvds_get_data_mapping(bus_node);
>  		of_node_put(bus_node);
> -		if (ret < 0) {
> +		if (ret == -ENODEV) {
>  			dev_warn(dev, "missing 'data-mapping' DT property\n");
> +		} else if (ret) {
> +			dev_err(dev, "invalid 'data-mapping' DT property\n");
> +			return ret;
>  		} else {
> -			if (!strcmp(mapping, "jeida-18")) {
> -				lvds_codec->bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG;
> -			} else if (!strcmp(mapping, "jeida-24")) {
> -				lvds_codec->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA;
> -			} else if (!strcmp(mapping, "vesa-24")) {
> -				lvds_codec->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG;
> -			} else {
> -				dev_err(dev, "invalid 'data-mapping' DT property\n");
> -				return -EINVAL;
> -			}
> +			lvds_codec->bus_format = ret;
>  			lvds_codec->bridge.funcs = &funcs_decoder;
>  		}
>  	}
> diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
> index 37c34146eea8..a9217bc18e8f 100644
> --- a/drivers/gpu/drm/drm_of.c
> +++ b/drivers/gpu/drm/drm_of.c
> @@ -402,3 +402,36 @@ int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
>  		DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS;
>  }
>  EXPORT_SYMBOL_GPL(drm_of_lvds_get_dual_link_pixel_order);
> +
> +/**
> + * drm_of_lvds_get_data_mapping - Get LVDS data mapping
> + * @port: DT port node of the LVDS source or sink
> + *
> + * Convert DT "data-mapping" property string value into media bus format value.
> + *
> + * Return:
> + * MEDIA_BUS_FMT_RGB666_1X7X3_SPWG - data-mapping is "jeida-18"
> + * MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA - data-mapping is "jeida-24"
> + * MEDIA_BUS_FMT_RGB888_1X7X4_SPWG - data-mapping is "vesa-24"
> + * -EINVAL - the "data-mapping" property is unsupported
> + * -ENODEV - the "data-mapping" property is missing
> + */
I tried to look at the output of this - it looks bad.

See the chapter "Return values" here: https://docs.kernel.org/doc-guide/kernel-doc.html
Sorry for not catching this during the first review.

	Sam

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping
  2021-10-12 20:05 ` Sam Ravnborg
@ 2021-10-12 22:45   ` Marek Vasut
  0 siblings, 0 replies; 5+ messages in thread
From: Marek Vasut @ 2021-10-12 22:45 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: dri-devel, Laurent Pinchart

On 10/12/21 10:05 PM, Sam Ravnborg wrote:

[...]

>> diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
>> index 37c34146eea8..a9217bc18e8f 100644
>> --- a/drivers/gpu/drm/drm_of.c
>> +++ b/drivers/gpu/drm/drm_of.c
>> @@ -402,3 +402,36 @@ int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
>>   		DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS;
>>   }
>>   EXPORT_SYMBOL_GPL(drm_of_lvds_get_dual_link_pixel_order);
>> +
>> +/**
>> + * drm_of_lvds_get_data_mapping - Get LVDS data mapping
>> + * @port: DT port node of the LVDS source or sink
>> + *
>> + * Convert DT "data-mapping" property string value into media bus format value.
>> + *
>> + * Return:
>> + * MEDIA_BUS_FMT_RGB666_1X7X3_SPWG - data-mapping is "jeida-18"
>> + * MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA - data-mapping is "jeida-24"
>> + * MEDIA_BUS_FMT_RGB888_1X7X4_SPWG - data-mapping is "vesa-24"
>> + * -EINVAL - the "data-mapping" property is unsupported
>> + * -ENODEV - the "data-mapping" property is missing
>> + */
> I tried to look at the output of this - it looks bad.
> 
> See the chapter "Return values" here: https://docs.kernel.org/doc-guide/kernel-doc.html
> Sorry for not catching this during the first review.

Should be fixed in V3.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-12 22:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-11 11:21 [PATCH v2] drm: of: Add drm_of_lvds_get_data_mapping Marek Vasut
2021-10-11 16:26 ` Sam Ravnborg
2021-10-11 16:40   ` Marek Vasut
2021-10-12 20:05 ` Sam Ravnborg
2021-10-12 22:45   ` Marek Vasut

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.