ARM Sunxi Platform Development
 help / color / mirror / Atom feed
From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
To: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-sunxi@lists.linux.dev
Cc: Yong Deng <yong.deng@magewell.com>,
	Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: [PATCH v3 40/46] media: sun6i-csi: Add support for MIPI CSI-2 to the bridge code
Date: Fri, 11 Mar 2022 15:35:26 +0100	[thread overview]
Message-ID: <20220311143532.265091-41-paul.kocialkowski@bootlin.com> (raw)
In-Reply-To: <20220311143532.265091-1-paul.kocialkowski@bootlin.com>

Introduce MIPI CSI-2 support to the bridge with a new port, source
and hardware configuration helper.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 .../platform/sunxi/sun6i-csi/sun6i_csi.h      |  1 +
 .../sunxi/sun6i-csi/sun6i_csi_bridge.c        | 34 +++++++++++++++++--
 .../sunxi/sun6i-csi/sun6i_csi_bridge.h        |  1 +
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
index 5b267199e407..e3c1150d99f5 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
@@ -21,6 +21,7 @@
 
 enum sun6i_csi_port {
 	SUN6I_CSI_PORT_PARALLEL		= 0,
+	SUN6I_CSI_PORT_MIPI_CSI2	= 1,
 };
 
 struct sun6i_csi_buffer {
diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
index 94ed43ba049e..7675333f18dd 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
@@ -226,7 +226,7 @@ static void sun6i_csi_bridge_disable(struct sun6i_csi_device *csi_dev)
 }
 
 static void
-sun6i_csi_bridge_configure_interface(struct sun6i_csi_device *csi_dev)
+sun6i_csi_bridge_configure_parallel(struct sun6i_csi_device *csi_dev)
 {
 	struct device *dev = csi_dev->dev;
 	struct regmap *regmap = csi_dev->regmap;
@@ -316,6 +316,25 @@ sun6i_csi_bridge_configure_interface(struct sun6i_csi_device *csi_dev)
 	regmap_write(regmap, SUN6I_CSI_IF_CFG_REG, value);
 }
 
+static void
+sun6i_csi_bridge_configure_mipi_csi2(struct sun6i_csi_device *csi_dev)
+{
+	struct regmap *regmap = csi_dev->regmap;
+	u32 value = SUN6I_CSI_IF_CFG_IF_MIPI;
+	u32 field;
+
+	sun6i_csi_bridge_format(csi_dev, NULL, &field);
+
+	if (field == V4L2_FIELD_INTERLACED ||
+	    field == V4L2_FIELD_INTERLACED_TB ||
+	    field == V4L2_FIELD_INTERLACED_BT)
+		value |= SUN6I_CSI_IF_CFG_SRC_TYPE_INTERLACED;
+	else
+		value |= SUN6I_CSI_IF_CFG_SRC_TYPE_PROGRESSIVE;
+
+	regmap_write(regmap, SUN6I_CSI_IF_CFG_REG, value);
+}
+
 static void sun6i_csi_bridge_configure_format(struct sun6i_csi_device *csi_dev)
 {
 	struct regmap *regmap = csi_dev->regmap;
@@ -369,7 +388,11 @@ static void sun6i_csi_bridge_configure_format(struct sun6i_csi_device *csi_dev)
 
 static void sun6i_csi_bridge_configure(struct sun6i_csi_device *csi_dev)
 {
-	sun6i_csi_bridge_configure_interface(csi_dev);
+	if (csi_dev->bridge.source == &csi_dev->bridge.source_parallel)
+		sun6i_csi_bridge_configure_parallel(csi_dev);
+	else if (csi_dev->bridge.source == &csi_dev->bridge.source_mipi_csi2)
+		sun6i_csi_bridge_configure_mipi_csi2(csi_dev);
+
 	sun6i_csi_bridge_configure_format(csi_dev);
 }
 
@@ -568,6 +591,8 @@ static int sun6i_csi_bridge_link_validate(struct media_link *link)
 
 	if (source_subdev == bridge->source_parallel.subdev)
 		bridge->source = &bridge->source_parallel;
+	else if (source_subdev == bridge->source_mipi_csi2.subdev)
+		bridge->source = &bridge->source_mipi_csi2;
 
 	return 0;
 }
@@ -637,6 +662,9 @@ sun6i_csi_bridge_notifier_bound(struct v4l2_async_notifier *notifier,
 	case SUN6I_CSI_PORT_PARALLEL:
 		enabled = true;
 		break;
+	case SUN6I_CSI_PORT_MIPI_CSI2:
+		enabled = !bridge->source_parallel.expected;
+		break;
 	default:
 		break;
 	}
@@ -783,6 +811,8 @@ int sun6i_csi_bridge_setup(struct sun6i_csi_device *csi_dev)
 	sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_parallel,
 				      SUN6I_CSI_PORT_PARALLEL,
 				      parallel_mbus_types);
