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); \ | |
61c7a080 | 12 | return sprintf (buf, format_string, mdev->ofdev.dev.of_node->field); \ |
b5bf5b67 JM |
13 | } |
14 | ||
15 | static ssize_t | |
16 | compatible_show (struct device *dev, struct device_attribute *attr, char *buf) | |
17 | { | |
2dc11581 | 18 | struct platform_device *of; |
018a3d1d | 19 | const char *compat; |
b5bf5b67 JM |
20 | int cplen; |
21 | int length = 0; | |
22 | ||
23 | of = &to_macio_device (dev)->ofdev; | |
61c7a080 | 24 | compat = of_get_property(of->dev.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 | { | |
34a1c1e8 | 44 | int len = of_device_get_modalias(dev, buf, PAGE_SIZE - 2); |
dcb34abb | 45 | |
29aa0289 SM |
46 | buf[len] = '\n'; |
47 | buf[len+1] = 0; | |
48 | ||
49 | return len+1; | |
dcb34abb | 50 | } |
51 | ||
140b932f OH |
52 | static ssize_t devspec_show(struct device *dev, |
53 | struct device_attribute *attr, char *buf) | |
54 | { | |
2dc11581 | 55 | struct platform_device *ofdev; |
140b932f | 56 | |
2dc11581 | 57 | ofdev = to_platform_device(dev); |
61c7a080 | 58 | return sprintf(buf, "%s\n", ofdev->dev.of_node->full_name); |
140b932f OH |
59 | } |
60 | ||
b5bf5b67 JM |
61 | macio_config_of_attr (name, "%s\n"); |
62 | macio_config_of_attr (type, "%s\n"); | |
63 | ||
64 | struct device_attribute macio_dev_attrs[] = { | |
65 | __ATTR_RO(name), | |
66 | __ATTR_RO(type), | |
67 | __ATTR_RO(compatible), | |
dcb34abb | 68 | __ATTR_RO(modalias), |
140b932f | 69 | __ATTR_RO(devspec), |
b5bf5b67 JM |
70 | __ATTR_NULL |
71 | }; |