| 1 | |
| 2 | #include <linux/kernel.h>
|
| 3 | #include <linux/of.h>
|
| 4 | #include <linux/of_device.h>
|
| 5 | #include <linux/stat.h>
|
| 6 | #include <asm/macio.h>
|
| 7 |
|
| 8 | static ssize_t
|
| 9 | compatible_show (struct device *dev, struct device_attribute *attr, char *buf)
|
| 10 | {
|
| 11 | struct platform_device *of;
|
| 12 | const char *compat;
|
| 13 | int cplen;
|
| 14 | int length = 0;
|
| 15 |
|
| 16 | of = &to_macio_device (dev)->ofdev;
|
| 17 | compat = of_get_property(of->dev.of_node, "compatible", &cplen);
|
| 18 | if (!compat) {
|
| 19 | *buf = '\0';
|
| 20 | return 0;
|
| 21 | }
|
| 22 | while (cplen > 0) {
|
| 23 | int l;
|
| 24 | length += sprintf (buf, "%s\n", compat);
|
| 25 | buf += length;
|
| 26 | l = strlen (compat) + 1;
|
| 27 | compat += l;
|
| 28 | cplen -= l;
|
| 29 | }
|
| 30 |
|
| 31 | return length;
|
| 32 | }
|
| 33 | static DEVICE_ATTR_RO(compatible);
|
| 34 |
|
| 35 | static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
|
| 36 | char *buf)
|
| 37 | {
|
| 38 | return of_device_modalias(dev, buf, PAGE_SIZE);
|
| 39 | }
|
| 40 |
|
| 41 | static ssize_t devspec_show(struct device *dev,
|
| 42 | struct device_attribute *attr, char *buf)
|
| 43 | {
|
| 44 | struct platform_device *ofdev;
|
| 45 |
|
| 46 | ofdev = to_platform_device(dev);
|
| 47 | return sprintf(buf, "%pOF\n", ofdev->dev.of_node);
|
| 48 | }
|
| 49 | static DEVICE_ATTR_RO(modalias);
|
| 50 | static DEVICE_ATTR_RO(devspec);
|
| 51 |
|
| 52 | static ssize_t name_show(struct device *dev,
|
| 53 | struct device_attribute *attr, char *buf)
|
| 54 | {
|
| 55 | return sprintf(buf, "%pOFn\n", dev->of_node);
|
| 56 | }
|
| 57 | static DEVICE_ATTR_RO(name);
|
| 58 |
|
| 59 | static ssize_t type_show(struct device *dev,
|
| 60 | struct device_attribute *attr, char *buf)
|
| 61 | {
|
| 62 | return sprintf(buf, "%s\n", of_node_get_device_type(dev->of_node));
|
| 63 | }
|
| 64 | static DEVICE_ATTR_RO(type);
|
| 65 |
|
| 66 | static struct attribute *macio_dev_attrs[] = {
|
| 67 | &dev_attr_name.attr,
|
| 68 | &dev_attr_type.attr,
|
| 69 | &dev_attr_compatible.attr,
|
| 70 | &dev_attr_modalias.attr,
|
| 71 | &dev_attr_devspec.attr,
|
| 72 | NULL,
|
| 73 | };
|
| 74 |
|
| 75 | static const struct attribute_group macio_dev_group = {
|
| 76 | .attrs = macio_dev_attrs,
|
| 77 | };
|
| 78 |
|
| 79 | const struct attribute_group *macio_dev_groups[] = {
|
| 80 | &macio_dev_group,
|
| 81 | NULL,
|
| 82 | };
|