xref: /linux/drivers/macintosh/macio_sysfs.c (revision c537b994505099b7197e7d3125b942ecbcc51eb6)
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;
19 	const char *compat;
20 	int cplen;
21 	int length = 0;
22 
23 	of = &to_macio_device (dev)->ofdev;
24 	compat = get_property(of->node, "compatible", &cplen);
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 
41 static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
42 			      char *buf)
43 {
44 	struct of_device *of;
45 	const char *compat;
46 	int cplen;
47 	int length;
48 
49 	of = &to_macio_device (dev)->ofdev;
50 	compat = get_property(of->node, "compatible", &cplen);
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;
56 		length += sprintf (buf, "C%s", compat);
57 		buf += length;
58 		l = strlen (compat) + 1;
59 		compat += l;
60 		cplen -= l;
61 	}
62 
63 	return length;
64 }
65 
66 macio_config_of_attr (name, "%s\n");
67 macio_config_of_attr (type, "%s\n");
68 
69 struct device_attribute macio_dev_attrs[] = {
70 	__ATTR_RO(name),
71 	__ATTR_RO(type),
72 	__ATTR_RO(compatible),
73 	__ATTR_RO(modalias),
74 	__ATTR_NULL
75 };
76