|
@@ -2117,23 +2117,18 @@ static int isp_of_parse_nodes(struct device *dev,
|
|
struct isp_async_subdev *isd;
|
|
struct isp_async_subdev *isd;
|
|
|
|
|
|
isd = devm_kzalloc(dev, sizeof(*isd), GFP_KERNEL);
|
|
isd = devm_kzalloc(dev, sizeof(*isd), GFP_KERNEL);
|
|
- if (!isd) {
|
|
|
|
- of_node_put(node);
|
|
|
|
- return -ENOMEM;
|
|
|
|
- }
|
|
|
|
|
|
+ if (!isd)
|
|
|
|
+ goto error;
|
|
|
|
|
|
notifier->subdevs[notifier->num_subdevs] = &isd->asd;
|
|
notifier->subdevs[notifier->num_subdevs] = &isd->asd;
|
|
|
|
|
|
- if (isp_of_parse_node(dev, node, isd)) {
|
|
|
|
- of_node_put(node);
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
|
|
+ if (isp_of_parse_node(dev, node, isd))
|
|
|
|
+ goto error;
|
|
|
|
|
|
isd->asd.match.of.node = of_graph_get_remote_port_parent(node);
|
|
isd->asd.match.of.node = of_graph_get_remote_port_parent(node);
|
|
- of_node_put(node);
|
|
|
|
if (!isd->asd.match.of.node) {
|
|
if (!isd->asd.match.of.node) {
|
|
dev_warn(dev, "bad remote port parent\n");
|
|
dev_warn(dev, "bad remote port parent\n");
|
|
- return -EINVAL;
|
|
|
|
|
|
+ goto error;
|
|
}
|
|
}
|
|
|
|
|
|
isd->asd.match_type = V4L2_ASYNC_MATCH_OF;
|
|
isd->asd.match_type = V4L2_ASYNC_MATCH_OF;
|
|
@@ -2141,6 +2136,10 @@ static int isp_of_parse_nodes(struct device *dev,
|
|
}
|
|
}
|
|
|
|
|
|
return notifier->num_subdevs;
|
|
return notifier->num_subdevs;
|
|
|
|
+
|
|
|
|
+error:
|
|
|
|
+ of_node_put(node);
|
|
|
|
+ return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async,
|
|
static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async,
|