+	sun6i_csi_bridge_source_setup(csi_dev, &bridge->source_mipi_csi2,
+				      SUN6I_CSI_PORT_MIPI_CSI2, NULL);
 
 	ret = v4l2_async_nf_register(v4l2_dev, notifier);
 	if (ret) {
diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.h b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.h
index 66fe7942b191..dc30b1509b38 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.h
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.h
@@ -46,6 +46,7 @@ struct sun6i_csi_bridge {
 	struct mutex			lock; /* Mbus format lock. */
 
 	struct sun6i_csi_bridge_source	source_parallel;
+	struct sun6i_csi_bridge_source	source_mipi_csi2;
 	struct sun6i_csi_bridge_source	*source;
 };
 
-- 
2.35.1


  parent reply	other threads:[~2022-03-11 14:36 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-11 14:34 [PATCH v3 00/46] Allwinner A31/A83T MIPI CSI-2 and A31 ISP / CSI Rework Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 01/46] media: sun6i-csi: Define and use driver name and (reworked) description Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 02/46] media: sun6i-csi: Refactor main driver data structures Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 03/46] media: sun6i-csi: Grab bus clock instead of passing it to regmap Paul Kocialkowski
2022-03-15 19:22   ` Jernej Škrabec
2022-03-18  8:49     ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 04/46] media: sun6i-csi: Tidy up platform code Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 05/46] media: sun6i-csi: Always set exclusive module clock rate Paul Kocialkowski
2022-03-15 19:27   ` Jernej Škrabec
2022-03-11 14:34 ` [PATCH v3 06/46] media: sun6i-csi: Define and use variant to get " Paul Kocialkowski
2022-03-15 19:31   ` Jernej Škrabec
2022-03-18  8:54     ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 07/46] media: sun6i-csi: Use runtime pm for clocks and reset Paul Kocialkowski
2022-03-15 19:46   ` Jernej Škrabec
2022-03-18 16:15     ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 08/46] media: sun6i-csi: Tidy up Kconfig Paul Kocialkowski
2022-03-15 19:51   ` Jernej Škrabec
2022-03-11 14:34 ` [PATCH v3 09/46] media: sun6i-csi: Tidy up v4l2 code Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 10/46] media: sun6i-csi: Tidy up video code Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 11/46] media: sun6i-csi: Pass and store csi device directly in " Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 12/46] media: sun6i-csi: Register the media device after creation Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 13/46] media: sun6i-csi: Add media ops with link notify callback Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 14/46] media: sun6i-csi: Introduce and use video helper functions Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 15/46] media: sun6i-csi: Move csi buffer definition to main header file Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 16/46] media: sun6i-csi: Add bridge v4l2 subdev with port management Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 17/46] media: sun6i-csi: Rename sun6i_video to sun6i_csi_capture Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 18/46] media: sun6i-csi: Add capture state using vsync for page flip Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 19/46] media: sun6i-csi: Rework register definitions, invert misleading fields Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 20/46] media: sun6i-csi: Add dimensions and format helpers to capture Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 21/46] media: sun6i-csi: Implement address configuration without indirection Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 22/46] media: sun6i-csi: Split stream sequences and irq code in capture Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 23/46] media: sun6i-csi: Move power management to runtime pm " Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 24/46] media: sun6i-csi: Move register configuration to capture Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 25/46] media: sun6i-csi: Rework capture format management with helper Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 26/46] media: sun6i-csi: Remove custom format helper and rework configure Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 27/46] media: sun6i-csi: Add bridge dimensions and format helpers Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 28/46] media: sun6i-csi: Get mbus code from bridge instead of storing it Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 29/46] media: sun6i-csi: Tidy capture configure code Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 30/46] media: sun6i-csi: Introduce bridge format structure, list and helper Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 31/46] media: sun6i-csi: Introduce capture " Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 32/46] media: sun6i-csi: Configure registers from format tables Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 33/46] media: sun6i-csi: Introduce format match structure, list and helper Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 34/46] media: sun6i-csi: Implement capture link validation with logic Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 35/46] media: sun6i-csi: Get bridge subdev directly in capture stream ops Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 36/46] media: sun6i-csi: Move hardware control to the bridge Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 37/46] media: sun6i-csi: Unset bridge source on capture streamon fail Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 38/46] media: sun6i-csi: Rename the capture video device to sun6i-csi-capture Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 39/46] media: sun6i-csi: Cleanup headers and includes, update copyright lines Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski [this message]
2022-03-11 14:35 ` [PATCH v3 41/46] media: sun6i-csi: Only configure capture when streaming Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 42/46] media: sun6i-csi: Add extra checks to the interrupt routine Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 43/46] media: sun6i-csi: Request a shared interrupt Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 44/46] media: sun6i-csi: Detect the availability of the ISP Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 45/46] media: sun6i-csi: Add support for hooking to the isp devices Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 46/46] MAINTAINERS: Add myself as sun6i-csi maintainer and rename/move entry Paul Kocialkowski

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=20220311143532.265091-41-paul.kocialkowski@bootlin.com \
    --to=paul.kocialkowski@bootlin.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-sunxi@lists.linux.dev \
    --cc=mchehab@kernel.org \
    --cc=mripard@kernel.org \
    --cc=samuel@sholland.org \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=wens@csie.org \
    --cc=yong.deng@magewell.com \
    /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