|
@@ -336,7 +336,7 @@ static int rcar_du_atomic_check(struct drm_device *dev,
|
|
|
dev_dbg(rcdu->dev, "%s: finding free planes for group %u\n",
|
|
|
__func__, index);
|
|
|
|
|
|
- for (i = 0; i < RCAR_DU_NUM_KMS_PLANES; ++i) {
|
|
|
+ for (i = 0; i < group->num_planes; ++i) {
|
|
|
struct rcar_du_plane *plane = &group->planes[i];
|
|
|
struct rcar_du_plane_state *plane_state;
|
|
|
struct drm_plane_state *s;
|
|
@@ -495,8 +495,10 @@ static int rcar_du_atomic_commit(struct drm_device *dev,
|
|
|
|
|
|
/* Allocate the commit object. */
|
|
|
commit = kzalloc(sizeof(*commit), GFP_KERNEL);
|
|
|
- if (commit == NULL)
|
|
|
- return -ENOMEM;
|
|
|
+ if (commit == NULL) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
|
|
|
INIT_WORK(&commit->work, rcar_du_atomic_work);
|
|
|
commit->dev = dev;
|
|
@@ -519,7 +521,7 @@ static int rcar_du_atomic_commit(struct drm_device *dev,
|
|
|
|
|
|
if (ret) {
|
|
|
kfree(commit);
|
|
|
- return ret;
|
|
|
+ goto error;
|
|
|
}
|
|
|
|
|
|
/* Swap the state, this is the point of no return. */
|
|
@@ -531,6 +533,10 @@ static int rcar_du_atomic_commit(struct drm_device *dev,
|
|
|
rcar_du_atomic_complete(commit);
|
|
|
|
|
|
return 0;
|
|
|
+
|
|
|
+error:
|
|
|
+ drm_atomic_helper_cleanup_planes(dev, state);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
@@ -573,7 +579,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
|
|
|
if (!entity) {
|
|
|
dev_dbg(rcdu->dev, "unconnected endpoint %s, skipping\n",
|
|
|
ep->local_node->full_name);
|
|
|
- return 0;
|
|
|
+ return -ENODEV;
|
|
|
}
|
|
|
|
|
|
entity_ep_node = of_parse_phandle(ep->local_node, "remote-endpoint", 0);
|
|
@@ -596,7 +602,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
|
|
|
encoder->full_name);
|
|
|
of_node_put(entity_ep_node);
|
|
|
of_node_put(encoder);
|
|
|
- return 0;
|
|
|
+ return -ENODEV;
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -625,7 +631,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
|
|
|
encoder->full_name);
|
|
|
of_node_put(encoder);
|
|
|
of_node_put(connector);
|
|
|
- return 0;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
} else {
|
|
|
/*
|
|
@@ -639,7 +645,12 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
|
|
|
of_node_put(encoder);
|
|
|
of_node_put(connector);
|
|
|
|
|
|
- return ret < 0 ? ret : 1;
|
|
|
+ if (ret && ret != -EPROBE_DEFER)
|
|
|
+ dev_warn(rcdu->dev,
|
|
|
+ "failed to initialize encoder %s (%d), skipping\n",
|
|
|
+ encoder->full_name, ret);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int rcar_du_encoders_init(struct rcar_du_device *rcdu)
|
|
@@ -688,12 +699,10 @@ static int rcar_du_encoders_init(struct rcar_du_device *rcdu)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- dev_info(rcdu->dev,
|
|
|
- "encoder initialization failed, skipping\n");
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- num_encoders += ret;
|
|
|
+ num_encoders++;
|
|
|
}
|
|
|
|
|
|
return num_encoders;
|