From: Pavel Machek <pavel@ucw.cz>
To: Sebastian Reichel <sre@kernel.org>
Cc: Sakari Ailus <sakari.ailus@iki.fi>,
ivo.g.dimitrov.75@gmail.com, pali.rohar@gmail.com,
linux-media@vger.kernel.org, galak@codeaurora.org,
mchehab@osg.samsung.com, linux-kernel@vger.kernel.org
Subject: Re: [RFC/PATCH] media: Add video bus switch
Date: Thu, 22 Dec 2016 23:42:26 +0100 [thread overview]
Message-ID: <20161222224226.GB31151@amd> (raw)
In-Reply-To: <20161222143244.ykza4wdxmop2t7bg@earth>
[-- Attachment #1: Type: text/plain, Size: 6562 bytes --]
On Thu 2016-12-22 15:32:44, Sebastian Reichel wrote:
> Hi Pavel,
>
> On Thu, Dec 22, 2016 at 02:39:38PM +0100, Pavel Machek wrote:
> > N900 contains front and back camera, with a switch between the
> > two. This adds support for the swich component.
> >
> > Signed-off-by: Sebastian Reichel <sre@kernel.org>
> > Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>
> > Signed-off-by: Pavel Machek <pavel@ucw.cz>
> >
> > --
> >
> > I see this needs dts documentation, anything else than needs to be
> > done?
>
> Yes. This driver takes care of the switch gpio, but the cameras also
> use different bus settings. Currently omap3isp gets the bus-settings
> from the link connected to the CCP2 port in DT at probe time (*).
>
> So there are two general problems:
>
> 1. Settings must be applied before the streaming starts instead of
> at probe time, since the settings may change (based one the selected
> camera). That should be fairly easy to implement by just moving the
> code to the s_stream callback as far as I can see.
>
> 2. omap3isp should try to get the bus settings from using a callback
> in the connected driver instead of loading it from DT. Then the
> video-bus-switch can load the bus-settings from its downstream links
> in DT and propagate the correct ones to omap3isp based on the
> selected port. The DT loading part should actually remain in omap3isp
> as fallback, in case it does not find a callback in the connected driver.
> That way everything is backward compatible and the DT variant is
> nice for 1-on-1 scenarios.
So... did I understood it correctly? (Needs some work to be done...)
diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
index 45c69ed..1f44da1 100644
--- a/drivers/media/platform/omap3isp/isp.c
+++ b/drivers/media/platform/omap3isp/isp.c
@@ -702,6 +704,33 @@ static int isp_pipeline_enable(struct isp_pipeline *pipe,
entity = &pipe->output->video.entity;
while (1) {
+ struct v4l2_of_endpoint vep;
+ pad = &entity->pads[0];
+ if (!(pad->flags & MEDIA_PAD_FL_SINK))
+ break;
+
+ pad = media_entity_remote_pad(pad);
+ if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
+ break;
+
+ entity = pad->entity;
+ subdev = media_entity_to_v4l2_subdev(entity);
+
+ printk("Entity = %p\n", entity);
+ ret = v4l2_subdev_call(subdev, video, g_endpoint_config, &vep);
+ /* Is there better method than walking a list?
+ Can I easily get dev and isd pointers here? */
+#if 0
+ if (ret == 0) {
+ printk("success\n");
+ /* notifier->subdevs[notifier->num_subdevs] ... contains isd */
+ isp_endpoint_to_buscfg(dev, vep, isd->bus);
+ }
+#endif
+ }
+
+ entity = &pipe->output->video.entity;
+ while (1) {
pad = &entity->pads[0];
if (!(pad->flags & MEDIA_PAD_FL_SINK))
break;
@@ -2099,27 +2128,8 @@ static void isp_of_parse_node_csi2(struct device *dev,
buscfg->bus.csi2.crc = 1;
}
-static int isp_of_parse_node_endpoint(struct device *dev,
- struct device_node *node,
- struct isp_async_subdev *isd)
+static int isp_endpoint_to_buscfg(struct device *dev, struct v4l2_of_endpoint vep, struct isp_bus_cfg *buscfg)
{
- struct isp_bus_cfg *buscfg;
- struct v4l2_of_endpoint vep;
- int ret;
-
- isd->bus = devm_kzalloc(dev, sizeof(*isd->bus), GFP_KERNEL);
- if (!isd->bus)
- return -ENOMEM;
-
- buscfg = isd->bus;
-
- ret = v4l2_of_parse_endpoint(node, &vep);
- if (ret)
- return ret;
-
- dev_dbg(dev, "parsing endpoint %s, interface %u\n", node->full_name,
- vep.base.port);
-
switch (vep.base.port) {
case ISP_OF_PHY_PARALLEL:
buscfg->interface = ISP_INTERFACE_PARALLEL;
@@ -2147,10 +2157,35 @@ static int isp_of_parse_node_endpoint(struct device *dev,
break;
default:
+ return -1;
+ }
+ return 0;
+}
+
+static int isp_of_parse_node_endpoint(struct device *dev,
+ struct device_node *node,
+ struct isp_async_subdev *isd)
+{
+ struct isp_bus_cfg *buscfg;
+ struct v4l2_of_endpoint vep;
+ int ret;
+
+ isd->bus = devm_kzalloc(dev, sizeof(*isd->bus), GFP_KERNEL);
+ if (!isd->bus)
+ return -ENOMEM;
+
+ buscfg = isd->bus;
+
+ ret = v4l2_of_parse_endpoint(node, &vep);
+ if (ret)
+ return ret;
+
+ dev_dbg(dev, "parsing endpoint %s, interface %u\n", node->full_name,
+ vep.base.port);
+
+ if (isp_endpoint_to_buscfg(dev, vep, buscfg))
dev_warn(dev, "%s: invalid interface %u\n", node->full_name,
vep.base.port);
- break;
- }
return 0;
}
@@ -2262,6 +2297,10 @@ static int isp_of_parse_nodes(struct device *dev,
}
return notifier->num_subdevs;
+
+error:
+ of_node_put(node);
+ return -EINVAL;
}
static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async,
diff --git a/drivers/media/platform/video-bus-switch.c b/drivers/media/platform/video-bus-switch.c
index 1a5d944..3a2d442 100644
--- a/drivers/media/platform/video-bus-switch.c
+++ b/drivers/media/platform/video-bus-switch.c
@@ -247,12 +247,21 @@ static int vbs_s_stream(struct v4l2_subdev *sd, int enable)
{
struct v4l2_subdev *subdev = vbs_get_remote_subdev(sd);
+ /* FIXME: we need to set the GPIO here */
+
if (IS_ERR(subdev))
return PTR_ERR(subdev);
return v4l2_subdev_call(subdev, video, s_stream, enable);
}
+static int vbs_g_endpoint_config(struct v4l2_subdev *sd, struct isp_bus_cfg *cfg)
+{
+ printk("vbs_g_endpoint_config...\n");
+ return 0;
+}
+
+
static const struct v4l2_subdev_internal_ops vbs_internal_ops = {
.registered = &vbs_registered,
};
@@ -265,6 +274,7 @@ static const struct media_entity_operations vbs_media_ops = {
/* subdev video operations */
static const struct v4l2_subdev_video_ops vbs_video_ops = {
.s_stream = vbs_s_stream,
+ .g_endpoint_config = vbs_g_endpoint_config,
};
static const struct v4l2_subdev_ops vbs_ops = {
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index cf778c5..30457b0 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -415,6 +415,8 @@ struct v4l2_subdev_video_ops {
const struct v4l2_mbus_config *cfg);
int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf,
unsigned int *size);
+ int (*g_endpoint_config)(struct v4l2_subdev *sd,
+ struct v4l2_of_endpoint *cfg);
};
/**
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
next prev parent reply other threads:[~2016-12-22 22:42 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-23 20:03 [PATCH v4] media: Driver for Toshiba et8ek8 5MP sensor Pavel Machek
2016-10-23 20:19 ` Sakari Ailus
2016-10-23 20:33 ` Pavel Machek
2016-10-31 22:54 ` Sakari Ailus
2016-11-01 6:36 ` Ivaylo Dimitrov
2016-11-01 20:11 ` Sakari Ailus
2016-11-01 22:14 ` Ivaylo Dimitrov
2016-11-02 8:15 ` Pavel Machek
2016-11-02 8:16 ` Ivaylo Dimitrov
2016-11-01 15:39 ` Pavel Machek
2016-11-01 20:08 ` Sakari Ailus
2016-11-03 8:14 ` Pavel Machek
2016-11-03 22:48 ` Sebastian Reichel
2016-11-03 23:05 ` Sakari Ailus
2016-11-03 23:40 ` Ivaylo Dimitrov
2016-11-04 0:05 ` Sebastian Reichel
2016-11-14 21:58 ` Sakari Ailus
2016-11-15 0:53 ` Sebastian Reichel
2016-11-15 10:54 ` Pavel Machek
2016-11-15 22:55 ` Sakari Ailus
2016-10-23 20:40 ` Pavel Machek
2016-10-31 22:58 ` Sakari Ailus
2016-11-02 0:45 ` Laurent Pinchart
2016-10-23 20:47 ` Pavel Machek
2016-12-13 21:05 ` Pavel Machek
2016-12-18 21:56 ` Sakari Ailus
2016-11-19 23:29 ` Sakari Ailus
2016-11-20 10:02 ` Pavel Machek
2016-11-20 15:20 ` Pavel Machek
2016-11-20 15:21 ` Pavel Machek
2016-11-20 15:31 ` Pavel Machek
2016-12-14 12:24 ` [PATCH v5] " Pavel Machek
2016-12-14 13:03 ` Pali Rohár
2016-12-14 15:52 ` Ivaylo Dimitrov
2016-12-14 20:12 ` Pavel Machek
2016-12-14 22:07 ` Pali Rohár
2016-12-14 22:35 ` Pavel Machek
2016-12-18 22:01 ` Sakari Ailus
2016-12-20 12:37 ` Pavel Machek
2016-12-20 14:01 ` Sakari Ailus
2016-12-20 22:42 ` Pavel Machek
2016-12-21 13:42 ` Sakari Ailus
2016-12-21 22:42 ` Pavel Machek
2016-12-21 23:29 ` Sakari Ailus
2016-12-22 9:34 ` Pavel Machek
2016-12-22 10:01 ` [PATCH v6] " Pavel Machek
2016-12-22 13:39 ` [RFC/PATCH] media: Add video bus switch Pavel Machek
2016-12-22 14:32 ` Sebastian Reichel
2016-12-22 20:53 ` Pavel Machek
2016-12-22 23:11 ` Sebastian Reichel
2016-12-22 22:42 ` Pavel Machek [this message]
2016-12-22 23:40 ` Sebastian Reichel
2016-12-23 11:42 ` Pavel Machek
2016-12-23 18:53 ` Ivaylo Dimitrov
2016-12-23 20:56 ` Pavel Machek
2016-12-24 14:26 ` Pavel Machek
2016-12-24 14:43 ` Pavel Machek
2016-12-24 15:20 ` [PATCH] " Pavel Machek
2016-12-24 18:35 ` kbuild test robot
2017-01-12 11:17 ` Pavel Machek
2017-02-03 22:25 ` Sakari Ailus
2017-02-05 22:16 ` Pavel Machek
2017-02-05 22:44 ` Sakari Ailus
2017-02-03 12:35 ` [PATCH] devicetree: " Pavel Machek
2017-02-03 12:35 ` Pavel Machek
2017-02-03 13:07 ` Sakari Ailus
2017-02-03 21:06 ` Pavel Machek
2017-02-03 21:34 ` Sakari Ailus
2017-02-04 21:56 ` Pavel Machek
2017-02-04 22:33 ` Sakari Ailus
2017-02-04 22:33 ` Sakari Ailus
2017-02-05 21:12 ` Pavel Machek
2017-02-05 23:40 ` Sebastian Reichel
2017-02-05 23:40 ` Sebastian Reichel
2017-02-06 9:37 ` [PATCH] media: add operation to get configuration of "the other side" of the link Pavel Machek
2017-12-19 15:43 ` Sakari Ailus
2017-12-20 17:54 ` [PATCH] devicetree: Add video bus switch Laurent Pinchart
2017-12-20 17:54 ` Laurent Pinchart
2017-12-21 9:05 ` Sakari Ailus
2017-12-21 9:05 ` Sakari Ailus
2017-12-21 16:36 ` Ivaylo Dimitrov
2017-12-21 16:36 ` Ivaylo Dimitrov
2017-12-22 9:24 ` Pavel Machek
2017-12-22 9:24 ` Pavel Machek
2017-02-03 13:32 ` Pali Rohár
2017-02-03 21:07 ` Pavel Machek
2017-02-03 21:07 ` Pavel Machek
2017-02-04 1:04 ` Sebastian Reichel
2017-02-04 1:04 ` Sebastian Reichel
2017-02-08 21:36 ` Rob Herring
2017-02-08 22:30 ` Pavel Machek
2017-02-09 23:02 ` Rob Herring
2017-02-09 23:03 ` Rob Herring
[not found] ` <CAL_JsqLfbAxBbXOyK0QOCc=wPe6=a+qyrAwtdbt3DtspK6oiaw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-10 19:54 ` Pavel Machek
2017-02-10 19:54 ` Pavel Machek
2017-02-10 22:17 ` Sakari Ailus
2017-02-10 22:17 ` Sakari Ailus
[not found] ` <20170210221742.GI13854-S+BSfZ9RZZmRSg0ZkenSGLdO1Tsj/99ntUK59QYPAWc@public.gmane.org>
2017-02-13 9:54 ` Pavel Machek
2017-02-13 9:54 ` Pavel Machek
2017-02-13 10:20 ` Sakari Ailus
2017-02-13 10:20 ` Sakari Ailus
2017-03-02 8:54 ` Pavel Machek
2017-02-08 22:34 ` Pavel Machek
2017-02-09 22:58 ` Rob Herring
[not found] ` <CAL_JsqK2RHLoLc_ikHzP2B5_Lof2g9NG+zvamGe4o1ko1ggGQA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-10 21:17 ` Pavel Machek
2017-02-10 21:17 ` Pavel Machek
2016-12-27 9:26 ` [PATCH v6] media: Driver for Toshiba et8ek8 5MP sensor Sakari Ailus
2016-12-27 20:45 ` Pavel Machek
2016-12-27 20:59 ` [PATCH] mark myself as mainainer for camera on N900 Pavel Machek
2016-12-27 23:57 ` Sebastian Reichel
2017-01-25 13:48 ` Sakari Ailus
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=20161222224226.GB31151@amd \
--to=pavel@ucw.cz \
--cc=galak@codeaurora.org \
--cc=ivo.g.dimitrov.75@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@osg.samsung.com \
--cc=pali.rohar@gmail.com \
--cc=sakari.ailus@iki.fi \
--cc=sre@kernel.org \
/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 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.