18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include <linux/kernel.h> 38c2ecf20Sopenharmony_ci#include <linux/of.h> 48c2ecf20Sopenharmony_ci#include <linux/stat.h> 58c2ecf20Sopenharmony_ci/* FIX UP */ 68c2ecf20Sopenharmony_ci#include "soundbus.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cistatic ssize_t modalias_show(struct device *dev, struct device_attribute *attr, 98c2ecf20Sopenharmony_ci char *buf) 108c2ecf20Sopenharmony_ci{ 118c2ecf20Sopenharmony_ci struct soundbus_dev *sdev = to_soundbus_device(dev); 128c2ecf20Sopenharmony_ci struct platform_device *of = &sdev->ofdev; 138c2ecf20Sopenharmony_ci int length; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci if (*sdev->modalias) { 168c2ecf20Sopenharmony_ci strlcpy(buf, sdev->modalias, sizeof(sdev->modalias) + 1); 178c2ecf20Sopenharmony_ci strcat(buf, "\n"); 188c2ecf20Sopenharmony_ci length = strlen(buf); 198c2ecf20Sopenharmony_ci } else { 208c2ecf20Sopenharmony_ci length = sprintf(buf, "of:N%pOFn%c%s\n", 218c2ecf20Sopenharmony_ci of->dev.of_node, 'T', 228c2ecf20Sopenharmony_ci of_node_get_device_type(of->dev.of_node)); 238c2ecf20Sopenharmony_ci } 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci return length; 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_cistatic DEVICE_ATTR_RO(modalias); 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistatic ssize_t name_show(struct device *dev, 308c2ecf20Sopenharmony_ci struct device_attribute *attr, char *buf) 318c2ecf20Sopenharmony_ci{ 328c2ecf20Sopenharmony_ci struct soundbus_dev *sdev = to_soundbus_device(dev); 338c2ecf20Sopenharmony_ci struct platform_device *of = &sdev->ofdev; 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci return sprintf(buf, "%pOFn\n", of->dev.of_node); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_cistatic DEVICE_ATTR_RO(name); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistatic ssize_t type_show(struct device *dev, 408c2ecf20Sopenharmony_ci struct device_attribute *attr, char *buf) 418c2ecf20Sopenharmony_ci{ 428c2ecf20Sopenharmony_ci struct soundbus_dev *sdev = to_soundbus_device(dev); 438c2ecf20Sopenharmony_ci struct platform_device *of = &sdev->ofdev; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci return sprintf(buf, "%s\n", of_node_get_device_type(of->dev.of_node)); 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_cistatic DEVICE_ATTR_RO(type); 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistruct attribute *soundbus_dev_attrs[] = { 508c2ecf20Sopenharmony_ci &dev_attr_name.attr, 518c2ecf20Sopenharmony_ci &dev_attr_type.attr, 528c2ecf20Sopenharmony_ci &dev_attr_modalias.attr, 538c2ecf20Sopenharmony_ci NULL, 548c2ecf20Sopenharmony_ci}; 55