From: Paul Elder <paul.elder@ideasonboard.com>
To: laurent.pinchart@ideasonboard.com
Cc: Paul Elder <paul.elder@ideasonboard.com>,
michael.riesch@collabora.com, xuhf@rock-chips.com,
stefan.klug@ideasonboard.com, kieran.bingham@ideasonboard.com,
dan.scally@ideasonboard.com, jacopo.mondi@ideasonboard.com,
linux-media@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org,
hverkuil+cisco@kernel.org, nicolas.dufresne@collabora.com,
ribalda@chromium.org, sakari.ailus@linux.intel.com
Subject: [RFC PATCH 4/6] media: rkisp2: Use shared media graph
Date: Fri, 19 Jun 2026 14:26:31 +0900 [thread overview]
Message-ID: <20260619052637.1110672-5-paul.elder@ideasonboard.com> (raw)
In-Reply-To: <20260619052637.1110672-1-paul.elder@ideasonboard.com>
Make rkisp2 use shared media graph. This allows it to be in the same
media graph as rkcif on the rk3588, opening to door to allowing the
entire capture pipeline to run in inline mode.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
---
.../platform/rockchip/rkisp2/rkisp2-common.h | 2 +-
.../platform/rockchip/rkisp2/rkisp2-dev.c | 42 ++++++++++---------
2 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp2/rkisp2-common.h b/drivers/media/platform/rockchip/rkisp2/rkisp2-common.h
index 1eafdb5db5d8..ecf0f5e22064 100644
--- a/drivers/media/platform/rockchip/rkisp2/rkisp2-common.h
+++ b/drivers/media/platform/rockchip/rkisp2/rkisp2-common.h
@@ -432,7 +432,7 @@ struct rkisp2_device {
struct regmap *gasket;
unsigned int gasket_id;
struct v4l2_device v4l2_dev;
- struct media_device media_dev;
+ struct media_device *media_dev;
struct v4l2_async_notifier notifier;
struct v4l2_subdev *source;
struct rkisp2_isp isp;
diff --git a/drivers/media/platform/rockchip/rkisp2/rkisp2-dev.c b/drivers/media/platform/rockchip/rkisp2/rkisp2-dev.c
index 4042bf43d287..f74b7aae3159 100644
--- a/drivers/media/platform/rockchip/rkisp2/rkisp2-dev.c
+++ b/drivers/media/platform/rockchip/rkisp2/rkisp2-dev.c
@@ -20,6 +20,7 @@
#include <linux/platform_device.h>
#include <linux/pinctrl/consumer.h>
#include <linux/pm_runtime.h>
+#include <media/mc-shared-graph.h>
#include <media/v4l2-fwnode.h>
#include <media/v4l2-mc.h>
@@ -117,7 +118,7 @@ static int rkisp2_create_links(struct rkisp2_device *rkisp2)
ret = media_create_pad_link(
source, 0, &rkisp2->isp.sd.entity,
RKISP2_ISP_PAD_SINK_VIDEO,
- MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE);
+ MEDIA_LNK_FL_ENABLED);
} else {
ret = media_create_pad_link(source, 0,
&rkisp2->isp.sd.entity,
@@ -147,6 +148,12 @@ static int rkisp2_create_links(struct rkisp2_device *rkisp2)
if (ret)
return ret;
+ ret = media_device_shared_join_link_sink(rkisp2->media_dev, rkisp2->dev,
+ &rkisp2->isp.sd.entity,
+ RKISP2_ISP_PAD_SINK_VIDEO, 0);
+ if (ret)
+ return ret;
+
return 0;
}
@@ -233,6 +240,7 @@ static int rkisp2_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct rkisp2_device *rkisp2;
struct v4l2_device *v4l2_dev;
+ struct media_device *mdev;
unsigned int i;
int ret, irq;
u32 cif_id;
@@ -298,29 +306,28 @@ static int rkisp2_probe(struct platform_device *pdev)
pm_runtime_put(&pdev->dev);
- rkisp2->media_dev.hw_revision = info->isp_ver;
- strscpy(rkisp2->media_dev.model, RKISP2_DRIVER_NAME,
- sizeof(rkisp2->media_dev.model));
- rkisp2->media_dev.dev = &pdev->dev;
- strscpy(rkisp2->media_dev.bus_info, RKISP2_BUS_INFO,
- sizeof(rkisp2->media_dev.bus_info));
- media_device_init(&rkisp2->media_dev);
+ mdev = media_device_shared_join(rkisp2->dev);
+ if (IS_ERR(mdev))
+ goto err_pm_runtime_disable;
+
+ rkisp2->media_dev = mdev;
+ rkisp2->media_dev->hw_revision = info->isp_ver;
+ strscpy(rkisp2->media_dev->model, RKISP2_DRIVER_NAME,
+ sizeof(rkisp2->media_dev->model));
+ strscpy(rkisp2->media_dev->bus_info, RKISP2_BUS_INFO,
+ sizeof(rkisp2->media_dev->bus_info));
v4l2_dev = &rkisp2->v4l2_dev;
- v4l2_dev->mdev = &rkisp2->media_dev;
+ v4l2_dev->mdev = rkisp2->media_dev;
strscpy(v4l2_dev->name, RKISP2_DRIVER_NAME, sizeof(v4l2_dev->name));
ret = v4l2_device_register(rkisp2->dev, &rkisp2->v4l2_dev);
if (ret)
goto err_media_dev_cleanup;
- ret = media_device_register(&rkisp2->media_dev);
- if (ret)
- goto err_unreg_v4l2_dev;
-
ret = rkisp2_entities_register(rkisp2);
if (ret)
- goto err_unreg_media_dev;
+ goto err_unreg_v4l2_dev;
ret = v4l2_device_register_subdev_nodes(&rkisp2->v4l2_dev);
if (ret)
@@ -332,12 +339,10 @@ static int rkisp2_probe(struct platform_device *pdev)
err_unreg_entities:
rkisp2_entities_unregister(rkisp2);
-err_unreg_media_dev:
- media_device_unregister(&rkisp2->media_dev);
err_unreg_v4l2_dev:
v4l2_device_unregister(&rkisp2->v4l2_dev);
err_media_dev_cleanup:
- media_device_cleanup(&rkisp2->media_dev);
+ media_device_shared_leave(rkisp2->media_dev, rkisp2->dev);
err_pm_runtime_disable:
pm_runtime_disable(&pdev->dev);
return ret;
@@ -353,10 +358,9 @@ static void rkisp2_remove(struct platform_device *pdev)
rkisp2_entities_unregister(rkisp2);
rkisp2_debug_cleanup(rkisp2);
- media_device_unregister(&rkisp2->media_dev);
v4l2_device_unregister(&rkisp2->v4l2_dev);
- media_device_cleanup(&rkisp2->media_dev);
+ media_device_shared_leave(rkisp2->media_dev, rkisp2->dev);
pm_runtime_disable(&pdev->dev);
}
--
2.47.2
next prev parent reply other threads:[~2026-06-19 5:27 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-19 5:26 [RFC PATCH 0/6] Add Shared Media Graph API Paul Elder
2026-06-19 5:26 ` [RFC PATCH 1/6] media: mc: Implement shared media graph Paul Elder
2026-06-24 4:47 ` Paul Elder
2026-06-24 10:39 ` Kieran Bingham
2026-06-25 8:23 ` Paul Elder
2026-07-10 20:42 ` Michael Riesch
2026-07-10 21:28 ` Nicolas Dufresne
2026-07-10 20:23 ` Michael Riesch
2026-07-13 1:55 ` Paul Elder
2026-07-13 8:26 ` Michael Riesch
2026-07-10 21:50 ` Nicolas Dufresne
2026-06-19 5:26 ` [RFC PATCH 2/6] arm64: dts: rockchip: rk3588s-base: Connect vicap and isps Paul Elder
2026-06-19 5:26 ` [RFC PATCH 3/6] media: rkcif: Use shared media graph Paul Elder
2026-06-19 5:26 ` Paul Elder [this message]
2026-06-19 5:26 ` [RFC PATCH 5/6] media: rkcif: Implement inline mode Paul Elder
2026-06-19 5:26 ` [RFC PATCH 6/6] media: rkisp2: " Paul Elder
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=20260619052637.1110672-5-paul.elder@ideasonboard.com \
--to=paul.elder@ideasonboard.com \
--cc=dan.scally@ideasonboard.com \
--cc=hverkuil+cisco@kernel.org \
--cc=jacopo.mondi@ideasonboard.com \
--cc=kieran.bingham@ideasonboard.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-rockchip@lists.infradead.org \
--cc=michael.riesch@collabora.com \
--cc=nicolas.dufresne@collabora.com \
--cc=ribalda@chromium.org \
--cc=sakari.ailus@linux.intel.com \
--cc=stefan.klug@ideasonboard.com \
--cc=xuhf@rock-chips.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