123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // SPDX-License-Identifier: GPL-2.0
- #include <linux/kernel.h>
- #include <linux/stat.h>
- #include <asm/macio.h>
- #define macio_config_of_attr(field, format_string) \
- static ssize_t \
- field##_show (struct device *dev, struct device_attribute *attr, \
- char *buf) \
- { \
- struct macio_dev *mdev = to_macio_device (dev); \
- return sprintf (buf, format_string, mdev->ofdev.dev.of_node->field); \
- } \
- static DEVICE_ATTR_RO(field);
- static ssize_t
- compatible_show (struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct platform_device *of;
- const char *compat;
- int cplen;
- int length = 0;
- of = &to_macio_device (dev)->ofdev;
- compat = of_get_property(of->dev.of_node, "compatible", &cplen);
- if (!compat) {
- *buf = '\0';
- return 0;
- }
- while (cplen > 0) {
- int l;
- length += sprintf (buf, "%s\n", compat);
- buf += length;
- l = strlen (compat) + 1;
- compat += l;
- cplen -= l;
- }
- return length;
- }
- static DEVICE_ATTR_RO(compatible);
- static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
- char *buf)
- {
- return of_device_modalias(dev, buf, PAGE_SIZE);
- }
- static ssize_t devspec_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct platform_device *ofdev;
- ofdev = to_platform_device(dev);
- return sprintf(buf, "%pOF\n", ofdev->dev.of_node);
- }
- static DEVICE_ATTR_RO(modalias);
- static DEVICE_ATTR_RO(devspec);
- macio_config_of_attr (name, "%s\n");
- macio_config_of_attr (type, "%s\n");
- static struct attribute *macio_dev_attrs[] = {
- &dev_attr_name.attr,
- &dev_attr_type.attr,
- &dev_attr_compatible.attr,
- &dev_attr_modalias.attr,
- &dev_attr_devspec.attr,
- NULL,
- };
- static const struct attribute_group macio_dev_group = {
- .attrs = macio_dev_attrs,
- };
- const struct attribute_group *macio_dev_groups[] = {
- &macio_dev_group,
- NULL,
- };
|