Commit | Line | Data |
---|---|---|
b5bf5b67 JM |
1 | #include <linux/kernel.h> |
2 | #include <linux/stat.h> | |
3 | #include <asm/macio.h> | |
4 | ||
5 | ||
6 | #define macio_config_of_attr(field, format_string) \ | |
7 | static ssize_t \ | |
8 | field##_show (struct device *dev, struct device_attribute *attr, \ | |
9 | char *buf) \ | |
10 | { \ | |
11 | struct macio_dev *mdev = to_macio_device (dev); \ | |
12 | return sprintf (buf, format_string, mdev->ofdev.node->field); \ | |
13 | } | |
14 | ||
15 | static ssize_t | |
16 | compatible_show (struct device *dev, struct device_attribute *attr, char *buf) | |
17 | { | |
18 | struct of_device *of; | |
018a3d1d | 19 | const char *compat; |
b5bf5b67 JM |
20 | int cplen; |
21 | int length = 0; | |
22 | ||
23 | of = &to_macio_device (dev)->ofdev; | |
01b2726d | 24 | compat = of_get_property(of->node, "compatible", &cplen); |
b5bf5b67 JM |
25 | if (!compat) { |
26 | *buf = '\0'; | |
27 | return 0; | |
28 | } | |
29 | while (cplen > 0) { | |
30 | int l; | |
31 | length += sprintf (buf, "%s\n", compat); | |
32 | buf += length; | |
33 | l = strlen (compat) + 1; | |
34 | compat += l; | |
35 | cplen -= l; | |
36 | } | |
37 | ||
38 | return length; | |
39 | } | |
40 | ||
dcb34abb | 41 | static ssize_t modalias_show (struct device *dev, struct device_attribute *attr, |
42 | char *buf) | |
43 | { | |
44 | struct of_device *of; | |
018a3d1d | 45 | const char *compat; |
dcb34abb | 46 | int cplen; |
47 | int length; | |
48 | ||
49 | of = &to_macio_device (dev)->ofdev; | |
01b2726d | 50 | compat = of_get_property(of->node, "compatible", &cplen); |
dcb34abb | 51 | if (!compat) compat = "", cplen = 1; |
52 | length = sprintf (buf, "of:N%sT%s", of->node->name, of->node->type); | |
53 | buf += length; | |
54 | while (cplen > 0) { | |
55 | int l; | |
6c2d0469 OH |
56 | l = sprintf (buf, "C%s", compat); |
57 | length += l; | |
58 | buf += l; | |
dcb34abb | 59 | l = strlen (compat) + 1; |
60 | compat += l; | |
61 | cplen -= l; | |
62 | } | |
6c2d0469 | 63 | length += sprintf(buf, "\n"); |
dcb34abb | 64 | |
65 | return length; | |
66 | } | |
67 | ||
b5bf5b67 JM |
68 | macio_config_of_attr (name, "%s\n"); |
69 | macio_config_of_attr (type, "%s\n"); | |
70 | ||
71 | struct device_attribute macio_dev_attrs[] = { | |
72 | __ATTR_RO(name), | |
73 | __ATTR_RO(type), | |
74 | __ATTR_RO(compatible), | |
dcb34abb | 75 | __ATTR_RO(modalias), |
b5bf5b67 JM |
76 | __ATTR_NULL |
77 | }; |