Message ID | 20171208010842.20047-18-niklas.soderlund+renesas@ragnatech.se (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Niklas, Thank you for the patch. On Friday, 8 December 2017 03:08:31 EET Niklas Söderlund wrote: > On Gen3 a media controller API needs to be used to allow userspace to > configure the subdevices in the pipeline instead of directly controlling > a single source subdevice, which is and will continue to be the mode of > operation on Gen2. > > Prepare for these two modes of operation by adding a flag to struct > rvin_info which will control which mode to use. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > drivers/media/platform/rcar-vin/rcar-core.c | 6 +++++- > drivers/media/platform/rcar-vin/rcar-vin.h | 2 ++ > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/platform/rcar-vin/rcar-core.c > b/drivers/media/platform/rcar-vin/rcar-core.c index > 7d49904cab9cb2d9..61f48ecc1ab815ec 100644 > --- a/drivers/media/platform/rcar-vin/rcar-core.c > +++ b/drivers/media/platform/rcar-vin/rcar-core.c > @@ -232,18 +232,21 @@ static int rvin_digital_graph_init(struct rvin_dev > *vin) > > static const struct rvin_info rcar_info_h1 = { > .chip = RCAR_H1, > + .use_mc = false, > .max_width = 2048, > .max_height = 2048, > }; > > static const struct rvin_info rcar_info_m1 = { > .chip = RCAR_M1, > + .use_mc = false, > .max_width = 2048, > .max_height = 2048, > }; > > static const struct rvin_info rcar_info_gen2 = { > .chip = RCAR_GEN2, > + .use_mc = false, > .max_width = 2048, > .max_height = 2048, > }; > @@ -338,7 +341,8 @@ static int rcar_vin_remove(struct platform_device *pdev) > v4l2_async_notifier_unregister(&vin->notifier); > v4l2_async_notifier_cleanup(&vin->notifier); > > - v4l2_ctrl_handler_free(&vin->ctrl_handler); > + if (!vin->info->use_mc) > + v4l2_ctrl_handler_free(&vin->ctrl_handler); > > rvin_dma_unregister(vin); > > diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h > b/drivers/media/platform/rcar-vin/rcar-vin.h index > 7819c760c2c13422..0747873c2b9cb74c 100644 > --- a/drivers/media/platform/rcar-vin/rcar-vin.h > +++ b/drivers/media/platform/rcar-vin/rcar-vin.h > @@ -77,12 +77,14 @@ struct rvin_graph_entity { > /** > * struct rvin_info - Information about the particular VIN implementation > * @chip: type of VIN chip > + * @use_mc: use media controller instead of controlling subdevice > * > * max_width: max input width the VIN supports > * max_height: max input height the VIN supports > */ > struct rvin_info { > enum chip_id chip; > + bool use_mc; > > unsigned int max_width; > unsigned int max_height;
diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c index 7d49904cab9cb2d9..61f48ecc1ab815ec 100644 --- a/drivers/media/platform/rcar-vin/rcar-core.c +++ b/drivers/media/platform/rcar-vin/rcar-core.c @@ -232,18 +232,21 @@ static int rvin_digital_graph_init(struct rvin_dev *vin) static const struct rvin_info rcar_info_h1 = { .chip = RCAR_H1, + .use_mc = false, .max_width = 2048, .max_height = 2048, }; static const struct rvin_info rcar_info_m1 = { .chip = RCAR_M1, + .use_mc = false, .max_width = 2048, .max_height = 2048, }; static const struct rvin_info rcar_info_gen2 = { .chip = RCAR_GEN2, + .use_mc = false, .max_width = 2048, .max_height = 2048, }; @@ -338,7 +341,8 @@ static int rcar_vin_remove(struct platform_device *pdev) v4l2_async_notifier_unregister(&vin->notifier); v4l2_async_notifier_cleanup(&vin->notifier); - v4l2_ctrl_handler_free(&vin->ctrl_handler); + if (!vin->info->use_mc) + v4l2_ctrl_handler_free(&vin->ctrl_handler); rvin_dma_unregister(vin); diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h index 7819c760c2c13422..0747873c2b9cb74c 100644 --- a/drivers/media/platform/rcar-vin/rcar-vin.h +++ b/drivers/media/platform/rcar-vin/rcar-vin.h @@ -77,12 +77,14 @@ struct rvin_graph_entity { /** * struct rvin_info - Information about the particular VIN implementation * @chip: type of VIN chip + * @use_mc: use media controller instead of controlling subdevice * * max_width: max input width the VIN supports * max_height: max input height the VIN supports */ struct rvin_info { enum chip_id chip; + bool use_mc; unsigned int max_width; unsigned int max_height;