Commit | Line | Data |
---|---|---|
b2441318 | 1 | // SPDX-License-Identifier: GPL-2.0 |
b5bf5b67 | 2 | #include <linux/kernel.h> |
a486e512 CL |
3 | #include <linux/of.h> |
4 | #include <linux/of_device.h> | |
b5bf5b67 JM |
5 | #include <linux/stat.h> |
6 | #include <asm/macio.h> | |
7 | ||
b5bf5b67 JM |
8 | static ssize_t |
9 | compatible_show (struct device *dev, struct device_attribute *attr, char *buf) | |
10 | { | |
2dc11581 | 11 | struct platform_device *of; |
018a3d1d | 12 | const char *compat; |
b5bf5b67 JM |
13 | int cplen; |
14 | int length = 0; | |
15 | ||
16 | of = &to_macio_device (dev)->ofdev; | |
61c7a080 | 17 | compat = of_get_property(of->dev.of_node, "compatible", &cplen); |
b5bf5b67 JM |
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 | } | |
60bb70aa | 33 | static DEVICE_ATTR_RO(compatible); |
b5bf5b67 | 34 | |
dcb34abb | 35 | static ssize_t modalias_show (struct device *dev, struct device_attribute *attr, |
36 | char *buf) | |
37 | { | |
0634c295 | 38 | return of_device_modalias(dev, buf, PAGE_SIZE); |
dcb34abb | 39 | } |
40 | ||
140b932f OH |
41 | static ssize_t devspec_show(struct device *dev, |
42 | struct device_attribute *attr, char *buf) | |
43 | { | |
2dc11581 | 44 | struct platform_device *ofdev; |
140b932f | 45 | |
2dc11581 | 46 | ofdev = to_platform_device(dev); |
b6a945ae | 47 | return sprintf(buf, "%pOF\n", ofdev->dev.of_node); |
140b932f | 48 | } |
60bb70aa GKH |
49 | static DEVICE_ATTR_RO(modalias); |
50 | static DEVICE_ATTR_RO(devspec); | |
140b932f | 51 | |
0bdba867 RH |
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 | ||
bf82d375 RH |
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); | |
b5bf5b67 | 65 | |
60bb70aa GKH |
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, | |
b5bf5b67 | 82 | }; |