Thread (28 messages) flat view 28 messages, 3 authors, 2015-11-05

Re: [PATCH v6 3/4] of: overlay: add per overlay sysfs attributes

From: Pantelis Antoniou <hidden>
Date: 2015-10-20 21:11:50
Also in: linux-devicetree, lkml

Hi Rob,
On Oct 21, 2015, at 00:04 , Rob Herring [off-list ref] wrote:

On Tue, Oct 20, 2015 at 2:13 PM, Pantelis Antoniou
[off-list ref] wrote:
quoted
* A per overlay can_remove sysfs attribute that reports whether
the overlay can be removed or not due to another overlapping overlay.

* A target sysfs attribute listing the target of each fragment,
in a group named after the name of the fragment.

Signed-off-by: Pantelis Antoniou <redacted>
---
drivers/of/overlay.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 99 insertions(+), 4 deletions(-)
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index 067404e..2d51d9e2 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -25,8 +25,23 @@
#include "of_private.h"

+/* fwd. decl */
+struct of_overlay;
+struct of_overlay_info;
+
+/* an attribute for each fragment */
+struct fragment_attribute {
+       struct attribute attr;
+       ssize_t (*show)(struct kobject *kobj, struct fragment_attribute *fattr,
+                       char *buf);
+       ssize_t (*store)(struct kobject *kobj, struct fragment_attribute *fattr,
+                        const char *buf, size_t count);
+       struct of_overlay_info *ovinfo;
+};
+
/**
 * struct of_overlay_info - Holds a single overlay info
+ * @info:      info node that contains the target and overlay
 * @target:    target of the overlay operation
 * @overlay:   pointer to the overlay contents node
 *
@@ -34,8 +49,13 @@
 * records.
 */
struct of_overlay_info {
+       struct of_overlay *ov;
+       struct device_node *info;
       struct device_node *target;
       struct device_node *overlay;
+       struct attribute_group attr_group;
+       struct attribute *attrs[2];
+       struct fragment_attribute target_attr;
};

/**
@@ -52,6 +72,7 @@ struct of_overlay {
       struct list_head node;
       int count;
       struct of_overlay_info *ovinfo_tab;
+       const struct attribute_group **attr_groups;
       struct of_changeset cset;
       struct kobject kobj;
};
@@ -245,6 +266,8 @@ static int of_fill_overlay_info(struct of_overlay *ov,
       if (ovinfo->target == NULL)
               goto err_fail;

+       ovinfo->info = of_node_get(info_node);
+
       return 0;
err_fail:
@@ -255,6 +278,17 @@ err_fail:
       return -EINVAL;
}

+static ssize_t target_show(struct kobject *kobj,
+               struct fragment_attribute *fattr, char *buf)
+{
+       struct of_overlay_info *ovinfo = fattr->ovinfo;
+
+       return snprintf(buf, PAGE_SIZE, "%s\n",
+                       of_node_full_name(ovinfo->target));
This can be a link to the node itself, can't it?
Yes. Do you want it like this?
Rob
Regards

— Pantelis
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help