1 #include <linux/config.h> 2 #include <linux/kernel.h> 3 #include <linux/stat.h> 4 /* FIX UP */ 5 #include "soundbus.h" 6 7 #define soundbus_config_of_attr(field, format_string) \ 8 static ssize_t \ 9 field##_show (struct device *dev, struct device_attribute *attr, \ 10 char *buf) \ 11 { \ 12 struct soundbus_dev *mdev = to_soundbus_device (dev); \ 13 return sprintf (buf, format_string, mdev->ofdev.node->field); \ 14 } 15 16 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, 17 char *buf) 18 { 19 struct soundbus_dev *sdev = to_soundbus_device(dev); 20 struct of_device *of = &sdev->ofdev; 21 int length; 22 23 if (*sdev->modalias) { 24 strlcpy(buf, sdev->modalias, sizeof(sdev->modalias) + 1); 25 strcat(buf, "\n"); 26 length = strlen(buf); 27 } else { 28 length = sprintf(buf, "of:N%sT%s\n", 29 of->node->name, of->node->type); 30 } 31 32 return length; 33 } 34 35 soundbus_config_of_attr (name, "%s\n"); 36 soundbus_config_of_attr (type, "%s\n"); 37 38 struct device_attribute soundbus_dev_attrs[] = { 39 __ATTR_RO(name), 40 __ATTR_RO(type), 41 __ATTR_RO(modalias), 42 __ATTR_NULL 43 }; 44