Skip to content

Commit

Permalink
media: ti-vpe: cal: Allow multiple contexts per subdev notifier
Browse files Browse the repository at this point in the history
The subdev notifier handling assumes a 1:1 mapping between CAL contexts
and notifiers. To prepare for merging the multiple notifiers into a
single one, retrieve the CAL context from the async subdev structure
instead of from the notifier.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  • Loading branch information
Laurent Pinchart authored and Mauro Carvalho Chehab committed Jul 19, 2020
1 parent a439e57 commit 8fcb757
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion drivers/media/platform/ti-vpe/cal.c
Original file line number Diff line number Diff line change
Expand Up @@ -2115,11 +2115,22 @@ static void cal_ctx_v4l2_cleanup(struct cal_ctx *ctx)
* ------------------------------------------------------------------
*/

struct cal_v4l2_async_subdev {
struct v4l2_async_subdev asd;
struct cal_ctx *ctx;
};

static inline struct cal_v4l2_async_subdev *
to_cal_asd(struct v4l2_async_subdev *asd)
{
return container_of(asd, struct cal_v4l2_async_subdev, asd);
}

static int cal_async_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd)
{
struct cal_ctx *ctx = notifier_to_ctx(notifier);
struct cal_ctx *ctx = to_cal_asd(asd)->ctx;

if (ctx->phy->sensor) {
ctx_info(ctx, "Rejecting subdev %s (Already set!!)",
Expand Down Expand Up @@ -2148,6 +2159,7 @@ static const struct v4l2_async_notifier_operations cal_async_ops = {

static int of_cal_create_instance(struct cal_ctx *ctx, int inst)
{
struct cal_v4l2_async_subdev *casd;
struct v4l2_async_subdev *asd;
struct fwnode_handle *fwnode;
int ret;
Expand All @@ -2163,6 +2175,9 @@ static int of_cal_create_instance(struct cal_ctx *ctx, int inst)
return PTR_ERR(asd);
}

casd = to_cal_asd(asd);
casd->ctx = ctx;

ret = v4l2_async_notifier_register(&ctx->cal->v4l2_dev,
&ctx->notifier);
if (ret) {
Expand Down

0 comments on commit 8fcb757

Please sign in to comment.