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 | { | |
29aa0289 SM |
44 | struct of_device *ofdev = to_of_device(dev); |
45 | int len; | |
dcb34abb | 46 | |
29aa0289 | 47 | len = of_device_get_modalias(ofdev, buf, PAGE_SIZE); |
dcb34abb | 48 | |
29aa0289 SM |
49 | buf[len] = '\n'; |
50 | buf[len+1] = 0; | |
51 | ||
52 | return len+1; | |
dcb34abb | 53 | } |
54 | ||
b5bf5b67 JM |
55 | macio_config_of_attr (name, "%s\n"); |
56 | macio_config_of_attr (type, "%s\n"); | |
57 | ||
58 | struct device_attribute macio_dev_attrs[] = { | |
59 | __ATTR_RO(name), | |
60 | __ATTR_RO(type), | |
61 | __ATTR_RO(compatible), | |
dcb34abb | 62 | __ATTR_RO(modalias), |
b5bf5b67 JM |
63 | __ATTR_NULL |
64 | }; |