Merge tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.git] / drivers / base / soc.c
index a5bae55..d34609b 100644 (file)
@@ -17,9 +17,9 @@
 
 static DEFINE_IDA(soc_ida);
 
-static ssize_t soc_info_get(struct device *dev,
-                           struct device_attribute *attr,
-                           char *buf);
+/* Prototype to allow declarations of DEVICE_ATTR(<foo>) before soc_info_show */
+static ssize_t soc_info_show(struct device *dev, struct device_attribute *attr,
+                            char *buf);
 
 struct soc_device {
        struct device dev;
@@ -31,11 +31,11 @@ static struct bus_type soc_bus_type = {
        .name  = "soc",
 };
 
-static DEVICE_ATTR(machine,  S_IRUGO, soc_info_get,  NULL);
-static DEVICE_ATTR(family,   S_IRUGO, soc_info_get,  NULL);
-static DEVICE_ATTR(serial_number, S_IRUGO, soc_info_get,  NULL);
-static DEVICE_ATTR(soc_id,   S_IRUGO, soc_info_get,  NULL);
-static DEVICE_ATTR(revision, S_IRUGO, soc_info_get,  NULL);
+static DEVICE_ATTR(machine,            0444, soc_info_show,  NULL);
+static DEVICE_ATTR(family,             0444, soc_info_show,  NULL);
+static DEVICE_ATTR(serial_number,      0444, soc_info_show,  NULL);
+static DEVICE_ATTR(soc_id,             0444, soc_info_show,  NULL);
+static DEVICE_ATTR(revision,           0444, soc_info_show,  NULL);
 
 struct device *soc_device_to_device(struct soc_device *soc_dev)
 {
@@ -49,45 +49,41 @@ static umode_t soc_attribute_mode(struct kobject *kobj,
        struct device *dev = kobj_to_dev(kobj);
        struct soc_device *soc_dev = container_of(dev, struct soc_device, dev);
 
-       if ((attr == &dev_attr_machine.attr)
-           && (soc_dev->attr->machine != NULL))
+       if ((attr == &dev_attr_machine.attr) && soc_dev->attr->machine)
                return attr->mode;
-       if ((attr == &dev_attr_family.attr)
-           && (soc_dev->attr->family != NULL))
+       if ((attr == &dev_attr_family.attr) && soc_dev->attr->family)
                return attr->mode;
-       if ((attr == &dev_attr_revision.attr)
-           && (soc_dev->attr->revision != NULL))
+       if ((attr == &dev_attr_revision.attr) && soc_dev->attr->revision)
                return attr->mode;
-       if ((attr == &dev_attr_serial_number.attr)
-           && (soc_dev->attr->serial_number != NULL))
+       if ((attr == &dev_attr_serial_number.attr) && soc_dev->attr->serial_number)
                return attr->mode;
-       if ((attr == &dev_attr_soc_id.attr)
-           && (soc_dev->attr->soc_id != NULL))
+       if ((attr == &dev_attr_soc_id.attr) && soc_dev->attr->soc_id)
                return attr->mode;
 
-       /* Unknown or unfilled attribute. */
+       /* Unknown or unfilled attribute */
        return 0;
 }
 
-static ssize_t soc_info_get(struct device *dev,
-                           struct device_attribute *attr,
-                           char *buf)
+static ssize_t soc_info_show(struct device *dev, struct device_attribute *attr,
+                            char *buf)
 {
        struct soc_device *soc_dev = container_of(dev, struct soc_device, dev);
+       const char *output;
 
        if (attr == &dev_attr_machine)
-               return sprintf(buf, "%s\n", soc_dev->attr->machine);
-       if (attr == &dev_attr_family)
-               return sprintf(buf, "%s\n", soc_dev->attr->family);
-       if (attr == &dev_attr_revision)
-               return sprintf(buf, "%s\n", soc_dev->attr->revision);
-       if (attr == &dev_attr_serial_number)
-               return sprintf(buf, "%s\n", soc_dev->attr->serial_number);
-       if (attr == &dev_attr_soc_id)
-               return sprintf(buf, "%s\n", soc_dev->attr->soc_id);
-
-       return -EINVAL;
-
+               output = soc_dev->attr->machine;
+       else if (attr == &dev_attr_family)
+               output = soc_dev->attr->family;
+       else if (attr == &dev_attr_revision)
+               output = soc_dev->attr->revision;
+       else if (attr == &dev_attr_serial_number)
+               output = soc_dev->attr->serial_number;
+       else if (attr == &dev_attr_soc_id)
+               output = soc_dev->attr->soc_id;
+       else
+               return -EINVAL;
+
+       return sysfs_emit(buf, "%s\n", output);
 }
 
 static struct attribute *soc_attr[] = {