Commit 539e7c5d authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

media: ti-vpe: cal: Replace context with phy in async notifier entries

The async notifier is meant to bind to subdevs connected to the CSI-2
ports. Those ports are modelled by the CAMERARX phy instances. To
prepare for additional decoupling of contexts and phys, make the
notifier operate on phys. We still initialize and register the context
V4L2 support in the async notifier complete operation as that's our
signal that the userspace API is ready to be exposed.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent a539a053
...@@ -2112,7 +2112,7 @@ static void cal_ctx_v4l2_cleanup(struct cal_ctx *ctx) ...@@ -2112,7 +2112,7 @@ static void cal_ctx_v4l2_cleanup(struct cal_ctx *ctx)
struct cal_v4l2_async_subdev { struct cal_v4l2_async_subdev {
struct v4l2_async_subdev asd; struct v4l2_async_subdev asd;
struct cal_ctx *ctx; struct cal_camerarx *phy;
}; };
static inline struct cal_v4l2_async_subdev * static inline struct cal_v4l2_async_subdev *
...@@ -2125,16 +2125,16 @@ static int cal_async_notifier_bound(struct v4l2_async_notifier *notifier, ...@@ -2125,16 +2125,16 @@ static int cal_async_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev, struct v4l2_subdev *subdev,
struct v4l2_async_subdev *asd) struct v4l2_async_subdev *asd)
{ {
struct cal_ctx *ctx = to_cal_asd(asd)->ctx; struct cal_camerarx *phy = to_cal_asd(asd)->phy;
if (ctx->phy->sensor) { if (phy->sensor) {
ctx_info(ctx, "Rejecting subdev %s (Already set!!)", phy_info(phy, "Rejecting subdev %s (Already set!!)",
subdev->name); subdev->name);
return 0; return 0;
} }
ctx->phy->sensor = subdev; phy->sensor = subdev;
ctx_dbg(1, ctx, "Using sensor %s for capture\n", subdev->name); phy_dbg(1, phy, "Using sensor %s for capture\n", subdev->name);
return 0; return 0;
} }
...@@ -2174,27 +2174,27 @@ static int cal_async_notifier_register(struct cal_dev *cal) ...@@ -2174,27 +2174,27 @@ static int cal_async_notifier_register(struct cal_dev *cal)
v4l2_async_notifier_init(&cal->notifier); v4l2_async_notifier_init(&cal->notifier);
cal->notifier.ops = &cal_async_notifier_ops; cal->notifier.ops = &cal_async_notifier_ops;
for (i = 0; i < ARRAY_SIZE(cal->ctx); ++i) { for (i = 0; i < ARRAY_SIZE(cal->phy); ++i) {
struct cal_ctx *ctx = cal->ctx[i]; struct cal_camerarx *phy = cal->phy[i];
struct cal_v4l2_async_subdev *casd; struct cal_v4l2_async_subdev *casd;
struct v4l2_async_subdev *asd; struct v4l2_async_subdev *asd;
struct fwnode_handle *fwnode; struct fwnode_handle *fwnode;
if (!ctx) if (!phy || !phy->sensor_node)
continue; continue;
fwnode = of_fwnode_handle(ctx->phy->sensor_node); fwnode = of_fwnode_handle(phy->sensor_node);
asd = v4l2_async_notifier_add_fwnode_subdev(&cal->notifier, asd = v4l2_async_notifier_add_fwnode_subdev(&cal->notifier,
fwnode, fwnode,
sizeof(*asd)); sizeof(*asd));
if (IS_ERR(asd)) { if (IS_ERR(asd)) {
ctx_err(ctx, "Failed to add subdev to notifier\n"); phy_err(phy, "Failed to add subdev to notifier\n");
ret = PTR_ERR(asd); ret = PTR_ERR(asd);
goto error; goto error;
} }
casd = to_cal_asd(asd); casd = to_cal_asd(asd);
casd->ctx = ctx; casd->phy = phy;
} }
ret = v4l2_async_notifier_register(&cal->v4l2_dev, &cal->notifier); ret = v4l2_async_notifier_register(&cal->v4l2_dev, &cal->notifier);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment