Commit 18174117 authored by Jonathan Bakker's avatar Jonathan Bakker Committed by Mauro Carvalho Chehab

media: exynos4-is: Add support for multiple sensors on one port

On some devices, there may be multiple camera sensors attached
to the same port.  Make sure we probe all of them, not just the
first one.
Signed-off-by: default avatarJonathan Bakker <xc-racer2@live.ca>
Reviewed-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 401b463d
...@@ -395,21 +395,15 @@ static void fimc_md_pipelines_free(struct fimc_md *fmd) ...@@ -395,21 +395,15 @@ static void fimc_md_pipelines_free(struct fimc_md *fmd)
} }
} }
/* Parse port node and register as a sub-device any sensor specified there. */ static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
static int fimc_md_parse_port_node(struct fimc_md *fmd, struct device_node *ep)
struct device_node *port)
{ {
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, *ep, *np; struct device_node *rem, *np;
struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 }; struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
int ret; int ret;
/* Assume here a port node can have only one endpoint node. */
ep = of_get_next_child(port, NULL);
if (!ep)
return 0;
ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), &endpoint); ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), &endpoint);
if (ret) { if (ret) {
of_node_put(ep); of_node_put(ep);
...@@ -483,6 +477,22 @@ static int fimc_md_parse_port_node(struct fimc_md *fmd, ...@@ -483,6 +477,22 @@ static int fimc_md_parse_port_node(struct fimc_md *fmd,
return 0; return 0;
} }
/* Parse port node and register as a sub-device any sensor specified there. */
static int fimc_md_parse_port_node(struct fimc_md *fmd,
struct device_node *port)
{
struct device_node *ep;
int ret;
for_each_child_of_node(port, ep) {
ret = fimc_md_parse_one_endpoint(fmd, ep);
if (ret < 0)
return ret;
}
return 0;
}
/* Register all SoC external sub-devices */ /* Register all SoC external sub-devices */
static int fimc_md_register_sensor_entities(struct fimc_md *fmd) static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
{ {
......
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