dri-devel Archive mirror
 help / color / mirror / Atom feed
From: "Paweł Anikiel" <panikiel@google.com>
To: airlied@gmail.com, akpm@linux-foundation.org,
	conor+dt@kernel.org,  daniel@ffwll.ch, dinguyen@kernel.org,
	hverkuil-cisco@xs4all.nl,  krzysztof.kozlowski+dt@linaro.org,
	maarten.lankhorst@linux.intel.com,  mchehab@kernel.org,
	mripard@kernel.org, robh+dt@kernel.org,  tzimmermann@suse.de
Cc: devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
	chromeos-krk-upstreaming@google.com,
	"Paweł Anikiel" <panikiel@google.com>
Subject: [PATCH v3 06/10] media: v4l2-mediabus: Add support for DisplayPort media bus
Date: Tue,  7 May 2024 15:54:09 +0000	[thread overview]
Message-ID: <20240507155413.266057-7-panikiel@google.com> (raw)
In-Reply-To: <20240507155413.266057-1-panikiel@google.com>

Add new definitions, a config struct, and a parser for the DisplayPort
media bus.

Signed-off-by: Paweł Anikiel <panikiel@google.com>
---
 drivers/media/v4l2-core/v4l2-fwnode.c | 38 +++++++++++++++++++++++++++
 include/media/v4l2-fwnode.h           |  5 ++++
 include/media/v4l2-mediabus.h         | 17 ++++++++++++
 3 files changed, 60 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
index 89c7192148df..49ea4d264eb2 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
@@ -67,6 +67,10 @@ static const struct v4l2_fwnode_bus_conv {
 		V4L2_FWNODE_BUS_TYPE_DPI,
 		V4L2_MBUS_DPI,
 		"DPI",
+	}, {
+		V4L2_FWNODE_BUS_TYPE_DISPLAYPORT,
+		V4L2_MBUS_DISPLAYPORT,
+		"DisplayPort",
 	}
 };
 
@@ -417,6 +421,33 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
 		vep->bus_type = V4L2_MBUS_CSI1;
 }
 
+static int
+v4l2_fwnode_endpoint_parse_dp_bus(struct fwnode_handle *fwnode,
+				  struct v4l2_fwnode_endpoint *vep,
+				  enum v4l2_mbus_type bus_type)
+{
+	struct v4l2_mbus_config_displayport *bus = &vep->bus.displayport;
+	u32 array[4];
+	int count;
+	int i;
+
+	count = fwnode_property_count_u32(fwnode, "data-lanes");
+	if (count < 0)
+		return count;
+	if (!(count == 1 || count == 2 || count == 4))
+		return -EINVAL;
+	fwnode_property_read_u32_array(fwnode, "data-lanes", array, count);
+
+	for (i = 0; i < count; i++)
+		bus->data_lanes[i] = array[i];
+	bus->num_data_lanes = count;
+	bus->multi_stream_support = fwnode_property_present(fwnode, "multi-stream-support");
+
+	vep->bus_type = V4L2_MBUS_DISPLAYPORT;
+
+	return 0;
+}
+
 static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
 					struct v4l2_fwnode_endpoint *vep)
 {
@@ -482,6 +513,13 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
 		v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep,
 							vep->bus_type);
 
+		break;
+	case V4L2_MBUS_DISPLAYPORT:
+		rval = v4l2_fwnode_endpoint_parse_dp_bus(fwnode, vep,
+							 vep->bus_type);
+		if (rval)
+			return rval;
+
 		break;
 	default:
 		pr_warn("unsupported bus type %u\n", mbus_type);
diff --git a/include/media/v4l2-fwnode.h b/include/media/v4l2-fwnode.h
index f7c57c776589..777a61015ca0 100644
--- a/include/media/v4l2-fwnode.h
+++ b/include/media/v4l2-fwnode.h
@@ -36,6 +36,8 @@
  * @bus.mipi_csi2: embedded &struct v4l2_mbus_config_mipi_csi2.
  *		   Used if the bus is MIPI Alliance's Camera Serial
  *		   Interface version 2 (MIPI CSI2).
+ * @bus.displayport: embedded &struct v4l2_mbus_config_displayport.
+ *		     Used if the bus is VESA DisplayPort.
  * @link_frequencies: array of supported link frequencies
  * @nr_of_link_frequencies: number of elements in link_frequenccies array
  */
@@ -46,6 +48,7 @@ struct v4l2_fwnode_endpoint {
 		struct v4l2_mbus_config_parallel parallel;
 		struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
 		struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
+		struct v4l2_mbus_config_displayport displayport;
 	} bus;
 	u64 *link_frequencies;
 	unsigned int nr_of_link_frequencies;
