1 // SPDX-License-Identifier: GPL-2.0 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.dev.of_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 platform_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->dev.of_node->name, of->dev.of_node->type); 30 } 31 32 return length; 33 } 34 static DEVICE_ATTR_RO(modalias); 35 36 soundbus_config_of_attr (name, "%s\n"); 37 static DEVICE_ATTR_RO(name); 38 soundbus_config_of_attr (type, "%s\n"); 39 static DEVICE_ATTR_RO(type); 40 41 struct attribute *soundbus_dev_attrs[] = { 42 &dev_attr_name.attr, 43 &dev_attr_type.attr, 44 &dev_attr_modalias.attr, 45 NULL, 46 }; 47