From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
Mauro Carvalho Chehab <mchehab@infradead.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hans Verkuil <hans.verkuil@cisco.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Prabhakar Lad <prabhakar.csengg@gmail.com>,
Haneen Mohammed <hamohammed.sa@gmail.com>,
Tapasweni Pathak <tapaswenipathak@gmail.com>,
Boris BREZILLON <boris.brezillon@free-electrons.com>,
Mahati Chamarthy <mahati.chamarthy@gmail.com>,
Javier Martinez Canillas <javier@osg.samsung.com>,
devel@driverdev.osuosl.org
Subject: Re: [PATCH v8 33/55] [media] omap3/omap4/davinci: get rid of MEDIA_ENT_T_V4L2_SUBDEV abuse
Date: Sun, 06 Dec 2015 04:08:17 +0200 [thread overview]
Message-ID: <1976836.7xiRZsLFCP@avalon> (raw)
In-Reply-To: <03117f6ceda60bd4f2c4263a4253c5e21bade234.1440902901.git.mchehab@osg.samsung.com>
Hi Mauro,
Thank you for the patch.
On Sunday 30 August 2015 00:06:44 Mauro Carvalho Chehab wrote:
> On omap3/omap4/davinci drivers, MEDIA_ENT_T_V4L2_SUBDEV macro is
> abused in order to "simplify" the pad checks.
As explained in a couple of other replies to similar patches, it's not a hack
:-)
> Basically, it does a logical or of this macro, in order to check
> for a local index and if the entity is either a subdev or not.
>
> As we'll get rid of MEDIA_ENT_T_V4L2_SUBDEV macro,
This is the reason for this patch, and I agree with it.
> replace it by 2 << 16 where it occurs, and add a note saying that the code
> there is actually a hack.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
>
> diff --git a/drivers/media/platform/omap3isp/ispccdc.c
> b/drivers/media/platform/omap3isp/ispccdc.c index
> 9a811f5741fa..f0e530c98188 100644
> --- a/drivers/media/platform/omap3isp/ispccdc.c
> +++ b/drivers/media/platform/omap3isp/ispccdc.c
> @@ -2513,9 +2513,14 @@ static int ccdc_link_setup(struct media_entity
> *entity, struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
> struct isp_device *isp = to_isp_device(ccdc);
> + int index = local->index;
The index can never be negative, you can use unsigned int.
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case CCDC_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + /* FIXME: this is actually a hack! */
Please, let's not introduce a hack to replace valid code. I'm certainly fine
with removing usage of MEDIA_ENT_T_V4L2_SUBDEV, but drivers should be modified
cleanly.
If you rename the index variable to link and use a macro (I would call it
LINK_TO_SUBDEV for instance) instead of 2 << 16 the implementation wouldn't be
that bad, as what the switch operates on is the link, not the pad. I would
also create a LINK_TO_DEVNODE macro, even if it evaluates to 0, to clearly
label each case.
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
Why 2 << 16 and not 1 << 16 ?
Same comments for all the other files below (but please see the very end for
one last comment).
> + switch (index) {
> + case CCDC_PAD_SINK | 2 << 16:
> /* Read from the sensor (parallel interface), CCP2, CSI2a or
> * CSI2c.
> */
> @@ -2543,7 +2548,7 @@ static int ccdc_link_setup(struct media_entity
> *entity, * Revisit this when it will be implemented, and return -EBUSY for
> now. */
>
> - case CCDC_PAD_SOURCE_VP | MEDIA_ENT_T_V4L2_SUBDEV:
> + case CCDC_PAD_SOURCE_VP | 2 << 16:
> /* Write to preview engine, histogram and H3A. When none of
> * those links are active, the video port can be disabled.
> */
> @@ -2556,7 +2561,7 @@ static int ccdc_link_setup(struct media_entity
> *entity, }
> break;
>
> - case CCDC_PAD_SOURCE_OF | MEDIA_ENT_T_DEVNODE:
> + case CCDC_PAD_SOURCE_OF:
> /* Write to memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (ccdc->output & ~CCDC_OUTPUT_MEMORY)
> @@ -2567,7 +2572,7 @@ static int ccdc_link_setup(struct media_entity
> *entity, }
> break;
>
> - case CCDC_PAD_SOURCE_OF | MEDIA_ENT_T_V4L2_SUBDEV:
> + case CCDC_PAD_SOURCE_OF | 2 << 16:
> /* Write to resizer */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (ccdc->output & ~CCDC_OUTPUT_RESIZER)
> diff --git a/drivers/media/platform/omap3isp/ispccp2.c
> b/drivers/media/platform/omap3isp/ispccp2.c index
> 6ec7d104ab75..ae3038e643cc 100644
> --- a/drivers/media/platform/omap3isp/ispccp2.c
> +++ b/drivers/media/platform/omap3isp/ispccp2.c
> @@ -956,9 +956,14 @@ static int ccp2_link_setup(struct media_entity *entity,
> {
> struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case CCP2_PAD_SINK | MEDIA_ENT_T_DEVNODE:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case CCP2_PAD_SINK:
> /* read from memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (ccp2->input == CCP2_INPUT_SENSOR)
> @@ -970,7 +975,7 @@ static int ccp2_link_setup(struct media_entity *entity,
> }
> break;
>
> - case CCP2_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + case CCP2_PAD_SINK | 2 << 16:
> /* read from sensor/phy */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (ccp2->input == CCP2_INPUT_MEMORY)
> @@ -981,7 +986,7 @@ static int ccp2_link_setup(struct media_entity *entity,
> ccp2->input = CCP2_INPUT_NONE;
> } break;
>
> - case CCP2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case CCP2_PAD_SOURCE | 2 << 16:
> /* write to video port/ccdc */
> if (flags & MEDIA_LNK_FL_ENABLED)
> ccp2->output = CCP2_OUTPUT_CCDC;
> diff --git a/drivers/media/platform/omap3isp/ispcsi2.c
> b/drivers/media/platform/omap3isp/ispcsi2.c index
> 0fb057a74f69..b1617f7efdee 100644
> --- a/drivers/media/platform/omap3isp/ispcsi2.c
> +++ b/drivers/media/platform/omap3isp/ispcsi2.c
> @@ -1144,14 +1144,19 @@ static int csi2_link_setup(struct media_entity
> *entity, struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
> struct isp_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
> + int index = local->index;
>
> /*
> * The ISP core doesn't support pipelines with multiple video outputs.
> * Revisit this when it will be implemented, and return -EBUSY for now.
> */
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case CSI2_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case CSI2_PAD_SOURCE:
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (csi2->output & ~CSI2_OUTPUT_MEMORY)
> return -EBUSY;
> @@ -1161,7 +1166,7 @@ static int csi2_link_setup(struct media_entity
> *entity, }
> break;
>
> - case CSI2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case CSI2_PAD_SOURCE | 2 << 16:
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (csi2->output & ~CSI2_OUTPUT_CCDC)
> return -EBUSY;
> diff --git a/drivers/media/platform/omap3isp/isppreview.c
> b/drivers/media/platform/omap3isp/isppreview.c index
> 6986d2f65c19..cfb2debb02bf 100644
> --- a/drivers/media/platform/omap3isp/isppreview.c
> +++ b/drivers/media/platform/omap3isp/isppreview.c
> @@ -2144,9 +2144,14 @@ static int preview_link_setup(struct media_entity
> *entity, {
> struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case PREV_PAD_SINK | MEDIA_ENT_T_DEVNODE:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case PREV_PAD_SINK:
> /* read from memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (prev->input == PREVIEW_INPUT_CCDC)
> @@ -2158,7 +2163,7 @@ static int preview_link_setup(struct media_entity
> *entity, }
> break;
>
> - case PREV_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + case PREV_PAD_SINK | 2 << 16:
> /* read from ccdc */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (prev->input == PREVIEW_INPUT_MEMORY)
> @@ -2175,7 +2180,7 @@ static int preview_link_setup(struct media_entity
> *entity, * Revisit this when it will be implemented, and return -EBUSY for
> now. */
>
> - case PREV_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + case PREV_PAD_SOURCE:
> /* write to memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (prev->output & ~PREVIEW_OUTPUT_MEMORY)
> @@ -2186,7 +2191,7 @@ static int preview_link_setup(struct media_entity
> *entity, }
> break;
>
> - case PREV_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case PREV_PAD_SOURCE | 2 << 16:
> /* write to resizer */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (prev->output & ~PREVIEW_OUTPUT_RESIZER)
> diff --git a/drivers/media/platform/omap3isp/ispresizer.c
> b/drivers/media/platform/omap3isp/ispresizer.c index
> 249af7f524f9..e3ecf1787fc4 100644
> --- a/drivers/media/platform/omap3isp/ispresizer.c
> +++ b/drivers/media/platform/omap3isp/ispresizer.c
> @@ -1623,9 +1623,14 @@ static int resizer_link_setup(struct media_entity
> *entity, {
> struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct isp_res_device *res = v4l2_get_subdevdata(sd);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case RESZ_PAD_SINK | MEDIA_ENT_T_DEVNODE:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case RESZ_PAD_SINK:
> /* read from memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (res->input == RESIZER_INPUT_VP)
> @@ -1637,7 +1642,7 @@ static int resizer_link_setup(struct media_entity
> *entity, }
> break;
>
> - case RESZ_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + case RESZ_PAD_SINK | 2 << 16:
> /* read from ccdc or previewer */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (res->input == RESIZER_INPUT_MEMORY)
> @@ -1649,7 +1654,7 @@ static int resizer_link_setup(struct media_entity
> *entity, }
> break;
>
> - case RESZ_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + case RESZ_PAD_SOURCE:
> /* resizer always write to memory */
> break;
>
> diff --git a/drivers/staging/media/davinci_vpfe/dm365_ipipeif.c
> b/drivers/staging/media/davinci_vpfe/dm365_ipipeif.c index
> d96bdaaae50e..b66584ecb693 100644
> --- a/drivers/staging/media/davinci_vpfe/dm365_ipipeif.c
> +++ b/drivers/staging/media/davinci_vpfe/dm365_ipipeif.c
> @@ -885,9 +885,14 @@ ipipeif_link_setup(struct media_entity *entity, const
> struct media_pad *local, struct v4l2_subdev *sd =
> media_entity_to_v4l2_subdev(entity);
> struct vpfe_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
> struct vpfe_device *vpfe = to_vpfe_device(ipipeif);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case IPIPEIF_PAD_SINK | MEDIA_ENT_T_DEVNODE:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case IPIPEIF_PAD_SINK:
> /* Single shot mode */
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> ipipeif->input = IPIPEIF_INPUT_NONE;
> @@ -896,7 +901,7 @@ ipipeif_link_setup(struct media_entity *entity, const
> struct media_pad *local, ipipeif->input = IPIPEIF_INPUT_MEMORY;
> break;
>
> - case IPIPEIF_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + case IPIPEIF_PAD_SINK | 2 << 16:
> /* read from isif */
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> ipipeif->input = IPIPEIF_INPUT_NONE;
> @@ -908,7 +913,7 @@ ipipeif_link_setup(struct media_entity *entity, const
> struct media_pad *local, ipipeif->input = IPIPEIF_INPUT_ISIF;
> break;
>
> - case IPIPEIF_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case IPIPEIF_PAD_SOURCE | 2 << 16:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> ipipeif->output = IPIPEIF_OUTPUT_NONE;
> break;
> diff --git a/drivers/staging/media/davinci_vpfe/dm365_isif.c
> b/drivers/staging/media/davinci_vpfe/dm365_isif.c index
> df77288b0ec0..8ca0c1297ec8 100644
> --- a/drivers/staging/media/davinci_vpfe/dm365_isif.c
> +++ b/drivers/staging/media/davinci_vpfe/dm365_isif.c
> @@ -1707,9 +1707,14 @@ isif_link_setup(struct media_entity *entity, const
> struct media_pad *local, {
> struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct vpfe_isif_device *isif = v4l2_get_subdevdata(sd);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case ISIF_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case ISIF_PAD_SINK | 2 << 16:
> /* read from decoder/sensor */
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> isif->input = ISIF_INPUT_NONE;
> @@ -1720,7 +1725,7 @@ isif_link_setup(struct media_entity *entity, const
> struct media_pad *local, isif->input = ISIF_INPUT_PARALLEL;
> break;
>
> - case ISIF_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + case ISIF_PAD_SOURCE:
> /* write to memory */
> if (flags & MEDIA_LNK_FL_ENABLED)
> isif->output = ISIF_OUTPUT_MEMORY;
> @@ -1728,7 +1733,7 @@ isif_link_setup(struct media_entity *entity, const
> struct media_pad *local, isif->output = ISIF_OUTPUT_NONE;
> break;
>
> - case ISIF_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case ISIF_PAD_SOURCE | 2 << 16:
> if (flags & MEDIA_LNK_FL_ENABLED)
> isif->output = ISIF_OUTPUT_IPIPEIF;
> else
> diff --git a/drivers/staging/media/davinci_vpfe/dm365_resizer.c
> b/drivers/staging/media/davinci_vpfe/dm365_resizer.c index
> ae942de3a23d..8eb6f5fda21c 100644
> --- a/drivers/staging/media/davinci_vpfe/dm365_resizer.c
> +++ b/drivers/staging/media/davinci_vpfe/dm365_resizer.c
> @@ -1653,10 +1653,15 @@ static int resizer_link_setup(struct media_entity
> *entity, struct vpfe_device *vpfe_dev = to_vpfe_device(resizer);
> u16 ipipeif_source = vpfe_dev->vpfe_ipipeif.output;
> u16 ipipe_source = vpfe_dev->vpfe_ipipe.output;
> + int index = local->index;
> +
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
>
> if (&resizer->crop_resizer.subdev == sd) {
> - switch (local->index | media_entity_type(remote->entity)) {
> - case RESIZER_CROP_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + switch (index) {
> + case RESIZER_CROP_PAD_SINK | 2 << 16:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->crop_resizer.input =
> RESIZER_CROP_INPUT_NONE;
> @@ -1676,7 +1681,7 @@ static int resizer_link_setup(struct media_entity
> *entity, return -EINVAL;
> break;
>
> - case RESIZER_CROP_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case RESIZER_CROP_PAD_SOURCE | 2 << 16:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->crop_resizer.output =
> RESIZER_CROP_OUTPUT_NONE;
> @@ -1688,7 +1693,7 @@ static int resizer_link_setup(struct media_entity
> *entity, resizer->crop_resizer.output = RESIZER_A;
> break;
>
> - case RESIZER_CROP_PAD_SOURCE2 | MEDIA_ENT_T_V4L2_SUBDEV:
> + case RESIZER_CROP_PAD_SOURCE2 | 2 << 16:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->crop_resizer.output2 =
> RESIZER_CROP_OUTPUT_NONE;
> @@ -1704,8 +1709,8 @@ static int resizer_link_setup(struct media_entity
> *entity, return -EINVAL;
> }
> } else if (&resizer->resizer_a.subdev == sd) {
> - switch (local->index | media_entity_type(remote->entity)) {
> - case RESIZER_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + switch (index) {
> + case RESIZER_PAD_SINK | 2 << 16:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->resizer_a.input = RESIZER_INPUT_NONE;
> break;
> @@ -1715,7 +1720,7 @@ static int resizer_link_setup(struct media_entity
> *entity, resizer->resizer_a.input = RESIZER_INPUT_CROP_RESIZER;
> break;
>
> - case RESIZER_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + case RESIZER_PAD_SOURCE:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->resizer_a.output = RESIZER_OUTPUT_NONE;
> break;
> @@ -1729,8 +1734,8 @@ static int resizer_link_setup(struct media_entity
> *entity, return -EINVAL;
> }
> } else if (&resizer->resizer_b.subdev == sd) {
> - switch (local->index | media_entity_type(remote->entity)) {
> - case RESIZER_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + switch (index) {
> + case RESIZER_PAD_SINK | 2 << 16:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->resizer_b.input = RESIZER_INPUT_NONE;
> break;
> @@ -1740,7 +1745,7 @@ static int resizer_link_setup(struct media_entity
> *entity, resizer->resizer_b.input = RESIZER_INPUT_CROP_RESIZER;
> break;
>
> - case RESIZER_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + case RESIZER_PAD_SOURCE:
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->resizer_b.output = RESIZER_OUTPUT_NONE;
> break;
> diff --git a/drivers/staging/media/davinci_vpfe/vpfe_video.c
> b/drivers/staging/media/davinci_vpfe/vpfe_video.c index
> 16763e0831f2..9eef64e0f0ab 100644
> --- a/drivers/staging/media/davinci_vpfe/vpfe_video.c
> +++ b/drivers/staging/media/davinci_vpfe/vpfe_video.c
> @@ -148,7 +148,7 @@ static void vpfe_prepare_pipeline(struct
> vpfe_video_device *video) while ((entity =
> media_entity_graph_walk_next(&graph))) {
> if (entity == &video->video_dev.entity)
> continue;
> - if ((!is_media_entity_v4l2_io(remote->entity))
> + if (!is_media_entity_v4l2_io(entity))
> continue;
> far_end = to_vpfe_video(media_entity_to_video_device(entity));
> if (far_end->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
> @@ -293,7 +293,7 @@ static int vpfe_pipeline_enable(struct vpfe_pipeline
> *pipe) media_entity_graph_walk_start(&graph, entity);
> while ((entity = media_entity_graph_walk_next(&graph))) {
>
> - if !is_media_entity_v4l2_subdev(entity))
> + if (!is_media_entity_v4l2_subdev(entity))
> continue;
> subdev = media_entity_to_v4l2_subdev(entity);
> ret = v4l2_subdev_call(subdev, video, s_stream, 1);
> diff --git a/drivers/staging/media/omap4iss/iss_csi2.c
> b/drivers/staging/media/omap4iss/iss_csi2.c index
> 6b4dcbfa9425..50a24e8e8129 100644
> --- a/drivers/staging/media/omap4iss/iss_csi2.c
> +++ b/drivers/staging/media/omap4iss/iss_csi2.c
> @@ -1170,14 +1170,19 @@ static int csi2_link_setup(struct media_entity
> *entity, struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct iss_csi2_device *csi2 = v4l2_get_subdevdata(sd);
> struct iss_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
> + int index = local->index;
> +
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
>
> /*
> * The ISS core doesn't support pipelines with multiple video outputs.
> * Revisit this when it will be implemented, and return -EBUSY for now.
> */
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case CSI2_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
> + switch (index) {
> + case CSI2_PAD_SOURCE:
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (csi2->output & ~CSI2_OUTPUT_MEMORY)
> return -EBUSY;
> @@ -1187,7 +1192,7 @@ static int csi2_link_setup(struct media_entity
> *entity, }
> break;
>
> - case CSI2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
> + case CSI2_PAD_SOURCE | 2 << 16:
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (csi2->output & ~CSI2_OUTPUT_IPIPEIF)
> return -EBUSY;
> diff --git a/drivers/staging/media/omap4iss/iss_ipipeif.c
> b/drivers/staging/media/omap4iss/iss_ipipeif.c index
> 44c432ef2ac5..e46b2c07bd5d 100644
> --- a/drivers/staging/media/omap4iss/iss_ipipeif.c
> +++ b/drivers/staging/media/omap4iss/iss_ipipeif.c
> @@ -662,9 +662,14 @@ static int ipipeif_link_setup(struct media_entity
> *entity, struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
> struct iss_device *iss = to_iss_device(ipipeif);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case IPIPEIF_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case IPIPEIF_PAD_SINK | 2 << 16:
> /* Read from the sensor CSI2a or CSI2b. */
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> ipipeif->input = IPIPEIF_INPUT_NONE;
> @@ -681,7 +686,7 @@ static int ipipeif_link_setup(struct media_entity
> *entity,
>
> break;
>
> - case IPIPEIF_PAD_SOURCE_ISIF_SF | MEDIA_ENT_T_DEVNODE:
> + case IPIPEIF_PAD_SOURCE_ISIF_SF:
> /* Write to memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (ipipeif->output & ~IPIPEIF_OUTPUT_MEMORY)
> @@ -692,7 +697,7 @@ static int ipipeif_link_setup(struct media_entity
> *entity, }
> break;
>
> - case IPIPEIF_PAD_SOURCE_VP | MEDIA_ENT_T_V4L2_SUBDEV:
> + case IPIPEIF_PAD_SOURCE_VP | 2 << 16:
> /* Send to IPIPE/RESIZER */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (ipipeif->output & ~IPIPEIF_OUTPUT_VP)
> diff --git a/drivers/staging/media/omap4iss/iss_resizer.c
> b/drivers/staging/media/omap4iss/iss_resizer.c index
> b659e465cb56..bc5001002cc5 100644
> --- a/drivers/staging/media/omap4iss/iss_resizer.c
> +++ b/drivers/staging/media/omap4iss/iss_resizer.c
> @@ -717,9 +717,14 @@ static int resizer_link_setup(struct media_entity
> *entity, struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
> struct iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
> struct iss_device *iss = to_iss_device(resizer);
> + int index = local->index;
>
> - switch (local->index | media_entity_type(remote->entity)) {
> - case RESIZER_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
> + /* FIXME: this is actually a hack! */
> + if (is_media_entity_v4l2_subdev(remote->entity))
> + index |= 2 << 16;
> +
> + switch (index) {
> + case RESIZER_PAD_SINK | 2 << 16:
> /* Read from IPIPE or IPIPEIF. */
> if (!(flags & MEDIA_LNK_FL_ENABLED)) {
> resizer->input = RESIZER_INPUT_NONE;
> @@ -737,7 +742,7 @@ static int resizer_link_setup(struct media_entity
> *entity,
>
> break;
>
> - case RESIZER_PAD_SOURCE_MEM | MEDIA_ENT_T_DEVNODE:
> + case RESIZER_PAD_SOURCE_MEM :
There's an unneeded space before the :.
> /* Write to memory */
> if (flags & MEDIA_LNK_FL_ENABLED) {
> if (resizer->output & ~RESIZER_OUTPUT_MEMORY)
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-12-06 2:08 UTC|newest]
Thread overview: 247+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-30 3:06 [PATCH v8 00/55] MC next generation patches Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 01/55] [media] media: create a macro to get entity ID Mauro Carvalho Chehab
2015-09-10 13:58 ` Javier Martinez Canillas
2015-12-06 3:20 ` Laurent Pinchart
2015-08-30 3:06 ` [PATCH v8 02/55] [media] staging: omap4iss: get entity ID using media_entity_id() Mauro Carvalho Chehab
2015-12-06 3:18 ` Laurent Pinchart
2015-12-07 15:24 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 03/55] [media] omap3isp: " Mauro Carvalho Chehab
2015-08-31 10:10 ` Hans Verkuil
2015-12-06 3:16 ` Laurent Pinchart
2015-12-07 15:22 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 04/55] [media] media: add a common struct to be embed on media graph objects Mauro Carvalho Chehab
2015-09-09 7:01 ` Sakari Ailus
2015-09-09 11:10 ` Mauro Carvalho Chehab
2015-09-10 14:02 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 05/55] [media] media: use media_gobj inside entities Mauro Carvalho Chehab
2015-09-10 14:04 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 06/55] [media] media: use media_gobj inside pads Mauro Carvalho Chehab
2015-09-09 7:37 ` Sakari Ailus
2015-09-10 14:09 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 07/55] [media] media: use media_gobj inside links Mauro Carvalho Chehab
2015-09-10 14:10 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 08/55] [media] media: add messages when media device gets (un)registered Mauro Carvalho Chehab
2015-09-10 14:12 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 09/55] [media] media: add a debug message to warn about gobj creation/removal Mauro Carvalho Chehab
2015-09-10 14:14 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 10/55] [media] media: rename the function that create pad links Mauro Carvalho Chehab
2015-09-10 14:16 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 11/55] [media] media: use entity.graph_obj.mdev instead of .parent Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 12/55] [media] media: remove media entity .parent field Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 13/55] [media] uapi/media.h: Declare interface types for V4L2 and DVB Mauro Carvalho Chehab
2015-09-10 14:19 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 14/55] [media] media: add functions to allow creating interfaces Mauro Carvalho Chehab
2015-08-31 10:20 ` Hans Verkuil
2015-08-31 10:49 ` Mauro Carvalho Chehab
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-09-09 7:34 ` Sakari Ailus
2015-09-09 10:00 ` Mauro Carvalho Chehab
2015-09-10 14:22 ` Javier Martinez Canillas
2015-09-11 12:57 ` Hans Verkuil
2015-12-08 14:36 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 15/55] [media] uapi/media.h: Declare interface types for ALSA Mauro Carvalho Chehab
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-09-10 14:23 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 16/55] [media] media: Don't accept early-created links Mauro Carvalho Chehab
2015-08-31 10:30 ` Hans Verkuil
2015-08-31 10:54 ` Mauro Carvalho Chehab
2015-08-31 11:01 ` Hans Verkuil
2015-08-31 14:39 ` Javier Martinez Canillas
2015-08-31 15:05 ` Mauro Carvalho Chehab
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-12-06 3:13 ` Laurent Pinchart
2015-08-30 3:06 ` [PATCH v8 17/55] [media] omap3isp: separate links creation from entities init Mauro Carvalho Chehab
2015-11-23 15:55 ` Laurent Pinchart
2015-11-23 16:22 ` Javier Martinez Canillas
2015-08-30 3:06 ` [PATCH v8 18/55] [media] omap3isp: create links after all subdevs have been bound Mauro Carvalho Chehab
2015-09-09 8:03 ` Sakari Ailus
2015-09-09 8:48 ` Javier Martinez Canillas
2015-12-06 3:05 ` Laurent Pinchart
2015-12-07 15:17 ` Javier Martinez Canillas
2015-09-09 10:28 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 19/55] [media] media: convert links from array to list Mauro Carvalho Chehab
2015-09-04 8:41 ` Sakari Ailus
2015-09-04 9:00 ` Hans Verkuil
2015-09-04 11:10 ` Mauro Carvalho Chehab
2015-09-04 11:28 ` [PATCH v8.1 " Mauro Carvalho Chehab
2015-09-04 11:48 ` [PATCH v8.2 " Mauro Carvalho Chehab
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-11-23 15:37 ` Laurent Pinchart
2015-11-23 15:41 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 20/55] [media] media: make add link more generic Mauro Carvalho Chehab
2015-08-31 10:44 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 21/55] [media] media: make media_link more generic to handle interace links Mauro Carvalho Chehab
2015-08-31 10:44 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 22/55] [media] media: make link debug printk more generic Mauro Carvalho Chehab
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 23/55] [media] media: add support to link interfaces and entities Mauro Carvalho Chehab
2015-08-31 10:48 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 24/55] [media] media-entity: add a helper function to create interface Mauro Carvalho Chehab
2015-08-31 10:49 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 25/55] [media] dvbdev: add support for interfaces Mauro Carvalho Chehab
2015-08-31 10:51 ` Hans Verkuil
2015-08-30 3:06 ` [PATCH v8 26/55] [media] media: add a linked list to track interfaces by mdev Mauro Carvalho Chehab
2015-08-31 10:52 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 27/55] [media] dvbdev: add support for indirect interface links Mauro Carvalho Chehab
2015-08-31 10:54 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 28/55] [media] uapi/media.h: Fix entity namespace Mauro Carvalho Chehab
2015-08-31 11:17 ` Hans Verkuil
2015-08-31 12:12 ` Mauro Carvalho Chehab
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-09-11 13:06 ` Hans Verkuil
2015-08-30 3:06 ` [PATCH v8 29/55] [media] replace all occurrences of MEDIA_ENT_T_DEVNODE_V4L Mauro Carvalho Chehab
2015-08-31 11:22 ` Hans Verkuil
2015-08-30 3:06 ` [PATCH v8 30/55] [media] replace all occurrences of MEDIA_ENT_T_DEVNODE_DVB Mauro Carvalho Chehab
2015-08-31 11:21 ` Hans Verkuil
2015-08-30 3:06 ` [PATCH v8 31/55] [media] media: add macros to check if subdev or V4L2 DMA Mauro Carvalho Chehab
2015-08-31 11:31 ` Hans Verkuil
2015-08-31 11:40 ` Hans Verkuil
2015-08-31 13:08 ` Mauro Carvalho Chehab
2015-08-31 13:46 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-12-06 2:20 ` Laurent Pinchart
2015-12-08 15:41 ` Mauro Carvalho Chehab
2016-02-16 0:34 ` Laurent Pinchart
2015-08-30 3:06 ` [PATCH v8 32/55] [media] media: use macros to check for V4L2 subdev entities Mauro Carvalho Chehab
2015-10-11 21:07 ` Sakari Ailus
2015-10-12 0:56 ` Mauro Carvalho Chehab
2015-10-12 15:35 ` Sakari Ailus
2015-10-12 16:00 ` Mauro Carvalho Chehab
2015-12-08 15:57 ` Mauro Carvalho Chehab
2015-12-08 17:05 ` Mauro Carvalho Chehab
2015-12-08 17:08 ` Mauro Carvalho Chehab
2015-10-12 15:38 ` [PATCH 1/1] media: Correctly determine whether an entity is a sub-device Sakari Ailus
2015-10-12 15:58 ` Mauro Carvalho Chehab
2015-12-06 2:16 ` [PATCH v8 32/55] [media] media: use macros to check for V4L2 subdev entities Laurent Pinchart
2015-12-08 16:03 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 33/55] [media] omap3/omap4/davinci: get rid of MEDIA_ENT_T_V4L2_SUBDEV abuse Mauro Carvalho Chehab
2015-12-06 2:08 ` Laurent Pinchart [this message]
2015-12-08 16:52 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 34/55] [media] s5c73m3: fix subdev type Mauro Carvalho Chehab
2015-12-06 1:57 ` Laurent Pinchart
2015-12-08 17:11 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 35/55] [media] s5k5baf: " Mauro Carvalho Chehab
2015-12-06 1:55 ` Laurent Pinchart
2015-12-08 17:17 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 36/55] [media] davinci_vbpe: stop MEDIA_ENT_T_V4L2_SUBDEV abuse Mauro Carvalho Chehab
2015-12-06 1:52 ` Laurent Pinchart
2015-12-08 17:22 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 37/55] [media] omap4iss: " Mauro Carvalho Chehab
2015-12-06 1:46 ` Laurent Pinchart
2015-12-08 17:47 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 38/55] [media] v4l2-subdev: use MEDIA_ENT_T_UNKNOWN for new subdevs Mauro Carvalho Chehab
2015-08-31 11:43 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-12-06 1:37 ` Laurent Pinchart
2015-12-08 17:38 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 39/55] [media] media controller: get rid of entity subtype on Kernel Mauro Carvalho Chehab
2015-08-31 11:44 ` Hans Verkuil
2015-09-06 12:02 ` Mauro Carvalho Chehab
2015-09-11 13:08 ` Hans Verkuil
2015-12-06 1:03 ` Laurent Pinchart
2015-08-30 3:06 ` [PATCH v8 40/55] [media] media.h: don't use legacy entity macros at Kernel Mauro Carvalho Chehab
2015-08-31 11:44 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-12-06 1:02 ` Laurent Pinchart
2015-08-30 3:06 ` [PATCH v8 41/55] [media] DocBook: update descriptions for the media controller entities Mauro Carvalho Chehab
2015-08-31 11:22 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 13:13 ` Hans Verkuil
2015-12-06 1:00 ` Laurent Pinchart
2015-12-08 18:04 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 42/55] [media] dvb: modify core to implement interfaces/entities at MC new gen Mauro Carvalho Chehab
2015-08-31 11:49 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 13:51 ` Hans Verkuil
2015-08-30 3:06 ` [PATCH v8 43/55] [media] media: report if a pad is sink or source at debug msg Mauro Carvalho Chehab
2015-08-31 11:51 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 13:52 ` Hans Verkuil
2015-12-06 0:53 ` Laurent Pinchart
2015-12-08 18:46 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 44/55] [media] uapi/media.h: Add MEDIA_IOC_G_TOPOLOGY ioctl Mauro Carvalho Chehab
2015-08-31 12:00 ` Hans Verkuil
2015-08-31 13:35 ` Mauro Carvalho Chehab
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 13:58 ` Hans Verkuil
2015-12-06 0:47 ` Laurent Pinchart
2015-12-08 19:23 ` Mauro Carvalho Chehab
2015-12-08 19:48 ` Arnd Bergmann
2015-08-30 3:06 ` [PATCH v8 45/55] [media] media: Use a macro to interate between all interfaces Mauro Carvalho Chehab
2015-08-31 12:01 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-11-23 22:36 ` Laurent Pinchart
2015-08-30 3:06 ` [PATCH v8 46/55] [media] media: move mdev list init to gobj Mauro Carvalho Chehab
2015-08-31 12:03 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 13:59 ` Hans Verkuil
2015-11-23 22:32 ` Laurent Pinchart
2015-12-08 19:31 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 47/55] [media] media-device: add pads and links to media_device Mauro Carvalho Chehab
2015-08-31 12:25 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-11-23 22:28 ` Laurent Pinchart
2015-11-24 12:19 ` Mauro Carvalho Chehab
2015-08-30 3:06 ` [PATCH v8 48/55] [media] media_device: add a topology version field Mauro Carvalho Chehab
2015-08-31 12:29 ` Hans Verkuil
2015-08-31 12:52 ` Mauro Carvalho Chehab
2015-08-31 13:35 ` Hans Verkuil
2015-09-04 17:08 ` Mauro Carvalho Chehab
2015-11-23 22:18 ` Laurent Pinchart
2015-12-08 20:05 ` Mauro Carvalho Chehab
2015-11-23 22:20 ` Laurent Pinchart
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 13:59 ` Hans Verkuil
2015-08-30 3:07 ` [PATCH v8 49/55] [media] media-device: add support for MEDIA_IOC_G_TOPOLOGY ioctl Mauro Carvalho Chehab
2015-08-31 12:47 ` Hans Verkuil
2015-08-31 13:40 ` Mauro Carvalho Chehab
2015-08-31 13:48 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-07 22:18 ` Sakari Ailus
2015-09-08 1:23 ` Mauro Carvalho Chehab
2015-09-08 7:26 ` Sakari Ailus
2015-09-08 10:49 ` Mauro Carvalho Chehab
2015-09-08 13:34 ` Sakari Ailus
2015-09-08 15:11 ` Mauro Carvalho Chehab
2015-09-11 14:08 ` Hans Verkuil
2015-12-08 20:20 ` Mauro Carvalho Chehab
2015-11-23 22:04 ` Laurent Pinchart
2015-12-08 20:17 ` Mauro Carvalho Chehab
2015-08-30 3:07 ` [PATCH v8 50/55] [media] media-entity: unregister entity links Mauro Carvalho Chehab
2015-08-31 12:48 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-11-23 21:27 ` Laurent Pinchart
2015-12-08 20:23 ` Mauro Carvalho Chehab
2015-08-30 3:07 ` [PATCH v8 51/55] [media] remove interface links at media_entity_unregister() Mauro Carvalho Chehab
2015-08-31 12:53 ` Hans Verkuil
2015-08-31 13:42 ` Mauro Carvalho Chehab
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 14:18 ` Hans Verkuil
2015-08-30 3:07 ` [PATCH v8 52/55] [media] media-device: remove interfaces and interface links Mauro Carvalho Chehab
2015-08-31 12:57 ` Hans Verkuil
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 14:20 ` Hans Verkuil
2015-11-23 21:22 ` Laurent Pinchart
2015-12-09 13:39 ` Mauro Carvalho Chehab
2015-08-30 3:07 ` [PATCH v8 53/55] [media] v4l2-core: create MC interfaces for devnodes Mauro Carvalho Chehab
2015-08-31 13:23 ` Hans Verkuil
2015-09-04 16:13 ` Mauro Carvalho Chehab
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 14:38 ` Hans Verkuil
2015-11-23 21:10 ` Laurent Pinchart
2015-11-24 11:25 ` Mauro Carvalho Chehab
2015-08-30 3:07 ` [PATCH v8 54/55] [media] au0828: unregister MC at the end Mauro Carvalho Chehab
2015-08-31 13:25 ` Hans Verkuil
2015-09-04 22:24 ` Mauro Carvalho Chehab
2015-08-30 3:07 ` [PATCH v8 55/55] [media] media-entity.h: document all the structs Mauro Carvalho Chehab
2015-09-06 12:03 ` Mauro Carvalho Chehab
2015-09-11 14:45 ` Hans Verkuil
2015-11-23 20:19 ` Laurent Pinchart
2015-12-10 18:16 ` Mauro Carvalho Chehab
2015-08-30 14:27 ` [PATCH v8 00/55] MC next generation patches Mauro Carvalho Chehab
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=1976836.7xiRZsLFCP@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=boris.brezillon@free-electrons.com \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@linuxfoundation.org \
--cc=hamohammed.sa@gmail.com \
--cc=hans.verkuil@cisco.com \
--cc=javier@osg.samsung.com \
--cc=linux-media@vger.kernel.org \
--cc=mahati.chamarthy@gmail.com \
--cc=mchehab@infradead.org \
--cc=mchehab@osg.samsung.com \
--cc=prabhakar.csengg@gmail.com \
--cc=sakari.ailus@linux.intel.com \
--cc=tapaswenipathak@gmail.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