@@ -166,6 +169,7 @@ struct v4l2_fwnode_connector {
  * @V4L2_FWNODE_BUS_TYPE_PARALLEL: Camera Parallel Interface bus
  * @V4L2_FWNODE_BUS_TYPE_BT656: BT.656 video format bus-type
  * @V4L2_FWNODE_BUS_TYPE_DPI: Video Parallel Interface bus
+ * @V4L2_FWNODE_BUS_TYPE_DISPLAYPORT: DisplayPort bus
  * @NR_OF_V4L2_FWNODE_BUS_TYPE: Number of bus-types
  */
 enum v4l2_fwnode_bus_type {
@@ -177,6 +181,7 @@ enum v4l2_fwnode_bus_type {
 	V4L2_FWNODE_BUS_TYPE_PARALLEL,
 	V4L2_FWNODE_BUS_TYPE_BT656,
 	V4L2_FWNODE_BUS_TYPE_DPI,
+	V4L2_FWNODE_BUS_TYPE_DISPLAYPORT,
 	NR_OF_V4L2_FWNODE_BUS_TYPE
 };
 
diff --git a/include/media/v4l2-mediabus.h b/include/media/v4l2-mediabus.h
index 5bce6e423e94..74b5d96f5050 100644
--- a/include/media/v4l2-mediabus.h
+++ b/include/media/v4l2-mediabus.h
@@ -120,6 +120,18 @@ struct v4l2_mbus_config_mipi_csi1 {
 	unsigned char clock_lane;
 };
 
+/**
+ * struct v4l2_mbus_config_displayport - DisplayPort data bus configuration
+ * @data_lanes: an array of physical data lane indexes
+ * @num_data_lanes: number of data lanes
+ * @multi_stream_support: multi stream transport support
+ */
+struct v4l2_mbus_config_displayport {
+	unsigned char data_lanes[4];
+	unsigned char num_data_lanes;
+	bool multi_stream_support;
+};
+
 /**
  * enum v4l2_mbus_type - media bus type
  * @V4L2_MBUS_UNKNOWN:	unknown bus type, no V4L2 mediabus configuration
@@ -131,6 +143,7 @@ struct v4l2_mbus_config_mipi_csi1 {
  * @V4L2_MBUS_CSI2_DPHY: MIPI CSI-2 serial interface, with D-PHY
  * @V4L2_MBUS_CSI2_CPHY: MIPI CSI-2 serial interface, with C-PHY
  * @V4L2_MBUS_DPI:      MIPI VIDEO DPI interface
+ * @V4L2_MBUS_DISPLAYPORT: DisplayPort interface
  * @V4L2_MBUS_INVALID:	invalid bus type (keep as last)
  */
 enum v4l2_mbus_type {
@@ -142,6 +155,7 @@ enum v4l2_mbus_type {
 	V4L2_MBUS_CSI2_DPHY,
 	V4L2_MBUS_CSI2_CPHY,
 	V4L2_MBUS_DPI,
+	V4L2_MBUS_DISPLAYPORT,
 	V4L2_MBUS_INVALID,
 };
 
@@ -159,6 +173,8 @@ enum v4l2_mbus_type {
  * @bus.mipi_csi2: embedded &struct v4l2_mbus_config_mipi_csi2.
  *		   Used if the bus is MIPI Alliance's Camera Serial
  *		   Interface version 2 (MIPI CSI2).
+ * @bus.displayport: embedded &struct v4l2_mbus_config_displayport.
+ *	    Used if the bus is VESA DisplayPort interface.
  */
 struct v4l2_mbus_config {
 	enum v4l2_mbus_type type;
@@ -166,6 +182,7 @@ struct v4l2_mbus_config {
 		struct v4l2_mbus_config_parallel parallel;
 		struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
 		struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
+		struct v4l2_mbus_config_displayport displayport;
 	} bus;
 };
 
-- 
2.45.0.rc1.225.g2a3ae87e7f-goog


  parent reply	other threads:[~2024-05-07 15:55 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-07 15:54 [PATCH v3 00/10] Add Chameleon v3 video support Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 01/10] media: Add Chameleon v3 video interface driver Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 02/10] drm/dp_mst: Move DRM-independent structures to separate header Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 03/10] lib: Move DisplayPort CRC functions to common lib Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 04/10] drm/display: Add mask definitions for DP_PAYLOAD_ALLOCATE_* registers Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 05/10] media: dt-bindings: video-interfaces: Support DisplayPort MST Paweł Anikiel
2024-05-10 21:16   ` Rob Herring
2024-05-13 11:07     ` Paweł Anikiel
2024-05-13 14:56   ` Rob Herring (Arm)
2024-05-07 15:54 ` Paweł Anikiel [this message]
2024-05-07 15:54 ` [PATCH v3 07/10] media: intel: Add Displayport RX IP driver Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 08/10] media: dt-bindings: Add Chameleon v3 video interface Paweł Anikiel
2024-05-10 21:25   ` Rob Herring (Arm)
2024-05-07 15:54 ` [PATCH v3 09/10] media: dt-bindings: Add Intel Displayport RX IP Paweł Anikiel
2024-05-10 21:24   ` Rob Herring
2024-05-13 10:39     ` Paweł Anikiel
2024-05-07 15:54 ` [PATCH v3 10/10] ARM: dts: chameleonv3: Add video device nodes Paweł Anikiel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240507155413.266057-7-panikiel@google.com \
    --to=panikiel@google.com \
    --cc=airlied@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chromeos-krk-upstreaming@google.com \
    --cc=conor+dt@kernel.org \
    --cc=daniel@ffwll.ch \
    --cc=devicetree@vger.kernel.org \
    --cc=dinguyen@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mchehab@kernel.org \
    --cc=mripard@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).