xref: /openbmc/linux/drivers/pps/sysfs.c (revision 58e16d792a6a8c6b750f637a4649967fcac853dc)
1*74ba9207SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
2eae9d2baSRodolfo Giometti /*
3eae9d2baSRodolfo Giometti  * PPS sysfs support
4eae9d2baSRodolfo Giometti  *
5eae9d2baSRodolfo Giometti  * Copyright (C) 2007-2009   Rodolfo Giometti <giometti@linux.it>
6eae9d2baSRodolfo Giometti  */
7eae9d2baSRodolfo Giometti 
8eae9d2baSRodolfo Giometti 
9eae9d2baSRodolfo Giometti #include <linux/device.h>
10eae9d2baSRodolfo Giometti #include <linux/module.h>
11eae9d2baSRodolfo Giometti #include <linux/string.h>
12eae9d2baSRodolfo Giometti #include <linux/pps_kernel.h>
13eae9d2baSRodolfo Giometti 
14eae9d2baSRodolfo Giometti /*
15eae9d2baSRodolfo Giometti  * Attribute functions
16eae9d2baSRodolfo Giometti  */
17eae9d2baSRodolfo Giometti 
assert_show(struct device * dev,struct device_attribute * attr,char * buf)18bd0eae4eSGreg Kroah-Hartman static ssize_t assert_show(struct device *dev, struct device_attribute *attr,
19bd0eae4eSGreg Kroah-Hartman 			   char *buf)
20eae9d2baSRodolfo Giometti {
21eae9d2baSRodolfo Giometti 	struct pps_device *pps = dev_get_drvdata(dev);
22eae9d2baSRodolfo Giometti 
23eae9d2baSRodolfo Giometti 	if (!(pps->info.mode & PPS_CAPTUREASSERT))
24eae9d2baSRodolfo Giometti 		return 0;
25eae9d2baSRodolfo Giometti 
26eae9d2baSRodolfo Giometti 	return sprintf(buf, "%lld.%09d#%d\n",
27eae9d2baSRodolfo Giometti 			(long long) pps->assert_tu.sec, pps->assert_tu.nsec,
28eae9d2baSRodolfo Giometti 			pps->assert_sequence);
29eae9d2baSRodolfo Giometti }
30bd0eae4eSGreg Kroah-Hartman static DEVICE_ATTR_RO(assert);
31eae9d2baSRodolfo Giometti 
clear_show(struct device * dev,struct device_attribute * attr,char * buf)32bd0eae4eSGreg Kroah-Hartman static ssize_t clear_show(struct device *dev, struct device_attribute *attr,
33bd0eae4eSGreg Kroah-Hartman 			  char *buf)
34eae9d2baSRodolfo Giometti {
35eae9d2baSRodolfo Giometti 	struct pps_device *pps = dev_get_drvdata(dev);
36eae9d2baSRodolfo Giometti 
37eae9d2baSRodolfo Giometti 	if (!(pps->info.mode & PPS_CAPTURECLEAR))
38eae9d2baSRodolfo Giometti 		return 0;
39eae9d2baSRodolfo Giometti 
40eae9d2baSRodolfo Giometti 	return sprintf(buf, "%lld.%09d#%d\n",
41eae9d2baSRodolfo Giometti 			(long long) pps->clear_tu.sec, pps->clear_tu.nsec,
42eae9d2baSRodolfo Giometti 			pps->clear_sequence);
43eae9d2baSRodolfo Giometti }
44bd0eae4eSGreg Kroah-Hartman static DEVICE_ATTR_RO(clear);
45eae9d2baSRodolfo Giometti 
mode_show(struct device * dev,struct device_attribute * attr,char * buf)46bd0eae4eSGreg Kroah-Hartman static ssize_t mode_show(struct device *dev, struct device_attribute *attr,
47bd0eae4eSGreg Kroah-Hartman 			 char *buf)
48eae9d2baSRodolfo Giometti {
49eae9d2baSRodolfo Giometti 	struct pps_device *pps = dev_get_drvdata(dev);
50eae9d2baSRodolfo Giometti 
51eae9d2baSRodolfo Giometti 	return sprintf(buf, "%4x\n", pps->info.mode);
52eae9d2baSRodolfo Giometti }
53bd0eae4eSGreg Kroah-Hartman static DEVICE_ATTR_RO(mode);
54eae9d2baSRodolfo Giometti 
echo_show(struct device * dev,struct device_attribute * attr,char * buf)55bd0eae4eSGreg Kroah-Hartman static ssize_t echo_show(struct device *dev, struct device_attribute *attr,
56bd0eae4eSGreg Kroah-Hartman 			 char *buf)
57eae9d2baSRodolfo Giometti {
58eae9d2baSRodolfo Giometti 	struct pps_device *pps = dev_get_drvdata(dev);
59eae9d2baSRodolfo Giometti 
60eae9d2baSRodolfo Giometti 	return sprintf(buf, "%d\n", !!pps->info.echo);
61eae9d2baSRodolfo Giometti }
62bd0eae4eSGreg Kroah-Hartman static DEVICE_ATTR_RO(echo);
63eae9d2baSRodolfo Giometti 
name_show(struct device * dev,struct device_attribute * attr,char * buf)64bd0eae4eSGreg Kroah-Hartman static ssize_t name_show(struct device *dev, struct device_attribute *attr,
65bd0eae4eSGreg Kroah-Hartman 			 char *buf)
66eae9d2baSRodolfo Giometti {
67eae9d2baSRodolfo Giometti 	struct pps_device *pps = dev_get_drvdata(dev);
68eae9d2baSRodolfo Giometti 
69eae9d2baSRodolfo Giometti 	return sprintf(buf, "%s\n", pps->info.name);
70eae9d2baSRodolfo Giometti }
71bd0eae4eSGreg Kroah-Hartman static DEVICE_ATTR_RO(name);
72eae9d2baSRodolfo Giometti 
path_show(struct device * dev,struct device_attribute * attr,char * buf)73bd0eae4eSGreg Kroah-Hartman static ssize_t path_show(struct device *dev, struct device_attribute *attr,
74bd0eae4eSGreg Kroah-Hartman 			 char *buf)
75eae9d2baSRodolfo Giometti {
76eae9d2baSRodolfo Giometti 	struct pps_device *pps = dev_get_drvdata(dev);
77eae9d2baSRodolfo Giometti 
78eae9d2baSRodolfo Giometti 	return sprintf(buf, "%s\n", pps->info.path);
79eae9d2baSRodolfo Giometti }
80bd0eae4eSGreg Kroah-Hartman static DEVICE_ATTR_RO(path);
81eae9d2baSRodolfo Giometti 
82bd0eae4eSGreg Kroah-Hartman static struct attribute *pps_attrs[] = {
83bd0eae4eSGreg Kroah-Hartman 	&dev_attr_assert.attr,
84bd0eae4eSGreg Kroah-Hartman 	&dev_attr_clear.attr,
85bd0eae4eSGreg Kroah-Hartman 	&dev_attr_mode.attr,
86bd0eae4eSGreg Kroah-Hartman 	&dev_attr_echo.attr,
87bd0eae4eSGreg Kroah-Hartman 	&dev_attr_name.attr,
88bd0eae4eSGreg Kroah-Hartman 	&dev_attr_path.attr,
89bd0eae4eSGreg Kroah-Hartman 	NULL,
90bd0eae4eSGreg Kroah-Hartman };
91bd0eae4eSGreg Kroah-Hartman 
92bd0eae4eSGreg Kroah-Hartman static const struct attribute_group pps_group = {
93bd0eae4eSGreg Kroah-Hartman 	.attrs = pps_attrs,
94bd0eae4eSGreg Kroah-Hartman };
95bd0eae4eSGreg Kroah-Hartman 
96bd0eae4eSGreg Kroah-Hartman const struct attribute_group *pps_groups[] = {
97bd0eae4eSGreg Kroah-Hartman 	&pps_group,
98bd0eae4eSGreg Kroah-Hartman 	NULL,
99eae9d2baSRodolfo Giometti };
100