Sorry for the late reply. I'll add the Documentation/ABI description, use DEVICE_ATTR_RO and update ATTRIBUTE_GROUP.
Thanks Tien Hock On Rab, 2017-02-15 at 09:17 -0800, Greg KH wrote: > On Wed, Feb 15, 2017 at 07:09:41PM +0800, thloh wrote: > > > > From: "Loh, Tien Hock" <tien.hock....@intel.com> > > > > This patch is to add Altera System ID driver. > > User can obtain the system ID and timestamp of the system by > > reading the sysfs entry. > > > > Usage: > > cat /sys/bus/platform/devices/[addr].sysid/sysid/id > > cat /sys/bus/platform/devices/[addr].sysid/sysid/timestamp > If you add new sysfs attributes, you need to also add a > Documentation/ABI/ description as well. > > > > > > > Signed-off-by: Loh, Tien Hock <tien.hock....@intel.com> > > --- > > drivers/misc/Kconfig | 5 ++ > > drivers/misc/Makefile | 1 + > > drivers/misc/intel_sysid.c | 142 > > ++++++++++++++++++++++++++++++++++++++++++++ > > 3 files changed, 148 insertions(+), 0 deletions(-) > > create mode 100644 drivers/misc/intel_sysid.c > > > > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig > > index b4d6aac..e5552fa 100644 > > --- a/drivers/misc/Kconfig > > +++ b/drivers/misc/Kconfig > > @@ -139,6 +139,11 @@ config INTEL_MID_PTI > > an Intel Atom (non-netbook) mobile device containing a > > MIPI > > P1149.7 standard implementation. > > > > +config INTEL_SYSID > > + tristate "Intel System ID" > > + help > > + This enables Intel System ID soft core driver. > > + > > config SGI_IOC4 > > tristate "SGI IOC4 Base IO support" > > depends on PCI > > diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile > > index 7a3ea89..24fe724 100644 > > --- a/drivers/misc/Makefile > > +++ b/drivers/misc/Makefile > > @@ -43,6 +43,7 @@ obj-y += ti-st/ > > obj-y += lis3lv02d/ > > obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o > > obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/ > > +obj-$(CONFIG_INTEL_SYSID) += intel_sysid.o > > obj-$(CONFIG_INTEL_MEI) += mei/ > > obj-$(CONFIG_VMWARE_VMCI) += vmw_vmci/ > > obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o > > diff --git a/drivers/misc/intel_sysid.c > > b/drivers/misc/intel_sysid.c > > new file mode 100644 > > index 0000000..1ef72b8 > > --- /dev/null > > +++ b/drivers/misc/intel_sysid.c > > @@ -0,0 +1,142 @@ > > +/* > > + * Copyright Intel Corporation (C) 2017. > > + * > > + * This program is free software; you can redistribute it and/or > > modify it > > + * under the terms and conditions of the GNU General Public > > License, > > + * version 2, as published by the Free Software Foundation. > > + * > > + * This program is distributed in the hope it will be useful, but > > WITHOUT > > + * ANY WARRANTY; without even the implied warranty of > > MERCHANTABILITY or > > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public > > License for > > + * more details. > > + * > > + * You should have received a copy of the GNU General Public > > License along with > > + * this program. If not, see <http://www.gnu.org/licenses/>. > > + * > > + * Credit: > > + * Walter Goossens > > + */ > > + > > +#include <linux/device.h> > > +#include <linux/kernel.h> > > +#include <linux/io.h> > > +#include <linux/module.h> > > +#include <linux/of.h> > > +#include <linux/platform_device.h> > > +#include <linux/slab.h> > > + > > +#define DRV_NAME "intel_sysid" > > + > > +struct intel_sysid { > > + void __iomem *regs; > > +}; > > + > > +/* System ID Registers*/ > > +#define SYSID_REG_ID (0x0) > > +#define SYSID_REG_TIMESTAMP (0x4) > > + > > +static ssize_t intel_sysid_show_id(struct device *dev, > > + struct device_attribute *attr, char *buf) > > +{ > > + struct intel_sysid *sysid = dev_get_drvdata(dev); > > + > > + return sprintf(buf, "%u\n", readl(sysid->regs + > > SYSID_REG_ID)); > > +} > > + > > +static ssize_t intel_sysid_show_timestamp(struct device *dev, > > + struct device_attribute *attr, char *buf) > > +{ > > + unsigned int reg; > > + struct tm timestamp; > > + struct intel_sysid *sysid = dev_get_drvdata(dev); > > + > > + reg = readl(sysid->regs + SYSID_REG_TIMESTAMP); > > + > > + time_to_tm(reg, 0, ×tamp); > > + > > + return sprintf(buf, "%u (%u-%u-%u %u:%u:%u UTC)\n", reg, > > + (unsigned int)(timestamp.tm_year + 1900), > > + timestamp.tm_mon + 1, timestamp.tm_mday, > > timestamp.tm_hour, > > + timestamp.tm_min, timestamp.tm_sec); > > +} > > + > > +static DEVICE_ATTR(id, S_IRUGO, intel_sysid_show_id, NULL); > > +static DEVICE_ATTR(timestamp, S_IRUGO, intel_sysid_show_timestamp, > > NULL); > DEVICE_ATTR_RO()? > > > > > +static struct attribute *intel_sysid_attrs[] = { > > + &dev_attr_id.attr, > > + &dev_attr_timestamp.attr, > > + NULL, > > +}; > > + > > +struct attribute_group intel_sysid_attr_group = { > > + .name = "sysid", > > + .attrs = intel_sysid_attrs, > > +}; > ATTRIBUTE_GROUP()? > > thanks, > > greg k-h