aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Andersson <bjorn.andersson@linaro.org>2016-12-02 17:06:02 -0500
committerBjorn Andersson <bjorn.andersson@linaro.org>2017-01-18 13:43:15 -0500
commit5e53c42c33bbde53a2650c6aa7201ec63bbfdc49 (patch)
tree16ad2ddbacd6d840977ee9cf18d6b38180bee088
parent49def1853334396f948dcb4cedb9347abb318df5 (diff)
rpmsg: qcom_smd: Add support for "label" property
Add support for the "label" property, used to give the edge a name other than the one of the DT node. This allows the implementor to provide consistently named edges when using the rpmsg character device. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
-rw-r--r--drivers/rpmsg/qcom_smd.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c
index 0fae48116a0d..3dd73edaa525 100644
--- a/drivers/rpmsg/qcom_smd.c
+++ b/drivers/rpmsg/qcom_smd.c
@@ -117,6 +117,8 @@ static const struct {
117struct qcom_smd_edge { 117struct qcom_smd_edge {
118 struct device dev; 118 struct device dev;
119 119
120 const char *name;
121
120 struct device_node *of_node; 122 struct device_node *of_node;
121 unsigned edge_id; 123 unsigned edge_id;
122 unsigned remote_pid; 124 unsigned remote_pid;
@@ -1248,6 +1250,10 @@ static int qcom_smd_parse_edge(struct device *dev,
1248 return -EINVAL; 1250 return -EINVAL;
1249 } 1251 }
1250 1252
1253 ret = of_property_read_string(node, "label", &edge->name);
1254 if (ret < 0)
1255 edge->name = node->name;
1256
1251 irq = irq_of_parse_and_map(node, 0); 1257 irq = irq_of_parse_and_map(node, 0);
1252 if (irq < 0) { 1258 if (irq < 0) {
1253 dev_err(dev, "required smd interrupt missing\n"); 1259 dev_err(dev, "required smd interrupt missing\n");
@@ -1285,6 +1291,21 @@ static void qcom_smd_edge_release(struct device *dev)
1285 kfree(edge); 1291 kfree(edge);
1286} 1292}
1287 1293
1294static ssize_t rpmsg_name_show(struct device *dev,
1295 struct device_attribute *attr, char *buf)
1296{
1297 struct qcom_smd_edge *edge = to_smd_edge(dev);
1298
1299 return sprintf(buf, "%s\n", edge->name);
1300}
1301static DEVICE_ATTR_RO(rpmsg_name);
1302
1303static struct attribute *qcom_smd_edge_attrs[] = {
1304 &dev_attr_rpmsg_name.attr,
1305 NULL
1306};
1307ATTRIBUTE_GROUPS(qcom_smd_edge);
1308
1288/** 1309/**
1289 * qcom_smd_register_edge() - register an edge based on an device_node 1310 * qcom_smd_register_edge() - register an edge based on an device_node
1290 * @parent: parent device for the edge 1311 * @parent: parent device for the edge
@@ -1306,6 +1327,7 @@ struct qcom_smd_edge *qcom_smd_register_edge(struct device *parent,
1306 1327
1307 edge->dev.parent = parent; 1328 edge->dev.parent = parent;
1308 edge->dev.release = qcom_smd_edge_release; 1329 edge->dev.release = qcom_smd_edge_release;
1330 edge->dev.groups = qcom_smd_edge_groups;
1309 dev_set_name(&edge->dev, "%s:%s", dev_name(parent), node->name); 1331 dev_set_name(&edge->dev, "%s:%s", dev_name(parent), node->name);
1310 ret = device_register(&edge->dev); 1332 ret = device_register(&edge->dev);
1311 if (ret) { 1333 if (ret) {