aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>2017-01-31 07:08:31 -0500
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2017-02-08 07:32:11 -0500
commite22f709e055e0e71d65ae9bb9bf6d32c31f3a1ac (patch)
tree16f136794a2e3ba1e06913a945c58183cf278fe4
parentd2fe28feaebbbbe147e5e6e7bc68857f9bd7f6ad (diff)
[media] v4l: of: check for unique lanes in data-lanes and clock-lanes
All lanes in data-lanes and clock-lanes properties should be unique. Add a check for this in v4l2_of_parse_csi_bus() and print a warning if duplicated lanes are found. Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--drivers/media/v4l2-core/v4l2-of.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/media/v4l2-core/v4l2-of.c b/drivers/media/v4l2-core/v4l2-of.c
index 93b33681776c..4f59f442dd0a 100644
--- a/drivers/media/v4l2-core/v4l2-of.c
+++ b/drivers/media/v4l2-core/v4l2-of.c
@@ -26,7 +26,7 @@ static int v4l2_of_parse_csi_bus(const struct device_node *node,
26 struct v4l2_of_bus_mipi_csi2 *bus = &endpoint->bus.mipi_csi2; 26 struct v4l2_of_bus_mipi_csi2 *bus = &endpoint->bus.mipi_csi2;
27 struct property *prop; 27 struct property *prop;
28 bool have_clk_lane = false; 28 bool have_clk_lane = false;
29 unsigned int flags = 0; 29 unsigned int flags = 0, lanes_used = 0;
30 u32 v; 30 u32 v;
31 31
32 prop = of_find_property(node, "data-lanes", NULL); 32 prop = of_find_property(node, "data-lanes", NULL);
@@ -38,6 +38,12 @@ static int v4l2_of_parse_csi_bus(const struct device_node *node,
38 lane = of_prop_next_u32(prop, lane, &v); 38 lane = of_prop_next_u32(prop, lane, &v);
39 if (!lane) 39 if (!lane)
40 break; 40 break;
41
42 if (lanes_used & BIT(v))
43 pr_warn("%s: duplicated lane %u in data-lanes\n",
44 node->full_name, v);
45 lanes_used |= BIT(v);
46
41 bus->data_lanes[i] = v; 47 bus->data_lanes[i] = v;
42 } 48 }
43 bus->num_data_lanes = i; 49 bus->num_data_lanes = i;
@@ -63,6 +69,11 @@ static int v4l2_of_parse_csi_bus(const struct device_node *node,
63 } 69 }
64 70
65 if (!of_property_read_u32(node, "clock-lanes", &v)) { 71 if (!of_property_read_u32(node, "clock-lanes", &v)) {
72 if (lanes_used & BIT(v))
73 pr_warn("%s: duplicated lane %u in clock-lanes\n",
74 node->full_name, v);
75 lanes_used |= BIT(v);
76
66 bus->clock_lane = v; 77 bus->clock_lane = v;
67 have_clk_lane = true; 78 have_clk_lane = true;
68 } 79 }