162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * drivers/sh/superhyway/superhyway-sysfs.c 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * SuperHyway Bus sysfs interface 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2004, 2005 Paul Mundt <lethal@linux-sh.org> 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 962306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 1062306a36Sopenharmony_ci * for more details. 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci#include <linux/kernel.h> 1362306a36Sopenharmony_ci#include <linux/device.h> 1462306a36Sopenharmony_ci#include <linux/types.h> 1562306a36Sopenharmony_ci#include <linux/superhyway.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define superhyway_ro_attr(name, fmt, field) \ 1862306a36Sopenharmony_cistatic ssize_t name##_show(struct device *dev, struct device_attribute *attr, char *buf) \ 1962306a36Sopenharmony_ci{ \ 2062306a36Sopenharmony_ci struct superhyway_device *s = to_superhyway_device(dev); \ 2162306a36Sopenharmony_ci return sprintf(buf, fmt, s->field); \ 2262306a36Sopenharmony_ci} \ 2362306a36Sopenharmony_cistatic DEVICE_ATTR_RO(name); 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* VCR flags */ 2662306a36Sopenharmony_cisuperhyway_ro_attr(perr_flags, "0x%02x\n", vcr.perr_flags); 2762306a36Sopenharmony_cisuperhyway_ro_attr(merr_flags, "0x%02x\n", vcr.merr_flags); 2862306a36Sopenharmony_cisuperhyway_ro_attr(mod_vers, "0x%04x\n", vcr.mod_vers); 2962306a36Sopenharmony_cisuperhyway_ro_attr(mod_id, "0x%04x\n", vcr.mod_id); 3062306a36Sopenharmony_cisuperhyway_ro_attr(bot_mb, "0x%02x\n", vcr.bot_mb); 3162306a36Sopenharmony_cisuperhyway_ro_attr(top_mb, "0x%02x\n", vcr.top_mb); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* Misc */ 3462306a36Sopenharmony_cisuperhyway_ro_attr(resource, "0x%08lx\n", resource[0].start); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic struct attribute *superhyway_dev_attrs[] = { 3762306a36Sopenharmony_ci &dev_attr_perr_flags.attr, 3862306a36Sopenharmony_ci &dev_attr_merr_flags.attr, 3962306a36Sopenharmony_ci &dev_attr_mod_vers.attr, 4062306a36Sopenharmony_ci &dev_attr_mod_id.attr, 4162306a36Sopenharmony_ci &dev_attr_bot_mb.attr, 4262306a36Sopenharmony_ci &dev_attr_top_mb.attr, 4362306a36Sopenharmony_ci &dev_attr_resource.attr, 4462306a36Sopenharmony_ci NULL, 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistatic const struct attribute_group superhyway_dev_group = { 4862306a36Sopenharmony_ci .attrs = superhyway_dev_attrs, 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciconst struct attribute_group *superhyway_dev_groups[] = { 5262306a36Sopenharmony_ci &superhyway_dev_group, 5362306a36Sopenharmony_ci NULL, 5462306a36Sopenharmony_ci}; 55