Commit 3a2822bf authored by Ezequiel Garcia's avatar Ezequiel Garcia Committed by Mauro Carvalho Chehab

media: exynos4-is: Use v4l2_async_notifier_add_fwnode_remote_subdev

The use of v4l2_async_notifier_add_subdev will be discouraged.
Drivers are instead encouraged to use a helper such as
v4l2_async_notifier_add_fwnode_remote_subdev.

This fixes a misuse of the API, as v4l2_async_notifier_add_subdev
should get a kmalloc'ed struct v4l2_async_subdev,
removing some boilerplate code while at it.

Use the appropriate helper v4l2_async_notifier_add_fwnode_remote_subdev,
which handles the needed setup, instead of open-coding it.
Signed-off-by: default avatarEzequiel Garcia <ezequiel@collabora.com>
Reviewed-by: default avatarJacopo Mondi <jacopo+renesas@jmondi.org>
Reviewed-by: default avatarHelen Koike <helen.koike@collabora.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 49cff8db
...@@ -401,6 +401,7 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd, ...@@ -401,6 +401,7 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
int index = fmd->num_sensors; int index = fmd->num_sensors;
struct fimc_source_info *pd = &fmd->sensor[index].pdata; struct fimc_source_info *pd = &fmd->sensor[index].pdata;
struct device_node *rem, *np; struct device_node *rem, *np;
struct v4l2_async_subdev *asd;
struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 }; struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
int ret; int ret;
...@@ -418,10 +419,10 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd, ...@@ -418,10 +419,10 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
pd->mux_id = (endpoint.base.port - 1) & 0x1; pd->mux_id = (endpoint.base.port - 1) & 0x1;
rem = of_graph_get_remote_port_parent(ep); rem = of_graph_get_remote_port_parent(ep);
of_node_put(ep);
if (rem == NULL) { if (rem == NULL) {
v4l2_info(&fmd->v4l2_dev, "Remote device at %pOF not found\n", v4l2_info(&fmd->v4l2_dev, "Remote device at %pOF not found\n",
ep); ep);
of_node_put(ep);
return 0; return 0;
} }
...@@ -450,6 +451,7 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd, ...@@ -450,6 +451,7 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
* checking parent's node name. * checking parent's node name.
*/ */
np = of_get_parent(rem); np = of_get_parent(rem);
of_node_put(rem);
if (of_node_name_eq(np, "i2c-isp")) if (of_node_name_eq(np, "i2c-isp"))
pd->fimc_bus_type = FIMC_BUS_TYPE_ISP_WRITEBACK; pd->fimc_bus_type = FIMC_BUS_TYPE_ISP_WRITEBACK;
...@@ -458,20 +460,19 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd, ...@@ -458,20 +460,19 @@ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
of_node_put(np); of_node_put(np);
if (WARN_ON(index >= ARRAY_SIZE(fmd->sensor))) { if (WARN_ON(index >= ARRAY_SIZE(fmd->sensor))) {
of_node_put(rem); of_node_put(ep);
return -EINVAL; return -EINVAL;
} }
fmd->sensor[index].asd.match_type = V4L2_ASYNC_MATCH_FWNODE; asd = v4l2_async_notifier_add_fwnode_remote_subdev(
fmd->sensor[index].asd.match.fwnode = of_fwnode_handle(rem); &fmd->subdev_notifier, of_fwnode_handle(ep), sizeof(*asd));
ret = v4l2_async_notifier_add_subdev(&fmd->subdev_notifier, of_node_put(ep);
&fmd->sensor[index].asd);
if (ret) { if (IS_ERR(asd))
of_node_put(rem); return PTR_ERR(asd);
return ret;
}
fmd->sensor[index].asd = asd;
fmd->num_sensors++; fmd->num_sensors++;
return 0; return 0;
...@@ -1381,7 +1382,8 @@ static int subdev_notifier_bound(struct v4l2_async_notifier *notifier, ...@@ -1381,7 +1382,8 @@ static int subdev_notifier_bound(struct v4l2_async_notifier *notifier,
/* Find platform data for this sensor subdev */ /* Find platform data for this sensor subdev */
for (i = 0; i < ARRAY_SIZE(fmd->sensor); i++) for (i = 0; i < ARRAY_SIZE(fmd->sensor); i++)
if (fmd->sensor[i].asd.match.fwnode == if (fmd->sensor[i].asd &&
fmd->sensor[i].asd->match.fwnode ==
of_fwnode_handle(subdev->dev->of_node)) of_fwnode_handle(subdev->dev->of_node))
si = &fmd->sensor[i]; si = &fmd->sensor[i];
......
...@@ -83,7 +83,7 @@ struct fimc_camclk_info { ...@@ -83,7 +83,7 @@ struct fimc_camclk_info {
*/ */
struct fimc_sensor_info { struct fimc_sensor_info {
struct fimc_source_info pdata; struct fimc_source_info pdata;
struct v4l2_async_subdev asd; struct v4l2_async_subdev *asd;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
struct fimc_dev *host; struct fimc_dev *host;
}; };
......
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